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(...)
如何使用 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(...)