Web3js

使用 Web3 在沒有 ABI 的情況下獲取契約的過去事件?

  • May 29, 2019

我正在建構一個簡單的資源管理器,我想列出合約發出的事件。由於我不知道每個契約的 ABI,是否可以使用 Web3 從契約中獲取過去的事件?

如果我知道 ABI,我會做這樣的事情:

var myContract = new web3.eth.Contract(ABI, address);

myContract.getPastEvents('allEvents', {
   filter: {...},
   fromBlock: 0,
   toBlock: 'latest'
}, (error, events) => { console.log(events); })
.then((events) => {
   console.log(events) // same results as the optional callback above
});

但是當然我不能在沒有它的介面的情況下實例化一個合約。我想知道像 Etherscan 這樣的探索者是如何做到這一點的。

你可以使用’web3.eth.getPastLogs({fromBlock: , address: }, (err, result))'

結果將包含事件位於“主題”中的對象,但如果沒有 ABI,您將無法解碼事件。

編輯:主題是一個數組,第一個元素是事件名稱,以下元素是參數

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