[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-9-huff-gengo-nyuumon-macro-label":3},{"article":4,"author":54},{"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":34,"related_articles":35},"d4000000-0000-0000-0000-000000000109","a0000000-0000-0000-0000-000000000042","Deep EVM #9：Huff言語入門 — マクロ、ラベル、生のオペコード","deep-evm-9-huff-gengo-nyuumon-macro-label","すべてのオペコード、バイトコードのすべてのバイト、すべてのガスユニットを直接制御できる低レベルEVMアセンブリ言語Huffの実践的入門。","## Huffが存在する理由\n\nSolidityは素晴らしい抽象化です — そうでなくなるまでは。100バイトのランタイムバイトコードに収まるコントラクト、パックされたジャンプテーブルでO(1)の関数ディスパッチ、または1日に何百万回も実行されるホットパスから200ガスを削減する必要がある場合、より低レベルなものが必要です。それが**Huff**です。\n\nHuffは薄いマクロシステムを持つ低レベルEVMアセンブリ言語です。変数も型も、裏で最適化するコンパイラもありません。書いたものがそのままオンチェーンに載ります — オペコードごとに。\n\n## マクロ vs 関数\n\n### マクロ（`#define macro`）\nマクロはすべてのコールサイトでインライン展開されます。JUMPオーバーヘッドなし、追加ガスなし。ガスクリティカルなコードのデフォルトかつ推奨の選択肢です。\n\n### 関数（`#define fn`）\n関数は実際のJUMP\u002FJUMPDESTペアを生成します。呼び出しあたり約22の追加ガスでバイトコードサイズを節約します。\n\n## ラベルとジャンプデスティネーション\n\nHuffのラベルは名前付きJUMPDESTロケーションです。コンパイラがコンパイル時に具体的なバイトコードオフセットに解決します。\n\n## takes()とreturns()\n\nマクロと関数の`takes(n)`と`returns(m)`アノテーションは、ブロックが消費・生成するスタックアイテム数を示すドキュメントとコンパイラヒントです。\n\n## 定数とストレージスロット\n\n```huff\n#define constant VALUE_SLOT = 0x00\n#define constant OWNER_SLOT = 0x01\n```\n\n定数はPUSH命令としてインライン展開されます。ガスコストゼロ — 純粋に構文的です。\n\n## Huffを使うべき場合\n\n1. ガスが最優先制約 — 100ガスが収益性を決定するMEVコントラクト\n2. バイトコードサイズが重要 — CREATE2ファクトリでデプロイされるコントラクト\n3. カスタムディスパッチが必要 — ジャンプテーブル、非標準ABIエンコーディング\n4. EVMを学習中 — 生のオペコードを書くことがEVMを最もよく教える\n\nそれ以外はSolidityを書き、`solc --asm`でコンパイラ出力を確認してください。\n\n## まとめ\n\nHuffはEVMバイトコードへの直接回線を、正気を保つのに十分な抽象化で提供します。マクロはゼロオーバーヘッドでコードを再利用。ラベルはジャンプオフセットの簿記を処理。`takes`\u002F`returns`アノテーションはスタックエラーを早期に発見します。","\u003Ch2 id=\"huff\">Huffが存在する理由\u003C\u002Fh2>\n\u003Cp>Solidityは素晴らしい抽象化です — そうでなくなるまでは。100バイトのランタイムバイトコードに収まるコントラクト、パックされたジャンプテーブルでO(1)の関数ディスパッチ、または1日に何百万回も実行されるホットパスから200ガスを削減する必要がある場合、より低レベルなものが必要です。それが\u003Cstrong>Huff\u003C\u002Fstrong>です。\u003C\u002Fp>\n\u003Cp>Huffは薄いマクロシステムを持つ低レベルEVMアセンブリ言語です。変数も型も、裏で最適化するコンパイラもありません。書いたものがそのままオンチェーンに載ります — オペコードごとに。\u003C\u002Fp>\n\u003Ch2 id=\"vs\">マクロ vs 関数\u003C\u002Fh2>\n\u003Ch3>マクロ（\u003Ccode>#define macro\u003C\u002Fcode>）\u003C\u002Fh3>\n\u003Cp>マクロはすべてのコールサイトでインライン展開されます。JUMPオーバーヘッドなし、追加ガスなし。ガスクリティカルなコードのデフォルトかつ推奨の選択肢です。\u003C\u002Fp>\n\u003Ch3>関数（\u003Ccode>#define fn\u003C\u002Fcode>）\u003C\u002Fh3>\n\u003Cp>関数は実際のJUMP\u002FJUMPDESTペアを生成します。呼び出しあたり約22の追加ガスでバイトコードサイズを節約します。\u003C\u002Fp>\n\u003Ch2 id=\"\">ラベルとジャンプデスティネーション\u003C\u002Fh2>\n\u003Cp>Huffのラベルは名前付きJUMPDESTロケーションです。コンパイラがコンパイル時に具体的なバイトコードオフセットに解決します。\u003C\u002Fp>\n\u003Ch2 id=\"takes-returns\">takes()とreturns()\u003C\u002Fh2>\n\u003Cp>マクロと関数の\u003Ccode>takes(n)\u003C\u002Fcode>と\u003Ccode>returns(m)\u003C\u002Fcode>アノテーションは、ブロックが消費・生成するスタックアイテム数を示すドキュメントとコンパイラヒントです。\u003C\u002Fp>\n\u003Ch2 id=\"\">定数とストレージスロット\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-huff\">#define constant VALUE_SLOT = 0x00\n#define constant OWNER_SLOT = 0x01\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>定数はPUSH命令としてインライン展開されます。ガスコストゼロ — 純粋に構文的です。\u003C\u002Fp>\n\u003Ch2 id=\"huff\">Huffを使うべき場合\u003C\u002Fh2>\n\u003Col>\n\u003Cli>ガスが最優先制約 — 100ガスが収益性を決定するMEVコントラクト\u003C\u002Fli>\n\u003Cli>バイトコードサイズが重要 — CREATE2ファクトリでデプロイされるコントラクト\u003C\u002Fli>\n\u003Cli>カスタムディスパッチが必要 — ジャンプテーブル、非標準ABIエンコーディング\u003C\u002Fli>\n\u003Cli>EVMを学習中 — 生のオペコードを書くことがEVMを最もよく教える\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>それ以外はSolidityを書き、\u003Ccode>solc --asm\u003C\u002Fcode>でコンパイラ出力を確認してください。\u003C\u002Fp>\n\u003Ch2 id=\"\">まとめ\u003C\u002Fh2>\n\u003Cp>HuffはEVMバイトコードへの直接回線を、正気を保つのに十分な抽象化で提供します。マクロはゼロオーバーヘッドでコードを再利用。ラベルはジャンプオフセットの簿記を処理。\u003Ccode>takes\u003C\u002Fcode>\u002F\u003Ccode>returns\u003C\u002Fcode>アノテーションはスタックエラーを早期に発見します。\u003C\u002Fp>\n","ja","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:27.034872Z","低レベルEVMアセンブリ言語Huffの入門。マクロ、ラベル、takes\u002Freturns、HuffバイトコードとSolidity出力の比較を学ぶ。","huff言語 evm",null,"index, follow",[21,26,30],{"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","ブロックチェーン",[36,42,48],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":34,"published_at":41},"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":43,"title":44,"slug":45,"excerpt":46,"locale":12,"category_name":34,"published_at":47},"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":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":34,"published_at":53},"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":55,"slug":56,"bio":57,"photo_url":18,"linkedin":18,"role":58,"created_at":59,"updated_at":59},"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"]