レッスン0 — Inside Revm へようこそ
問い
これは RethLab の 3 つの独立した中級ティアコースの 1 つ。Revm は Rust 製 EVM クライアントすべての 実行エンジン。Reth・Hyperliquid の HyperEVM・Berachain の bera-reth・Tempo — 「うちは Revm を使う」と言うチェーンは全部同じ Opcode ループ・ガス会計・状態読み出しを走らせている。どこから始め、何を前提に読むか?
注: このコースのコード断片は「実行可能な最小例」と「構造説明のための概念スニペット(
...を含む)」が混在する。...を含むものはそのまま実行する用途ではない。
原理(最小モデル)
- 3 中級コース: Inside Revm(ここ)/ Inside Reth(Staged Sync・ExEx・SDK)/ Inside Alloy(Provider・Network・Signer)。受講順は自由、Revm が一番下層なので推奨スタート。
- 3 トピックチェーン構造:
addOpcode + マクロ / 命令ディスパッチテーブル + カスタム Opcode /Databaseトレイト。各々 buildup → walkthrough → quiz → drill の 4 連。 - 追加 3 レッスン: テスト(state test / EOF / execution-spec)+ 並列実行(block-stm)+ JIT/AOT(revmc)。
- 読み方: 別タブで
bluealloy/revmを開き、レッスンで主張する全ソース箇所を実ファイルで照合。「読んでうなずいた」を信用しない、ドリルで証明する。 - 前提知識: EVM 内部(バイトコード dispatch loop、stack/memory/calldata/storage、cold/warm gas (EIP-2929)、CALL/DELEGATECALL/STATICCALL)+ 中級 Rust(generics + trait bounds、
?Sized、dyn Trait、Arc<T>、unsafe、macro_rules!)。
具体例
このコースで触る revm ソース:
// 1. crates/interpreter/src/instructions/arithmetic.rs (L1-L4)
pub fn add<IT: ITy, H: ?Sized>(context: Ictx<'_, H, IT>) -> Result {
popn_top!([op1], op2, context.interpreter);
*op2 = op1.wrapping_add(*op2);
Ok(())
}
// 2. crates/interpreter/src/instructions.rs (L5-L8)
const fn instruction_table_impl<WIRE: InterpreterTypes, H: Host>() -> InstructionTable<WIRE, H> {
let mut table = [Instruction::unknown(); 256];
table[ADD as usize] = Instruction::new(arithmetic::add);
// ...
}
// 3. crates/database-interface/src/lib.rs (L9-L12)
#[auto_impl(&mut, Box)]
pub trait Database {
type Error: DBErrorMarker;
fn basic(&mut self, address: Address) -> Result<Option<AccountInfo>, Self::Error>;
fn code_by_hash(&mut self, code_hash: B256) -> Result<Bytecode, Self::Error>;
fn storage(&mut self, address: Address, index: StorageKey) -> Result<StorageValue, Self::Error>;
fn block_hash(&mut self, number: u64) -> Result<B256, Self::Error>;
}
3 トピック、各 ~10 行のソース、それぞれ buildup + walkthrough + quiz + drill で計 12 レッスン。終わりにホットパス全行を読み、各ピースが何をしているか自分の言葉で説明できる。
セットアップ — 一度だけ
レッスン 1 の前に、別ウィンドウで:
git clone https://github.com/bluealloy/revmrustc --versionでモダンなツールチェーン確認cargo install cargo-expand(Expert の手続きマクロで欲しい)- セカンドモニタか分割端末でソース参照
「Find in repo」プロンプトはリポを実際に開いていなければ機能しない。
失敗例(誤解)
「Revm = フルクライアント」— 間違い。Revm は 実行エンジンのみ、状態は持たない。状態は Database トレイト経由で外部供給される(L9-L12 で組み立てる)。Reth / Hyperliquid / Tempo は revm をラップして P2P + DB + コンセンサスを足す。
「Inside Reth から先に読むべき」— 間違いではないが、Revm が一番下層(Reth は revm の型を使う、Alloy も revm の primitive を使う)。Reth から始めても OK だが、Revm が固まってから Reth に戻ったほうが「なぜこの型なのか」が腑に落ちる。
「読むだけで身に付く」— 致命的。各トピックチェーンの 4 番目(ドリル)が「読んだことを本当に解いた証明」。読んでうなずく → 1 日後に再現できない、が中級を壊す失敗モード。ドリルは飛ばさない。
ステップで組み立てる
Step 1: セットアップを完了
revm clone + ツールチェーン + cargo-expand + 2 モニタ。これがないと「Find in repo」プロンプトが機能しない。
Step 2: トピック 1(add Opcode)— L1 → L4
buildup → walkthrough → quiz → drill。add を素朴版から本物まで 5 ステップで積み上げ、マクロ popn_top! を読み、進行をゲートするクイズ、最後にコンセンサスをわざと壊して直すドリル。
Step 3: トピック 2(命令ディスパッチテーブル)— L5 → L8
256 スロット const テーブルを組み立て、カスタム Opcode を 3 行で配線、3 注意点(コンセンサス互換 / ガス価格 / 検証性)を学び、ドリルでフォークを出荷。
Step 4: トピック 3(Database トレイト)— L9 → L12
4 メソッド + 関連型 + auto_impl を組み立て、仲間トレイト(DatabaseRef / DatabaseCommit)と 3 本番実装を読み、ドリルで ZeroDb を実装して revm の状態読みを観察。
Step 5: 追加 3 レッスン — L13 → L15
テスト(state test / EOF / execution-spec)+ 並列実行(block-stm)+ JIT/AOT(revmc)。コンセンサスクリティカルなテスト規律 + 性能フロンティア。
Step 6: ファイナルクイズ — L16
3 トピックチェーンの構造的事実を確認。3 中級コース(Revm・Reth・Alloy)完走に向けたゲート。
答え合わせ
- Revm を 1 番下層に置く理由: Reth は revm の型(
Address・U256・B256・Databaseトレイト)を前提に組まれる、Alloy も revm の primitive を使う → Revm の型システムは Rust EVM スタック全体の語彙の土台。Revm を固めてから Reth に行くと「なぜこの型なのか」が腑に落ちる。 - ドリル必須の理由: 中級を壊す失敗モード = 「読んでうなずいた」を 1 日後に再現できない。各トピック 4 番目(ドリル)が「本当に解いた証明」 = 別端末で revm に手を入れ、テストを走らせ、出力を読み、観測したことを書き留める = 記憶への定着。
- 追加 3 レッスンの位置づけ: コア(L1-L12)は revm のホットパス読み。L13-L15 は「revm をどう信頼するか(テスト)+ スループットの先(並列 + JIT)」 = コア以後の世界を覗く窓。
合格基準
- 3 中級コース(Revm・Reth・Alloy)の関係と受講順自由を即答できる。
- 3 トピックチェーン構造(add / dispatch / Database)+ 各 4 連(buildup → walkthrough → quiz → drill)を言える。
- セットアップ 4 項目(revm clone + ツールチェーン + cargo-expand + 2 モニタ)を即答できる。
- 中級を壊す失敗モード(読みうなずき → 再現不能)とドリル必須の理由を 1 文で説明できる。
- 前提知識(EVM 内部 5 項目 + 中級 Rust 4 項目)を即答できる。
まとめ(3行)
- Inside Revm = RethLab 3 中級コースの 1 つ、Revm は Rust EVM スタックの実行エンジン(Reth / Hyperliquid / Tempo 等全部同じソースを走らせる)。
- 3 トピックチェーン(add Opcode + マクロ / 命令ディスパッチテーブル + カスタム Opcode / Database トレイト)各 buildup → walkthrough → quiz → drill の 4 連 + テスト + 並列 + JIT/AOT + 最終クイズ = 17 レッスン。
- セットアップ 4 項目(revm clone + ツールチェーン + cargo-expand + 2 モニタ)必須、ドリルは飛ばさない、読みうなずきを信用しない。