name: compact-core:language-reference
description: 在编写Compact智能合约时使用,需要参考原始类型(Field、Boolean、Uint)、复合类型(结构体、枚举、Vector、Bytes)、电路/见证语法、控制流(if/else、for循环、assert)或模块系统(import、include、export)。
Compact语言参考
用于Midnight Network的Compact智能合约语言的完整参考。
快速参考
原始类型
| 类型 |
描述 |
示例 |
Field |
ZK原生域元素(约254位) |
const f: Field = 42; |
Boolean |
真/假值 |
const b: Boolean = true; |
Uint<N> |
无符号整数(N位,N ≤ 248) |
const n: Uint<64> = 100; |
复合类型
| 类型 |
描述 |
示例 |
Bytes<N> |
固定大小的字节数组 |
const h: Bytes<32> = ...; |
struct |
命名的记录类型 |
struct Point { x: Field, y: Field } |
enum |
标签联合类型 |
enum Maybe<T> { Some(T), None } |
Vector<T, N> |
固定大小的数组 |
const v: Vector<Field, 3> = [1, 2, 3]; |
特殊类型
| 类型 |
描述 |
示例 |
Opaque<'string'> |
来自TypeScript的UTF-8字符串 |
witness get_name(): Opaque<'string'>; |
Opaque<'Uint8Array'> |
来自TypeScript的二进制数据 |
witness get_data(): Opaque<'Uint8Array'>; |
电路语法
// 可从TypeScript调用的公开电路
export circuit transfer(to: Bytes<32>, amount: Uint<64>): [] {
// 电路主体
}
// 私有辅助电路
circuit helper(x: Field): Field {
return x * x;
}
见证语法
// 声明(在TypeScript中实现)
witness get_private_key(): Bytes<32>;
// 在电路中使用
export circuit sign(message: Bytes<32>): Bytes<64> {
const key = get_private_key();
// 使用key...
}
控制流
// 条件语句
if (condition) {
// then分支
} else {
// else分支
}
// 有界循环(边界必须是编译时常量)
for i in 0..10 {
// 循环体
}
// 断言
assert condition, "错误信息";
模块系统
// 导入特定项
import { hash } from "CompactStandardLibrary";
// 包含整个文件
include "utils.compact";
// 导出供外部使用
export circuit public_fn(): Field { ... }
参考
有关每个主题的详细文档:
- 类型系统 - 包含约束的完整类型参考
- 电路 - 电路和见证模式
- 控制流 - 条件语句、循环、断言
- 模块 - 导入、包含、导出、COMPACT_PATH