生命周期与机制
1. 定义公开条款
Opening 描述程序、两个持久化计数器、两个授权分支、两个关闭接收方、期限和 支出限制。其地址是 Poseidon2b 对这些条款及计数器的承诺。任何人都可准备、 检查或分享条款,无需发布交易。
继续调用不会修改程序或策略,只有两个计数器可以变化。因此新状态可能具有 新地址,但仍属于同一组不可变规则。钱包为了便于使用将这些状态归组;共识 身份仍然是精确的承诺。
2. 为实例注资
注资是向 opening 地址发送普通授权支付,创建包含金额、承诺和新 creation_id
的活跃输出。条款文件本身不证明已经注资。应从验证过的 State 查询当前输出,
或验证注资收据后再查询 State。
每笔存款独立。向同一个 opening 支付两次会生成两个实例,各有金额和计数器; 不会自动合并,也不会补充同一个共享预算。一次调用只花费一个实例。普通钱包 余额不会将 owner 为合约承诺的输出算作普通地址可直接花费的输出,应查看合约 余额。
官方钱包只在下一个候选区块采用 v2 时允许注资,并提供独立费用预览。保存 未注资条款免费。
3. 审核下一次调用
指定 opening 及注资输出的精确 (slot_index, creation_id)。仅使用可能被复用
的槽位索引是不够的。候选高度 h 根据承诺的期限选择分支:
| 条件 | 授权地址与关闭接收方 |
|---|---|
h < deadline_height |
Claim 领取分支 |
h >= deadline_height |
Recovery 恢复分支 |
两个分支分别允许继续和/或关闭。授权方使用新的钱包 capsule 证明自己知道普通 支出地址的秘密,并绑定完整逻辑交易。输入的 owner 是合约承诺;选中的授权 地址是允许使用它的一方。
previewObjectCall 构造拟提交的交易体、包含高度、实际费用、支付和后继对象。
提交时应使用预览返回的全部审核保护字段。链顶变化可能改变高度、分支、输入
可用性或输出位置;交易发生变化时必须重新预览和审核。
4. 继续或关闭
| 调用 | 输入 | 输出 0 | 可选输出 1 |
|---|---|---|---|
| 继续但不支付 | 一个精确合约输出 | 后继合约 | 无 |
| 继续并支付 | 一个精确合约输出 | 后继合约 | 允许的接收方和金额 |
| 关闭 | 一个精确合约输出 | 当前分支接收方得到余额 | 无 |
每次调用占一物理页,费用从被花费的合约价值中支付。继续调用遵守 max_fee、
max_payout 和 min_retained;支付限额不包含费用。关闭仍遵守 max_fee
和程序,但继续调用的支付限额与最低保留额不会限制全部余额的提取。程序可对
两种形式施加额外条件。
unrestricted_payout_recipient 只适用于继续支付,不会修改关闭调用的固定
接收方。每个活跃输出金额必须为正,因此零价值合约不能作为免费独立存储保留。
价值守恒:输入等于保留价值、支付和费用之和。关闭时保留价值为零,接收方获得 输入减去费用。现有 State 增长收费及销毁规则按照实际输出形状应用。
5. 证明与确认
内存池执行准入检查并预留冲突资源。在区块中,合约调用形成普通用户支付之前 的规范前缀。v2 关系将 opening 绑定到被花费的承诺,证明选中的授权、整数执行 以及精确 State 转换。递归终端将区块有效性继续向后传递。
提交不等于确认。在交易被接受前,待处理后继只是候选。冲突调用可能先花费同一 实例,浅层重组也可能替换已确认操作。钱包重新检查规范链头和当前 State,不 依赖已保存的 GUI 状态。最终性仍为 18 块,最多接受 17 块回滚。
6. 保留活跃权利及有用证据
继续调用后保存后继 opening。任何调用之后,都可用可携带收据保存原始条款、 操作和证明。即使普通区块正文被裁剪,收据仍可验证,但不能证明后继当前尚未 花费。
知道条款的观察者可从 State 查询余额。如果错过了已经裁剪正文、且改变计数器 的调用,就需要新 opening 或收据来识别后继。具体本地日志及导入行为见 收据与恢复。