Events

解碼時索引事件不返回值

  • July 21, 2021

我曾問過這個問題,但我省略了一些資訊,因為我(錯誤地)認為省略的資訊不是我的問題的一部分。

當您發出這樣的事件時:

event ChildCreated(address indexed creator, address child, uint length);

並像這樣在ethers js中解碼

return ethers.utils.defaultAbiCoder.decode(["address","address","uint256"], log.data);

你得到一個錯誤:

異常:null:值超出範圍(argument=“value”,value=20,code=INVALID_ARGUMENT,version=bytes/5.4.0

為什麼?

多虧了這個github執行緒,我才能找到解決方案。

解決方案在於,索引參數不包含在connection.data中,而是包含在connection.topics中。

並且從同一個 github 執行緒中,他們給出了使用索引參數解碼事件的程式碼

let abi = [
   "event newConnect (string indexed hashedName, string name, bytes32 connectId, string encrypted, address owner)"
];

let iface = new ethers.utils.Interface(abi)

getLogs.then((logs) => {
   logs.forEach((log) => {
       console.log(iface.parseLog(log));
   });
});

引用自:https://ethereum.stackexchange.com/questions/103856