区块链应用开发指南:业务场景剖析与实战
上QQ阅读APP看书,第一时间看更新

3.3.2 ZK Sync的承诺:免信任、保密、快速

下面从技术角度,让我们来看看ZK Sync的架构、设计原则以及协议的良好特性。

1.安全性:扎根于ZK Rollup

ZK Sync是基于ZK Rollup的概念搭建的。

简而言之,ZK Rollup是一种二层(Layer 2)扩展方案,所有的资金都存储在主链上的智能合约内,计算和存储则在链下执行。每创建一个新的Rollup区块,就会生成一个状态转换的零知识证明(SNARK),并提交给主链上的合约进行验证。这个SNARK包含了对Rollup区块中所有交易有效性的证明。此外,每个区块的公开数据更新,都会作为便宜的calldata发布到主链上。

该架构提供了以下保证:

(1)Rollup验证者永远不能破坏状态或窃取资金(注意,这里不同于侧链)。

(2)即使验证者不配合,用户也可以追回Rollup上的资金,因为Rollup具备数据可用性(注意,这里不同于Plasma)。

(3)得益于有效性证明,无论是最终用户,还是可信的第三方,都不需要通过在线监视Rollup区块来防止诈骗(注意,这里不同于使用错误性证明的系统,例如支付通道或optimistic rollup)。

综上所述,ZK Rollup严格继承了底层链的安全保障。正是有了这种安全保障,再加上丰富的以太坊社区和现有的基础设施,以太坊才决定专注于二层解决方案,而不是试图搭建自己的底层链。感兴趣的读者可以去继续了解ZK Rollup和Optimistic Rollup之间的区别,会更有收获。

Matter Labs在过去的一年以来都在研究ZK Rollup技术。自首个原型发布以来,团队已经全部重写了架构和ZK的电路。最新的版本融合了从社区获得的反馈,并实现了各种可用性和性能改进。

简单概括一下,ZK Rollup实现的安全性体现在如下几点:

  • 完全的免信任性
  • 具备与底层链(以太坊)同样的安全保障
  • 第一次确认之后,就具有由以太坊背书的确定性

2.可用性:实时交易

尽管大家乐观相信,但是仍然还需要证明的是:ZK证明技术的最新发展成果将缩短证明时间,将ZK Rollup区块的出块时间控制在一分钟之内。一旦区块证明被提交到主链,并在Rollup智能合约中验证通过,这个区块内的所有交易都会得到最终确定,并且受到Layer-1抵御链重组的能力保护。

尽管如此,就零售和线上支付领域而言,以太坊上15秒的区块延迟也有些不可接受,如何才能够做得更好呢?

所以,大家打算在ZK Sync中引入即时交易收据(instant tx receipts)

简单来说,那些选择参加ZK Sync区块生产的验证者,必须向主网上的ZK Sync智能合约提交一笔可观的安全保证金。由验证者达成的共识会为用户提供亚秒级确认,确保其交易包含在下一个ZK Sync区块内,并由绝大多数(2/3以上)的共识参与方签署(按权益加权)。

如果一个新的ZK Sync区块被创建出来并提交到主链上,它是无法被撤回的。但是,如果这个区块不包含已承诺的交易,则签署过原始收据和新区块的验证者,其安全保证金会被罚没。这部分验证者所质押的保证金必定超过总金额的1/3以上。也就是说,惩罚会覆盖1/3乃至以上的安全保证金,而且只有恶意验证者会遭受惩罚。

被罚没的金额中有一部分会用来补偿交易接收者,剩下的会被销毁。

罚没机制既可由用户自己触发,也可由任意签署过原始交易收据的诚实共识参与方触发。后者天生就有触发罚没机制的动机:如果他们参加下一轮区块生产,可能也会遭到惩罚。因此,共识参与者中只要有一个是诚实的就足以检测欺诈。

再细说一遍:ZK Sync设计了一种零确认的交易模式,也就是让一笔交易附带一个即时交易数据,该收据会指向一个尚未发布到链上的ZK Sync区块。

在区块证明发布到主链之前,只有短短几分钟的时间可以对ZK Sync上的零确认交易发起双花攻击。此外,恶意验证者要想诱使用户相信自己的交易已成为零确认交易,得做好1/6的安全准备金被罚没的打算。

