场景定义
一个合约维护单个无符号 64 位计数器。| 操作 | 行为 |
|---|---|
initialize | 将计数器设置为 0 |
increment | 将 1 加到计数器 |
get | 返回当前计数器值 |
events.emit)。
所需能力
| 能力 id | 使用者 |
|---|---|
storage.scalar | 所有操作 |
caller.sender | v1 中的可选访问控制 |
目标特定适配
每个目标适配器将相同的逻辑场景映射到原生机制:| 目标 | 状态表示 | 冒烟测试 |
|---|---|---|
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-dpn | Psy 存储字段,在 v0 中可能是 Felt/U32 | dargo compile + 内存冒烟测试 |
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 test、dargo compile、dargo execute、dargo generate-abi和制品元数据校验。
示例位置
| 目标 | 路径 | 状态 |
|---|---|---|
| EVM | Examples/Evm/Contracts/Counter.lean | 代码库中 |
| CosmWasm | Examples/CosmWasm/Counter.lean | 已规划,不在代码库中 |
| Solana | Examples/Solana/Counter.lean + manifest | 已规划,不在代码库中(工作流 7) |
| Aptos | Examples/Move/Aptos/Counter/ | 已规划,不在代码库中 |
| Psy DPN | Examples/Psy/*.golden.psy, scripts/psy/*-smoke.sh | 代码库中 |
v0 范围之外
- PDA 派生
- CPI / 子消息
- 访问控制 / 所有权
- 超过 U64 的溢出(目标可能会限制得更低)