从侧链(Plasma)到Rollup

Plasma

尽管通道技术为Layer1提高了吞吐量,但是通道主要支持高频、小额支付,难以处理大规模资金转移是通道技术的局限性,针对这个问题,侧链技术应运而生。侧链是一条独立的区块链,拥有自定义的共识机制、数据结构、社区运营模式等。主链一般不知道侧链的存在,侧链也不会影响主链的正常运转,因此侧链也是一种无需更改主链框架即可实现扩容的方案。早期侧链设计架构像是一个第三方交易所,允许用户在主链与侧链间转移资产,而后在侧链上完成交易,从而降低用户交易成本,替主链分担交易量,间接提高主链吞吐量。虽然侧链可以处理更大额的交易,但其本质上还是需要信任侧链运营商,这与区块链去中心化的理念背道而驰,为了让侧链去中心化,有学者提出将侧链的状态以某种形式存放在主网上供各用户监督,尝试通过这种方式削弱侧链的中心化属性。将该想法实现的最具有代表性的侧链是Plasma链。Plasma链不仅仅是一个项目,它更像是一个框架,在此框架上引申出了Plasma MVP,Plasma Cash,Plasma Debit…

资产转移

若想将主链的资产转移到Plasma链上进行交易,直接在主网上将资产转移至Plasma对应的地址可能导致交易失败或者资产损失,因为他们不是同一条区块链。Plasma在主网(以太坊)上部署了智能合约(如图8所示),用户将资产转移到Plasma在以太坊上的指定地址,而后Plasma会铸造等价的替代代币。当用户从Plasma提取资产时,Plasma将销毁先前铸造的代币,而后在主网上向用户释放对应的资产。此处铸造、销毁是因为无法将资产在物理意义上进行跨链转移,因此通过主链锁仓、侧链铸造销毁的方式在逻辑上实现资产跨链。
在这里插入图片描述

图8

状态提交

为了削弱侧链的中心化属性,Plasma提出将每条侧链的区块头放到主链上,一方面可供用户验证执行执行结果的正确性,另一方面依靠主链的安全性,可作为安全储备。但区块头对于主链来说仍然太大了,因此为了减少在主链上的存储空间,Plasma使用默克尔根来代表各区块中各交易的状态。
若主链不知道侧链的状态而侧链一直为主链处理交易,这对任何一方来说都不是一个安全的事情,因为我们无法确定侧链是否在作恶,因此Plasma运营商每隔一段时间将默克尔根提交到主链的Plasma合约中。
默克尔根不仅压缩了大量的交易,而且难以造假,用户可以通过计算该区块所有交易的状态推算出运营商提交的默克尔根是否正确。只有两棵默克尔树的叶子节点存储信息完全一致时,该两棵树的默克尔根才会一致。同时,默克尔根可以通过节点的哈希值和下载相关节点的哈希值来快速验证某个元素是否在一个集合中(如图9所示),同理,用户可以生成一个默克尔根证明证明交易包含在特定区块。
在这里插入图片描述
图9
当Plasma链执行完新的交易时,会产生新的状态,此时父链保存的状态根(默克尔根)也将随之改变,用户可以将在Plasma链上下载的交易信息在EVM虚拟机(侧链用的虚拟机一般与以太坊一致)中计算,比对父链中保存的状态根是否正确。
每一条Plasma链理论上都可以创造出更多的子链来减轻父链的工作量,而子链可以被组织成树的形式,同时链树拥有法院系统,即父链可以仲裁其相关任意子链的纠纷,因为他掌握着子链的区块头以及默克尔根,配合欺诈证明可以轻松做出裁断。

欺诈证明

