Logs
在 Go 中正確將日誌主題轉換為 int64
我目前使用下面的程式碼從傳輸事件日誌中提取 ERC721 令牌 ID :
txHash := newLog.TxHash.Hex() hexString := common.BytesToAddress(newLog.Topics[3].Bytes()).Hex() flowerNum, _ := strconv.ParseUint(hexString, 0, 10) flowerNumInt := int64(flowerNum)
flowerNumInt
是1023
,即使txHash
下面連結引用 FLOWER #1133
。此外,FLOWER #1023
根本沒有傳輸事件,也沒有出現在下面連結的 tx 中。https://etherscan.io/tx/0xe330601b05c54116da3b06dd17cf483ab3106fb969989458c8587aac1c34fbf3
我在轉換過程中做錯了嗎?
這是解碼日誌主題以獲取值的完整範例(在您的情況下,ID 為 uint64):
package main import ( "context" "fmt" "log" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" ) func main() { client, err := ethclient.Dial("https://mainnet.infura.io") if err != nil { log.Fatal(err) } txID := common.HexToHash("0xe330601b05c54116da3b06dd17cf483ab3106fb969989458c8587aac1c34fbf3") receipt, err := client.TransactionReceipt(context.Background(), txID) if err != nil { log.Fatal(err) } logID := "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef" for _, vLog := range receipt.Logs { if vLog.Topics[0].Hex() == logID { if len(vLog.Topics) > 2 { id := new(big.Int) id.SetBytes(vLog.Topics[3].Bytes()) fmt.Println(id.Uint64()) // 1133 } } } }