2017年由 CryotoKitty 引发的以太坊拥堵事件,让人们认识到了区块链对于数据交易吞吐量是存在上限的,因此,如何提高这个上限,也成为了近两年来,区块链研发者们不断思考的一个问题。

到目前为止,主要产生了两种解决方案。其一是直接对区块链本身的数据进行分片改造,提高链的处理效率;其二则是将交易和执行放到链下,区块链仅仅只是用来验证交易有效性,提供安全性保证。前者仅仅只是对于区块链内部进行改造,提升的效率是极为有限的。后者,便是我们今天的主角,被称之为 Layer2 的扩容方案,通过链下对大量的数据进行处理,极大提高了区块链的整体效率

Rollup 是 Layer2 方案中经过多次优化和改进后,在当前一个十分优秀的技术方案。

原理

Rollup 通过额外部署一条子链的方式,来实现对数据交易的处理和执行。这条子链可以和主链拥有不同的共识机制,也可以有不同的节点,有着极高的自主性。

当然,Rollup 子链也与主链是有着联系的。数据的交易和执行结果会每隔一段时间便会生成一个默克尔树,这个默克尔树的根节点哈希被称为 state root,它包含了此阶段所有交易和执行的信息。在主链中,拥有一个(或一系列)与这个根节点相互关联的智能合约,会定期接受来自子链上传的执行结果,并对其进行验证。

值得一提的是,Rollup 子链所形成的默克尔树叶节点还会记录账户的状态信息。主链是可以通过 state root 来获取一个账户状态key-value map(key:账户地址;value:包含余额/Nonce/合约代码/存储等状态信息),当子链中发生交易之时,这些账户状态便会发生改变,从而让主链也能准确和及时了解子链中的最新交易情况。这样避免了因为数据交易和执行放到线下,而导致的“数据不可用”问题。

验证可验证信息的正确性

主链需要验证 state root 上传的可验证信息的正确性,才能保证所有交易的正确和合法性,而验证的方法主要有两种方案,根据方案的不同,Rollup 被分为了 Optimistic Rollup 和 ZK-Rollup 两种类型。

Optimistic Rollup

这一方案主要是以相信提交者提交的信息是正确的为前提进行的。当有人通过欺诈证明来证明提交者提交的信息是错误之时,便会启动相应的惩罚机制。

简单来说,Optimstic 虽然相信提交者不会作恶,但为了震慑和预防,提交者通常会先质押一部分资金,而当提交的信息被验证为错误之时,便会扣除一部分质押资金作为惩罚。而相应的,通过欺诈证明发现错误信息的验证者,也会获得这部分扣除的资金作为奖励,这样也能极大程度上激励监测和提交欺诈证明的行为。

ZK-Rollup

ZK-Rollup 和 Optimstic 相反,它采用的是一种以不相信提交者能够主动提交正确信息为前提,这类似于刑侦中的“有罪推定”原理。这种验证方案,使得提交者在提交常规的可验证信息之外,还需要携带一个 ZK-SNARK 证明(零知识证明)。

ZK-SNARK 是一个有效性证明,它可以直接用来验证提交的信息是否正确。它和欺诈证明的区别在于:如同 Optimistic Rollup 那般提交的信息是秉持验证者“爱信不信”的原则,如果不相信,便通过欺诈证明进行挑战和验证;而 ZK-SNARK 则是直接在提交时生成一个证明,通过“自证清白”,在提交之时便可以完成验证。

ZK-SNARK 拥有更加高效处理的优势,不必如同欺诈证明一般,可能会等好几天才会进行挑战和验证。另外,ZK-SNARK 还不必需要像 Optimistic Rollup 那边进行质押来预防提交者不会作恶。

此外,所谓的“零知识证明”意味着证明人在向验证者证明某个结论之时,不需要透露任何有用的或和所证明的实体本身有关的任何信息。这使得提交者在提交可验证信息时,也可以不必提交全部的交易数据来证明交易的有效性,这对于 Rollup 来说,有着十分重要的意义,它对于 Rollup 的效率提升也是一次重大的突破。