Web3js
如何獲取合約的所有交易?
我正在嘗試獲取契約的所有交易,但在所有情況下我只獲得了
[]
orundefined
。我正在關注這個文章:
我也閱讀了其他文章,但我無法解決我的問題。
我嘗試使用這個:
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
。一種完全去中心化的方式是反對節點(就像你正在做的那樣)。這裡的問題是,雖然它是去中心化的,但速度很慢。特別是如果您的智能合約有很長的交易歷史。
與節點對抗的一個更深層次的問題是,僅僅獲取交易是不夠的。您還需要獲取交易收據。您需要這些來確定事務是否因錯誤完成。
更糟糕的是傳入的消息呼叫(過去稱為內部事務)。這些是由外部智能合約直接向您的地址發起的“交易”。這些“交易”不會直接出現在區塊鏈上,而是隱藏在發起交易的內部痕跡中。如果您只查看您的地址,這些將被遺漏。