Golang ethclient.Client - 如何进行 RPC 调用?

Golang ethclient.Client - how to make RPC calls?

如何使用 ethclient.Client ( https://github.com/ethereum/go-ethereum ) 调用 RPC 端点?

有些方法没有包装器,据我所知,直接调用它是不可能的 例如

client, err := ethclient.Dial(url)

// ok
client.BalanceAt(...)

// incorrect code, trying to access private field `c *rpc.Client`
client.c.Call("debug_traceTransaction", ...)

我能想到的唯一方法是启动完全独立的 rpc 客户端并始终保持两者 运行。 这是唯一的方法吗?

ethclient.Dial 函数(您提到的)使用 rpc.DialContext function underneath, and the package also provides an ethclient.NewClient 函数使用现有的 rpc 连接创建新的 ethclient.Client

一种可能的解决方案是创建一个新的 rpc 连接,然后将其传递给 ethclient.Client,因此您使用的是一个连接,但也可以使用 RPC 连接本身和 eth 客户端。

像这样:

rpcClient, err := rpc.DialContext(ctx, url)

ethClient := ethclient.NewClient(rpcClient)

// use the ethClient
ethClient.BalanceAt(...)

// access to rpc client
rpcClient.Call(...)