http://www.7klian.com

ZK-rollup在lasdfsyer 2拓展性中的应用

区块链为了保持去中心化,需要由多个节点来运行。但多个节点的构架也导致了整个区块链系统的速度问题。随着区块链上面的项目不断增加,扩展性也渐渐成为一个大问题。

所有layer 2扩展性的解决方案背后的核心思想都是允许交易中的多方以某种方式安全地进行交互,而无需在主链(即layer 1)上进行交易,但在某种程度上,仍然会利用以主链作为仲裁的来增加安全性。为了增强扩展性,区块链开发社区出现了许多所谓的第2层(layer 2)协议,例如侧链(side chain)和ZK-Rollup。这篇文章简单介绍了这两种方法的技术细节以及它们的优缺点。

侧链是什么

Layer 2的扩展解决方案促使了侧链的开发。侧链是一个与主链分开的独立分类账,主要用于记录由主链上单个交易打包并且引用的多个交易。

侧链的核心思想是拥有一个完全独立的区块链。侧链拥有自己的验证者和运营方,并具有往主链来回迁移资产的能力,并且可以将每一个区块头映射到主链上用来防止分叉。

映射是一种安全保障,提供了防止验证者暗箱操作导致分叉的可能性。

在上图中,侧链生成区块,并将其映射到主链上。 映射就是将侧链区块的哈希值存储在主链上。 侧链上的分叉选择规则原理是如果这条链不是建立在上一个映射的区块之上,就不会被公认。 在上图中,即使侧链的验证者相互勾结并在生成区块A后尝试生成更长的链A'<-B'<-C',只要区块A已经映射到主链,那即便A'<-B'<-C'是较长的链,这个较长的链也将被侧链参与者所忽略。

如果参与者希望将资产从主链转移到侧链,那他们需要首先将资产“锁定”在主链上,并在侧链提供资产已被锁定的证明。 如果要解锁主链上的资产,他们首先要在退出侧链,并且提供退出侧链后的退出证明。

但是事实上,尽管侧链可以利用主链的安全性来防止分叉,但验证节点仍然可以合谋并执行另一种称为无效状态转换(invalid state transition)的攻击。 这背后的原理是利用了主链不可能验证侧链产生的所有区块的性质(因为如果主链可以验证侧链的所有区块,那侧链就没有存在的意义了。侧链的主要用途就是避免主链验证每笔交易,从而达到增加可扩展性)。因此如果超过50%或66%(取决于区块链共识结构)的验证者合谋,他们可以创建一个完全无效的区块,该区块就可以从其他参与者那里窃取资金,映射此类区块到主链,将这些钱占为己有。

目前有一些解决无效状态转换的方法,但是这些方法知道今天尚未在实践中实现,本文也不一一列举。目前,大多数侧链都是建立在验证节点不腐败的假设上来运行。

有没有什么解决方案能不需要这种假设也能够照常运行?ZK-Rollup可以做到这一点。下面我们将着重介绍这个技术。

ZK-Rollup是什么

ZK-Rollup是一种layer 2扩展的解决方案,从某种意义上说,“ZK-Rollup”实际上也是一个侧链,因为它可以产生区块并将这些区块映射到主链上。 但是,与之前分析的侧链最大的不同就是ZK-Rollup并不信任rollup中的操作方。操作方可以在任何时候停止生成区块,生成无效区块,或者尝试其他形式的对抗行为。

类似于常规的侧链,操作方无法在任何之前在映射到主链过的区块之前产生分叉,因此一旦推送到主链上的区块被确认并且操作完成,那在rollup链上的区块也会被视为操作完成并被确认。

ZK-Rollup这个二层扩展解决方案允许一个主链交易验证侧链上存储的多个交易。同时,ZK-Rollup的独特性在于并不是将每个token的转移都算作一个交易,而是可以将数百个token的转移合并起来看做为一个交易。ZK-Rollup使用中继服务器将用户存入的资金发送到一个ZK-Rollup智能合约,并且生成可用于参考主链交易的SNARK证明。

根据上面讨论侧链时所提到的问题,提供每个状态转换正确性的密码证明可能会成为解决侧链中无效状态转换问题的一种方法。

为了解决状态有效性问题,每次rollup运行方对区块进行映射时,它们都会为一系列有效状态转换的交易提供一个SNARK。参考下面一个例子:

rollup链上有三个区块:A,B和C,分别对应于主链上X,Y和Z区块的映射。 在每个时间点,除了rollup链最后一个merkle root,主链不需要存储任何信息。 当对区块A进行映射是,以下的交易内容将会被推送给主链:

新状态S2的哈希树跟 → h(S2)

S2整个状态或者区块中所有的交易

ZK-SNARK,用于证明从状态哈希值等于h(S1)移到状态哈希值等于h(S2)的交易中存在一系列有效的交易,并且交易与 (2)中提供的相匹配。

交易验证了ZK-SNARK是正确的,并在链上存储新的哈希树根h(S2)。 重要的是,它不会在状态中存储A的全部内容,而是保存在call data数据中,以便于将来可以提取。在区块链中,链上智能合约的函数可以被内部(这个智能合约本身)所调用,也可以被外部(其他的智能合约)所调用。以太坊中,call data这个名字指的是外部调用智能合约函数时所用的数据,例如函数的参数。

将整一个块存储到数据里在实际操作过程中某种程度上是一个瓶颈,但它为数据可用性的问题提供了解决方案。 在Findora平台上,多个不同的SNARK建设方法可以根据情况选择,从而达到时间、空间、是否有无可信设置等不同因素最好的折中。例如,若陈述是一个一百万个算术逻辑单元的话,Findora CFO Ben Fisch所研发的Supersonic可以在无可信设置的情况下在7.5秒内产生一个SNARK。

通过这种构造,验证方除了脱机之外不可能造成任何恶意伤害。其原因有以下几点:

验证方无法隐瞒数据,因为对区块进行映射的交易必须将完整区块或完整状态作为参数传递,并验证内容正确。并且这些内容将会被持续的保留在主网中。

因为rollup必须提交证明状态转换正确性的ZK-SNARK,并且对于无效区块无法获得这种ZK-SNARK,所以rollup不能产生具有无效状态转换的区块

分叉选择规则始终会首选包含最后一个被映射块的链,就算是存在更长的链也是如此,所以rollup无法产生分叉。

虽然使用此类的L2解决方案不会明显改善呼叫数据中的存储量,但实际消耗的可写存储量是恒定的,并且非常小。并且链上验证的gas成本仅为1k gas / tx ,比目前大部分区块链的链上交易低21倍。

为了使区块链能够继续作为去中心化基础架构,开发和实施可行的扩展解决方案仍需要大量的时间与研究。ZK-Rollup可能不是唯一一个解决方案,但是ZK-Rollup有望帮助我们铺平道路。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读