Maison > développement back-end > Golang > le corps du texte

`go-ethereum` client.BlockByHash() donne l'erreur 'introuvable'

PHPz
Libérer: 2024-02-09 08:00:22
avant
945 Les gens l'ont consulté

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

Éditeur php Banana a récemment reçu une question d'un lecteur Il a rencontré un message d'erreur : "Not found" lors de l'utilisation de la fonction `client.BlockByHash()` de `go-ethereum`. Ce problème le préoccupe depuis longtemps et il espère donc trouver une solution. Dans cet article, nous explorerons les causes possibles de cette erreur et proposerons quelques solutions possibles.

Contenu de la question

J'ai le code suivant pour m'abonner aux nouveaux blocs au fur et à mesure de leur apparition :

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
        }
    }
}
Copier après la connexion

Mais dans l'équipe

block, err := client.blockbyhash(context.background(), header.hash())
Copier après la connexion

J'obtiens l'erreur :

2023/04/19 17:31:14 not found
exit status 1
Copier après la connexion

Il imprime toujours le hachage dans fmt.println(header.hash().hex()) donc je sais que la connexion Infura fonctionne.

Solution de contournement

Utilisez le numéro de bloc au lieu de la valeur de hachage.

block, err := client.BlockByNumber(context.Background(), header.Number)
Copier après la connexion

La fonction header.hash() ne renvoie pas le hachage du bloc, mais le hachage de l'en-tête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal