Compact核心:账本抽象数据类型Skill compact-core:ledger-adts

本技能提供Midnight区块链平台中Compact语言的链上状态管理抽象数据类型(ADT)完整参考,包括Cell、Counter、Map、Set、List、MerkleTree等核心数据结构的使用方法、操作对比和实际代码示例。适用于区块链开发者、智能合约工程师、隐私计算研究人员,关键词:Compact语言、链上状态管理、抽象数据类型、Midnight区块链、智能合约开发、账本数据结构、Merkle树、隐私保护计算。

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

name: compact-core:ledger-adts description: 当使用Compact进行链上状态管理时,涉及Cell、Counter、Map、Set、List、MerkleTree或HistoricMerkleTree等账本抽象数据类型(ADT),或需要了解Compact与TypeScript中可用操作的差异时使用。

账本抽象数据类型(ADT)

Midnight链上状态管理所用账本抽象数据类型的参考文档。

可用ADT

ADT 用途 关键操作
Cell<T> 单个可变值 read(读取)、write(写入)
Counter 只增计数器 increment(递增)、value(获取值)
Map<K, V> 键值存储 lookup(查找)、insert(插入)、remove(移除)
Set<T> 成员集合 member(检查成员)、insert(插入)、remove(移除)
List<T> 有序集合 append(追加)、nth(获取第n个元素)、length(长度)
MerkleTree<T> 成员证明 insert(插入)、root(根哈希)、pathForLeaf(叶节点路径)
HistoricMerkleTree<T> 历史根记录 同上 + resetHistory(重置历史)

快速示例

计数器(Counter)

ledger counter: Counter;

export circuit increment(): Uint<64> {
    counter.increment(1);
    return counter.value();
}

映射(Map)

ledger balances: Map<Bytes<32>, Uint<64>>;

export circuit get_balance(user: Bytes<32>): Uint<64> {
    const result = balances.lookup(user);
    return if result is Maybe::Some(balance) { balance } else { 0 };
}

默克尔树(MerkleTree)

ledger members: MerkleTree<Bytes<32>>;

export circuit prove_membership(
    leaf: Bytes<32>,
    path: Vector<Bytes<32>, 20>
): Boolean {
    const computed_root = merkleTreePathRoot(leaf, path);
    return computed_root == members.root();
}

Compact与TypeScript操作对比

部分ADT操作仅在TypeScript中可用:

ADT Compact可用操作 仅TypeScript可用操作
Counter valueincrement -
Map lookupinsertremove entrieskeys
Set memberinsertremove entriessize
List nthappend entrieslength
MerkleTree insertroot pathForLeaf、迭代操作

参考链接