区块头
您可以调用客户端的HeaderByNumber来返回有关一个区块的头信息。若您传入nil,它将返回最新的区块头。
header, err := client.HeaderByNumber(context.Background(), nil)if err != nil {log.Fatal(err)}fmt.Println(header.Number.String()) // 5671744
完整区块
调用客户端的BlockByNumber方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。
blockNumber := big.NewInt(5671744)block, err := client.BlockByNumber(context.Background(), blockNumber)if err != nil {log.Fatal(err)}fmt.Println(block.Number().Uint64()) // 5671744fmt.Println(block.Time().Uint64()) // 1527211625fmt.Println(block.Difficulty().Uint64()) // 3217000136609065fmt.Println(block.Hash().Hex()) // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9fmt.Println(len(block.Transactions())) // 144
调用Transaction只返回一个区块的交易数目。
count, err := client.TransactionCount(context.Background(), block.Hash())if err != nil {log.Fatal(err)}fmt.Println(count) // 144
完整代码
package mainimport ("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()) // 5671744blockNumber := big.NewInt(5671744)block, err := client.BlockByNumber(context.Background(), blockNumber)if err != nil {log.Fatal(err)}fmt.Println(block.Number().Uint64()) // 5671744fmt.Println(block.Time().Uint64()) // 1527211625fmt.Println(block.Difficulty().Uint64()) // 3217000136609065fmt.Println(block.Hash().Hex()) // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9fmt.Println(len(block.Transactions())) // 144count, err := client.TransactionCount(context.Background(), block.Hash())if err != nil {log.Fatal(err)}fmt.Println(count) // 144}
