科普 | Layer-2 中的有效性证明与错误性证明
引言
在本文中,我们将从错误性证明(Fraud Proof)与有效性证明(Validity Proof)的区别出发,分析和比较不同的 Layer-2 可扩展性方案。我们断言,相较之下,有效性证明在根本上具有优势,因为有效性证明方案保证了只有合形式的状态转换才会被接受。
背景
在最近几个月,基于证明的以太坊可扩展性方案——比如 Truebit 、 Gluon Plasma 、 dFusion 、 Roll-Up 以及 Ignis 这样的项目——开始浮出水面,让人颇为激动。这些项目背后的理念很简单:与其给区块链写入很多交易,不如产生一个证明(例如一条哈希值),可以简洁地表示这些交易,进而表示出新的状态。
上面提到的所有项目都是 Layer-2 方案:它们定义了一种运行在 Layer-1 上的协议(和逻辑),并且基于这些协议来提供多种服务:存储资金/取出资金、一个根据链下状态时时更新的账本,并作为一种 “全局时钟” 而运作。重要的是,这些协议没有嵌入 Layer-1,因此 Layer-1 也无法强制执行任何 Layer-2 的逻辑。
在此,我们想展开一种框架来比较这些方案,尤其是关注 “错误性证明” 与我们所谓的 “有效性证明” 之间的区别。错误性证明和有效性证明不是 Layer-2 的专利,在 Layer-1 上也可以存在,但当前大家仅在 Layer-2 上做尝试,因此我们的分析也都基于 Layer-2 方案。
错误性证明即表示某个状态转换不正确的证据。这种方案反映了一种乐观的态度: 假设 区块上表示的 Layer-2 状态都是正确的,除非有人能证明不是。实际上,提交到链上的区块也很有可能包含着一次不合逻辑的状态转换。
有效性证明即表示某个状态转换正确的证据。这种方案的态度更为消极:当且仅当某个状态是正确的,区块才应该包含代表相应 Layer-2 状态的值。
在继续推进分析之前,有必要强调的是:证明系统(例如 SNARK、STARK)既可以被用作错误性证明,也可以用作有效性证明。我们不应该混淆证明的方式(例如,SNARK、STARK)和证明的目的(错误或是有效)。
深度分析
错误性证明
错误性证明的主要优点是无需为每一次状态转换都提供证明,只在系统需要中断的时候提供。因此,错误性证明方案需要的计算资源更少、更适合可扩展性受限的环境。这种方案的主要缺点则来源于其非交互性:它定义了多方之间的 “会话”。一次会话要求各方——尤其是断言状态转换有误的一方——必须在线(系统要具备活性),并且允许其它方用多种方式打断会话。但问题的核心是:协议会将沉默(即挑战者的缺席)视为默示的同意。实际上,攻击者完全可以尝试用 DDoS 攻击制造出表面的沉默。
概念上,错误性证明方案可以表述如下:因为区块有可能包含不正确的状态转换,错误性证明协议设定了一个时间框架——纠纷时间窗口(DTF)——来处理不正确的状态。这一窗口的长度也是用区块数量来定义的。如果在纠纷时间窗口内无人提交错误性证明,相应的 Layer-2 状态转换就会被认为是有效的。如果有人向智能合约提交了错误性证明,而且经证明是正确的(即,在窗口期内提交,并且证明了某个状态转换是不合逻辑的),则(至少)智能合约会将 Layer-2 状态回滚到最后一个正确状态。除此之外还可能实施对作恶一方的惩罚,等等。
DTF 时间长度的选择很重要:DTF 时间越长,发现错误状态转换的几率就越高——听起来很棒。但同时,时间越长,用户需要等待的时间也越长(比如需要取款的时候),这就是一个副作用了。
有效性证明
有效性证明总体上说更为简单:向一个智能合约发送一些链下计算已然发生的证据。智能合约仅在一个新值被证明为正确之后才更新区块链。有效性证明的主要优点是区块链上总是能反映出一个正确的 Layer-2 状态,而且一个新状态可以即时使用。而主要缺点就是每个、每次状态转换都需要一个证明,不单单是状态转换受到质疑时才需要提交证明,这就影响到了其可扩展性。
51% 攻击
在多种可能的攻击方法中,我们主要关注 Layer-1 上的 51% 攻击。最近 51% 攻击 频发 ,连 以太坊经典 也未能幸免。那么错误性证明和有效性证明如何应付这种攻击呢?
错误性证明:一场 51% 攻击会在区块链中引入一个欺诈性的状态,比如从交易所中 “偷取” 一些资金。细节如下:
- 攻击者用一个欺诈性的状态转换创建了区块 BlockFr。例如,区块中包含了一笔交易,将交易所中所有的资金转移到攻击者的账户。
- 在 BlockFr 之后,他们还会接上 DTF 区块,以一个包含取款交易的区块告终(取款交易会取出攻击者从 BlockFr 区块中得到的所有资金)。
- 然后他们在 DTF 区块后面继续生成区块,直到超过当前链成为更长的链。他们能这么做是因为他们掌握了 51% 的算力
- 难搞的是,发动这样一场攻击的运营成本跟 “奖金” 规模(即受攻击的交易所控制的金额)无关(在撰文此时似乎相当低: 在以太坊上发动攻击只需每小时 10 万美元 )。这就意味着,随着密码学货币交易所的体量上升,攻击交易所会越来越有吸引力。
总而言之,问题的根源在于 Layer-2 解决方案定义了自己的逻辑,而且允许一个区块包含欺诈性的的状态转换。这样一来,攻击者偷盗资金之后的账本状态也会被认为是一个合法的状态!甚至都没有什么双重花费,只是出现了一桩欺诈。
有效性证明:51% 攻击只能遮蔽已有的账本历史,可能可以提供另一种历史;但重要的是,这一新的历史也是完全合形式的(correct)。这里所说的攻击范围仅限于在 Layer-1 上可能发动的攻击。在币币交易所中(尤其是那些所有资产都记录在同一条链上的交易所),覆写历史的勾当 有时候 是一本万利的:例如,一个卖家,可能会很乐于遮蔽掉一笔时候来看成交价位于谷底的交易,但是,在给定区块链上的交易所中,没有办法可以直接吞掉对方的钱。
我们提议的解决方案
如果有这么明显的劣势,错误证明型系统(例如 Gluon Plasma 和 dFusion)还会作为一个选项?
主要原因就是提供有效性证明迄今为止都仍是非常昂贵而且繁琐的。
在使用证明系统以前,免许可系统中唯一一种 “有效性证明” 就是简单重复运算(replay),因此可扩展性大为受限;而且,这种重复计算直至今天仍在 Layer-1 上使用,虽然众所周知它是可扩展性的一个障碍。证明系统则提供了一种非常有吸引力的特性,叫做 简洁性 (succinctness):为了验证一个状态转换操作,你只需要验证一个证明,而且验证的开销是完全独立于状态转换的计算量大小的(更准确地说,它与状态转换操作的大小是多对数(polylogarithmic)关系)。
Ignis/Roll-up 都基于 SNARK(简洁的非交互式知识证明),需要一个受信任的初始设定,并且相较于 STARK,需要证明者使用更多的计算资源。StrakWare 正在努力部署 StarkDEX,为去中心化交易所提供可扩展性方案;他会使用 STARK 来实现有效性证明,我们预计会在 2019 年第一季度末部署到测试网上。
结论
本文比较了错误性证明和有效性证明作为 Layer-2 可扩展性方案的工具价值。我们强调了有效性证明应对 51% 攻击的内在优势。而 STARK,因为证明时间更快,而且验证简单、无需受信任的初始设定,是一种生成有效性证明的有力工具。
感谢 Dan Robinson、Linda Xie、Alexey Akhunov 以及 Georgios Konstantopoulos 审读本文的初稿。
原文链接: https://medium.com/starkware/validity-proofs-vs-fraud-proofs-4ef8b4d3d87a 作者: Avihu Levy & Uri Kolodny 翻译: 阿剑
(本文来源于以太坊爱好者 EthFans,未经作者许可严禁转载,违者法律必究)