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

PHPz
Lepaskan: 2024-02-09 08:00:22
ke hadapan
945 orang telah melayarinya

`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
        }
    }
}
Salin selepas log masuk

Tetapi dalam pasukan

block, err := client.blockbyhash(context.background(), header.hash())
Salin selepas log masuk

Saya mendapat ralat:

2023/04/19 17:31:14 not found
exit status 1
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan