TypeScript集成指南 compact-core:typescript-integration

本技能提供Midnight区块链Compact合约与TypeScript应用程序的完整集成方案,包括类型映射、见证函数实现、合约部署、电路调用和账本状态读取。关键词:区块链 TypeScript集成 智能合约 零知识证明 DApp开发 隐私计算 Midnight SDK 见证函数 类型映射

DApp开发 0 次安装 0 次浏览 更新于 2/26/2026

名称: 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
});

参考文档

各主题详细文档:

示例

可运行的TypeScript示例: