名称: compact-core:typescript-integration 描述: 当在TypeScript中实现见证函数、将Compact类型映射到TypeScript(Field→bigint, Bytes→Uint8Array)、部署合约、从TypeScript调用电路、读取账本状态或使用JavaScript SDK构建Midnight DApp时使用。
TypeScript集成
将Midnight Compact合约与TypeScript应用程序集成的完整指南。
类型映射速查表
| Compact类型 | TypeScript类型 | 说明 |
|---|---|---|
Field |
bigint |
ZK字段元素 |
Uint<N> |
bigint |
任意位宽映射到bigint |
Boolean |
boolean |
直接映射 |
Bytes<N> |
Uint8Array |
固定长度字节数组 |
Opaque<'string'> |
string |
UTF-8字符串数据 |
Opaque<'Uint8Array'> |
Uint8Array |
二进制数据 |
struct |
{ field: Type, ... } |
带类型字段的对象 |
enum |
判别式联合 | { tag: 'Variant', value: T } |
Vector<T, N> |
T[] |
映射类型的数组 |
见证实现模式
import { WitnessContext } from '@midnight-ntwrk/midnight-js-types';
// Compact声明: witness get_secret(): Field;
const witnesses = {
get_secret: ({ privateState }: WitnessContext<PrivateState>): bigint => {
return privateState.secret;
}
};
合约交互流程
1. 编译Compact → 生成TypeScript类型
2. 部署合约 → 获取合约地址
3. 创建提供者 → 连接到Midnight节点
4. 构建见证 → 实现私有数据访问
5. 调用电路 → 执行交易
6. 读取状态 → 查询账本值
快速示例
调用电路
import { Contract } from './contract';
const result = await contract.callTx.transfer({
to: recipientAddress,
amount: 1000n
}, witnesses);
读取账本状态
const balance = await contract.state.balances.get(userAddress);
// balance: bigint | undefined
部署合约
import { deployContract } from '@midnight-ntwrk/midnight-js-contracts';
const { contract, address } = await deployContract(provider, {
privateStateKey: 'my-contract',
initialPrivateState: { secret: 42n },
witnesses
});
参考文档
各主题详细文档:
- 类型映射 - 完整的Compact ↔ TypeScript类型对应关系
- 见证桥接 - 在TypeScript中实现见证函数
- 合约API - 生成的合约接口使用
- 部署 - 从TypeScript部署合约
示例
可运行的TypeScript示例: