从零开发区块链应用(十三)--以太坊区块查询
  xT4eRtmiepsE 2023年11月02日 48 0



文章目录


正如我们所见,您可以有两种方式查询区块信息。

一、查询区块信息

1.1 根据区块高度获取区块信息

调用客户端的BlockByNumber方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。

// GetBlockByNumber 根据区块高度获取区块信息,isFullTx 全交易
func (eth *Http) GetBlockByNumber(height string, isFullTx bool) (interface{}, error) {
args = []interface{}{height, isFullTx}
params := NewHttpParams("eth_getBlockByNumber", args)
resBody, err := eth.rpc.HttpRequest(params)
if err != nil {
return nil, err
}
return eth.ParseJsonRPCResponse(resBody)
}

1.2 根据区块哈希获取区块信息

调用客户端的BlockByHash方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。

// GetBlockByHash 根据哈希获取区块信息,isFullTx 全交易
func (eth *Http) GetBlockByHash(hash string, isFullTx bool) (interface{}, error) {
args = []interface{}{hash, isFullTx}
params := NewHttpParams("eth_getBlockByHash", args)
resBody, err := eth.rpc.HttpRequest(params)
if err != nil {
return nil, err
}
return eth.ParseJsonRPCResponse(resBody)
}

1.3 完整代码

package main

import (
"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

fmt.Println(count) // 144
}

二、最新区块查询

2.1 获取最新区块高度

GetLatestBlockNumber 获取最新区块高度

func (eth *Http) GetLatestBlockNumber() (string, error) {
args = []interface{}{}
params := NewHttpParams("eth_blockNumber", args)
resBody, err := eth.rpc.HttpRequest(params)
if err != nil {
return "0x0", err
}
res, err := eth.ParseJsonRPCResponse(resBody)
if err != nil {
return "0x0", err
}
return res.(string), nil
}

2.2 获取最新区块信息

GetLatestBlock 获取最新区块信息,isFullTx 全交易

func (eth *Http) GetLatestBlock(isFullTx bool) (interface{}, error) {
args = []interface{}{"latest", isFullTx}
params := NewHttpParams("eth_getBlockByNumber", args)
resBody, err := eth.rpc.HttpRequest(params)
if err != nil {
return nil, err
}
return eth.ParseJsonRPCResponse(resBody)
}



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
xT4eRtmiepsE