2017年,在以太坊上由 CryotoKitty 引发区块链拥堵以来,如何实现区块链的扩容成为了区块链开发者们一个重点关注的内容。在经过了数次优化和改进之后,在当前的区块链领域,普遍采用的是名为“Pollup”的扩容方案。
Pollup 的原理是在区块链主链之外构建一个额外的子链,将交易的执行和处理在子链中进行,而主链负责验证交易的有效性和提供安全性。主链和子链通过一个(或多个相关联)的合约进行连接。子链利用默克尔树将执行和处理的结果,并通过根哈希每隔一段时间将数据上传到主链当中。
主链需要对子链提交的数据进行验证,审查子链数据的真实性和可信度。在目前,这种验证方式主要有两种:一种称之为欺诈性验证;另一种称之为有效性证明。前者验证时需要由用户对数据发起挑战,往往需要花费数天时间,而后者子链在提交数据时,需要额外提供一个 ZK-SNARK 证明(零知识证明),使主链不需要花费额外的验证时间。更重要的是, ZK-SNARK 证明让我们可以不用提交所有的数据都可以证明交易有效性。ZK-SNARK 的优势,让许多区块链扩容方案都更青睐它,即所谓的 ZK-Rollup。
但是,在实际执行的过程中,目前很多解决方案依然采用的是利用欺诈证明的 OR(Optimstic Rollup),ZK-Rollup 的研发进度和实际应用都要比 OR 更慢。这其中最为关键的在于,ZK-Rollup 是一个拥有高复杂性的方案。
在互联网中,生成一个可验证的 ZK-SNARK 并不是一个简