Huff CLI

简介 虽然多数时候您会在Foundry项目中使用foundry-huff库来编译Huff合约,但编译器自带的CLI提供了一些额外的配置选项和有用的工具 选项 `huffc 0.3.0` 用纯Rust构建的Huff语言编译器 使用格式: `huffc [选项] [路径] [子命令]` 参数: `<路径>` 要编译的合约(一个或多个) 选项: `-a`, `--artifacts` 是否生成产物文件 `-b`, `--bytecode` 生成并记录字节码 `-c`, `--constants <常量>...` 为编译环境覆盖/设置常量 `-d`, `--output-directory <输出目录>` 输出目录 [默认: ./artifacts] `-g`, `--interface [<接口>...]` 为Huff产物文件生成Solidity接口 `-h`, `--help` 打印帮助信息 `-i`, `--inputs <输入参数>...` 构造函数输入参数 `-n`, `--interactive` 交互式输入构造函数参数 `-o`, `--output <输出>` 输出文件路径 `-r`, `--bin-runtime` 生成并记录运行时字节码 `-s`, `--source-path <源路径>` 合约的源路径 [默认: ./contracts] `-v`, `--verbose` 详细输出 `-V`, `--version` 打印版本信息 `-z`, `--optimize` 优化编译 [开发中] 子命令: `help` 打印此信息或给定子命令的帮助信息 `test` 测试子命令 -a 生成产物文件 传递 -a 标志将在 ./artifacts 目录或 -d 标志指定的位置生成产物JSON文件。该JSON文件包含以下信息: File(文件名) Path(路径) Source(源代码) Dependencies(依赖项) Bytecode(字节码) Runtime Bytecode(运行时字节码) Contract ABI(合约ABI) 示例: ...

May 16, 2025 · 2 min · 235 words · Guangyang Zhong

Huff 使用指南

简介 Huff 是一种低级编程语言,专为在以太坊虚拟机(EVM)上开发高性能、优化程度极高的智能合约而设计。Huff 不隐藏 EVM 的内部机制,而是将其编程堆栈暴露给开发者,以便进行手动操作和精细控制 Huff 最初由 Aztec Protocol 团队创建,用于编写 Weierstrudel,这是一个链上椭圆曲线算术库,要求代码极度优化,而 Solidity 和 Yul 都无法满足这种性能需求 虽然 EVM 专家可以使用 Huff 编写适用于生产环境的高效智能合约,但它也可以作为初学者学习 EVM 工作原理的一种方式 👉 Huff 详细使用示例 安装 Huff 编译器是用 Rust 开发的,旨在提供高性能的 Huff 代码编译体验 安装方式与 Foundry 类似 运行命令安装 Huffup: curl -L get.huff.sh | bash 注意事项: 该命令会安装 huffup 可执行文件,但不一定会自动添加到系统路径 如果出现以下错误: huffup: command not found 请执行: source ~/.bashrc # 或者 source ~/.zshrc 或者直接打开一个新的终端窗口 安装完成并在路径中可用后,运行: huffup 即可安装最新稳定版本的 huffc(Huff 编译器) Windows 用户:从源码构建 安装 Rust 工具链: 下载并运行 rustup-init 会在控制台启动安装 如果遇到错误,可能缺少 VS Build Tools,请下载安装 ...

May 16, 2025 · 2 min · 244 words · Guangyang Zhong

Huff 详细使用示例

简介 Huff by Example 旨在详细解释 Huff 语言的各项特性,并通过代码示例说明每个特性的使用方法、使用时机、使用场景以及设计目的。文中的代码片段附有丰富注释,但本节假设读者对 EVM 有一定基础 定义接口 (Defining your Interface) 在 Huff 中定义接口不是必需的步骤,但可以为以下两个目的使用: 作为 __FUNC_SIG 和 __EVENT_HASH 内置函数的参数 生成 Solidity 接口 / 合约 ABI 说明: 函数类型:可以是 view、pure、payable 或 nonpayable 函数接口:仅建议为外部可调用函数定义 事件(Events):可以包含索引值(indexed)和非索引值(non-indexed) 示例: #define function testFunction(uint256, bytes32) view returns (bytes memory) #define event TestEvent(address indexed, uint256) testFunction:定义了一个接受 uint256 和 bytes32 参数的只读函数,返回 bytes 类型 TestEvent:定义了一个事件,包含一个索引地址和一个 uint256 参数 常量 (Constants) 在 Huff 合约中,常量不会存储在合约的 storage 中,而是在编译时即可在合约内调用 常量可以是以下两种类型: 字节(bytes):最大 32 字节 FREE_STORAGE_POINTER:表示合约中未使用的存储槽(storage slot) 使用方法: ...

May 16, 2025 · 7 min · 1410 words · Guangyang Zhong