🤖

Devモードで立ち上げたgeth(go-ethereum)にBlockscout(explorer)を繋げる

2024/10/07に公開

さて、前回の続きです。
https://zenn.dev/mkurita/articles/de3ffaf6f850cb
ノードを立ち上げたのでexplorerで表示してみます。

ツール

今回はBlockscoutと呼ばれるOpen sourceのexplorerを使います。
https://docs.blockscout.com/

clone & build up

https://docs.blockscout.com/setup/deployment/docker-compose-deployment
コレに沿って立ち上げてみます。

clone

git clone git@github.com:blockscout/blockscout.git
cd blockscout/docker-compose

portのマッピング

一つ修正します。
docker-compose.yml

  frontend:
    depends_on:
      - backend
    extends:
      file: ./services/frontend.yml
      service: frontend
    ports:
      - "3000:3000"

build & up

結構時間かかります。

docker-compose up --build

or

docker compose up --build

立ち上がりますが、これだとコネクションエラーがでるのでgethの立ち上げ方を変更します。

backend           | {"time":"2024-10-06T05:46:56.032Z","severity":"error","message":"connection_refused","metadata":{"fetcher":"pending_transaction"}}

gethの立ち上げ(devモード)

apiにtxpool,debugを追加しBlockscoutがトランザクションを追跡できるようにします。

 ./build/bin/geth --dev --http --http.addr "0.0.0.0" --http.port 8545 --http.api eth,web3,net,txpool,debug --http.corsdomain "*" --ws --ws.port 8546 --http.vhosts="*" --verbosity 4
txpool

Ethereumノード内で保留中のトランザクションにアクセスするためのAPIです。トランザクションプールは、まだブロックに含まれていないトランザクションを管理します。

以下のようなコマンドがあります:

  • txpool.content
    トランザクションプール内の全トランザクションを表示します。pending(保留中)とqueued(キューに入っている)トランザクションに分類されます。

  • txpool.inspect
    トランザクションプール内のトランザクションを見やすく表示します。アカウントごとに分類して、各トランザクションの詳細を確認できます。

  • txpool.status
    トランザクションプールのステータスを確認します。保留中とキューに入っているトランザクションの数を示します。

debug

Ethereumノードやスマートコントラクトの動作を詳細に調査するためのAPIです。特に開発者やノードオペレーターがトラブルシューティングやパフォーマンス解析を行う際に使われます。

主なコマンドには次のようなものがあります:

  • debug.traceTransaction
    指定したトランザクションの実行経過を詳細に表示します。ガスの使用状況や、実行されたオペコード、エラーの有無などを確認できます。

  • debug.traceBlockByNumber
    指定したブロック番号に対応するブロック内のすべてのトランザクションの実行経過を表示します。

  • debug.storageRangeAt
    特定のトランザクション実行時点でのストレージスロットの状態を取得します。これにより、スマートコントラクトの内部状態を分析することが可能です。

  • debug.setHead
    ブロックチェーンの進行を任意のブロック番号まで巻き戻します。このコマンドはテストやデバッグに役立ちます。

  • debug.getBadBlocks
    不正なブロックの情報を取得します。この情報は、ブロックが拒否された理由などを含みます。

※eth,web3,netは前の記事を参照。

Blockscoutの確認

上記でgethを立ち上げ直しBlockscoutのログを見ると同期できていることがわかります。

backend           | {"time":"2024-10-06T05:51:26.227Z","severity":"info","message":"Start sanitizing of empty blocks. Batch size is 100","metadata":{"fetcher":"empty_blocks_to_refetch"}}
backend           | {"time":"2024-10-06T05:51:26.240Z","severity":"info","message":"Batch of empty blocks is sanitized","metadata":{"fetcher":"empty_blocks_to_refetch"}}
backend           | {"time":"2024-10-06T05:51:27.212Z","severity":"info","message":"URL \"http://host.docker.internal:8545/\" is available now","metadata":{}}
backend           | {"time":"2024-10-06T05:51:30.233Z","severity":"info","message":"Index already caught up.","metadata":{"fetcher":"block_catchup","last_block_number":null,"first_block_number":null,"missing_block_count":0,"shrunk":false}}
backend           | {"time":"2024-10-06T05:51:30.233Z","severity":"info","message":"Checking if index needs to catch up in 25000ms.","metadata":{"fetcher":"block_catchup"}}
backend           | {"time":"2024-10-06T05:51:36.241Z","severity":"info","message":"Start sanitizing of empty blocks. Batch size is 100","metadata":{"fetcher":"empty_blocks_to_refetch"}}
backend           | {"time":"2024-10-06T05:51:36.309Z","severity":"info","message":"Batch of empty blocks is sanitized","metadata":{"fetcher":"empty_blocks_to_refetch"}}

ローカルのフロントエンドにアクセスしてみます。
http://localhost:3000/txs

確認できたので問題なさそうです。

最後に

一部のコンテナが立ち上がってないのですが動きました。。

詳細は別途調べようと思います。

https://delt.co.jp/article

Discussion