viem-goviem-go

Mainnet

Ethereum mainnet chain definition and usage with Public and Wallet clients

Ethereum mainnet is available as definitions.Mainnet. Use it with Public Client or Wallet Client by passing &definitions.Mainnet as the chain config.

Import

import (
"github.com/ChefBingbong/viem-go/client"
"github.com/ChefBingbong/viem-go/client/transport"
"github.com/ChefBingbong/viem-go/chain/definitions"
)

Usage

Pass a pointer to the chain when creating a client (Chain: &definitions.Mainnet).

import (
"log"
"github.com/ChefBingbong/viem-go/client"
"github.com/ChefBingbong/viem-go/client/transport"
"github.com/ChefBingbong/viem-go/chain/definitions"
)
publicClient, err := client.CreatePublicClient(client.PublicClientConfig{
Chain: &definitions.Mainnet,
Transport: transport.HTTP("https://eth.llamarpc.com"),
})
if err != nil {
log.Fatal(err)
}
defer publicClient.Close()
// Or with Wallet Client
walletClient, err := client.CreateWalletClient(client.WalletClientConfig{
Chain: &definitions.Mainnet,
Transport: transport.HTTP("https://eth.llamarpc.com"),
})

Chain properties

PropertyValue
ID1
Name"Ethereum"
Native currencyEther (ETH), 18 decimals
Block time12 s (used for default polling)
Default RPCFrom RpcUrls["default"].HTTP[0] (e.g. set in definition)
Block explorerEtherscan

The built-in definition includes default RPC URL, Etherscan as block explorer (with API URL), and optional contracts (Multicall3, ENS Universal Resolver).

Accessing URLs and explorer

Use the chain's maps with the "default" key, or the helper methods on *chain.Chain:

import "github.com/ChefBingbong/viem-go/chain/definitions"
c := &definitions.Mainnet
// Default RPC URL (first HTTP in "default")
rpcURL := c.DefaultRpcUrl()
// Default block explorer
explorer := c.DefaultBlockExplorer()
fmt.Println(explorer.Name) // "Etherscan"
fmt.Println(explorer.URL) // "https://etherscan.io"
fmt.Println(explorer.ApiURL) // "https://api.etherscan.io/api"
// Or via map
url := definitions.Mainnet.BlockExplorers["default"].URL

Contracts

The mainnet definition may include known contract addresses used by actions (e.g. multicall, ENS). Access them via Contracts:

if definitions.Mainnet.Contracts != nil && definitions.Mainnet.Contracts.Multicall3 != nil {
    addr := definitions.Mainnet.Contracts.Multicall3.Address
    // use addr.Hex() or pass to actions
}

Parameters (client config)

When using Mainnet with a client:

  • Chain: *chain.Chain — pass &definitions.Mainnet.
  • Transport: Use an HTTP or WebSocket transport; you can use definitions.Mainnet.DefaultRpcUrl() or your own RPC URL.

Return type

definitions.Mainnet is a value of type chain.Chain produced by chain.DefineChain. It is not a pointer; clients require &definitions.Mainnet.