当侧链产生恶意区块时,用户缺乏反制手段,而Plasma给出对应的解决方案是在其父链上存储状态根,用户通过欺诈证明阻止侧链运营商产生恶意区块。任何用户在监控侧链并发现恶意区块时,都可以向其父链提交含默克尔根的欺诈证明,而后恶意区块将被回滚,恶意区块的生产者将被惩罚。
在这里插入图片描述
图10
当用户从侧链提现资产到主链时,同样需要使用包含默克尔根的请求。用户向主链的Plasma合约发出提款请求,合约检查用户要提取的资产是否存在,即在指定区块的指定交易内是否有该用户的未使用输出(Plasma使用的是UTXO模型)。此处设计是为了防止恶意用户提出虚假的请求(提取不属于自己的资产),但恶意用户仍有可能制作虚假的证据向合约证明,由于主链无法主动获取链下信息,只能验证默克尔根是否计算正确却无法验证证明真假,因此引入了“挑战期”机制。在“挑战期”内(一般为一周),任何人都可以构造欺诈证明来挑战提款请求。无论是区块生产者、提款人、挑战者在做出动作之前都需要锁定一定的保证金,挑战/守擂成功的一方将获得奖励,挑战/守擂失败的一方将扣除部分保证金。
若在挑战期内无人提供欺诈证明,则侧链的区块将永久生效,不再回滚。同理,提款请求也将通过,Plasma合约允许用户取回资产。

评价

相较于“通道”技术,Plasma像一个传统第三方交易所,一般来说用户只需要把钱存入Plasma即可开始交易,上手难度低,交互体验良好。Plasma支持主链使用智能合约,而“通道”在面对UTXO模型的链时才拥有较好的应用性能,适用范围较窄。但Plasma链本身是使用UTXO账本模型的,不支持智能合约(复杂计算)。Plasma提款时间较长,但对于有快速提款需求用户,可以通过流动性池来快速提款,但可能需要花费较高的手续费。
可拓展性:由于侧链拥有非常灵活的链定制方式,Plasma链的吞吐量取决于他设计时使用的共识机制、区块数据结构大小,GAS消耗限制等。Plasma链可以作为父链拥有子Plasma链,实现吞吐量的进一步的提高。
安全性:Plasma通过在主链上存放状态根的方式继承了主链的安全性,防止了子链的伙同作恶行为和恶意用户的双花攻击。而Plasma允许一个人(或权益证明网络中的参与者网络)能够管理一个区块链,则Plasma运营商可能盗窃用户资金且不在主网上公开交易信息(仅提交状态根),这意味着用户无法使用交易信息构造欺诈证明去证明运营商的作恶行为。由于提款机制的原因,用户的提款顺序是按照UTXO的创建时间排序的(用户与运营商同时提款时,用户提款请求将被优先执行)。当出现这种运营商作恶的情况时,用户们将在主网(以太坊)上大规模申请退出Plasma,而这一行为将导致主网的全网拥堵。而这个问题也是掣肘Plasma方案发展的重要原因。用户们需要周期性的观察主网上的状态根是否正确,一方面需要用户保持定期观察,另一方面只要网络中拥有一个诚实的且在观察的用户即可保证状态根的正确,Plasma的安全。
去中心化程度:从理论上看,Plasma更像是一个框架,当前该框架的衍生版本有Plasma Cash,Plasma MVP,Plasma Debit等,而这些项目的去中心化程度取决于他们所使用的共识机制。尽管Plasma试图通过在主网存放状态根的方式将其构建成一个不完全中心化的项目,但其不完全去中心化的局限性就是制约Plasma发展的重要原因。

Rollup

2018年,学者们结合通道数据可用性、Plasma支持UTXO、智能合约主链的优势,提出了Rollup框架。Rollup框架的想法是:将交易移到链下进行计算,在主链存储其状态根,同时将交易数据也保存在主链上,但交易信息原封不动传到链上是不现实的,因此Rollup对交易进行压缩聚合,仅保存交易可供验证的必要信息,将一批批的交易打包成一个个摘要存放到链上。这种方式带来的两个好处是:1、将上链以太坊的费用平摊到批次中的每个交易,即保证了安全又大大降低了成本;2、避免数据不可用的问题,因为所有信息都可以从主链上获得,用户可以轻松构造欺诈证明保护自己的资产安全。当前Rollup有两种技术,分别是Optimist Rollup(下文简称“OP”)与Zero Knowledge Rollup(下文简称“ZK”)。OP对整个交易过程持乐观态度,认为链下计算是可靠的,链中都是诚实的参与者,因此运营商不对提交至主网的信息进行验证,但是拥有挑战期供用户们维护自己权益。ZK则是通过严谨的密码学证明证明提交到主网的信息的有效性。

