Go语言开发以太坊:查询块

我们将看到两种查询块信息的方法。

块头

您可以调用客户端HeaderByNumber以返回有关块的标题信息。如果通过,它将返回最新的块头nil

header, err := client.HeaderByNumber(context.Background(), nil)if err != nil {
  log.Fatal(err)}fmt.Println(header.Number.String()) // 5671744

全块

调用客户端的BlockByNumber方法以获取完整的块。您可以读取块的所有内容和元数据,例如块编号,块时间戳,块哈希,块难度以及事务列表等等。

blockNumber := big.NewInt(5671744)block, err := client.BlockByNumber(context.Background(), blockNumber)if err != nil {
  log.Fatal(err)}fmt.Println(block.Number().Uint64())     // 5671744fmt.Println(block.Time().Uint64())       // 1527211625fmt.Println(block.Difficulty().Uint64()) // 3217000136609065fmt.Println(block.Hash().Hex())          // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9fmt.Println(len(block.Transactions()))   // 144

调用TransactionCount以仅返回一个块中的事务计数。

count, err := client.TransactionCount(context.Background(), block.Hash())if err != nil {
  log.Fatal(err)}fmt.Println(count) // 144

在下一节中,我们将学习如何在一个块中查询事务。


完整代码

blocks.go

package mainimport (    "context"
    "fmt"
    "log"
    "math/big"
    "github.com/ethereum/go-ethereum/ethclient")func main() {
    client, err := ethclient.Dial("https://mainnet.infura.io")    if err != nil {
        log.Fatal(err)
    }
    header, err := client.HeaderByNumber(context.Background(), nil)    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(header.Number.String()) // 5671744
    blockNumber := big.NewInt(5671744)
    block, err := client.BlockByNumber(context.Background(), blockNumber)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(block.Number().Uint64())     // 5671744
    fmt.Println(block.Time().Uint64())       // 1527211625
    fmt.Println(block.Difficulty().Uint64()) // 3217000136609065
    fmt.Println(block.Hash().Hex())          // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9
    fmt.Println(len(block.Transactions()))   // 144
    count, err := client.TransactionCount(context.Background(), block.Hash())
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(count) // 144}


链客

2019.11.27
4207
收藏

个评论:

发表评论

感谢您的善举,每一次解答会成为新人的灯塔。回答被采纳后获得20算力和相应LK币奖励。

关闭