Events
如何通過知道合約地址(web3)來訪問事件日誌?
如何通過 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.filter和
watch
.像這樣的東西:
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
而不是.watch
withweb3.eth.filter
:contractAddress = "0x00.." web3.eth.filter({ address: contractAddress, from: 1, to: 'latest' }).get(function (err, result) { // callback code here })