Web3js

如何通過 web3.js 獲取最近 10 個區塊的數據?

  • January 19, 2022

如何像大多數區塊瀏覽器一樣使用 web3.js 獲取最新的 10 個區塊數據?

接受的答案有幾個問題:

  1. 正如@Lam-Le 提到的那樣,.getBlock()並且.getBlockNumber()都是非同步的,因此如果在循環期間創建了一個新塊,您不僅將不再獲得“最新”塊,而且還會有重複塊。
  2. 該循環會產生不成比例的網路請求 (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()

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