从零开发区块链应用(十三)--以太坊区块查询
Posted 杰哥的技术杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开发区块链应用(十三)--以太坊区块查询相关的知识,希望对你有一定的参考价值。
文章目录
正如我们所见,您可以有两种方式查询区块信息。
一、查询区块信息
1.1 根据区块高度获取区块信息
调用客户端的BlockByNumber方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。
// GetBlockByNumber 根据区块高度获取区块信息,isFullTx 全交易
func (eth *Http) GetBlockByNumber(height string, isFullTx bool) (interface, error)
args = []interfaceheight, 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 = []interfacehash, 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)
以上是关于从零开发区块链应用(十三)--以太坊区块查询的主要内容,如果未能解决你的问题,请参考以下文章