Optimistic Rollup

OP与Plasma相似,依赖欺诈证明来检测交易的正确性,当OP在主链上提交一个区块(含摘要与状态根)后,有一个挑战期(七天),任何人都可以通过构建欺诈证明来挑战该区块。若挑战期结束后仍未受到挑战,则在主链上将被确认,不可再被回滚。其他用户可以在其认为正确的区块后面提交新的区块,若新区块的父/祖区块被挑战成功,则接在其后的区块也将一并回滚,并没收保证金。
在这里插入图片描
图11 (图片取自Arbitrum White Paper V2.0)
OP的运行机制是:用户们在L2上向节点提交交易,各节点定期将交易提交给一个特殊的全节点(又称排序器),排序其对交易进行简单排序后将他们压缩聚合成一个摘要,再将摘要提交到主链上OP的inbox合约中,用户从inbox取出摘要并解压,随后将交易按序执行,算得最终状态根,将状态根及必要的证明(涉及隐私保护方面)提交到主链的rollup协议中。OP在主链上有一组合约负责维护L1、L2之间跨链事务及各项功能正常运转,各个合约负责不同的业务。排序器将刚刚提交的交易计算后生成一个L2区块并得出一个状态根,将状态根提交到L1经过挑战期后即可真正生效。
从理论架构上看,任何参与者都可以成为区块、状态根生产者,方法很简单:参与者从L1的inbox合约中获得交易摘要,经过虚拟机的运算即可得出结果,一方面可以参与出块的工作,只是排序器速度更快(因为摘要就是排序器生产的,而其他参与者需要等到摘要被提交后才能知晓哪些交易即将被执行);另一方面可以验证排序器计算结果是否正确。但是当前为便于管理,当前版本的OP暂时都由排序器出块,验证者需要申请进入白名单才可实行挑战的权力,OP在未来将开放权限,实现任意用户都可参与出块、验证的目标。
为避免排序器出现中心化行为,如拒绝打包某些交易,OP通常会在主链上构建一个delay-inbox合约,用户可以直接在L1上向delay-inbox合约提交交易,经过一段时间将会被合约强制升级到inbox合约中,交易被强制执行。
在任何时候,OP链上的状态都将通过默克尔树计算成为一个状态根,通过状态根反应OP链上的最新状态。每次在OP链上提交新状态根时需要附上旧状态根,只有当旧状态根与上一个状态的新状态根一样时,才可进入挑战期接受其他参与者的监督,否则将直接丢弃。
在这里插入图片描述
图12
Plasma常用的欺诈证明验证方法为重放有争议的交易以检验是否有问题,重放需要在链上虚拟机中重新执行一遍交易,然而在rollup已打包的交易中,重放其中的某个交易意味着需要将该批次交易中的之前的若干交易按序执行,直到执行到有争议的交易,再将执行的结果放入默克尔树中计算,这将消耗大量的时间与经济成本。因此,OP提出了交互式欺诈证明。以OP项目Arbitrum为例,通过挑战者和被挑战者之间的多次交互,不断缩小争议范围,最终精确到某一条指令,此时挑战者需要提供“一步证明”,而主链仲裁合约中只需执行该条指令获得结果即可,无需执行大量交易。若挑战者质疑的部分包含x个执行步骤,那么守擂者将x个步骤分成两半,并给出其执行至x/2时状态及最终状态,挑战者将选择其中正确的一状态,接着守擂者将另一半再继续分成两半,挑战者继续选择正确的状态,多次交互后将把争议范围缩小至某一条指令,此时L1的仲裁合约根据争议指令实际做了什么及守擂者的说法是否正确来解决争议。一般来说交互式的二分协议使用范围较小,项目方常常根据需求对每次状态选择进行k(k>=2)次切分。
在这里插入图片描述
图13
OP没有共识机制,因为OP在主链上记录了OP链上发生的所有历史交易及交易发生顺序,用户在inbox合约中即可找到所有所需资料并且恢复OP链的状态,而且所有历史状态都与最新状态根及历史状态根相符。任何人在缴纳了保证金后都可以成为出块者、验证者,由于高额的吞吐量,出块的代币奖励极低甚至没有(如Arbitrum),因此不会出现类似比特币、以太币通过代币奖励刺激用户维护网络的情况。OP不需要大量普通甚至无关用户维护OP网络,例如为获得代币在矿池挖矿的矿工们,更希望在链上拥有资产的利益直接相关方可以为维护自己的资产安全而成为验证者、出块者。同时,由于OP欺诈证明机制的特性,网络中只需要有一个诚实的验证者即可保证网络与资产安全。

