Proof-of-Stake

如何查找一個塊是否已完成

  • September 28, 2022

有沒有一種簡單的方法來確定給定的區塊是否在 PoS 乙太坊中完成?

目前,我正在呼叫../eth/v1/beacon/states/finalized/finality_checkpointsBeacon 節點的端點,它為我提供了最新的最終確定 Epoch 的數量

之後,我使用返回的 Epoch 編號使用beaconcha.in https://beaconcha.in/api/v1/epoch/<epoch-number>/blocks提供的端點獲取所有塊,該端點列出了該 Epoch 中的所有塊

我做的最後一步是檢查我的塊數是否小於 Epoch 中的最低塊數。

我正在尋找一種更簡單的方法來使用庫或信標節點或執行節點或一些 API 提供程序(如 Etherscan、Infura、beaconcha.in 等)獲取該資訊……

謝謝

我找到了另一種使用最新版本的 Web3js 1.8.0 的方法。他們添加了一個名為finalized的新 BlockTag 。

var Web3 = require('web3');

async function main() {
   const blockNumberToCheck = 15625164;
   const web3 = new Web3("https://mainnet.infura.io/v3/<api-key>");
   const numberOfLatestFinalizedBlock = await web3.eth.getBlock("finalized");
   // console.log(numberOfLatestFinalizedBlock);
   if (blockNumberToCheck <= numberOfLatestFinalizedBlock.number) {
     console.log(`Block ${blockNumberToCheck} is Finalized`)
     return true
   } else {
     console.log(`Block ${blockNumberToCheck} is NOT Finalized`)
     return false
   }
 
 }
 
 // We recommend this pattern to be able to use async/await everywhere
 // and properly handle errors.
 main().catch((error) => {
   console.error(error);
   process.exitCode = 1;
 });
 

僅供參考,如果他們正在尋找 cuRL 請求,他們可以使用 Alchemy 端點這樣做:

curl https://eth-mainnet.g.alchemy.com/v2/<apiKey> -k \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": ["finalized", false], "id": 0}' 

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