Events

如何通過知道合約地址(web3)來訪問事件日誌?

  • August 28, 2019

如何通過 web3 訪問儲存在合約其中一個 tx 中的日誌?

程式碼範例:

event newtest(string indexed name, uint indexed idlevel,string indexed multib, string objmulti, uint objnm);

newtest('test',5,'testj','obj2',30);

假設合約地址是 0x00。如何使用 web3 獲取儲存在此合約地址中的所有日誌?

Ps 我不需要實時監聽事件。我只需要在需要時根據過濾器獲取契約的所有日誌。

看看web3.eth.filterwatch.

像這樣的東西:

const filter = web3.eth.filter({
 fromBlock: 0,
 toBlock: 'latest',
 address: contractAddress,
 topics: [web3.sha3('newtest(string,uint256,string,string,uint256)')]
})

filter.watch((error, result) => {
  //
})

請注意“In Solidity:第一個主題是事件簽名的雜湊”部分。規範類型,例如uint256必須在簽名中使用。

編輯:每個@plingamp 的評論web3.sha3現在包括“0x”。

使用.get而不是.watchwith web3.eth.filter

contractAddress = "0x00.."
web3.eth.filter({
 address: contractAddress,
 from: 1,
 to: 'latest'
}).get(function (err, result) {
 // callback code here
})

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