Reth の NodeBuilder
NodeBuilder は、Reth ベースのチェーンをバイナリにする仕組みです。NodeConfig(ChainSpec を含む)、データベース、タスク実行環境を受け取り、続いてノードの型とコンポーネント(プール・ネットワーク・payload builder・EVM・コンセンサス)と RPC などのアドオンを受け取って、ノードを起動します。
コンポーネントの各スロットが、独自チェーンが Reth と違う部分になります。コンセンサス・EVM 設定・payload builder を差し替え、残りは Reth のまま使います。
API の早見表
NodeConfig::new(chain) / NodeConfig::test().dev().with_chain(spec)- ノードの設定(chain spec・datadir・RPC・ネットワーク・dev モード)です。with_chain・with_rpc・with_datadir_args で各部を設定します。
NodeBuilder::new(config).with_database(db).with_launch_context(executor)- データベースとタスク実行環境を渡します。テストでは testing_node(executor)(feature test-utils)が一時データベースで両方を済ませます。
.node(EthereumNode::default())- 既製のノードから型・コンポーネント・アドオンを一度に受け取ります。
.with_types::<N>().with_components(…).with_add_ons(…)- 同じ手順を 1 つずつ行う書き方で、コンポーネントを 1 つだけ(コンセンサス・EVM・payload builder)差し替えられます。
.install_exex(id, f) / .extend_rpc_modules(f) / .on_node_started(f)- 起動前に付けるフックです。Execution Extension、追加の RPC 名前空間、ノードが動き出したときのコールバック。
.launch().await → NodeHandle { node, node_exit_future }- ノードを起動します。node から provider・プール・ネットワークと、アドオンのハンドル経由で RPC レジストリを取り出せ、node_exit_future を await すると終了まで動き続けます。
paradigmxyz/reth の eb4c15e(2026-04-07)で確認: crates/node/builder/src/builder/mod.rs, crates/node/builder/src/handle.rs, crates/node/builder/src/node.rs, crates/node/core/src/node_config.rs
このトピックのレッスン
Reth(~600 crate のツリー)と Malachite を同じ workspace に同居させたとき、依存が衝突せず両方が同じ tokio runtime で boot するか? そして、integratio…
カスタム Consensus 実装がある(前モジュールで書いた)。Malachite か自前エンジンが票を駆動する。この 2 つはどうやって動くノードになるのか? 答え: NodeBuilder 上で 1 つのビルダー…
precompile が「コンパイルできる」だけでなく「EVM 実行から 到達可能」であることを、どう証明するか? そしてテストをどう構成すれば、失敗時にどの層のバグか即わかるか?
unit test 47 個は各部品を単独で証明した。だが「実際の Reth ノード上で bridge と precompile が 同じ Book / Fill バッファを共有する」ことは未証明。NodeBuilde…