[英]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.