Web3js
如何使用 web3 獲取給定契約的所有日誌?
這個答案在
filter.get
未被棄用時有效,但現在我不確定如何使用訂閱做同樣的事情 -web3.eth.subscribe
在我創建訂閱後聽到新事件並對其採取行動,但我不確定如何獲取舊事件。
試試這個(用 web3.js v1.2.1 測試):
async function getPastLogs(address, fromBlock, toBlock) { if (fromBlock <= toBlock) { try { const options = { address : address, fromBlock: fromBlock, toBlock : toBlock }; return await web3.eth.getPastLogs(options); } catch (error) { const midBlock = (fromBlock + toBlock) >> 1; const arr1 = await getPastLogs(address, fromBlock, midBlock); const arr2 = await getPastLogs(address, midBlock + 1, toBlock); return [...arr1, ...arr2]; } } return []; } ... const latest = await web3.eth.getBlock("latest"); const logs = await getPastLogs(yourContractAddress, 1, latest);
您可以通過替換
1
為您的合約創建區塊號來進一步優化這一點。
web3.eth.getPastLogs
在此處查看有關功能的更多資訊。