name: compact-core:compilation-tooling description: 在使用Compact编译器(compactc)、配置构建设置、理解zkir/证明者/验证者输出产物、设置COMPACT_PATH环境变量,或为Midnight智能合约开发集成VS Code语言服务器支持时使用。
编译工具链
关于Compact编译器(compactc)、项目组织、构建工作流以及理解编译输出的完整指南。
快速参考
基础编译
# 编译一个合约
compactc contract.compact -o output/
# 使用调试模式编译(更快,不生成ZK证明)
compactc contract.compact -o output/ --skip-zk
# 生成VS Code语言服务器支持文件
compactc contract.compact -o output/ --vscode
编译器标志
| 标志 | 描述 | 示例 |
|---|---|---|
-o, --output |
输出目录 | -o build/ |
--skip-zk |
跳过ZK证明生成(开发模式) | --skip-zk |
--vscode |
生成VS Code语言服务器文件 | --vscode |
-I, --include |
添加包含路径 | -I ./lib |
--verbose |
详细输出 | --verbose |
--json |
JSON输出格式 | --json |
--no-typescript |
跳过TypeScript生成 | --no-typescript |
环境变量
| 变量 | 用途 | 示例 |
|---|---|---|
COMPACT_PATH |
包含路径解析 | export COMPACT_PATH="/libs:/project/src" |
MIDNIGHT_NETWORK |
目标网络 | export MIDNIGHT_NETWORK="testnet" |
输出产物
编译会产生多个输出文件:
output/
├── zkir/ # 零知识中间表示
│ ├── circuit_name.zkir # 每个导出电路的电路IR文件
│ └── ...
├── keys/
│ ├── prover/ # 证明者密钥(用于生成证明)
│ │ └── circuit_name.pk
│ └── verifier/ # 验证者密钥(用于链上验证)
│ └── circuit_name.vk
├── contract.ts # TypeScript类型和合约接口
├── witnesses.ts # 见证(Witness)类型定义
└── index.ts # 主导出文件
开发工作流
1. 编写Compact合约
2. 使用 --skip-zk 进行编译以快速迭代
3. 运行TypeScript测试
4. 准备就绪时:进行完整编译(生成ZK密钥)
5. 部署到测试网
快速开发循环
# 快速迭代(无证明生成)
compactc contract.compact -o build/ --skip-zk
# 用于部署的完整构建
compactc contract.compact -o build/
项目结构
推荐的Midnight DApp项目布局:
my-midnight-project/
├── contracts/
│ ├── main.compact # 主合约入口点
│ ├── types.compact # 共享类型定义
│ └── lib/ # 辅助模块
│ └── utils.compact
├── src/ # TypeScript应用代码
│ ├── index.ts
│ ├── witnesses.ts # 见证实现
│ └── deploy.ts
├── build/ # 编译输出(git忽略)
│ ├── zkir/
│ ├── keys/
│ └── *.ts
├── tests/
│ └── contract.test.ts
├── package.json
├── tsconfig.json
└── .env # 环境配置
VS Code 集成
为VS Code生成语言服务器支持:
compactc contract.compact -o build/ --vscode
这将创建 .vscode/ 配置,用于:
- 语法高亮
- 错误诊断
- 类型检查
- 跳转到定义
参考文档
详细文档请参阅:
示例
可运行的项目模板和脚本: