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

PHPz
Freigeben: 2024-02-09 08:00:22
nach vorne
946 Leute haben es durchsucht

`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
        }
    }
}
Nach dem Login kopieren

Aber im Team

block, err := client.blockbyhash(context.background(), header.hash())
Nach dem Login kopieren

Ich erhalte die Fehlermeldung:

2023/04/19 17:31:14 not found
exit status 1
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage