[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-8-jun-yul-token-swap-kouchiku":3},{"article":4,"author":58},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":38,"related_articles":39},"d4000000-0000-0000-0000-000000000108","a0000000-0000-0000-0000-000000000042","Deep EVM #8：純粋なYulでのトークンスワップ構築","deep-evm-8-jun-yul-token-swap-kouchiku","純粋なYulで完全なUniswap V2トークンスワップコントラクトを構築：calldataパース、外部コール、リターンデータ処理、Solidityとの行ごとのガス比較。","## 理論から実践へ\n\n過去7つの記事で、EVMの包括的な理解を構築しました：オペコードとスタックマシン、メモリモデル、ガスメカニクス、セキュリティプリミティブ、Yul構文、メモリ管理、ループ最適化。今回はすべてをまとめます。\n\n## コントラクト：SimpleSwap\n\nコントラクトは1つのことを行います：Uniswap V2ペアを通じて正確な量のトークンAをトークンBにスワップ。2つの関数を公開：\n\n- `swap(address pair, address tokenIn, uint256 amountIn, uint256 amountOutMin, address to)` — スワップ実行\n- `owner()` — コントラクトオーナーを返す\n\n## Solidityバージョン（参照）\n\nクリーンで読みやすいSolidityの参照実装を示した後、Yulバージョンを構築します。\n\n## 純粋なYulバージョン\n\n純粋なYulバージョンでは：\n- コンストラクタ：オーナーをスロット0に保存\n- 関数セレクタの抽出とswitch文によるルーティング\n- アクセス制御：オーナーのみ\n- Calldataパース：アドレスの20バイトマスク\n- ERC20 transfer：非標準トークン（USDT）対応\n- getReserves()呼び出し\n- token0()呼び出しでスワップ方向決定\n- Uniswap V2公式による出力量計算\n- スリッページチェック\n- スワップ実行とリバートデータフォワーディング\n\n## 行ごとのガス比較\n\n| カテゴリ | 節約 |\n|---------|------|\n| 関数ディスパッチ | 39ガス |\n| アクセス制御 | 105ガス |\n| ERC-20転送 | 240ガス |\n| getReserves呼び出し | 189ガス |\n| token0呼び出し | ~120ガス |\n| 算術 | 142ガス |\n| スワップ呼び出し | 275ガス |\n| デプロイメントサイズ | ~60%小さいバイトコード |\n| **合計ランタイム節約** | **~1,110ガス** |\n\n典型的なUniswap V2スワップ（約110,000ガス）で1,110ガスの節約は約1%の改善です。しかし、1日に数千回のスワップを実行するMEVボットの場合：\n\n```\n1,110ガス * 30 gwei * $3,000\u002FETH = $0.0999\u002Fスワップ\n$0.0999 * 1,000スワップ\u002F日 = $99.90\u002F日\n$99.90 * 365 = $36,463\u002F年\n```\n\n## デプロイメントコスト\n\n| メトリクス | Solidity | Yul |\n|----------|----------|-----|\n| ランタイムバイトコード | ~1,200バイト | ~480バイト |\n| デプロイメントガス | ~240,000 | ~96,000 |\n| 節約 | — | 60%小さく、60%安い |\n\n## 純粋なYulコントラクトのセキュリティ考慮事項\n\n1. すべてのcalldataを検証 — アドレスを20バイトにマスク\n2. すべての戻り値をチェック\n3. 非標準トークンを処理\n4. リエントランシーガードを手動実装\n5. 算術オーバーフロー — Yulはチェックしない\n6. メモリ破損 — メモリレイアウトを慎重に追跡\n\n## シリーズのまとめ\n\nこのシリーズの主なポイント：\n\n1. EVMは256ビットワードのスタックマシン\n2. ストレージは高価 — 新規エントリに20000ガス、コールド読み取りに2100\n3. ガス最適化はアーキテクチャ的 — ストレージパッキング、calldata > メモリ、アクセスリスト\n4. セキュリティは実行フローの理解から — CEIパターン、リエントランシーガード\n5. Yulはオペコードレベルの制御を読みやすい構文で提供\n6. メモリ管理は手動 — フリーメモリポインタ、スクラッチスペース\n7. ループはすべてを乗算 — まずループ本体を最適化\n8. 純粋なYulは最適化されたSolidityより1-5%のガス節約\n\nEVMはシンプルなマシンです。そのルールをマスターすれば、オンチェーン計算をマスターできます。","\u003Ch2 id=\"\">理論から実践へ\u003C\u002Fh2>\n\u003Cp>過去7つの記事で、EVMの包括的な理解を構築しました：オペコードとスタックマシン、メモリモデル、ガスメカニクス、セキュリティプリミティブ、Yul構文、メモリ管理、ループ最適化。今回はすべてをまとめます。\u003C\u002Fp>\n\u003Ch2 id=\"simpleswap\">コントラクト：SimpleSwap\u003C\u002Fh2>\n\u003Cp>コントラクトは1つのことを行います：Uniswap V2ペアを通じて正確な量のトークンAをトークンBにスワップ。2つの関数を公開：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>swap(address pair, address tokenIn, uint256 amountIn, uint256 amountOutMin, address to)\u003C\u002Fcode> — スワップ実行\u003C\u002Fli>\n\u003Cli>\u003Ccode>owner()\u003C\u002Fcode> — コントラクトオーナーを返す\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"solidity\">Solidityバージョン（参照）\u003C\u002Fh2>\n\u003Cp>クリーンで読みやすいSolidityの参照実装を示した後、Yulバージョンを構築します。\u003C\u002Fp>\n\u003Ch2 id=\"yul\">純粋なYulバージョン\u003C\u002Fh2>\n\u003Cp>純粋なYulバージョンでは：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>コンストラクタ：オーナーをスロット0に保存\u003C\u002Fli>\n\u003Cli>関数セレクタの抽出とswitch文によるルーティング\u003C\u002Fli>\n\u003Cli>アクセス制御：オーナーのみ\u003C\u002Fli>\n\u003Cli>Calldataパース：アドレスの20バイトマスク\u003C\u002Fli>\n\u003Cli>ERC20 transfer：非標準トークン（USDT）対応\u003C\u002Fli>\n\u003Cli>getReserves()呼び出し\u003C\u002Fli>\n\u003Cli>token0()呼び出しでスワップ方向決定\u003C\u002Fli>\n\u003Cli>Uniswap V2公式による出力量計算\u003C\u002Fli>\n\u003Cli>スリッページチェック\u003C\u002Fli>\n\u003Cli>スワップ実行とリバートデータフォワーディング\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"\">行ごとのガス比較\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>カテゴリ\u003C\u002Fth>\u003Cth>節約\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>関数ディスパッチ\u003C\u002Ftd>\u003Ctd>39ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>アクセス制御\u003C\u002Ftd>\u003Ctd>105ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>ERC-20転送\u003C\u002Ftd>\u003Ctd>240ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>getReserves呼び出し\u003C\u002Ftd>\u003Ctd>189ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>token0呼び出し\u003C\u002Ftd>\u003Ctd>~120ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>算術\u003C\u002Ftd>\u003Ctd>142ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>スワップ呼び出し\u003C\u002Ftd>\u003Ctd>275ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>デプロイメントサイズ\u003C\u002Ftd>\u003Ctd>~60%小さいバイトコード\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cstrong>合計ランタイム節約\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>~1,110ガス\u003C\u002Fstrong>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>典型的なUniswap V2スワップ（約110,000ガス）で1,110ガスの節約は約1%の改善です。しかし、1日に数千回のスワップを実行するMEVボットの場合：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>1,110ガス * 30 gwei * $3,000\u002FETH = $0.0999\u002Fスワップ\n$0.0999 * 1,000スワップ\u002F日 = $99.90\u002F日\n$99.90 * 365 = $36,463\u002F年\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">デプロイメントコスト\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>メトリクス\u003C\u002Fth>\u003Cth>Solidity\u003C\u002Fth>\u003Cth>Yul\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>ランタイムバイトコード\u003C\u002Ftd>\u003Ctd>~1,200バイト\u003C\u002Ftd>\u003Ctd>~480バイト\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>デプロイメントガス\u003C\u002Ftd>\u003Ctd>~240,000\u003C\u002Ftd>\u003Ctd>~96,000\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>節約\u003C\u002Ftd>\u003Ctd>—\u003C\u002Ftd>\u003Ctd>60%小さく、60%安い\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"yul\">純粋なYulコントラクトのセキュリティ考慮事項\u003C\u002Fh2>\n\u003Col>\n\u003Cli>すべてのcalldataを検証 — アドレスを20バイトにマスク\u003C\u002Fli>\n\u003Cli>すべての戻り値をチェック\u003C\u002Fli>\n\u003Cli>非標準トークンを処理\u003C\u002Fli>\n\u003Cli>リエントランシーガードを手動実装\u003C\u002Fli>\n\u003Cli>算術オーバーフロー — Yulはチェックしない\u003C\u002Fli>\n\u003Cli>メモリ破損 — メモリレイアウトを慎重に追跡\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"\">シリーズのまとめ\u003C\u002Fh2>\n\u003Cp>このシリーズの主なポイント：\u003C\u002Fp>\n\u003Col>\n\u003Cli>EVMは256ビットワードのスタックマシン\u003C\u002Fli>\n\u003Cli>ストレージは高価 — 新規エントリに20000ガス、コールド読み取りに2100\u003C\u002Fli>\n\u003Cli>ガス最適化はアーキテクチャ的 — ストレージパッキング、calldata &gt; メモリ、アクセスリスト\u003C\u002Fli>\n\u003Cli>セキュリティは実行フローの理解から — CEIパターン、リエントランシーガード\u003C\u002Fli>\n\u003Cli>Yulはオペコードレベルの制御を読みやすい構文で提供\u003C\u002Fli>\n\u003Cli>メモリ管理は手動 — フリーメモリポインタ、スクラッチスペース\u003C\u002Fli>\n\u003Cli>ループはすべてを乗算 — まずループ本体を最適化\u003C\u002Fli>\n\u003Cli>純粋なYulは最適化されたSolidityより1-5%のガス節約\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>EVMはシンプルなマシンです。そのルールをマスターすれば、オンチェーン計算をマスターできます。\u003C\u002Fp>\n","ja","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:26.866457Z","純粋なYulで完全なUniswap V2トークンスワップを構築：calldataパース、外部コール、リターンデータ処理、Solidityとの行ごとのガス比較。","Yul トークンスワップ",null,"index, follow",[21,26,30,34],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000017","Huff","huff",{"id":35,"name":36,"slug":37,"created_at":25},"c0000000-0000-0000-0000-000000000018","Yul","yul","ブロックチェーン",[40,46,52],{"id":41,"title":42,"slug":43,"excerpt":44,"locale":12,"category_name":38,"published_at":45},"d0000000-0000-0000-0000-000000000602","Ethereumインターオペラビリティレイヤー：55以上のL2が一つのチェーンになる方法","ethereum-interoperability-layer-55-l2-hitotsu-no-chain","Ethereumには55以上のLayer 2ロールアップがあり、流動性とユーザー体験が断片化しています。Ethereumインターオペラビリティレイヤー — クロスロールアップメッセージング、共有シーケンサー、ベースドロールアップを組み合わせて — それらを一つのコンポーザブルネットワークに統合することを目指しています。","2026-03-28T10:44:44.721589Z",{"id":47,"title":48,"slug":49,"excerpt":50,"locale":12,"category_name":38,"published_at":51},"d0000000-0000-0000-0000-000000000601","ロールアップを超えるZK証明：Ethereumでの検証可能なAI推論","rollup-wo-koeru-zk-shomei-ethereum-kensho-kanou-ai-suiron","ゼロ知識証明はもはや単なるスケーリングツールではありません。2026年、zkMLはオンチェーンでの検証可能なAI推論を実現し、ZKコプロセッサは重い計算をオフチェーンで実行してオンチェーンで検証し、SP1やJoltなどの新しい証明システムが実用化を推進しています。","2026-03-28T10:44:44.716908Z",{"id":53,"title":54,"slug":55,"excerpt":56,"locale":12,"category_name":38,"published_at":57},"d0000000-0000-0000-0000-000000000578","EIP-7702実践ガイド：Pectra後のスマートアカウントフロー構築","eip-7702-jissen-gaido-pectra-go-sumaato-akaunto-furoo-kouchiku","EIP-7702により、任意のEthereum EOAが単一トランザクション内でスマートコントラクトとして一時的に動作可能になりました。バッチトランザクション、ガススポンサーシップ、ソーシャルリカバリーの実装方法を解説します。","2026-03-28T10:44:43.184719Z",{"id":13,"name":59,"slug":60,"bio":61,"photo_url":18,"linkedin":18,"role":62,"created_at":63,"updated_at":63},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]