Go-Ethereum是以太坊的官方客戶端之一,由以太坊基金會維護和開發。JSON-RPC是與以太坊節點進行交互的一種常用方式,在Go-Ethereum中也有相應的實現。
func main() {
client, err := rpc.Dial("http://localhost:8545")
if err != nil {
log.Fatal(err)
}
var blockNumber hexutil.Big
err = client.Call(&blockNumber, "eth_blockNumber")
if err != nil {
log.Fatal(err)
}
fmt.Println("Latest block number:", blockNumber)
}
在Go-Ethereum中,我們使用rpc.Dial方法連接到節點,然后使用client.Call方法發送請求并接收響應。上述代碼的作用是獲取最新區塊的區塊號。
另一個常用的方法是使用訂閱API來監聽以太坊網絡中的事件。以下代碼演示了如何監聽新塊,并在有新塊產生時打印區塊號。
func main() {
client, err := rpc.Dial("http://localhost:8545")
if err != nil {
log.Fatal(err)
}
subscription, err := client.EthSubscribe(context.Background(), newBlockCh, "newHeads")
if err != nil {
log.Fatal(err)
}
for {
select {
case err :=<-subscription.Err():
log.Fatal(err)
case header :=<-newBlockCh:
fmt.Println("New block:", header.Number)
}
}
}
使用EthSubscribe方法訂閱一個事件,然后通過for循環不斷監聽事件的發生。需要注意的是,使用訂閱API時需要傳入一個通道作為參數,用來接收事件的數據。我們可以使用context.Background方法創建一個上下文對象,該對象用于跟蹤訂閱的狀態,如取消訂閱。
總之,Go-Ethereum提供了非常便捷的方式來與以太坊節點進行交互,開發者可以根據自己的需求選擇合適的API進行開發。