从买卖双方的角度来看,零确认交易是:

(1)即时的;

(2)存在逆转的可能性,不过只在短短的几分钟之内;

(3)只有在同时而非逐个对上千个卖方发起攻击的情况下才可逆。

相比信用卡支付,ZK Sync在用户体验和安全性上有很大提升!

现在让我们站在不同参与者的角度来看:

  • 出售实物商品的线上商店会立即向用户确认订单,但是不会遭受攻击,因为卖家会等到完全确认之后再发货。
  • 实体店在交易量较少之时是几乎不可能遭受攻击的。即使你是以即时收据的形式来出售一台Macbook,也要有数千名协调一致的攻击者在不同的地点发起攻击,还要依靠大多数验证者串谋才能成功。

说得再深入一些。为了量化风险,我们可以将保证金提供的经济保证与PoW区块链提供的结算保证进行比较。举例来说,经过35个交易确认之后,Coinbase才会接收一笔以太坊资金存款。如果是通过亚马逊云服务租用GPU来发起51%攻击的话,要持续攻击10分钟才能撤回这个交易,成本大约在6万美元。假设安全保证金高达数百万美元,撤回一个即时ZK Sync收据所需的成本会高得多。因此,这些即时收据的经济确定性相比以太坊有过之而无不及。

要注意的是,即时交易数据不会受到ETH区块重组的影响,因为这些收据的有效性与以太坊无关。此外,以太坊的结算保证与ZK Sync的结算保证是结合在一起的。

3.总结:实时交易

  • 亚秒级交易确认的经济确定性堪比以太坊。
  • 几分钟之后就具有由以太坊背书的确定性。

3.3.2.1 活性:抗审查性和抗DoS攻击

扩展方案必然具备的一个属性是,大多数用户都无法参与所有交易的验证。因此,所有二层扩展方案都需要专门设置一个角色(Plasma和Rollup上的验证者、Lightning hub,等等)。这类角色对于安全性和性能的要求较高,带来了中心化和审查的风险。

为了解决这一问题,ZK Sync在设计上引入了两种不同的角色:验证者和守护者。

1.验证者(Validitor)

验证者负责将交易打包到区块内,并为这些区块生成零知识证明。他们要参与共识机制,必须缴纳一笔安全保证金,才能创建即时交易收据。验证者节点必须在网络带宽良好的安全环境中运行。或者,他们也有可能按自己心意在不安全的云平台上生成零知识证明。

验证者将获得交易费作为奖励,是用被交易代币来支付的(为终端用户提供最大程度的便利)。

为了快速达成ZK Sync共识,验证者的人数是有限制的(根据我们的分析,30~100人比较合适)。但是别忘了,ZK Rollup验证者是完全免信任的。在ZK Sync上,恶意验证者既不能破坏系统的安全性,也不能欺骗诚实的验证者触发罚没机制。因此,不同于optimistic rollup,系统的守护者(Guardian)可以频繁更换一小部分验证者。与此同时,只要有2/3的提名验证者是诚实且可进行操作的,就能确保满足活性要求(liveness)。

2.守护者(Guardian)

大部分通过质押代币份额来提名验证者的ZK Sync持币者会成为守护者。守护者的目的是监控点对点交易流量,探测审查行为,并确保不会提名那些有审查行为的验证者。为了保护自己的质押物不被罚没,守护者必须确保ZK Sync可以抵御DoS攻击,不会实施审查。

虽然投票密钥通常来说都是在线保存的,但是这不会给ZK Sync上的守护者带来罚没或盗窃的风险(所有权密钥是冷存储的)。守护者就可以选择只监控一小部分流量。因此,守护者节点可以运行在普通的手提电脑或云服务器上,也就是说,不需要提供专门的验证者服务。

守护者会获得验证者的费用作为奖励,是以ZK Sync原生代币的形式发放的。其收益和押金会被锁定较长一段时间,以此促进ZK Sync代币的长期升值。

3.总结:活性

  • 两种角色:验证者和守护者都受到交易费的激励。
  • 由验证者运行共识机制并生成证明。
  • 由运行在普通硬件上的守护者防止审查。