似たEVMコントラクトのコンパイル結果を共有して処理を削減
SkelOT: Reusing AOT Compilation Across EVM Contract Families
この論文をやさしく読む
ひとことで言うと
埋め込まれた定数だけが違う似たコントラクトを、一つの機械語コードにまとめてコンパイルする方法です。違いのある定数は実行時にコントラクト別の表から読みます。
何に役立つ?
EVMのAOT実装で、コンパイル時間と生成物の保存容量を抑える用途があります。Baseの評価コーパスでは、同じ実行結果を保ちながらコンパイル単位と容量を削減しています。
この研究の面白いところ
コード全体のハッシュ一致よりも広い、命令構造の共通性を再利用単位にしています。コンパイル費用だけでなく、実行時にも中央値1.31倍の高速化を報告しています。
どこまで分かった?
構造共有の調査は4チェーンですが、具体的な削減率と高速化の評価はBaseの1万ブロック・352万トランザクションに基づきます。実行結果の一致はこの評価の比較結果であり、あらゆるコードについての形式検証を述べたものではありません。
v1のアブストラクトに基づくAI解説。日本語訳とは別に、用途の解釈を含みます。
アブストラクトの日本語訳
Ethereum仮想マシン(EVM)向けの事前コンパイル(AOT)コンパイラ、例えばrevmc、evmone、DTVMは、コントラクトのコードハッシュ単位でコンパイル生成物を再利用する。この粒度は、コントラクト群が中心となる実際のEVMワークロードに適していない。工場型、プロキシ型、テンプレート型のデプロイでは、命令構造を共有しながら、少数の埋め込み定数だけが異なるためである。 Base、Ethereum、BSC、Arbitrumの4本のEVMチェーンで、1万ブロックの区間内にあるコンパイル可能な一意のバイトコードの23.1~47.6%が、共有されるコントラクト群の骨格に対応することを確認した。したがって、ハッシュごとのAOTは構造的に同等なコードを重複して再コンパイルし、コンパイル時間と生成物の容量を増やすとともに、限られたコンパイル予算でカバーできるワークロードを減らしている。 本研究では、コンパイル結果を再利用する単位をコードハッシュからコントラクト群の骨格へ引き上げるAOT枠組みSkelOTを提示する。SkelOTは各群につき一つのネイティブ生成物をコンパイルし、不変の定数を生成物に埋め込み、可変の定数をコントラクトごとの実行時テーブルから読み出す。revmc/LLVM上に実装し、352万トランザクションを含むBaseメインネットの1万ブロックのコーパスで評価した結果、ハッシュごとのAOTとバイト単位で同一の実行結果を保ちながら、コンパイル単位を47.5%、生成物の容量を57.4%削減し、コンパイル時間を2.19分の1に短縮する。実行時には、同じ群に属するコントラクトについて、コントラクトごとの高速化率の中央値が1.31倍となる。実行時間の75%をカバーすることを目標とするコンパイル予算の下では、SkelOTはハッシュごとのAOTよりはるかに少ない生成物で済み、この優位性はすべてのカバー率目標で成り立つ。
v1の要旨から自動生成。本文の精読・人による確認は未実施。
- 初稿
- 2026-09-21(UTC)
- 最新改訂
- 2026-09-21 · v1
- 査読・掲載
- 査読状況未確認
更新履歴
- v1 2026-09-21 この版を読む
取得できた版を表示。版の更新は査読済みを意味しません。過去版の本文差分は未解析です。
原文の要旨
Ahead-of-time (AOT) compilers (e.g., revmc, evmone, and DTVM) for the Ethereum Virtual Machine (EVM) reuse compilation artifacts at contract-code-hash granularity. This granularity is poorly matched to real EVM workloads dominated by \emph{contract families}: factory-, proxy-, and template-driven deployments that share instruction structure but differ in a small set of embedded constants. Across four EVM chains (Base, Ethereum, BSC, and Arbitrum), we find that 23.1--47.6\% of unique compilable bytecodes map to shared family skeletons within 10K-block windows. Per-hash AOT therefore redundantly recompiles structurally equivalent code, inflating compile time and artifact footprint while reducing workload coverage under finite compile budgets. We present \textsc{SkelOT}, an AOT framework that lifts the unit of compilation reuse from code hash to family skeleton. \textsc{SkelOT} compiles one native artifact per family, bakes invariant constants into the artifact, and reads variant constants from a per-contract runtime table. Built on revmc/LLVM and evaluated on a 10K-block Base mainnet corpus (3.52M transactions), \textsc{SkelOT} reduces compilation units by 47.5\%, artifact footprint by 57.4\%, and compile time by $2.19\times$, while preserving byte-identical execution outcomes versus per-hash AOT. At runtime, \textsc{SkelOT} delivers a $1.31\times$ median per-contract speedup across family members. Under a compile budget targeting 75\% execution-time coverage, \textsc{SkelOT} needs far fewer artifacts than per-hash AOT, and the advantage holds at every coverage target.
著者のコメント
Accepted by EuroSys'27
arXiv ID: 2609.24404 / 要約の誤りについて