Web3js
如何讀取過去觸發的日誌/事件?
我有一個事件的智能合約。
event NewContractCreated(address _callerAddress, address _newContractAddress);
我知道如何主動監聽新事件:
var newContractEvent = myContract.NewContractCreated(); newContractEvent.watch(function(error, result){ if (!error){ console.log("Success"); console.log("New Contract Address: " + result.args._newContractAddress); console.log("Creator: " + result.args._callerAddress); } });
這對我來說很好。但我的問題是:我如何監聽並提取在我開始觀看之前發生的事件的完全相同的數據?
我嘗試了完全相同的事情,但使用
get
而不是watch
……它成功了一半。它列印了頂行“Success”,但沒有列印其餘的日誌行。
您應該能夠指定要觀看的時間段(在塊號中)。根據此處的文件
fromBlock: Number|String - 最早區塊的編號(latest 可以表示最近和未決的目前正在探勘的區塊)。預設為最新。
toBlock: Number|String - 最新區塊的編號(latest 可以表示最近的和未決的目前正在探勘的區塊)。預設為最新。
在您的情況下,這應該有效:
var newContractEvent = myContract.NewContractCreated(); newContractEvent.watch({fromBlock: 0, toBlock: 'latest'}, function(error, result){ if (!error){ console.log("Success"); console.log("New Contract Address: " + result.args._newContractAddress); console.log("Creator: " + result.args._callerAddress); } });
嘗試
var newContractEvent = myContract.NewContractCreated({}, {fromBlock: 12345, toBlock: 'latest'}); newContractEvent.watch(function(error, result) { if (!error){ console.log("Success"); console.log("New Contract Address: " + result.args._newContractAddress); console.log("Creator: " + result.args._callerAddress); JSON.stringify(result); } });
有關使用事件的索引參數作為過濾器元素的更多資訊,請參閱如何從 The DAO 檢索已投票的事件。