記事ディレクトリ
これまで見てきたように、2つの方法でブロック情報を照会できます。
1.ブロック情報を照会する
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.最新のブロッククエリ
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)
}