Ethereumの実行レイヤー仕様をPythonで読む・動かす公式リファレンス実装「EELS」

タグ EthereumEELSPythonハードフォークEIP実行レイヤークライアント開発テストフィクスチャcolumnコラムlinuxLinuxwindowsWindowsGitHubオープンソースethereumexecution-specs
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

Ethereumの実行レイヤー仕様をPythonで読む・動かす公式リファレンス実装「EELS」

ひとことでいうと

EELS(イールズ)は、Ethereum財団のSTEELチームが開発・管理する「動くPythonコード」として書かれた、Ethereumの公式仕様書です。むずかしい数式だらけの論文を読まなくても、Pythonのコードを読むだけでEthereumの内部ルールを正確に理解できます。トランザクション(送金や契約の実行)の処理方法・ガス(手数料)の計算・状態の更新といった仕組みが、すべてPythonコードで記述されています。歴史的な最初のバージョン(Frontier)から最新のアップグレード(Pectra)まで、すべてのハードフォーク(プロトコルの大型更新)の仕様が一か所にまとまっている、業界唯一の権威ある一次資料です。


こんな人におすすめ

Ethereumクライアントを開発・テストしたい人 geth・reth・besuなど、Ethereumネットワークに接続する「クライアントソフト」を開発しているエンジニアに最適です。EELSが生成するテスト用データ(フィクスチャ)は、自分の実装が仕様どおりに動くか確認するための業界標準のテストセットとして使われています。

新しいEIPをコードで提案・議論したい人 EIP(Ethereum Improvement Proposal:Ethereumの改善提案書)を提出するとき、Pythonの動くコードとして実装をEELSに組み込むことで、他の開発者がコードを実際に動かして仕様の正確さを検討できます。言葉だけの議論より格段に具体的なレビューが可能になります。

Ethereumのしくみを深く学びたいエンジニア・学生 公式の黄色い論文(Yellow Paper)は数式が多く取っつきにくいですが、EELSなら同じ内容をPythonコードで読めます。ハードフォークごとの変更もコードの差分として追えるため、「Ethereumがどのように進化してきたか」を体系的に学ぶ教材としても優れています。


インストール・使い方

EELSは uv(高速なPythonパッケージマネージャー)と just(タスクランナー=よく使うコマンドをひとことで実行できる道具)を使って管理されています。Python 3.11〜3.14をサポートしており、Python 3.12が最も安定した動作環境として推奨されています。

以下の手順はターミナル(文字を入力してコンピュータに命令を送る画面)で行います。コマンドはすべてコピー&ペーストで実行できます。


Step 1: リポジトリをダウンロードして uv をインストールする

git clone https://github.com/ethereum/execution-specs
cd execution-specs
curl -LsSf https://astral.sh/uv/install.sh | sh

git clone はリポジトリ(ソースコードの置き場)をパソコンにコピーするコマンドです。次の行で作成されたフォルダに移動し、最後の行で uv というPython管理ツールをインストールします。


Step 2: Python 3.12 の環境と依存パッケージをセットアップする

uv python install 3.12
uv python pin 3.12
uv sync

uv python install 3.12 でPython 3.12をインストールし、uv python pin 3.12 でこのプロジェクトでは3.12を使うと固定します。uv sync はプロジェクトに必要なすべてのライブラリを自動で揃えます。


Step 3: just をインストールしてシェル補完を設定する

uv tool install --exclude-newer "10 days" rust-just
just shell-completions

just はよく使う作業コマンドをまとめた「レシピ帳」のようなツールです。インストール後に just shell-completions を実行すると、タブキーでコマンドを補完できるようになります。


Step 4: テストを実行して動作を確認する

just test

テストが通れば、環境のセットアップは完了です。just lint(コードのスタイルチェック)・just docs(ドキュメントの生成)・just fixtures(テスト用データの生成)といったコマンドも同じように使えます。


動かしてみた

Dockerコンテナ(隔離された仮想環境)上で動作を確認したところ、Pythonのバージョンが次のように表示されました。

Python 3.12.13

EELSが推奨するPython 3.12系が正しく利用できる状態です。リポジトリには CLAUDE.md も含まれており、Claude Codeとの統合を前提にした開発フローが整備されていることも確認できました。

ファイル構成を眺めると、pyproject.tomluv.locktox.iniJustfile といったモダンなPythonプロジェクトで標準的なファイルが揃っています。docs/ 配下にはMkDocs(MarkdownからWebページを自動生成するツール)で管理されるドキュメント群が配置されており、src/ethereum/ 以下では各ハードフォークがディレクトリ単位に整理されていました。たとえば frontier/homestead/istanbul/london/cancun/ のように、Ethereumの歴史の順番でフォルダが並んでいます。各フォルダ内の state_transition.pytransactions.py を開くと、トランザクション処理の全体像がすぐに把握できる構造になっています。


デモ・ブラウザで確認する

Ethereumの歴代ハードフォーク一覧と各フォークの概要は、EELSが生成するドキュメントサイトからブラウザ上でインタラクティブに確認できます。just docs を実行すると手元にドキュメントが生成され、各フォークのAPIリファレンスやモジュール構成をWebページとして閲覧できます。ネットワーク越しに試したい場合は、生成されたHTMLをローカルサーバーで配信するだけで動作します。


実践:はじめの一歩

