ethereum扫描区块,获取区块内的交易记录
生活随笔
收集整理的這篇文章主要介紹了
ethereum扫描区块,获取区块内的交易记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初始化客戶端
?Go初始化以太坊客戶端是和區塊鏈交互所需的基本步驟。?先,導?go-etherem的 ethclient 包并
通過調?接收區塊鏈服務提供者URL的 Dial 來初始化它。
若沒有現有以太坊客戶端,可以連接到官方提供的一個節點
完整代碼
package main import ("fmt""log""github.com/ethereum/go-ethereum/ethclient" ) func main() {client, err := ethclient.Dial("https://mainnet.infura.io")if err != nil {log.Fatal(err)}fmt.Println("成功建立連接") }獲取節點最新的區塊高度
header, err := client.HeaderByNumber(context.Background(), nil) if err != nil { log.Fatal(err) } fmt.Println(header.Number.String())獲取一個完整區塊
調? BlockByNumber ?法來獲得完整區塊。可以讀取該區塊的所有內容和元數據,例如,
區塊號,區塊時間戳,區塊摘要,區塊難度以及交易列表等等
通過上面拿到的block,調用其內部方法 Transactions 可以讀取到塊中的事物,該事務返回了一個Transaction 類型的列表,然后循環遍歷其就可以拿到有關當前區塊的詳細交易記錄了(但是不能直接拿到from)
for _, tx := range block.Transactions() {fmt.Println(tx.Hash().Hex()) // 0x5d49fcaa394c97ec8a9c3e7bd9e8388d420fb050a52083cfmt.Println(tx.Value().String()) // 10000000000000000fmt.Println(tx.Gas()) // 105000fmt.Println(tx.GasPrice().Uint64()) // 102000000000fmt.Println(tx.Nonce()) // 110644fmt.Println(tx.Data()) // []fmt.Println(tx.To().Hex()) // 0x55fE59D8Ad77035154dDd0AD0388D09Dd4047A8e }如果想拿到from就得按照下面這個方法
for _, tx := range block.Transactions() {fmt.Println(tx.Hash().Hex()) // 0x5d49fcaa394c97ec8a9c3e7bd9e8388d420fb050a52083cfmt.Println(tx.Value().String()) // 10000000000000000fmt.Println(tx.Gas()) // 105000fmt.Println(tx.GasPrice().Uint64()) // 102000000000fmt.Println(tx.Nonce()) // 110644fmt.Println(tx.Data()) // []fmt.Println(tx.To().Hex()) // 0x55fE59D8Ad77035154dDd0AD0388D09Dd4047A8echainID, err := client.NetworkID(context.Background())if err != nil {log.Fatal(err)}if msg, err := tx.AsMessage(types.NewEIP155Signer(chainID)); err != nil {fmt.Println(msg.From().Hex()) // 0x0fD081e3Bb178dc45c0cb23202069ddA57064258} }下面上傳一下我寫的掃描某個節點內的所有區塊,并插入到數據庫內的所有代碼
鏈接: https://pan.baidu.com/s/1gVgfflwZLN6RqL-2ZHEeNQ 提取碼: hnvx 復制這段內容后打開百度網盤手機App,操作更方便哦
總結
以上是生活随笔為你收集整理的ethereum扫描区块,获取区块内的交易记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于地图开发的那些坑儿
- 下一篇: 路由与交换技术第六章