Web3js

如何讀取過去觸發的日誌/事件?

  • May 8, 2017

我有一個事件的智能合約。

   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 檢索已投票的事件。

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