Web3js
如何通過 web3.js 獲取最近 10 個區塊的數據?
如何像大多數區塊瀏覽器一樣使用 web3.js 獲取最新的 10 個區塊數據?
接受的答案有幾個問題:
- 正如@Lam-Le 提到的那樣,
.getBlock()
並且.getBlockNumber()
都是非同步的,因此如果在循環期間創建了一個新塊,您不僅將不再獲得“最新”塊,而且還會有重複塊。- 該循環會產生不成比例的網路請求 (2 x i+1)。
要解決第一個問題,您必須保留對最新 blockNumber 的引用:
const latest = await web3.eth.getBlockNumber()
為了減少網路請求 web3 的數量,您可以使用BatchRequests。
const batch = new web3.eth.BatchRequest() batch.add(web3.eth.getBlock.request(blockNumber, callback)) batch.execute()
請注意,為了將參數傳遞給函式,您需要使用特殊
request
方法。將它們放在一起,您可以使用以下命令檢索最後n個塊:
const latest = await web3.eth.getBlockNumber() const blockNumbers = _range(latest - n, latest + 1, 1) const batch = new web3.eth.BatchRequest() blockNumbers.forEach((blockNumber) => { batch.add( web3.eth.getBlock.request(blockNumber, storeLocalCopy) ) }) batch.execute()