本文へ移動
← 全コースを見る
Reth トピック

Reth の Execution Extensions(ExEx)

Execution Extension(ExEx)は Reth ノードの中で動く future です。正規チェーンへの変更(commit・reorg・revert)をすべて受け取り、どこまで処理したかをノードに伝えます。インデクサ・ロールアップ・MEV ツールが、RPC をポーリングせずにチェーンを追うために使います。

ビルダーで install_exex(id, |ctx| async move { Ok(my_exex(ctx)) }) として組み込みます。2 段構えで、クロージャは ExExContext を受け取って初期化用の future を返し、それが ExEx 本体の future を eyre::Result で包んで返します。ノードはその本体(eyre::Result<()> を返す future)を実行します。

API の早見表

ctx.head: BlockNumHash
ノード起動時のチェーンの head です。
ctx.config: NodeConfig<<Node::Types as NodeTypes>::ChainSpec>
ノードの設定で、型はノードの chain spec によります(Ethereum ノードでは NodeConfig<ChainSpec>)。ctx.config.datadir() でそのチェーンのデータディレクトリを解決できるので、ExEx は自分の状態をノードの隣に置けます。
ctx.notifications: ExExNotifications
ExExNotification::ChainCommitted { new }・ChainReorged { old, new }・ChainReverted { old } のストリームです。committed_chain() は適用するチェーン、reverted_chain() は取り消すチェーンを返します。
ctx.events.send(ExExEvent::FinishedHeight(num_hash))
ExEx が処理し終えた最も高いブロックを伝えます。Reth はそれより前のブロックを削除してよくなるので、忘れてよくなったブロックについてだけ送ります。reorg では高さが下がることがあります。
ctx.notifications.set_with_head(ExExHead { block })
ストリームをノードの head ではなく ExEx 自身の head の次から始めます。ExEx がブロック 10 まで処理済みなら、最初の通知はブロック 11 です。ノードを再同期せずに、再起動後の ExEx を追いつかせる方法です。

paradigmxyz/reth の eb4c15e(2026-04-07)で確認: crates/exex/exex/src/context.rs, crates/exex/exex/src/notifications.rs, crates/exex/exex/src/event.rs, crates/exex/types/src/notification.rs, crates/exex/types/src/head.rs, crates/node/builder/src/builder/mod.rs

このトピックのレッスン

Inside Reth
ExEx API をステップで組み立てる

ExEx(Execution Extension)= Reth が提供する「実行ループに Rust コードを注入する」仕組み。ノード速度のインデクサ・MEV ボット・リアルタイムリスクエンジンを チェーン本体と同じプロ…

Inside Reth
最小 ExEx を 1 行ずつ読む

動く ExEx は Rust 約 40 行で書ける。Reth を fork せず、別プロセスを立てず、ノードビルダーに渡す関数 1 つ — その各行が前レッスンの組み立てステップにどう対応するか?

Inside Reth
ドリル: reorg-safe なインデクサを作る

読むのはリハーサル、実装するのが記憶。reorg を正しく乗り越える HashMap インデクサを書く。holesky で reorg を実際に観測、tx_count の不変条件を保つには?

Inside Reth
Stage と ExEx のテスト — fixture chain・インプロセスノード・golden state

Stage トレイト・ExEx API・NodeBuilder SDK を歩いてきた。Reth と Reth を拡張するアプリは、これらの動作をどう検証しているか? dev で「動いて見える」コンポーネントは本番で何千…

Reth Expert
本番 MEV(Mempool・ExEx・シミュレーション)

ペンディング tx が mempool に届く。80 ミリ秒後、あなたのバンドルは当たったか外れたか — 同じ tx を 5ms 速くデコードし、結果を 10ms 速くシミュレーションし、ビルダーに 2ms 先に提出し…