Zero Knowledge Rollup

ZK运营商提交用于表示一批交易中所有交易的状态转换的摘要,而不是单独发送每笔交易。他们还生成零知识证明(又称有效性证明)来证明状态变化的正确性。该零知识证明能以密码学方式自证,确保提出的以太坊状态变化确实是该批次中所有交易执行后的最终结果(通过证明即可验证,而不是自己去执行所有交易然后计算最后的默克尔根是否正确)。
ZK的状态由部署在主网上的智能合约维护。为了更新这个状态,ZK节点必须提交一个零知识证明进行验证,即ZK运营商提出的状态变化确实是执行给定批次交易的结果。这意味着ZK只需提供有效性证明即可在以太坊上最终确定交易,而不是像OP那样将所有交易数据发布到链上。
将资金从ZK转移到以太坊时不会出现延迟,因为一旦ZK合约验证了零知识证明后,就会执行提现交易。相反,从OP中提取资金会产生延迟(挑战期),让任何人都可以使用欺诈证明来挑战退出交易。
交易数据与OP一样作为calldata发布到以太坊上。calldata是智能合约中的数据区,用于将参数传递给函数,其行为类似于内存。虽然calldata不存储到以太坊状态中,但它作为以太坊链历史日志的一部分一直存在于链上。calldata不会影响以太坊的状态,使其成为一种在链上存储数据的实惠方式。ZK将链下处理的每笔交易的状态数据发布到以太坊。通过这些数据,用户就可以复制ZK链的状态并自行验证链。以太坊将这些数据作为calldata提供给网络的所有参与者。
ZK不需要在链上发布过多交易数据,因为有效性证明已经验证了状态转换的真实性。尽管如此,在链上存储数据仍然很重要,因为这样便可以使用户随时对二层网络链的状态进行独立验证,从而让任何人可以提交rollup区块并阻止恶意运营商审查或冻结链。用户需要在链上与L2交互。如果无法访问状态数据,用户将无法查询帐户余额或发起依赖状态信息的交易(例如提款)。
在某些情况下,运营商是一个中心化实体(即排序者),它执行交易,将交易聚合成摘要,然后提交到主网。该系统中的排序者是唯一获得允许可生成二层网络区块并将L2交易添加到ZK合约的实体。ZK也可以通过一组权益证明验证者轮换运营商角色。候选的其他运营商将资金存入ZK智能合约,每份质押的额度会影响质押者被选中打包下一批交易、生产摘要的机会。如果运营商实施恶意行为,他们的质押会被罚没,这会激励他们发布有效的区块。
ZK的状态包括L2上的帐户和余额,用默克尔树表示。默克尔树根(默克尔根)的加密哈希存储在链上合约中,让ZK智能合约组可以跟踪ZK状态的变化。在执行一组新交易后,L2转换到新状态。发起状态转换的运营商需要计算一个新的状态根并提交到链上合约。如果与批次相关的有效性证明通过验证者合约的身份验证,则新默克尔根将成为ZK的规范状态根。
ZK使用零知识证明确认链下状态转换的正确性,而无需在以太坊上重新执行交易。这些证明可以有ZK-SNARK(零知识简洁非交互式知识论证)或ZK-STARK(零知识可扩容透明知识论证)两种形式:
①ZK-SNARK(零知识简洁非交互式知识论证)
为了让ZK-SNARK 协议起作用,必须创建公共参考字符串(CRS),公共参考字符串提供公共参数来证明和验证有效性证明。证明系统的安全性取决于公共参考字符串设置;如果用于创建公共参数的信息落入恶意行为者手中,他们可能会生成虚假的有效性证明。
一些ZK尝试通过采用多方计算的方式(MPC)解决这一问题,即让多个受信任个体为ZK-SNARK线路生成公共参数。每一方都提供一些随机性来构建公共参考字符串,而且必须立即将其销毁。只要诚实参与者销毁其输入,ZK-SNARK系统的安全性就得到了保证。尽管如此,这种方法仍然需要信任相关人员删除他们的抽样随机性,并且不会破坏系统的安全保障。
抛开信任假设不谈,ZK-SNARK因其更小的证明大小和恒定时间验证而广受欢迎。由于运行ZK的较大一部分成本用于一层网络上的证明验证,因此二层网络使用 ZK-SNARK生成可在主网上快速、经济实惠地验证的证明。
②ZK-STARK(零知识可扩容透明知识论证)
与ZK-SNARK一样,ZK-STARK 证明链下计算的有效性而不会透露输入。然而,ZK-STARK被认为是对ZK-SNARK的改进,因为前者具有可扩展性和透明性。
ZK-STARK是“透明的”,因为无需受信任的公共参考字符串(CRS)设置,它们就可以工作。然而,ZK-STARK依靠可公开验证的随机性来设置用于生成和验证证明的参数。
ZK-STARK还提供了更强的可扩展性,因为证明和验证有效性证明所需的时间相对于底层计算的复杂性呈准线性增加。对于ZK-SNARK,证明和验证时间相对于底层计算的规模呈线性增加。这意味着在涉及大型数据集时,ZK-STARK比ZK-SNARK的证明和验证时间更少,这使得前者适用于大批量应用。
ZK-STARK对于量子计算机也是安全的,而ZK-SNARK中使用的椭圆曲线密码学(ECC)被广泛认为容易受到量子计算攻击。ZK-STARK的缺点是它们产生的证明尺寸更大,在以太坊上验证的成本更高。此外,它们不支持递归,而递归是使用零知识证明扩展链下计算的关键。

