レッスン5 — Solana / Anchor から Reth へ — 持ち越せるもの
問い
Solana / Anchor 開発経験者向け(経験なければスキップ可)。Rust の文法と Solana の Anchor フレームワークから、Reth スタックへ持ち越せるもの・できないもの。アカウントモデルが根本的に違うので頭の切り替えが必要。
原理(最小モデル)
- Rust 言語スキル全部持ち越し. 所有権 / 借用 / Result / async / trait / マクロ — どちらも Rust なので、言語レベルでは同じ。
- アカウントモデルが根本違い. Solana = アカウントごとフラットマップ + tx が事前に読み書きアカウント宣言、Ethereum = コントラクトごとに storage trie + 任意 SLOAD/SSTORE。
- Anchor の
#[account]macro → Solidity の storage layout. どちらも「アカウントの構造を宣言」する意図、表現は違うが概念は対応。 - Solana CPI(Cross-Program Invocation)→ Ethereum CALL/DELEGATECALL. どちらもコントラクト間呼び出し、Solana は account list 明示 / Ethereum は msg.sender + 借用パターン。
- 並列実行のメンタルモデル. Solana は静的並列(tx が read/write 集合を事前宣言)、Ethereum block-stm(楽観的並列、衝突検出 + 再実行)。両方とも Rust 並行性スキルが効く。
- Programs / Smart contracts の違い. Solana プログラムは upgrade 可能(authority 経由)、Solidity コントラクトは immutable(proxy パターンで擬似 upgrade)、設計時の前提が違う。
具体例 + ステップで組み立てる
Solana / Anchor から Reth へ — 持ち越せるもの (Solana 経験が無ければスキップ)
📌 対象。 本レッスンは Solana で ship した経験がある人向け — Anchor プログラム、Jito MEV bot、Solana プログラムのテスト、Firedancer コントリビュータ、
solana-programかanchor-langを触ったことがある人。Solana を触ったことが無いなら、Rust 環境を整える に飛んでください。本レッスンに依存する後続レッスンはありません。
多くのカリキュラムは Solidity からの移行を前提にするが、あなたは 異なるランタイムモデル上で Rust を書いてきた 立場である。本レッスンは、その経験を Reth 側へ翻訳するレイヤーである。
1. 持ち越せるもの(実はかなり多い)
Solana で苦労して身につけたスキルは、Rust EVM スタックでも価値をそのまま保ちます。
| Solana で身についたスキル | こちらでの着地 |
|---|---|
| Rust の所有権 / ライフタイム / 非同期 | 同じである。Solidity から来た人が必要とする「Rust への 3 週間」を飛ばせる。 |
| 低レベルシステムコードを読む筋力 | Reth と Revm は solana-program より密ですが、読み方の作法 は同じ — 外から内へ、トレイトの形を信じて、テストで答え合わせ。 |
| 「自分が所有しないエンジン」を扱う感覚 | Firedancer へのパッチや Jito relayer 読解経験があれば、Reth の fork モデルはすぐ読める。 |
| 並列実行への馴染み | Sealevel で並行状態操作を考えた経験は、Reth の stage パイプラインで関心事を並行実行する場面にそのまま効く。 |
cargo 周辺の手の速さ | 同じである。workspace、feature、マクロデバッグの cargo expand までそのまま使える。 |
率直に言えば、あなたの Rust スキルは EVM 側エンジニアの多くが持っていない資産 である。このカリキュラムで最も重い 中級への橋渡し の Rust モジュールも、ほぼ復習になる。
2. 構造的に違うところ
逆に、ここはモデルが本当に違う点だ。
| 概念 | Solana | Reth / EVM |
|---|---|---|
| 状態 | アカウント単位で事前宣言 (account モデル) | コントラクト単位のストレージ、slot キーの SLOAD / SSTORE で動的に |
| 並列性 | アカウント単位、ランタイムがスケジュール (Sealevel) | ブロック内は逐次。ExEx / Reth SDK で並列コンポーネントを後付けできる |
| プログラム | グローバルな 1 つのプログラムにアカウントを渡す | 各コントラクトが自分のバイトコードとストレージを持つ |
| 計算予算 | tx あたり線形なガス類似の予算 | EVM ガス、opcode ごとに非自明なコストカーブ |
| 検証 | カスタム syscall を持つ BPF VM | EOF + execution spec tests を持つ EVM |
| 署名者 | 最初から最後まで Ed25519 | 基本は secp256k1、将来は account abstraction で耐量子へ |
いちばん大きな発想転換は、ストレージがコントラクト単位であり、アカウント単位ではない 点である。Solana では状態を持つアカウントを渡すが、EVM では コントラクト自身が状態 になる。Inside Revm の Database トレイトは丁寧に読む価値があり、「どの AccountInfo に触れるか」への EVM 側の答えになっている。
たとえば、ユーザごとにカウンタを更新する Solana プログラムの等価形は、EVM では mapping(address => uint256) counter になる。コントラクトがslotキーを所有し、各ユーザのカウンタは keccak256(user_address . slot) に置かれる。Solana はユーザごとに1アカウント、EVMは全員分を1コントラクトのストレージ trie に詰める、という違いである。
3. 2 つのスタックが交わる場所 — HyperEVM、Tempo
次のチェーンは Solana 流の性能を EVM セマンティクスへ持ち込むため に作られている。Solana から移る読者にとって自然な着地点である。
- HyperEVM (Hyperliquid): HyperBFT コンセンサスを持つ Reth fork。EVM バイトコードを、Solana 出身者が期待する性能水準で execution layer が走らせる。HyperEVM を読むことは、Solana由来の性能感覚を EVM 側へ持ち込む訓練になる。
- Tempo: Stripe が支える Reth ベース決済チェーン。高スループットのステーブルコイン送金向けに設計され、Solana の決済rail経験がほぼ翻訳なしで活きる。
- MegaETH: もう1つの Reth ベース高性能チェーンで、Solana 風UXを狙う。
Solana → Reth は格下げではない。 チェーン専用ランタイムから、次世代高性能 レッスン1/レッスン2 が乗ろうとしている実行エンジンへの移籍である。Rust EVM スタックは、スキルが複利で効く場所である。
4. 具体的な文化の違い — source-first か abstraction-first か
Solana 出身者からよく出る論点はここである。
- Anchor: 抽象が厚い。フレームワークが SVM、シリアライズ、アカウント検証を隠す。
#[derive(Accounts)]を信じる場面が増え、障害時に本物のSVM挙動へ辿るまで時間がかかる。 - Firedancer / Jito: source-first。C を読み、relayer を読み、パッチを当てて再ビルドする。文化は素晴らしいけれど、参加できる範囲が狭い(Firedancer のコントリビューション窓口は事実上閉じていて、Jito はオープンだが Solana 専用)。
- Reth / Revm / Foundry: 設計段階から source-first で、しかも 開かれた コントリビューション窓口を持つ。メンテナ自身が「ここを読んでカスタムノードをshipせよ」という流れを明示し、RethLab もこの文化上に組まれている。
Anchor 抽象が不透明に感じていた人にとって、RethLab はホームに近い。Firedancer / Jito を楽しめたが応用範囲を広げたい人にとって、Rust EVM スタックはその拡大版になる。
5. あなた向けに地図を引き直すと
Rust の素地を踏まえた、流し読み・じっくり読みの目安は以下の通りである。
| セクション | 読み方の目安 |
|---|---|
| Beginner — Rust 環境を整える | 流し読み。rustup はすでに入っているはず。 |
| Fundamentals — Rust 非同期 / トレイト / ジェネリクス | 流し読み。これは持っている。 |
| Fundamentals — EVM 概念 | じっくり読む。 Solana モデルとの差が現れる場所。 |
| 中級への橋渡し — EVM をバイト単位で | じっくり読む。 dispatch loop、ガス、call frame — 全部新しい。 |
| 中級への橋渡し — ソース読みのための Rust | 流し読み。ジェネリクス、Arc、unsafe、マクロ — あなたには復習。 |
| Inside Revm / Inside Reth / Inside Alloy | じっくり読む。 ここが本題。 |
| L1 Architecture (Advanced) tier | 来た目的のひとつ。 特に Consensus と Cross-Chain Bridges。 |
| Expert + Building | アウトプット。読んだことを実装に変える。 |
6. あなたが賭けているもの
Solana のランタイムは優れているが、Solana専用である。Reth は 多くのチェーンが乗る基盤 であり、Hyperliquid、Tempo、OP-Reth、MegaETH、Berachain へ広がり続ける。Rust EVM スタックは、1チェーンではなく広い レッスン1/レッスン2 全体でスキルが複利で効く場所である。
これは Solana を貶す話ではなく、Reth を読めるエンジニアが希少で、しかも Reth に賭けるチェーンが急増している という観察である。Solana で鍛えた Rust の直感は、Solidity から移る人より早く、その希少ニッチへ到達させる。
次へ
Rust 環境を整える を飛ばして直接 Fundamentals に向かってもよい(Rustツールチェーンは既にあるはずである)。Foundry / Anvil をまだ触っていなければ、Rust 環境を整える を流し読みする手もある。どちらでも先へ進める。
まとめ(3行)
- 言語レベル(Rust)は全持ち越し、アカウントモデル(フラット vs storage trie)は頭の切り替え必須、CPI ↔ CALL / Anchor → Solidity layout 等の対応関係。
- 並列実行は Solana 静的 vs Ethereum block-stm 楽観的、両方とも Rust 並行性スキル活用、upgrade モデルも違う(Solana 可 / Solidity 擬似)。
- Solana 経験は Rust 力で 8 割持ち越し、次は Reth vs Geth / Alloy vs ethers-rs の置き換え根拠。