Transactions
如何使用 web3 js 按帳戶獲取交易?
我確定之前有人問過這個問題,但我沒有找到任何可以幫助我解決問題的結果。
如何獲取給定帳戶的交易(進出)?我使用nodejs和web3?
通過這一行,我得到了已發送交易的數量:
web3.eth.getTransactionCount(accounts[i])
因此,至少 web3 應該對帳戶活動有所了解。
有沒有簡單的方法來獲取我的賬戶交易?還是我錯過了什麼?我是否必須逐個塊地爬取整個區塊鏈來獲取我的交易?
簡單的交易不會被索引。因此,您要麼需要遍歷所有塊,使用某種鏈下索引(例如etherscan.io),要麼自己建構一個並使用它。
例如,您可以使用這種啟發式方法,而無需處理整個鏈
var myAddr = '0xbb9bc244d798123fde783fcc1c72d3bb8c189413'; var currentBlock = eth.blockNumber; var n = eth.getTransactionCount(myAddr, currentBlock); var bal = eth.getBalance(myAddr, currentBlock); for (var i=currentBlock; i >= 0 && (n > 0 || bal > 0); --i) { try { var block = eth.getBlock(i, true); if (block && block.transactions) { block.transactions.forEach(function(e) { if (myAddr == e.from) { if (e.from != e.to) bal = bal.plus(e.value); console.log(i, e.from, e.to, e.value.toString(10)); --n; } if (myAddr == e.to) { if (e.from != e.to) bal = bal.minus(e.value); console.log(i, e.from, e.to, e.value.toString(10)); } }); } } catch (e) { console.error("Error in block " + i, e); } }
它是如何工作的?
使用有關目前狀態的可用資訊(“來自”交易的數量和目前餘額),它及時回溯,直到找到至少這麼多“來自”交易,然後繼續回溯,直到餘額達到
0
.固有的限制是不會找到帳戶注資之前的0 值交易。
另一方面,契約事件被索引。因此,如果您正在開發智能合約,您可以利用它。
使用 web3 1.0.0 API:
web3.eth.getPastLogs({fromBlock:'0x0',address:'0x9e3319636e2126e3c0bc9e3134AEC5e1508A46c7'}) .then(res => { res.forEach(rec => { console.log(rec.blockNumber, rec.transactionHash, rec.topics); }); }).catch(err => console.log("getPastLogs failed", err));
或通過 JSON RPC eth_getLogs。
這個腳本有一個
getTransactionsByAccount
. 您需要通過添加 web3 來修改它,例如 useweb3.eth.blockNumber
而不是 justeth.blockNumber
(它在 Geth 控制台中有效,因為 Geth 控制台包含 web3 對象)。以上將給出簡單的交易,如何獲得合約內部交易需要更多的工作 。
除了@Tjaden 的評論,
web3.eth.getTransactionCount(account)
只給出了來自account
.