波卡是一个以平行链跨链为主要特色的公链项目。在波卡生态中,一个被频繁提到的一点是:开发者可以根据自己的需要开发独立的平行链,而波卡的生态将为所有的平行链提供安全性。因为波卡是一条公链,所以波卡的安全性就是公链安全性。
所谓谎言重复一千遍就会成为真理。当所有人都在重复一个观点的时候,人们往往会选择相信这个观点,而不是自己去探寻思考波卡的安全性设计能否站住脚。波卡基于 Validator 的巡查制度,究竟能为平行链提供多高的安全性,其实是值得质疑的。
这一期,我们来讨论一下波卡共识协议中与安全相关的设计内容,以及不同角色的参与方应该如何应对。
几周前,烤仔曾经质疑了波卡的跨链延迟。在社区伙伴的帮助下,烤仔注意到了 Gavin Wood 在 hackmd.io 的博客中提到了跨链延迟,他是这么说的:
Complete finality might take up to 60 SEConds for a parachain transaction, and a few seconds less for a Relay chain transaction.
大意是说,波卡的确认时间在一分钟上下。烤仔对此是惊讶的,因为在波卡的 Validator 巡查制度中,同时验证一个平行链的 Validator 并不是很多。如果这少数的 Validator 作恶,就会把错误的账本状态通过中继链传染到其他的平行链上去,最终摧毁整个波卡的正确性和安全性。而为了缓解这种安全威胁,允许任何人提交错误证明(这些人称为 fishermen)、留出足够时间给错误证明,是波卡公链安全中重要的一环。
在以太坊的二层协议 Optimistic Rollup 中,提交错误证明的时间窗口是以天计的。然而,这个时间窗口,在波卡中被设成了不到一分钟。Gavin Wood 也解释了为何设计如此短的时间窗口:
As of the most recently published deisgn, fishermen are no longer required for our baseline security guarantees as we have introduced explicitly-appointed secondary-checkers from the validator set (see Section 4.4.2 Validity and Availability in Overview Paper). Fishermen are kept since they only bolster security with no other implications.
(注: deisgn 为原文的拼写错误)
大概意思是说,因为波卡引入了 secondary-checkers,所以原先“允许任何人提交错误证明”的设计就不需要了。如果 fishermen 能赶得上一分钟内的提交窗口,那它还可以提交错误证明,但波卡已经不关心它赶不赶得上了。
这个 secondary-checkers 是个啥,为什么可以取代 fishermen 的地位?白皮书 4.4.2 章节是这么说的。
The third level of validity checking is executed by a few randomly and privately assigned validators. We determine the number of validators in the third level of validity checking considering the amount of invalidity reports given by fishermen and unavailability reports given by collators.
这个设计在烤仔之前的文章中也提到过。波卡引入了秘密检查的 Validator,有点类似于暗访调查组。暗访的 Validator 数量没有具体说明,只说是 “a few”,具体的参数要根据 fishermen (任何一个提交错误证明的人) 和 collator (侧链全节点) 报告的异常数量来看。暗访调查组的设计能够防止攻击者与平行链当前的 Validator 合谋,因为你不知道暗访的 Validator 是谁。但这种设计无法阻止一个坏的 Validator 被选进暗访组. 这个设计可以加强波卡生态的安全性、提升攻击难度,但不能完全取代 fishermen, 因为它无法排除暗访的 Validator 自身是恶意的情形。
但,波卡就是放弃了 fishermen.
波卡在白皮书中并没有讲他把错误证明窗口设成了极为激进的一分钟,也没有讲他们在安全设计中放弃了 fishermen。在一篇和另一个公链项目对比性能时,Gavin Wood 又抛出这个一分钟的参数来展示波卡的性能,而对安全性轻描淡写一笔带过。
跨链延迟一小时的波卡固然有它的局限性,但如果为了追求效率而放弃了提供安全性保障,那么波卡越繁荣,就越能吸引攻击,最终摧毁的是整个波卡的生态。如果波卡坚持这种不安全的方案,生态各方又应该如何应对呢?
对于波卡平行链的开发者,烤仔的建议是 Don't be evil。上述讨论的所有安全性威胁,都需要平行链全节点参与合谋。即使其他平行链的作恶行为会通过中继链传染过来,但只要保证自己的平行链不首先出错,就足以问心无愧了。
对于波卡未来生态的用户,要谨慎地选择平行链。波卡的 Validator 机制不足以提供充足的安全性,但平行链的全节点可以弥补。选择节点足够多、足够分散的平行链,可以缓解这一安全性问题。但是,一个平行链被 Validator 操纵的后果是会随着中继链传染的。即使自己选择的平行链足够可靠,其他不可靠的平行链通过跨链消息发来的资产也会影响这一平行链的安全性。
对于 DeFi 合约的开发者,波卡跨链的故事虽然新颖,但波卡生态着实没有带来什么新东西。功能上,诸如零知卷叠、隐私计算等新功能均可以通过 EVM 合约或者二层网络设计来完成。性能上,波卡的技术架构注定了平行链单链性能只会比以太坊更差,波卡只能不断讲多链的总性能比以太坊单链好。
但是多链无法解决好跨链延迟和安全性之间的平衡,使得互操作性成为一种需要牺牲安全性才能做到的事情,这是在整个公有链领域独此一家的。而 EVM 生态的性能问题,也已经被各种新兴公链解决。
最后,波卡这个“放弃 fishermen”的改动是一个定时炸弹,你永远不知道它什么时候会炸。在一个足够去中心化的、兼容 EVM 的、有用户和生态基础的、高性能的公有链上做开发,才是一个对产品发展和用户负责的选择。
最后,烤仔也提醒大家,警惕波卡不公开协议修订的安全风险。像“将 fishermen 从安全设计中排除”这种重大改动,波卡都是在和别人比性能时才透露的,而至今没有体现在白皮书里。波卡可以对此有自己的解释,毕竟 fishermen 并没有被完全去除,如果所有的 fishermen 都有比 Optimistic Rollup 的错误提交者高几十倍的效率的话,波卡的安全性不会有任何影响。
对于这种解释,我想波卡的忠实信仰者们一定是会接受的。
END