Go连接以太坊

Alexander Xing
4 min readOct 18, 2023

--

连接以太坊是和以太坊公链交互的第一步。所有EVM兼容链及其上的智能合约交互都需要这个基本步骤。

要连接以太坊节点,最常用的办法是使用go-ethereum库的ethclient

你可以使用远程节点服务(如Infura,QuickNode,Alchemy等),也可以启动本地的调试节点(如Hardhat本地节点或者Foundry的anvil)。

client, err := ethclient.Dial("https://mainnet.infura.io/v3/<API-KEY>")

使用远程节点(以Infura为例)

使用远程节点一般需要注册账户并获得一个私有的API_KEY。具体步骤可以参考对应网站介绍。获得API_KEY后就可以直接连接了。

完整代码

package main

import (
"context"
"github.com/ethereum/go-ethereum/ethclient"
"log"
"os"
)

func main() {
apiKey := os.Getenv("INFURA_API_KEY")
url := "https://mainnet.infura.io/v3/" + apiKey
client, err := ethclient.Dial(url)
if err != nil {
log.Fatalf("Could not connect to Infura with ethclient: %s", err)
}
log.Println("connect success")

ctx := context.Background()
chainId, err := client.ChainID(ctx)
if err != nil {
log.Fatalf("get chainId error: %s", err)
}
log.Printf("chainId: %s", chainId)
bn, err := client.BlockNumber(ctx)
if err != nil {
log.Fatalf("get chainId error: %s", err)
}
log.Printf("blocknumber: %d", bn)
}

使用本地调试节点(以anvil为例)

anvilFoundry工具集的一部分,详细使用方法可见 https://book.getfoundry.sh/reference/anvil/。

启动本地调试节点

anvil

默认监听端口是8545。只需要修改对应的连接地址即可。

client, err := ethclient.Dial("http://localhost:8545")

当然,也可以尝试输出对应的ChainIdBlockNumber,你会发现和主网的区别。

完整代码

package main

import (
"context"
"github.com/ethereum/go-ethereum/ethclient"
"log"
)

func main() {
url := "http://localhost:8545"
client, err := ethclient.Dial(url)
if err != nil {
log.Fatalf("Could not connect to Infura with ethclient: %s", err)
}
log.Println("connect success")

ctx := context.Background()
chainId, err := client.ChainID(ctx)
if err != nil {
log.Fatalf("get chainId error: %s", err)
}
log.Printf("chainId: %s", chainId)
bn, err := client.BlockNumber(ctx)
if err != nil {
log.Fatalf("get chainId error: %s", err)
}
log.Printf("blocknumber: %d", bn)
}

输出的应该是类似如下的内容

2023/10/18 11:50:26 connect success
2023/10/18 11:50:26 chainId: 31337
2023/10/18 11:50:26 blocknumber: 0

恭喜你,已经学会了使用Go连接以太坊,可以开始神奇的以太坊开发旅程了。

--

--