前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开发区块链应用(十三)--以太坊区块查询

从零开发区块链应用(十三)--以太坊区块查询

作者头像
Tiny熊
发布2022-02-22 18:00:02
9930
发布2022-02-22 18:00:02
举报

杰哥的技术杂货铺[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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深入浅出区块链技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、查询区块信息
    • 1.1 根据区块高度获取区块信息
      • 1.2 根据区块哈希获取区块信息
        • 1.3 完整代码
        • 二、最新区块查询
          • 2.1 获取最新区块高度
            • 2.2 获取最新区块信息
              • 参考资料
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档