メインコンテンツへスキップ
ブロックチェーンMar 28, 2026

Deep EVM #8:純粋なYulでのトークンスワップ構築

OS
Open Soft Team

Engineering Team

理論から実践へ

過去7つの記事で、EVMの包括的な理解を構築しました:オペコードとスタックマシン、メモリモデル、ガスメカニクス、セキュリティプリミティブ、Yul構文、メモリ管理、ループ最適化。今回はすべてをまとめます。

コントラクト:SimpleSwap

コントラクトは1つのことを行います:Uniswap V2ペアを通じて正確な量のトークンAをトークンBにスワップ。2つの関数を公開:

  • swap(address pair, address tokenIn, uint256 amountIn, uint256 amountOutMin, address to) — スワップ実行
  • owner() — コントラクトオーナーを返す

Solidityバージョン(参照)

クリーンで読みやすいSolidityの参照実装を示した後、Yulバージョンを構築します。

純粋なYulバージョン

純粋なYulバージョンでは:

  • コンストラクタ:オーナーをスロット0に保存
  • 関数セレクタの抽出とswitch文によるルーティング
  • アクセス制御:オーナーのみ
  • Calldataパース:アドレスの20バイトマスク
  • ERC20 transfer:非標準トークン(USDT)対応
  • getReserves()呼び出し
  • token0()呼び出しでスワップ方向決定
  • Uniswap V2公式による出力量計算
  • スリッページチェック
  • スワップ実行とリバートデータフォワーディング

行ごとのガス比較

カテゴリ節約
関数ディスパッチ39ガス
アクセス制御105ガス
ERC-20転送240ガス
getReserves呼び出し189ガス
token0呼び出し~120ガス
算術142ガス
スワップ呼び出し275ガス
デプロイメントサイズ~60%小さいバイトコード
合計ランタイム節約~1,110ガス

典型的なUniswap V2スワップ(約110,000ガス)で1,110ガスの節約は約1%の改善です。しかし、1日に数千回のスワップを実行するMEVボットの場合:

1,110ガス * 30 gwei * $3,000/ETH = $0.0999/スワップ
$0.0999 * 1,000スワップ/日 = $99.90/日
$99.90 * 365 = $36,463/年

デプロイメントコスト

メトリクスSolidityYul
ランタイムバイトコード~1,200バイト~480バイト
デプロイメントガス~240,000~96,000
節約60%小さく、60%安い

純粋なYulコントラクトのセキュリティ考慮事項

  1. すべてのcalldataを検証 — アドレスを20バイトにマスク
  2. すべての戻り値をチェック
  3. 非標準トークンを処理
  4. リエントランシーガードを手動実装
  5. 算術オーバーフロー — Yulはチェックしない
  6. メモリ破損 — メモリレイアウトを慎重に追跡

シリーズのまとめ

このシリーズの主なポイント:

  1. EVMは256ビットワードのスタックマシン
  2. ストレージは高価 — 新規エントリに20000ガス、コールド読み取りに2100
  3. ガス最適化はアーキテクチャ的 — ストレージパッキング、calldata > メモリ、アクセスリスト
  4. セキュリティは実行フローの理解から — CEIパターン、リエントランシーガード
  5. Yulはオペコードレベルの制御を読みやすい構文で提供
  6. メモリ管理は手動 — フリーメモリポインタ、スクラッチスペース
  7. ループはすべてを乗算 — まずループ本体を最適化
  8. 純粋なYulは最適化されたSolidityより1-5%のガス節約

EVMはシンプルなマシンです。そのルールをマスターすれば、オンチェーン計算をマスターできます。