簡體   English   中英

來自 go-ethereum 的智能合約解析問題的事件數據

[英]Event data from Smart Contract parsing issue with go-ethereum

我無法使用types.Log通道獲取從 SC 事件發出的完整數據。 有什么辦法可以讓我從發出的事件中獲取所有數據嗎?

我試圖解析的事件:

PairCreated(address indexed,address indexed,address,uint)

我的代碼:

for {
        select {
        case err := <-sub.Err():
            log.Fatal(err)
        case vLog := <-logs:
            fmt.Printf("Log Block Number: %d\n", vLog.BlockNumber)
            fmt.Printf("Log Index: %d\n", vLog.Index)

            event := make(map[string]interface{})
            err := contractAbi.UnpackIntoMap(event, "PairCreated", vLog.Data)
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println(event)
        }
    }

我只能解析事件的最后兩個 arguments。

我明白這里出了什么問題。 如果一個參數聲明為indexed ,則該參數將轉到Topics而不是Data 並且最多可以有 3 個主題。 所以,我試圖解開主題但失敗了。 並通過以下方式成功:

token1 := common.HexToAddress(vLog.Topics[1].Hex())
token2 := common.HexToAddress(vLog.Topics[2].Hex())

對在Data

所以,最終的代碼是:

for {
        select {
        case err := <-sub.Err():
            log.Fatal(err)
        case vLog := <-logs:
            fmt.Printf("Log Block Number: %d\n", vLog.BlockNumber)
            fmt.Printf("Log Index: %d\n", vLog.Index)

            event := make(map[string]interface{})
            err := contractAbi.UnpackIntoMap(event, "PairCreated", vLog.Data)
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println(event)

            token1 := common.HexToAddress(vLog.Topics[1].Hex())
            token2 := common.HexToAddress(vLog.Topics[2].Hex())
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM