4 · 跨链模型
多数跨链设计的失败之处,在于把所有交互当成同一种流量。XChain 在 READ(不改变状态)与 WRITE(改变状态)之间划了一条硬线——整个模型都挂在这一条基本区分上。多数跨链需求不过是验证「X 在链 A 上发生过」——这是一次 READ,走 Interchain Queries(ICQ)——既便宜又几乎没有上限。只有原子性的状态改变才是 WRITE,走 IBC v2/Eureka + Interchain Accounts(ICA),并被刻意保持稀缺。
为什么一次 READ 几乎免费
这种不对称不是来自费率表,而是来自每种操作实际必须做的事。一次 READ 是对着发起查询的链本来就在跟踪的那个根验证一份包含性证明——正是 Settlement Layer 通过 PAI 维护的那个根。没有新东西需要达成一致,不开启共识轮次,也不触碰任何状态。要做的工作就是一次证明验证,而且这份成本不随被读取状态的大小增长:证明某个事件在十亿条记录的日志里,和证明它在一千条记录的日志里,代价一样。
有两条硬性规则让这件事不只是便宜,而且安全。一次 READ 不得改变状态,并且一次 READ 必须是幂等的——所以重试无害,重复查询什么也不改变,中继者重放一次旧查询也造不成损害。这正是 READ 的预算可以留成几乎没有上限的原因:一个改变不了任何东西的操作,也就无法被滥用去改变什么。
| 类型 | 机制 | 成本 | 预算 |
|---|---|---|---|
| READ | ICQ — 对着已有的根验证一份证明 | 便宜(一次验证) | 几乎没有上限 |
| Cell 内的 WRITE | 共享排序器(原子性打包) | 低 | 大多数有状态流量 |
| 跨 Zone/Region 的 WRITE | XMP + ZK 轻客户端 + pessimistic proof | 高,异步 | < 0.1% |
| 全局原子 WRITE | 仅限 Settlement Layer(Tier T0);由 intent/solver 承保 | 极高 | < 0.01% |
一次 WRITE 实际要付什么
WRITE 之所以稀缺,是因为它真的昂贵,而这笔代价买到的是一组明确的检查。它的生命周期是固定的:SendPacket → 消息被写入出站消息 Merkle 树 → 中继者带着它和它的证明送达 → RecvPacket 验证证明与防重放 nonce → 消息执行 → Ack 或 Timeout。这里没有一处信任中继者:它只搬运字节,如果它撒谎、损坏或丢弃消息,证明检查就会失败,或者超时路径被触发。中继者可以拖慢一次 WRITE;它伪造不了一次 WRITE。
有三项义务被规定为 MUST,这正是让模型在不断加入新链时不会走样的东西:
- nonce 必须按 (源, 目的) 这一对单调递增 —— 这让重放在结构上不可能,而不只是不太可能。
- 任何搬动资产的 WRITE 必须调用
**UAC.checkPlacement**—— 于是 2 域边界在每一次转移时都被重新检查,而不只是在发行时。 - 跨区域的 WRITE 必须携带 pessimistic-proof 记账 —— 这是把远端故障变成有上界损失的机制。
参考数据路径——记录一个「赞」,并在不重新执行的前提下跨链证明它:
图 4 — 参考数据路径:追加、锚定,然后跨链证明包含性。
什么会坏,以及什么依然成立
跨链系统该由它的故障模式来评判,而不是由顺利路径来评判,所以下面是真正要紧的那些——包括 XChain 刻意不做出的那项保证:
| 出了什么事 | 会发生什么 | 什么依然成立 |
|---|---|---|
| 中继者掉线或审查 | WRITE 被延迟;最终 Timeout 触发 | 不存在部分生效:消息要么带着有效证明执行,要么超时。任何人都能运行中继者,所以审查是活性问题,不是安全性问题 |
| 一条消息被重放 | RecvPacket 在 nonce 这一步拒绝它 | 按对单调递增的 nonce 让重放不可能发生,而不是「不太可能」 |
| 一条链被攻陷,试图取出比存入更多 | pessimistic proof 拒绝超出的部分 | 损害被限制在那条链自己的份额之内——这正是验收标准 MVC-3 拿一条模拟故障链来考的东西(运行节点) |
| 有人试图把高价值资产挪进数据域 | UAC.checkPlacement 拒绝这次 WRITE | 域边界在每一次转移时都被强制,而不只是在发行时 |
| 一次跨区域 WRITE 只完成了一半 | 无法阻止。 跨独立共识区的原子性没有无需信任的构造方法 | 隔离限损与经济承保为损失设上界。这一点被明说为尚未解决的问题,而不是被掩饰过去——见 开放问题 |
最后一行是这套设计诚实的边缘。XChain 不宣称全局原子性,因为还没有人拥有无需信任的构造方法;它宣称的是:故障留在它发生的那个区域里,而且损失的规模是事先知道的,而不是事后才发现的。
要点: 另一条链只用一次证明检查就证明了这个「赞」确实发生过——没有有状态的消息,也没有重新执行。跨区域的原子 WRITE 并未在协议层承诺全有或全无;它们通过 pessimistic proof 与经济承保做到的是隔离限损。不过,一条近乎免费的读取路径只有在价值绝不会越过它所读取的那条边界泄漏时才是安全的——这是一个安全问题,下一节回答。