アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

infura.ioを使ってBeacon Chain(ETH2.0)からBlockの情報を取得する

今回はBeacon Chainのblock情報をinfura.ioを使って取得する方法について記事にする。

twitterで話題になっている、reorgについて何が起きてるのかを調べるためにblockの情報を見てみたいなぁと思ったのがきっかけである。

なお、自前でnodeを立てるのは少し大変なので、infura.ioを使ってBeacon ChainのBlock情報などを取得する。
しかしながら、infura.ioを使ってBeacon Chainの情報を取得する方法をまとめた記事が少し調べただけだと見つからなかったので、今回記事として残しておこうと思った。

Clientツール

今回はBeacon Chainから情報を取得する方法を簡単に調査する程度なので、infura.ioへのアクセスにはPostmanを利用する。
www.postman.com

infura.ioでETH2.0のプロジェクトを作成

infura.ioでアカウントの作成の仕方などは他の記事に譲る。本記事ではアカウントを既に持っていることを前提とする。

infura.ioにログインして、右上の「Create New Project」から新規のプロジェクトを作成する。この時に、PRODUCTに「ETH2.0」を選択すると、Beacon Chain(ETH2.0)の情報にアクセスできるendpointが発行される。

create project

Projectが作成されたら、ProjectIDやSecret KeyそれからEndpointが表示されるので、https://〜から始まるendpointをコピーする。

copy endpoint

Beacon ChainのREST API

Eth1.0ではnodeから情報を取得するときはJSON-RPCでリクエストする必要があったが、Beacon ChainではRESTful APIでリクエストする。
利用可能なREST APIは以下のページで紹介されている。
docs.infura.io

より詳しい使い方は、infura.ioが利用しているnode clientのTEKUのページを参照すると良い。
consensys.github.io

genesisデータを取得

genesisブロックの情報を取得するには、'eth/v1/beacon/genesis'にGETリクエストする。
以下のようにjson形式でgenesisの情報が取得できる。

get genesis

blockの情報を取得

同様に、blockの情報を取得したい場合は、'/eth/v2/beacon/blocks/:block_id'にGETリクエストする。:block_idの部分は任意の取得したいblock numuber(=slot number)を入れる。

3,887,074のブロックを取得した結果は以下の通りとなる。

get block


なお、blockの生成に失敗したものは取得できない。例えば、今回話題になった3,887,075ブロックを取得すると以下の結果となる。

faild block

explorerでfailedになったblockの情報が表示されないのはこれの所為か。。