收据与可裁剪历史
Parano1d 不要求每个节点永久保存每个历史区块体。这消除了不断增长的共识负担,但用户仍需要一种长期有效的方法来证明付款已被纳入区块。收据恰好保留这部分证据。
一份收据包含:
- 不含授权证明封装的规范逻辑
PagedSpend; - 交易在区块中的逻辑位置以及区块交易总数;
- 区块交易树中的固定深度 Merkle 路径;
- 声明的交易根和区块高度;
- 用于显示与核对的公开付款摘要。
交易树固定有 256 个叶子,因此包含路径的深度始终为八。
两个验证层次
验证收据需要回答两个不同的问题。
离线包含验证检查交易数据、位置和 Merkle 路径能否重建所声明的交易根。它不需要连接节点,并且在区块体保留窗口结束后仍然有效。
规范链验证向在线节点查询声明高度上的永久区块头是否具有同一个交易根。这一步证明收据属于该节点当前的规范链。
非规范区块的有效包含证明在内部仍然自洽,却不能证明规范链上的付款。因此,钱包会等待确认后再保存最终收据。
本地保存
付款确认且区块数据仍可取得时,钱包生成支出收据。收据与钱包数据一起保存在本机。它们不能从 256 位主密钥重新推导,因此在另一台电脑导入主密钥时不会恢复。
如果需要长期保留付款凭证,应单独备份收据数据。导出的收据文本是自包含的,可由另一台 Parano1d 节点验证。
哪些交易会生成收据
向不同接收者付款时会生成收据。是否“不同”只与该笔支出的输入所有者比较,而不是扫描钱包可能派生出的所有地址。
这意味着:
- 向他人的地址发送资金会生成收据;
- 从活动地址发送到同一钱包的另一个非活动地址,也会生成收据;
- 把输出归集回同一所有者不会生成收据。
该规则让归集操作不出现在用户的付款记录中,同时避免节点扫描或识别钱包其他潜在地址。
提取时限
节点保留最近 18 个完整区块。已确认的支出必须在其区块体仍然可用时写入本地收据库。钱包扫描器会在正常运行和重启后完成这项恢复。
一旦保存,收据便不再依赖区块体保留窗口。