交易架构
Parano1d 把区块携带的物理交易页与钱包授权的逻辑付款分离。
Tx8x2 物理页采用固定 323 字节编码,最多包含八个输入和两个输出。逻辑 PagedSpend 最多把 128 个物理页组合为一笔原子交易意图,共用一个交易 ID 和一份授权证明封装。
| 层级 | 限制 | 用途 |
|---|---|---|
Tx8x2 物理页 |
8 个输入、2 个输出 | 固定的共识与证明记录 |
PagedSpend |
128 页 | 一次原子钱包操作 |
| 逻辑交易 | 1,020 个输入、256 个输出 | 扣除页面标记后的最大有效记录数 |
固定物理页
每页包含共同的 input_owner、交易周期(epoch)锚点、手续费字段、八条输入记录、两条输出记录以及有效性位图(bitmap)。未启用记录必须是规范零值。
输入标识为:
{slot_index, amount, creation_id}
输出标识为:
{slot_index, amount, owner}
输出物化时,分配器提供新的 creation_id。因此,即使数值槽位以后被复用,过期输入引用也不会重新变为有效。
一笔逻辑交易意图
第一页携带手续费和开始标记,最后一页携带结束标记。所有页面使用同一所有者与交易周期锚点,有效记录必须紧密排列。对于声明的输入和输出数量,页面数必须是最小值。
逻辑交易 ID 承诺:
- 协议版本;
- 页面数量;
- 按顺序排列的每个物理页哈希。
ID 由带域分离的 Poseidon2b 海绵函数计算。钱包授权绑定的是这个逻辑 ID,而非任何单页。
整组页面以原子方式准入、选择、证明和收录。矿工不能只选择一笔大型支出中手续费更有利的页面。
钱包构造
普通付款会花费活动地址对应所有者的输出。钱包优先选择较大金额,以减少证明输入数量;随后创建接收者输出,并把找零退回同一所有者。输出槽位来自节点提供的空槽位提示。
构造过程中有两条证明边界:
- 钱包证明自己知道活动地址对应所有者的秘密;
- 矿工证明输入当前存在、输出为空、数值守恒、手续费规则以及精确的转换后 State。
钱包证明在钱包状态锁之外生成。挖矿可以继续,但节点会优先处理本地交易,避免持续进行的矿工证明生成任务长时间阻塞用户操作。
内存池准入
准入流程刻意在高成本证明验证前后重复低成本检查:
- 解码规范的传输格式并验证整组语义;
- 持有内存池锁时,检查手续费、交易周期、冲突与 Live State;
- 释放锁,在有界 CPU 许可下验证授权证明封装;
- 重新取得锁,再次执行低成本 Live State 与冲突检查;
- 预留所有有效输入和输出槽,随后转发交易意图。
第二次低成本检查消除了授权验证期间新块或竞争交易造成的竞态。重复提交具有幂等性。
内存池最多容纳 1,024 笔逻辑交易以及 384 MiB 意图数据。槽位预留使输入与输出冲突检测保持常数时间。
区块选择
矿工按费率排序可接受交易组,费率相同时按交易 ID 排序。交易组始终不可拆分。选择还必须满足:
- 当前证明类别 B64 或 B255;
- 每区块最多 1,020 个有效输入;
- 每区块最多 510 个用户输出;
- 最多触及 256 个不同 State 分段;
- 可用的物理页位置。
计划中的开发奖励付款占用一个物理页位置,因此该区块剩余 254 个用户页;其他区块最多可使用 255 个用户页。
确认与收据
提交成功只表示本地节点接受并转发了完整交易意图,并不表示交易已被区块收录。交易收录并确认后,钱包才能从保留区块中恢复收据。
向同一所有者进行的归集不会生成收据。向任何不同所有者付款——包括同一钱包派生出的另一个非活动地址——都会作为支出凭证保留。