我有以下代码用于订阅新出现的区块:
package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("wss://mainnet.infura.io/ws/v3/APIKEY")
if err != nil {
log.Fatal(err)
}
headers := make(chan *types.Header)
sub, err := client.SubscribeNewHead(context.Background(), headers)
if err != nil {
log.Fatal(err)
}
for {
select {
case err := <-sub.Err():
log.Fatal(err)
case header := <-headers:
fmt.Println(header.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
block, err := client.BlockByHash(context.Background(), header.Hash())
if err != nil {
log.Fatal(err)
}
fmt.Println(block.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
fmt.Println(block.Number().Uint64()) // 3477413
fmt.Println(block.Time()) // 1529525947
fmt.Println(block.Nonce()) // 130524141876765836
fmt.Println(len(block.Transactions())) // 7
}
}
}
但在排队的时候
block, err := client.BlockByHash(context.Background(), header.Hash())
我得到错误:
2023/04/19 17:31:14 not found
exit status 1
它仍然在fmt.Println(header.Hash().Hex())
中打印一个散列,所以我知道infura连接正在工作。
2条答案
按热度按时间wj8zmpe11#
使用区块编号而不是哈希。
函数
header.Hash()
不返回区块哈希,而是返回头部的哈希。gkn4icbw2#
这是否会无意中订阅未锁定的块呢?