Web3js

如何獲取合約的所有交易?

  • January 26, 2022

我正在嘗試獲取契約的所有交易,但在所有情況下我只獲得了[]or undefined

我正在關注這個文章:

我也閱讀了其他文章,但我無法解決我的問題。

我嘗試使用這個:

var filter=web3.eth.filter({fromBlock: 866705, toBlock: 909023, address: contractAddress});
filter.get(function(error, log) {
 console.log(JSON.stringify(log));
});
filter.stopWatching(); 

使用不同的 fromblock 值,to block 和其他選項(’latest’,fromblock: 0 , …)。但我沒有得到任何結果。

我正在嘗試這樣做:

var filter = web3.eth.filter({fromBlock:9000, toBlock: 'latest', address: contractAddress});
filter.get(function(error, result) {
 if(!error){
   var info = web3.eth.getBlock(result , function(error, result){
      if(!error){
        var trans = web3.eth.getTransaction(result.transactions[1], function(error,result){
          if(!error){
            var str = web3.toAscii(result.input,);
            console.log(str);
          }else{
             console.log(error);
          }
        });
      }else{
         console.log(error);
      }
    });
}else{
   console.log(error);
 }
})

(如果我忘記了一些記號對不起)

所有這些只是為了獲取“from”、“to”和“input”等交易的數據。哪裡有問題?

更多資訊:

  • 我正在使用 metamask 和 meteor.js
  • 我在 Ropsten 測試網中執行它
  • 如果我使用web3.eth.getBlock具有正確塊號的函式,我可以獲得所有數據,問題是過濾器以及我如何使用它。

另一種獲取賬戶交易列表的方法(可能更簡單)是使用來自諸如http://etherscan.io之類的塊抓取工具的 API 。這樣做的問題是它是完全的centralized

一種完全去中心化的方式是反對節點(就像你正在做的那樣)。這裡的問題是,雖然它是去中心化的,但速度很慢。特別是如果您的智能合約有很長的交易歷史。

與節點對抗的一個更深層次的問題是,僅僅獲取交易是不夠的。您還需要獲取交易收據。您需要這些來確定事務是否因錯誤完成。

更糟糕的是傳入的消息呼叫(過去稱為內部事務)。這些是由外部智能合約直接向您的地址發起的“交易”。這些“交易”不會直接出現在區塊鏈上,而是隱藏在發起交易的內部痕跡中。如果您只查看您的地址,這些將被遺漏。

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