Heim  >  Artikel  >  Backend-Entwicklung  >  „go-ethereum“ client.BlockByHash() gibt den Fehler „nicht gefunden“ aus

„go-ethereum“ client.BlockByHash() gibt den Fehler „nicht gefunden“ aus

PHPz
PHPznach vorne
2024-02-09 08:00:22883Durchsuche

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

php-Editor Banana erhielt kürzlich eine Frage von einem Leser. Er stieß auf die Fehlermeldung „Nicht gefunden“, als er die Funktion „client.BlockByHash()“ von „go-ethereum“ verwendete. Dieses Problem beschäftigt ihn schon seit langem und er hofft auf eine Lösung. In diesem Artikel werden wir die möglichen Ursachen dieses Fehlers untersuchen und einige mögliche Lösungen anbieten.

Frageninhalt

Ich habe den folgenden Code zum Abonnieren neuer Blöcke, sobald sie erscheinen:

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
        }
    }
}

Aber im Team

block, err := client.blockbyhash(context.background(), header.hash())

Ich erhalte die Fehlermeldung:

2023/04/19 17:31:14 not found
exit status 1

Der Hash wird immer noch gedruckt fmt.println(header.hash().hex()), sodass ich weiß, dass die Infura-Verbindung funktioniert.

Workaround

Blocknummer statt Hashwert verwenden.

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

Funktion header.hash() gibt nicht den Block-Hash zurück, sondern den Hash des Headers.

Das obige ist der detaillierte Inhalt von„go-ethereum“ client.BlockByHash() gibt den Fehler „nicht gefunden“ aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen