在烤仔的上一篇文章《吐槽君烤仔 | 波卡从“万链互联”到“One链Who连”》中,我们指出波卡的跨链延迟不足以支撑起波卡生态所构筑的愿景,最终会使得波卡的泡沫破裂。在本期文章中,我们来解构波卡的协议设计,来探寻波卡讳莫如深的跨链延迟究竟是多少。
根据波卡的官方技术文档,在波卡的架构中,有三个关键角色:提名人(Nominator),验证人(Validator),收集人(Collator)。验证人大致相当于 Relay Chain (相当于核心链)的 PoS 全节点。提名人负责选举验证人。收集人大致相当于 ParaChain (相当于侧链)的全节点。这里我们要分析的,就是验证人和收集人的关系。下面,我们用核心链、侧链指代波卡中的 Relay Chain 和 ParaChain。
为了让平行链上的状态可靠地同步到核心链上,收集人(侧链全节点)每生成一个区块,就要相应的产生一个有效性证明 (Proof of Validity)区块。验证人(核心链全节点)通过侧链开发人提供的算法验证这个有效性证明区块。如果验证通过,就把侧链区块头及相关元数据写入核心链中,相当于侧链的状态同步到了核心链上。
在官方默认方案中,这个有效性证明区块需要包括:所有交易内容、处理每笔交易时读到的数据(如转账发送人余额)及其证明、处理每笔交易时写入的数据(如更新转账发送人余额)及其证明。这样,验证人(核心链全节点)就不需要存储任何侧链的状态,只需要重新执行一遍交易就可以了。但在 CPU 开销上,验证人(核心链全节点)仍要执行侧链的每一笔交易。显然,验证人(核心链全节点)不可能同时执行每一个侧链的每一笔交易。波卡的方案是,验证人同时只验证一个侧链,但随着时间的推移,同一个验证人会在不同侧链之间切换,颇有些巡视组的感觉。
但是,如果波卡有 100 个侧链,就意味着同一时间一个侧链只有 1/100 个验证人。如果这些验证人恰好都是坏人,就可以与这个侧链的一个收集人(侧链全节点)合谋,在侧链执行上弄虚作假,并且同步到主链上。这种情况下,侧链的安全性将毫无保证。于是,波卡设置了“赏金猎人”和“随机巡视”的机制。赏金猎人维护一个侧链的全节点,当虚假的侧链区块被提交到核心链上时,赏金猎人可以通过举报获得赏金。除了赏金猎人之外,波卡还会随机秘密分配验证人(核心链全节点)来检察。
这个方案非常像以太坊里面 Optimistic Rollup 的思路。一些人负责将侧链的数据提交到主链上,另外一些人负责监督和举报错误提交。这个思路最大的问题是,为了留出充足的举报时间,从侧链区块提交核心链到侧链区块被核心链接收需要相当长的时间。在 Polkadot 原始白皮书(polkadot.network/PolkaDotPaper.pdf)提到的以太坊跨链方案中,以太坊跨入波卡需要半个小时,而波卡跨回以太坊需要一个小时。白皮书特别提到,波卡跨回以太坊之所以需要一个小时时间,是为了给举报留足时间。虽然白皮书没有明确说明核心链与侧链之间的跨链延迟,但可以推断,这段时间应当也是十分钟级到小时级。这意味着,一个波卡侧链发出的跨链消息,需要等待几十分钟时间,然后才能被消息接收方收到和处理。
如果波卡是一个联通不同区块链的解决方案,花几十分钟时间将资产从以太坊跨至其他链是可以接受的。然而,在今天的波卡生态中,每个 DeFi 应用和基础设施成为了一个侧链,在以太坊上的合约间交互、在波卡这里变成了长达几十分钟的跨链。
当然,波卡可以选择一个激进的方案,放弃安全性换取效率:为每一个区块留出极小的错误证明 (proof of fraud) 时间窗口,甚至不给错误证明留时间。换句话说,就是抛弃错误证明这个安全性基石。这样,虽然可以显著地降低跨链延迟,但也是在自掘坟墓。跨链延迟一小时的波卡或许还有一定的价值,毫无安全性可言的波卡就只是空气了。
最终,我们的结论是,在跨链时间延迟上,波卡平行链(侧链)与以太坊 Layer 2 相比并没有优势。以太坊 Layer 2 做不好的事情,波卡一样做不好。