杰哥的技术杂货铺[1]
正如我们所见,可以有两种方式查询区块信息。
一、查询区块信息
1.1 根据区块高度获取区块信息
调用客户端的 BlockByNumber 方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。
代码语言:javascript复制// 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 方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。
代码语言:javascript复制// 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 完整代码
代码语言:javascript复制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 获取最新区块高度
代码语言:javascript复制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 全交易
代码语言:javascript复制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)
}
本系列文章:
从零开发区块链应用(一)--golang 配置文件管理工具 viper[2]
从零开发区块链应用(二)--mysql 安装及数据库表的安装创建[3]
从零开发区块链应用(三)--mysql 初始化及 gorm 框架使用[4]
从零开发区块链应用(四)--自定义业务错误信息[5]
从零开发区块链应用(五)--golang 网络请求[6]
从零开发区块链应用(六)--gin 框架使用[7]
从零开发区块链应用(七)--gin 框架参数获取[8]
从零开发区块链应用(八)--结构体初识[9]
从零开发区块链应用(九)--区块链结构体创建[10]
从零开发区块链应用(十)--golang 协程使用[11]
从零开发区块链应用(十一)--以太坊地址生成[12]
从零开发区块链应用(十二)--以太坊余额查询[13]
从零开发区块链应用(十三)--以太坊区块查询[14]
从零开发区块链应用(十四)--以太坊交易哈希查询[15]
参考资料
[1]
杰哥的技术杂货铺: https://learnblockchain.cn/people/3835
[2]
从零开发区块链应用(一)--golang配置文件管理工具viper: https://learnblockchain.cn/article/3446
[3]
从零开发区块链应用(二)--mysql安装及数据库表的安装创建: https://learnblockchain.cn/article/3447
[4]
从零开发区块链应用(三)--mysql初始化及gorm框架使用: https://learnblockchain.cn/article/3448
[5]
从零开发区块链应用(四)--自定义业务错误信息: https://learnblockchain.cn/article/3449
[6]
从零开发区块链应用(五)--golang网络请求: https://learnblockchain.cn/article/3457
[7]
从零开发区块链应用(六)--gin框架使用: https://learnblockchain.cn/article/3480
[8]
从零开发区块链应用(七)--gin框架参数获取: https://learnblockchain.cn/article/3481
[9]
从零开发区块链应用(八)--结构体初识: https://learnblockchain.cn/article/3482
[10]
从零开发区块链应用(九)--区块链结构体创建: https://learnblockchain.cn/article/3483
[11]
从零开发区块链应用(十)--golang协程使用: https://learnblockchain.cn/article/3484
[12]
从零开发区块链应用(十一)--以太坊地址生成: https://learnblockchain.cn/article/3485
[13]
从零开发区块链应用(十二)--以太坊余额查询: https://learnblockchain.cn/article/3498
[14]
从零开发区块链应用(十三)--以太坊区块查询: https://learnblockchain.cn/article/3499
[15]
从零开发区块链应用(十四)--以太坊交易哈希查询: https://learnblockchain.cn/article/3500