Web3js

myContract.getPastEvents(‘allEvents’) 返回空數組

  • May 31, 2019

我想從我部署在 Ropsten 網路上的合約中獲取所有過去的事件。

契約是:

pragma solidity ^0.5.1;

contract SampleContract {
   uint storageData;

   event MamboNumberTwo(uint _value);
   event MamboNumberFive(uint _value);
   event MamboNumberString(string _value);

   function test(uint x, uint y, string memory s) public {
       emit MamboNumberTwo(x);
       emit MamboNumberFive(y);
       emit MamboNumberString(s);
   }
}

它部署在0xdd73A24Ef263D9bed42b0db60607F915194A7fbF,你可以看到這個合約到目前為止已經發出了九個事件。

我想使用 web3’s 來獲取它們myContract.getPastEvents("allEvents"),但這會返回一個在空數組中解析的 Promise,就好像還沒有發出任何事件一樣。

完整程式碼:

web3 = new Web3(...) // Connect to Ropsten node via Websocket
var contract = new web3.eth.Contract([...], "0xdd73A24Ef263D9bed42b0db60607F915194A7fbF");
contract.getPastEvents("allEvents").then(console.log);

有任何想法嗎?謝謝!

使用 fromblock > 0 向呼叫添加過濾器:

contract.getPastEvents("allEvents", { fromBlock: 1}).then(console.log);

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