EELSを初めて触るときは、次のポイントを順番に試すとスムーズに全体像をつかめます。

  • まずフォルダ構造を眺める: src/ethereum/ 以下のディレクトリ一覧を確認し、どのハードフォークがどのフォルダに対応しているかを把握する。
  • state_transition.py を読む: 各ハードフォークのフォルダにある state_transition.py を開くと、ブロックの処理から状態の更新まで一本の流れで追える。最初は frontier/ の最もシンプルなものから読むのがおすすめ。
  • just test から始める: いきなりコードを変更するより、まずテストを通してみることで「どこが何をテストしているか」の構造がわかる。
  • コントリビュートの前に必読: CONTRIBUTING.mddocs/getting_started/code_standards.md を先に読んでおくと、コードスタイルやPR(プルリクエスト)のルールが把握でき、レビューがスムーズになる。
  • EIPを提案したいなら: まず Ethereum Magicians で議論し、ethereum/EIPs リポジトリへのPRを作ってからEELSへの実装という流れが一般的。
  • 差分比較ツールを活用: ethereum_spec_tools に含まれる差分比較ツールを使うと、ハードフォーク間の仕様変更をコードレベルで素早く把握できる。

用語とポイント解説

EELS(Ethereum Execution Layer Specifications) かんたんに言うと、Ethereumの「動くルールブック」です。普通の仕様書は読むだけですが、EELSは実際に動かせるPythonコードとして書かれているのが最大の特徴です。財団の公式チームが継続的にメンテナンスしています。

ハードフォーク かんたんに言うと、Ethereumのプロトコル(通信ルール)を大きく変更する「メジャーアップデート」のことです。過去のバージョンとの互換性がなくなるため、全ノードが同時にアップデートする必要があります。FrontierからPectraまで十数回おこなわれています。

EIP(Ethereum Improvement Proposal) かんたんに言うと、Ethereumを改善するための「提案書」です。誰でも書いて提出でき、議論・レビューを経て採用されるとハードフォークに組み込まれます。ERC-20やERC-721もEIPの一種です。

テストフィクスチャ かんたんに言うと、「正解データ入りのテスト問題集」です。入力となるブロックデータと、そのときに期待される出力(状態・残高など)がJSON形式でセットになっており、各クライアントはこれに通ることで実装の正しさを証明します。

uv(ユーブイ) かんたんに言うと、Pythonのパッケージ(追加機能のセット)をすばやくインストール・管理するツールです。従来の pip より数十倍速いとされており、仮想環境の管理も一括でおこないます。

just(ジャスト) かんたんに言うと、よく使うコマンドに短い名前をつけて呼び出せる「タスクランナー」です。just test と打つだけで長いテストコマンド一式が走るため、手順を覚える必要がなくなります。

状態遷移(ステートトランジション) かんたんに言うと、あるトランザクションが処理されることで「Ethereumの世界の状態(残高・コントラクトの記憶など)がどう変わるか」を記述したルールです。EELSの中心的なロジックで、state_transition.py に実装されています。

MkDocs かんたんに言うと、Markdownファイル(見やすく整形できるテキスト形式)からWebサイトを自動生成するツールです。EELSのドキュメントはこれで管理されており、just docs を実行するとHTMLサイトとして手元に生成されます。

コンセンサスクリティカル かんたんに言うと、「全ノードが完全に一致していなければならない処理」という意味です。EthereumはP2Pネットワーク上で多数のノードが同じ計算をおこなって合意(コンセンサス)をとる仕組みのため、1バイトでも結果が異なると分岐してしまいます。


活用例

  • クライアント実装の検証: geth・reth・besuなどの開発チームが just fixtures で生成したテストフィクスチャを自分たちのクライアントに流し込み、仕様どおりに動くかどうかを継続的にチェックする。
  • EIPのコードレベルレビュー: 新しいプロトコル変更案をEELSにPythonコードで実装してPRを送ることで、AllCoreDevs(全コアデベロッパー会議)や各クライアントチームが実際に動かしながら仕様を検討できる。Pectraなど最新アップグレードもこのプロセスを経て策定されている。
  • 大学・研究機関での教材: Yellow Paperの数式と並べてEELSのコードを読む授業スタイルで、ブロックチェーン工学の講義や研究グループでの勉強会に活用されている。
  • 差分比較で変更点の把握: ethereum_spec_tools の差分比較機能を使い、たとえば「LondonとArrowGlacierのガス計算のどこが変わったか」をコードレベルで即座に確認する。監査やセキュリティレビューにも有効。
  • 個人学習・ポートフォリオ: Ethereumのトランザクション処理を自分でトレースするスクリプトをEELSの上に書き、学習成果としてGitHubに公開するといった個人開発への応用。
  • ウォレット・ツール開発の動作確認: 独自のウォレットやデコーダーツールを作る際、EELSのコードを「仕様の答え合わせ」として参照し、実装の隅々まで正確性を担保する。

まとめ

EELSは「仕様書」と「実装」の橋渡しをする、Ethereumエコシステム唯一のプロジェクトです。複数のクライアント実装が並立するEthereumにおいて、すべての実装が同じルールで動くことを保証する「共通のものさし」の役割を果たしています。Ethereum財団のSTEELチームが継続的にメンテナンスしており、最新のハードフォークにもつねに追従しています。プロトコルの深い部分に踏み込みたいエンジニアにとって、最も権威ある第一次資料の一つです。ぜひEthereumクライアントの実装検証や、新しいEIPのコードレベルでの議論・学習などに活用してみてはいかがでしょうか。