首頁  >  文章  >  後端開發  >  `go-ethereum` client.BlockByHash() 給出錯誤“找不到”

`go-ethereum` client.BlockByHash() 給出錯誤“找不到”

PHPz
PHPz轉載
2024-02-09 08:00:22883瀏覽

`go-ethereum` client.BlockByHash() 给出错误“未找到”

php小編香蕉近日收到了一位讀者的問題,他在使用`go-ethereum`的`client.BlockByHash()`函數時遇到了一個錯誤提示:“未找到」。這個問題困擾了他很久,因此他希望能得到一些解決方案。在這篇文章中,我們將探討可能導致這個錯誤的原因,並提供一些可能的解決方法。

問題內容

我有以下程式碼用於訂閱出現的新區塊:

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 連接正在工作。

解決方法

使用區塊號碼而不是雜湊值。

block, err := client.BlockByNumber(context.Background(), header.Number)

函數 header.hash() 不傳回區塊哈希,而是傳回 header 的哈希。

以上是`go-ethereum` client.BlockByHash() 給出錯誤“找不到”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除