Mainnet
Ethereum mainnet chain definition and usage with Public and Wallet clients
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 ( "github.com/ChefBingbong/viem-go/client" "github.com/ChefBingbong/viem-go/client/transport" "github.com/ChefBingbong/viem-go/chain/definitions")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 ClientwalletClient, err := client.CreateWalletClient(client.WalletClientConfig{ Chain: &definitions.Mainnet, Transport: transport.HTTP("https://eth.llamarpc.com"),})| Property | Value |
|---|---|
| ID | 1 |
| Name | "Ethereum" |
| Native currency | Ether (ETH), 18 decimals |
| Block time | 12 s (used for default polling) |
| Default RPC | From RpcUrls["default"].HTTP[0] (e.g. set in definition) |
| Block explorer | Etherscan |
The built-in definition includes default RPC URL, Etherscan as block explorer (with API URL), and optional contracts (Multicall3, ENS Universal Resolver).
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 explorerexplorer := 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 mapurl := definitions.Mainnet.BlockExplorers["default"].URLThe 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
}
When using Mainnet with a client:
*chain.Chain — pass &definitions.Mainnet.definitions.Mainnet.DefaultRpcUrl() or your own RPC URL.definitions.Mainnet is a value of type chain.Chain produced by chain.DefineChain. It is not a pointer; clients require &definitions.Mainnet.