Go-Ethereum

web3.eth.filter({fromBlock:0, toBlock: ’latest’, address: account}) 不工作?

  • January 17, 2017

我的目標是列出來自給定帳戶的所有交易,但尚未成功。

我想知道為什麼我在使用 this 時總是有一個空結果web3.eth.filter。我知道有一個有效的解決方案:在私有區塊鏈中列出交易,但每次遍歷所有塊都需要相當長的時間,所以它在使用者端並沒有真正響應。

所以我想知道我的程式碼有什麼問題:

web3.eth.defaultAccount = web3.eth.accounts[0];
var account = web3.eth.accounts[0];

console.log('Account: '+ account);

var filter = web3.eth.filter({fromBlock:0, toBlock: 'latest', address: account});
filter.get(function(error, result) {
  if(!error) {
     for (i=0; i<result.length; ++i) {
       var block = web3.eth.getBlock(i, true);
       block.transactions.forEach( function(e) {

           console.log("  tx hash          : " + e.hash + "\n"
            + "   nonce           : " + e.nonce + "\n"
            + "   blockHash       : " + e.blockHash + "\n"
            + "   blockNumber     : " + e.blockNumber + "\n"
            + "   transactionIndex: " + e.transactionIndex + "\n"
            + "   from            : " + e.from + "\n" 
            + "   to              : " + e.to + "\n"
            + "   value           : " + e.value + "\n"
            + "   time            : " + block.timestamp + " " + new Date(block.timestamp * 1000).toGMTString() + "\n"
            + "   gasPrice        : " + e.gasPrice + "\n"
            + "   gas             : " + e.gas + "\n"
            + "   input           : " + web3.toAscii(e.input))+"\n"; 

     })
 }
  }
  else {
     console.log('Error: '+error);
  }
});

我也試過了filter.watch,但結果還是一樣:結果仍然是空的。

謝謝

web3.eth.filter命令僅通過塊的日誌。當您創建(或接收)從(或接收)您的地址的事務時,並不會確保已創建日誌條目。

創建日誌條目是需要明確完成的操作。所以掃描所有的塊確實是要走的路。

為了避免每次都掃描,您應該將您的發現保存在正常數據庫中。

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