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 ClientwalletClient, err := client.CreateWalletClient(client.WalletClientConfig{ Chain: &definitions.Mainnet, Transport: transport.HTTP("https://eth.llamarpc.com"),})Chain properties
| 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).
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 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"].URLContracts
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.