[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-9-huff-yuyan-rumen-hong-biaoqian-caozuoma":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},"d3000000-0000-0000-0000-000000000109","a0000000-0000-0000-0000-000000000032","Deep EVM #9：Huff语言入门——宏、标签和原始操作码","deep-evm-9-huff-yuyan-rumen-hong-biaoqian-caozuoma","Huff实操入门，这种底层EVM汇编语言让你直接控制每个操作码、每个栈元素和每字节已部署的字节码。","## 什么是Huff\n\nHuff是一种底层的EVM汇编语言，让你直接编写操作码。与Yul不同，Huff不为你管理栈——你手动控制每个栈元素。这给了你对生成字节码的完全控制，但也意味着你承担了管理栈状态的全部责任。\n\n## 为什么选择Huff\n\nHuff在以下场景优于Yul：\n- **零开销** — 你写什么就编译什么，没有编译器插入的额外操作码\n- **精确控制字节码大小** — 对于最小代理和gas极限优化至关重要\n- **MEV机器人** — 每一个gas单位都是利润空间\n\n## Huff语法\n\n### 宏\nHuff中的基本构建块是宏。宏在编译时展开为操作码：\n\n```huff\n#define macro MAIN() = takes(0) returns(0) {\n    0x00 calldataload    \u002F\u002F 加载calldata的前32字节\n    0xe0 shr             \u002F\u002F 右移224位获取函数选择器\n    \n    dup1 __FUNC_SIG(transfer) eq transfer jumpi\n    dup1 __FUNC_SIG(balanceOf) eq balanceOf jumpi\n    \n    0x00 0x00 revert\n}\n```\n\n### 标签和跳转\n```huff\ntransfer:\n    TRANSFER()\njump\n\nbalanceOf:\n    BALANCE_OF()\njump\n```\n\n### takes和returns\n`takes(n)`和`returns(m)`声明宏从栈中消费n个元素并产生m个元素。这是文档约定，编译器不强制执行。\n\n## Huff vs Yul对比\n\n| 特性 | Huff | Yul |\n|------|------|-----|\n| 栈管理 | 手动 | 自动 |\n| 变量 | 无（使用栈位置） | 有 |\n| 函数 | 宏 | 函数 |\n| 代码大小 | 最小 | 较小 |\n| 学习曲线 | 陡峭 | 中等 |\n| 适用场景 | MEV机器人、极限优化 | 通用gas优化 |\n\n## 总结\n\nHuff是EVM编程的终极工具——没有安全网、没有编译器保护，但有最大的控制力和最小的gas开销。对于需要极致性能的MEV机器人和链上计算，Huff是不二选择。","\u003Ch2 id=\"huff\">什么是Huff\u003C\u002Fh2>\n\u003Cp>Huff是一种底层的EVM汇编语言，让你直接编写操作码。与Yul不同，Huff不为你管理栈——你手动控制每个栈元素。这给了你对生成字节码的完全控制，但也意味着你承担了管理栈状态的全部责任。\u003C\u002Fp>\n\u003Ch2 id=\"huff\">为什么选择Huff\u003C\u002Fh2>\n\u003Cp>Huff在以下场景优于Yul：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>零开销\u003C\u002Fstrong> — 你写什么就编译什么，没有编译器插入的额外操作码\u003C\u002Fli>\n\u003Cli>\u003Cstrong>精确控制字节码大小\u003C\u002Fstrong> — 对于最小代理和gas极限优化至关重要\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MEV机器人\u003C\u002Fstrong> — 每一个gas单位都是利润空间\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"huff\">Huff语法\u003C\u002Fh2>\n\u003Ch3>宏\u003C\u002Fh3>\n\u003Cp>Huff中的基本构建块是宏。宏在编译时展开为操作码：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-huff\">#define macro MAIN() = takes(0) returns(0) {\n    0x00 calldataload    \u002F\u002F 加载calldata的前32字节\n    0xe0 shr             \u002F\u002F 右移224位获取函数选择器\n    \n    dup1 __FUNC_SIG(transfer) eq transfer jumpi\n    dup1 __FUNC_SIG(balanceOf) eq balanceOf jumpi\n    \n    0x00 0x00 revert\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>标签和跳转\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-huff\">transfer:\n    TRANSFER()\njump\n\nbalanceOf:\n    BALANCE_OF()\njump\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>takes和returns\u003C\u002Fh3>\n\u003Cp>\u003Ccode>takes(n)\u003C\u002Fcode>和\u003Ccode>returns(m)\u003C\u002Fcode>声明宏从栈中消费n个元素并产生m个元素。这是文档约定，编译器不强制执行。\u003C\u002Fp>\n\u003Ch2 id=\"huff-vs-yul\">Huff vs Yul对比\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>特性\u003C\u002Fth>\u003Cth>Huff\u003C\u002Fth>\u003Cth>Yul\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>栈管理\u003C\u002Ftd>\u003Ctd>手动\u003C\u002Ftd>\u003Ctd>自动\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>变量\u003C\u002Ftd>\u003Ctd>无（使用栈位置）\u003C\u002Ftd>\u003Ctd>有\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>函数\u003C\u002Ftd>\u003Ctd>宏\u003C\u002Ftd>\u003Ctd>函数\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>代码大小\u003C\u002Ftd>\u003Ctd>最小\u003C\u002Ftd>\u003Ctd>较小\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>学习曲线\u003C\u002Ftd>\u003Ctd>陡峭\u003C\u002Ftd>\u003Ctd>中等\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>适用场景\u003C\u002Ftd>\u003Ctd>MEV机器人、极限优化\u003C\u002Ftd>\u003Ctd>通用gas优化\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"\">总结\u003C\u002Fh2>\n\u003Cp>Huff是EVM编程的终极工具——没有安全网、没有编译器保护，但有最大的控制力和最小的gas开销。对于需要极致性能的MEV机器人和链上计算，Huff是不二选择。\u003C\u002Fp>\n","zh","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:26.084503Z","Huff底层EVM汇编语言入门。学习宏、标签、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-000000000599","Ethereum互操作层：55+个L2如何成为一条链","ethereum-hucaozuoceng-55-l2-chengwei-yitiao-lian","Ethereum有55+个Layer 2 rollup，碎片化了流动性和用户体验。Ethereum互操作层 — 结合跨rollup消息传递、共享排序器和based rollup — 旨在将它们统一为一个可组合的网络。","2026-03-28T10:44:44.539584Z",{"id":43,"title":44,"slug":45,"excerpt":46,"locale":12,"category_name":34,"published_at":47},"d0000000-0000-0000-0000-000000000598","ZK证明超越Rollups：Ethereum上的可验证AI推理","zk-zhengming-chaoyue-rollups-ethereum-keyanzheng-ai-tuili","零知识证明不再仅仅是扩容工具。在2026年，zkML实现了链上可验证的AI推理，ZK协处理器将繁重计算移至链下并在链上验证，而SP1和Jolt等新证明系统使其变得实用。","2026-03-28T10:44:44.534954Z",{"id":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":34,"published_at":53},"d0000000-0000-0000-0000-000000000575","EIP-7702实战：Pectra之后构建智能账户流程","eip-7702-shizhan-pectra-zhihou-goujian-zhineng-zhanghu-liucheng","EIP-7702允许任何Ethereum EOA在单笔交易中临时充当智能合约。以下是如何使用新的账户抽象原语实现批量交易、gas赞助和社交恢复。","2026-03-28T10:44:42.997040Z",{"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"]