[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-11-huff-jump-table-kansuu-dispatch":3},{"article":4,"author":55},{"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":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":35,"related_articles":36},"d4000000-0000-0000-0000-000000000111","a0000000-0000-0000-0000-000000000042","Deep EVM #11：Huffジャンプテーブル — Solidityオーバーヘッドなしのo(1)関数ディスパッチ","deep-evm-11-huff-jump-table-kansuu-dispatch","パックされたジャンプテーブルを使用してHuffでO(1)関数ディスパッチャを構築。Solidityのif-elseチェーンとの比較で数千ガスを節約。","## Solidityのディスパッチャの問題\n\nSolidityコントラクトを呼び出すと、EVMが最初に実行するのが関数ディスパッチャです。Solidityはcalldataの最初の4バイトを各既知セレクタと比較する線形if-elseチェーンを生成します。\n\nN個の関数を持つコントラクトではO(N)です。各比較に約22ガスかかります。20個の関数を持つコントラクトは、ディスパッチだけで最大440ガスを浪費します。\n\n## ジャンプテーブルアプローチ：O(1)\n\nジャンプテーブルは、比較ではなく算術を使用して関数セレクタをコードオフセットに直接マッピングします。CPU アーキテクチャから借用した概念です。\n\nコンセプト：\n1. Calldataから関数セレクタを抽出（4バイト）\n2. セレクタからジャンプデスティネーションを算術計算\n3. そのデスティネーションに直接JUMP\n\n比較なし、分岐なし、関数数に関係なく定数時間。\n\n## ガス比較\n\n| 関数数 | Solidity（if-else） | Solidity（二分探索） | Huffジャンプテーブル |\n|--------|-------------------|--------------------|------------------|\n| 2 | 22-44ガス | 22-44ガス | 15ガス |\n| 8 | 22-176ガス | 22-88ガス | 15ガス |\n| 32 | 22-704ガス | 22-132ガス | 15ガス |\n\nジャンプテーブルのコストは定数：CALLDATALOAD(3) + SHR(3) + 算術(3-6) + JUMP(8) = ~15-18ガス。\n\n## バニティセレクタのマイニング\n\nジャンプテーブルアプローチには予測可能なルーティングバイトを持つ関数セレクタが必要です。Foundryの`cast sig`やカスタムRustツールで互換性のあるセレクタをブルートフォースできます。\n\n## バイトコードサイズへの影響\n\n| アプローチ | ランタイムバイトコード | デプロイガス |\n|----------|-------------------|-----------|\n| Solidity（8関数） | ~800バイト | 160,000ガス |\n| Huffジャンプテーブル（8関数） | ~200バイト | 40,000ガス |\n\n## まとめ\n\nジャンプテーブルはSolidityのO(N)ディスパッチチェーンをO(1)の計算されたジャンプに置き換えます。ガス節約は数百万回のコールで複合され、MEVボットやDEXルーターに有意義な優位性を提供します。","\u003Ch2 id=\"solidity\">Solidityのディスパッチャの問題\u003C\u002Fh2>\n\u003Cp>Solidityコントラクトを呼び出すと、EVMが最初に実行するのが関数ディスパッチャです。Solidityはcalldataの最初の4バイトを各既知セレクタと比較する線形if-elseチェーンを生成します。\u003C\u002Fp>\n\u003Cp>N個の関数を持つコントラクトではO(N)です。各比較に約22ガスかかります。20個の関数を持つコントラクトは、ディスパッチだけで最大440ガスを浪費します。\u003C\u002Fp>\n\u003Ch2 id=\"o-1\">ジャンプテーブルアプローチ：O(1)\u003C\u002Fh2>\n\u003Cp>ジャンプテーブルは、比較ではなく算術を使用して関数セレクタをコードオフセットに直接マッピングします。CPU アーキテクチャから借用した概念です。\u003C\u002Fp>\n\u003Cp>コンセプト：\u003C\u002Fp>\n\u003Col>\n\u003Cli>Calldataから関数セレクタを抽出（4バイト）\u003C\u002Fli>\n\u003Cli>セレクタからジャンプデスティネーションを算術計算\u003C\u002Fli>\n\u003Cli>そのデスティネーションに直接JUMP\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>比較なし、分岐なし、関数数に関係なく定数時間。\u003C\u002Fp>\n\u003Ch2 id=\"\">ガス比較\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>関数数\u003C\u002Fth>\u003Cth>Solidity（if-else）\u003C\u002Fth>\u003Cth>Solidity（二分探索）\u003C\u002Fth>\u003Cth>Huffジャンプテーブル\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>2\u003C\u002Ftd>\u003Ctd>22-44ガス\u003C\u002Ftd>\u003Ctd>22-44ガス\u003C\u002Ftd>\u003Ctd>15ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>8\u003C\u002Ftd>\u003Ctd>22-176ガス\u003C\u002Ftd>\u003Ctd>22-88ガス\u003C\u002Ftd>\u003Ctd>15ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>32\u003C\u002Ftd>\u003Ctd>22-704ガス\u003C\u002Ftd>\u003Ctd>22-132ガス\u003C\u002Ftd>\u003Ctd>15ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>ジャンプテーブルのコストは定数：CALLDATALOAD(3) + SHR(3) + 算術(3-6) + JUMP(8) = ~15-18ガス。\u003C\u002Fp>\n\u003Ch2 id=\"\">バニティセレクタのマイニング\u003C\u002Fh2>\n\u003Cp>ジャンプテーブルアプローチには予測可能なルーティングバイトを持つ関数セレクタが必要です。Foundryの\u003Ccode>cast sig\u003C\u002Fcode>やカスタムRustツールで互換性のあるセレクタをブルートフォースできます。\u003C\u002Fp>\n\u003Ch2 id=\"\">バイトコードサイズへの影響\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>アプローチ\u003C\u002Fth>\u003Cth>ランタイムバイトコード\u003C\u002Fth>\u003Cth>デプロイガス\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>Solidity（8関数）\u003C\u002Ftd>\u003Ctd>~800バイト\u003C\u002Ftd>\u003Ctd>160,000ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Huffジャンプテーブル（8関数）\u003C\u002Ftd>\u003Ctd>~200バイト\u003C\u002Ftd>\u003Ctd>40,000ガス\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"\">まとめ\u003C\u002Fh2>\n\u003Cp>ジャンプテーブルはSolidityのO(N)ディスパッチチェーンをO(1)の計算されたジャンプに置き換えます。ガス節約は数百万回のコールで複合され、MEVボットやDEXルーターに有意義な優位性を提供します。\u003C\u002Fp>\n","ja","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:27.056569Z","Deep EVM #11：Huffジャンプテーブル — O(1)関数ディスパッチ","パックされたジャンプテーブルを使用してHuffでO(1)関数ディスパッチャを構築。Solidityディスパッチとのガスコスト比較とバニティセレクタマイニング。","huff ジャンプテーブル 関数ディスパッチ",null,"index, follow",[22,27,31],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":32,"name":33,"slug":34,"created_at":26},"c0000000-0000-0000-0000-000000000017","Huff","huff","ブロックチェーン",[37,43,49],{"id":38,"title":39,"slug":40,"excerpt":41,"locale":12,"category_name":35,"published_at":42},"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":44,"title":45,"slug":46,"excerpt":47,"locale":12,"category_name":35,"published_at":48},"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":50,"title":51,"slug":52,"excerpt":53,"locale":12,"category_name":35,"published_at":54},"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":56,"slug":57,"bio":58,"photo_url":19,"linkedin":19,"role":59,"created_at":60,"updated_at":60},"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"]