Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pelanggan `go-ethereum`.BlockByHash() memberikan ralat "tidak dijumpai"

Pelanggan `go-ethereum`.BlockByHash() memberikan ralat "tidak dijumpai"

PHPz
PHPzke hadapan
2024-02-09 08:00:22882semak imbas

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

editor php Banana baru-baru ini menerima soalan daripada pembaca dia menemui mesej ralat: "Tidak dijumpai" apabila menggunakan fungsi `client.BlockByHash()` `go-ethereum`. Masalah ini telah lama mengganggunya, jadi dia berharap untuk mendapatkan penyelesaian. Dalam artikel ini, kami akan meneroka kemungkinan punca ralat ini dan menyediakan beberapa penyelesaian yang mungkin.

Kandungan soalan

Saya mempunyai kod berikut untuk melanggan blok baharu apabila ia muncul:

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

Tetapi dalam pasukan

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

Saya mendapat ralat:

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

Ia masih mencetak cincang dalam fmt.println(header.hash().hex()) jadi saya tahu sambungan infura berfungsi.

Penyelesaian

Gunakan nombor blok dan bukannya nilai cincang.

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

Fungsi header.hash() tidak mengembalikan cincang blok, tetapi cincang pengepala.

Atas ialah kandungan terperinci Pelanggan `go-ethereum`.BlockByHash() memberikan ralat "tidak dijumpai". Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam