跳转到主要内容
状态:草案规范 (Phase 1–2) Counter 场景是第一个跨目标验收标准测试。它在 Lean 业务核心中练习可移植标量状态,而不涉及特定于链的账户模型。 相关:可移植 IR, 能力注册表, Decisions

场景定义

一个合约维护单个无符号 64 位计数器。
操作行为
initialize将计数器设置为 0
increment1 加到计数器
get返回当前计数器值
v0 不需要原生代币转账、跨合约调用或事件(v1 中可选 events.emit)。

所需能力

能力 id使用者
storage.scalar所有操作
caller.senderv1 中的可选访问控制

目标特定适配

每个目标适配器将相同的逻辑场景映射到原生机制:
目标状态表示冒烟测试
evm合约存储槽Foundry + vm.etch
wasm-cosmwasm宿主 KV 中的字符串键 "count"cosmwasm-check + instantiate/execute/query
solana-sbpf-asm账户数据字段sbpf test (Mollusk) + Surfpool/Web3.js live smoke
move-aptos签名者账户下的 Counter 资源aptos move test
psy-dpnPsy 存储字段,在 v0 中可能是 Felt/U32dargo compile + 内存冒烟测试
目标特定的账户 schema 和 manifest 是适配器关注点——不会隐藏在可移植 Lean 逻辑内部。有关指令 manifest 格式和 direct-assembly 路线(D-026),请参阅 solana-sbpf-asm.md

Phase 2 验收标准

两个并行 spike 独立通过时,Phase 2 即告完成:

CosmWasm (wasm-cosmwasm)

  • Counter Wasm 导出所需的 CosmWasm 入口。
  • cosmwasm-check 通过。
  • instantiate → increment → query 返回预期计数。
  • 制品元数据记录 target: wasm-cosmwasm 和所使用的能力。

Solana (solana-sbpf-asm)

  • --emit-sbpf-asm 产生可被 sbpf build 接受的有效 .s
  • sbpf build 产生可加载的 eBPF ELF (.so)。
  • sbpf test (Mollusk) 和 Surfpool/Web3.js live smoke 中执行 initialize → increment → read counter。
  • 指令 manifest (manifest.toml) 记录账户布局。
  • 能力检查器用包含 target id 的诊断拒绝不支持的能力。

联合(在两个 spike 之后)

  • 同一个可移植 IR 模块降级到 EVM + 至少一个非 EVM 目标。
  • 文档列出了此场景下每个目标支持的能力。

ZK 目标 Experimental 标准

psy-dpn 不属于 Phase 2 退出标准,但它现在已经通过生成 .psy 源码和 Dargo 验证复用了 Counter 场景。
  • Counter IR 可以用 Psy 兼容的标量类型表示。
  • 生成的 .psy 包可以使用 dargo compile 编译。
  • 发射 DPN 电路 JSON 并记录在制品元数据中。
  • 冒烟路径已经可运行,覆盖 dargo testdargo compiledargo executedargo generate-abi 和制品元数据校验。

示例位置

目标路径状态
EVMExamples/Evm/Contracts/Counter.lean代码库中
CosmWasmExamples/CosmWasm/Counter.lean已规划,不在代码库中
SolanaExamples/Solana/Counter.lean + manifest已规划,不在代码库中(工作流 7)
AptosExamples/Move/Aptos/Counter/已规划,不在代码库中
Psy DPNExamples/Psy/*.golden.psy, scripts/psy/*-smoke.sh代码库中

v0 范围之外

  • PDA 派生
  • CPI / 子消息
  • 访问控制 / 所有权
  • 超过 U64 的溢出(目标可能会限制得更低)