评价

Rollup通过在链下计算来提升以太坊基础层的吞吐量,但真正提升扩容的方式是压缩交易数据。以太坊的区块大小限制了每个区块可以保存的数据,进而限制了每个区块处理的交易数量。通过压缩交易相关数据,Rollup显著增加了每个区块处理的交易数量。ZK一旦在L1上验证了零知识证明,在确定了状态更新后,交易的最终性将比OP更快确定。ZK依靠加密机制来确保安全性,而不是像OP那样通过博弈激励参与者们维护网络的诚实性。
可拓展性:ZK特有的一个重要压缩技巧是,如果交易的一部分仅用于验证,并且与计算状态更新无关,那么该部分可以留在链下。而这不能在OP中完成,因为该数据仍然需要包含在链上,以防以后需要在欺诈证明中进行检查,而在ZK中,证明批次正确性的SNARK已经证明了任何数据提供了验证所需。一个简单的以太坊交易(发送 ETH)需要大约110个字节。然而,ZK上的ETH交易仅需要约12个字节(如图14所示)。在理论上来说ZK的吞吐量可以达到4800TPS。OP的数据存储会比ZK大一些(因为需要在主链上提交更多的数据用于验证),但远小于以太坊交易的110个字节,即使数据大小是ZK的六倍,OP的吞吐量仍有接近800TPS。
表1 交易数据大小对比表 (单位:字节)
在这里插入图片描述
安全性:ZK,OP都将恢复链下状态所需的数据存储在L1中,确保了安全性,抗审查和去中心化。用户可以迅速从L2中提取资金,而不需要像OP那样等待一周左右的时间。ZK计算与验证的成本较高,用户成本相对OP来说会更高一些。由于ZK技术的复杂性,目前比较难与EVM虚拟机兼容。生成零知识证明需要专用的硬件,而这提高了用户参与推进链状态的门槛,同时可能刺激一些参与方对链进行集中控制,增加了恶意运营商停止推进链状态和审查用户的风险。当前部分证明系统需要信任设置,如果处理不当可能会导致恶意用户通过掌握的公共参数来生成虚假的零知识证明。
去中心化程度:在rollup中,比较具有争议的是排序器中存在的中心化属性,对于谁可以在OP或ZK中提交摘要与区块有许多不同的想法。一般来说,用户必须先交大额押金;如果该用户曾经提交过欺诈性批次(例如,状态根无效),则该存款将部分被销毁,部分作为奖励提供给欺诈证明者。但除此之外,还有很多可能性:
完全无政府状态:任何人都可以随时提交一批。这是最简单的方法,但它有一些重要的缺点。特别是,存在多个参与者将生成并尝试并行提交批次的风险,并且这些批次中只有一个可以成功包含。这会导致在生成证明/发布摘要到链需要浪费大量精力。
集中式排序器:只有一个参与者,即“定序器”,可以提交批次(提款除外:通常的技术是用户可以先提交提款请求,然后如果定序器在下一次不处理该提款交易,那么用户可以自己提交一个单独操作的交易)。这是最“有效”的,但它依赖于中心参与者的活跃度。
排序器权力拍卖:举行拍卖(例如每天)以确定谁有权成为第二天的排序器。在拍卖过程中,用户会提出自己想要打包的交易列表,同时出价支付相应的gas费用。最终,包含交易数最多的矿工将赢得拍卖,并打包这些交易生成新的区块。
从PoS集合中随机选择:任何人都可以将 ETH(或者可能是 rollup 自己的协议代币)存入 rollup 合约,每批次的排序者从其中一个存款人中随机选择,被选中的概率与金额成正比存入。这种技术的主要缺点是它会导致大量不必要的资金锁定。
DPoS 投票:通过拍卖选出一个定序器,但如果它们表现不佳,代币持有者可以投票将其踢出并举行新的拍卖以取代它们。
Rollup方案替代Plasma方案的原因:
1)效率:zk-rollup 会生成链下交易处理的有效性证明。直接省略了运营商打包数据、发布「状态承诺」和用户欺诈证明提交的环节,从而消除挑战期和退出机制的需要。这也意味着用户不必定期观察链来保护他们的资金。
2)支持智能合约:Plasma的另一个问题是无法支持以太坊智能合约的执行。OP与以太坊虚拟机兼容,甚至现在不少ZK项目(zkSync,StarkWare 等)也在推进zkEVM 的实现。使其成为更理想的、即安全又有用的去中心化扩容方案。如前所述,Plasma存在数据可用性问题。如果恶意运营商在Plasma链上提交了恶意数据,用户将无法质疑并提交欺诈证明。Rollups通过强制运营商在以太坊上发布交易数据来解决这个问题,允许任何人验证链的状态并在必要时创建欺诈证明。
3)大规模退出问题:ZK和OP都以不同的方式解决了Plasma的大规模退出问题。例如,ZK的加密机制确保运营商在任何情况下都无法窃取用户资金。同样,OP对提款施加了延迟期,在此期间任何人都可以发起挑战并防止恶意提款请求。虽然这类似于Plasma,但不同之处在于验证者可以通过在主网上的交易数据创建欺诈证明,而Plasma运营商可以拒绝向主网提供创建欺诈证明的必要交易数据。因此,roll-up方案不会涉及到有可能损害主网络的「大规模退出」。

猜你喜欢

转载自blog.csdn.net/weixin_43380357/article/details/130267735