背景知识:什么是一级扩张和二级扩张?
;
实现区块链生态系统的扩张有两种方式。扩容的第一种方式是让区块链本身拥有更高的交易处理能力。例如,将块变大使得区块链的验证过程更加困难,并且可能使节点更加中心化。为了避免这些风险,开发人员可以提高客户端软件的效率。一种更可持续的扩容方式是使用碎片化和其他技术将构建和验证区块链的工作分配给许多不同的节点mdash;mdash;quot;ETH2quot;正试图以这种方式升级以太坊。
第二种扩大产能的方式是改变使用区块链的方式。用户不需要将所有活动直接放在区块链的主链上。相反,它们在主链之外执行“第2层”协议中的大多数活动,并生成链之外的所有活动都遵循规则的证明。在主链的上部部署了一个智能合约,它只有两个任务:处理存款和取款,以及验证上述证书。证明与验证的实现方法有很多种,但都有一个共同的特点,即链上验证的成本远低于链下原始计算的成本。
状态通道vs等离子vs汇总
;
扩展Layer2容量的方法有三种:状态通道、等离子体和卷取。这三种方案代表了三种不同的模式,每种方案都有各自的优缺点。所有的二级扩展项目都分为这三类(关于如何对一些折衷方案进行分类,例如lt;validiumgt;,存在争议)。
状态频道是如何工作的?
;
另请参见https://www.jeffcoleman.ca/state-channels, statechannels.org网站
想象一下Alice为Bob提供了一个网络连接服务。作为交换,Bob向Alice支付0.001美元/mb的互联网流量。Bob不需要支付第一级主链的所有费用。双方采用以下两层方案。
首先,Bob将1美元(稳定币或ETH等价物)存入智能合约。为了向爱丽丝支付第一笔款项,鲍勃签了一张quot;账单,quot;(一条链外信息),账单上写着“0.001美元”,然后寄给爱丽丝。为了支付第二笔付款,鲍勃又签了一张写着lt;0.002gt;美元的账单,然后寄给爱丽丝。以此类推,每次付款都要重复这个过程。在Alice和Bob完成交易后,Alice可以用她的签名打包最有价值的账单并发布到主链(关闭通道)。智能合约将验证Alice和Bob的签名。核实后,鲍勃账单上的金额将支付给爱丽丝,剩余金额将退还给鲍勃。如果Alice(出于恶意或技术故障)不愿意关闭通道,Bob可以启动现金提取挑战期(例如,7天)mdash;mdash;如果Alice无法提供Bob在此期间支付的账单,Bob可以收回智能合约中之前的所有款项。
;
状态通道技术非常强大:广义状态通道可以支持双向支付,实现智能合约(例如Alice和Bob在通道中签订金融合约),具有可组合性(如果Alice和Bob之间有一个开放通道,Bob和Charlie之间也有一个开放通道,然后Alice和Charlie可以一起工作(无需信任的互动)。但是,渠道的作用是有限的:它不能向链下未加入渠道的用户发送资金;不能用于没有明确逻辑所有者的对象(如Uniswap智能合约)。此外,如果渠道处理的交易比小额支付场景更复杂,则需要将大量资金锁定在渠道中。
等离子的工作原理;
另请参阅原始白皮书plaa cash
要将来自主链的资产存储到plaa链中,用户需要将资产发送到管理主链中plaa链的智能合约。plaa链为资产分配一个新的唯一ID(例如537)。每个plaa链都有一个操作员(这可能是一个中心化的角色,或者由多个标签控制,或者更复杂的东西,例如POS链或dpos链)。每隔一段时间(可以是15秒,或一小时,或两者之间的任何长度),操作员将生成一个“批”,其中包含在此期间收到的所有plaa chain事务。操作符生成一个Merkle树。在索引为x的叶节点上,如果资产ID x在此批处理中有事务,则叶节点上存在相应的事务。否则,叶节点为零。操作符将树的Merkle根发布到主链。操作员还需要将每个索引x的Merkle分支发送给资产的当前所有者。如果某项资产需要从plaa链提取到主链,则用户需要将该资产新交易对应的Merkle分支发送到主链的智能合约。然后,智能合约开始一个质询期(例如,7天)。在此期间,任何人都可以尝试使用其他Merkle分支来证明:(I)用户在提取资产时不拥有资产,或者(II)用户在某个时间点将资产发送给其他人,这使得退出应用程序无效。如果在7天内没有人证明退出是欺诈性的,则用户可以成功检索资产。
Plaa提供了比状态通道更强大的功能:您可以将资产发送给从未加入Layer2的用户,并且锁定的资金要少得多。但是,这是有代价的:状态通道在正常运行时不需要在主链中存储任何数据,但plaa要求每个链每隔一段时间在主链中发布一个哈希值。此外,plaa链中的事务不是瞬时的,即它们必须等待一批事务(也称为plaa块)的证据(即Merkle根值)发送到主链。
此外,plaa和state channel都有一个重要缺陷:与它们的安全模相对应的博弈论依赖于这样一个思想:两个系统控制的资产在逻辑层面上应该有quot;所有者quot;。只要资产所有者关心自己的资产,当资产的状态发生变化时lt;无效gt;,资产所有者就会试图出示变化的证据lt;无效gt。这对某些应用程序来说并不重要,但对许多其他应用程序来说却是个问题(比如Uniswap)。即使系统中对象的状态可以在未经系统所有者同意的情况下更改(例如,在基于帐户的系统中,其余额可以在未经所有者同意的情况下增加),它也与plaa不太兼容。这意味着,在实际部署等离子或状态通道时,必须推导出“特定应用”的潜在逻辑设计定制方案,不可能使等离子或状态通道系统完全模拟以太坊的运行环境(即lt;EVMgt;)。接下来,让我们看看rollup如何解决这个问题。
汇总
;
另请参阅:ETHhub的optimal rollup简介和ETHhub的ZK rollup简介
等离子体和状态信道方案都是“完全”Layer2方案,因为它们将数据和计算传输到较低的链(即它们自己的两层系统)。然而,数据可用性的基本博弈论原理意味着这样一个系统不可能安全地实现所有的应用。等离子和状态通道通过澄清资产对象和所有者之间的关系来解决这一问题,但这使得它们不能完全通用。与前两种方案不同,rollup是一种具有“混合性质”的两层方案。Rollup将计算(和完整的状态存储)传输到链上,但保留链上每个事务的部分数据信息。为了提高效率,rollup采用了一系列奇特的压缩技术,并尽可能地用计算代替数据。因此,系统的可扩展性仍然受到底层区块链数据带宽的限制,但基于此的扩展系数非常可观:以太坊主链上一次ERC-20代币的传输消耗约4.5万gas,但在汇总中,每笔交易只需要在主链上存储16字节的数据,而且耗油量不到300。
主链中的数据存储是rollup的关键因素(请注意:这不同于将数据存储在lt;IPFsgt;,因为IPFs不会对存储的数据达成一致,rollup的数据必须存储在区块链中)。将数据存储在主链并达成共识,这样任何人都可以在本地处理汇总中的所有操作,包括欺诈检测、发起取款、生成批量处理等,由于没有数据可用性问题,因此作案或下线的运营商造成的损失相对较少(例如,它们不会导致一周的退出延迟),这也提供了更多关于谁有权发布批处理的可能性,并且还使汇总更容易理解。更重要的是,不存在数据可用性问题,这意味着资产不需要与所有者有明确的逻辑映射关系。与其他两层扩展解决方案相比,这是以太坊社区对rollup感到更兴奋的一个重要因素:rollup是通用的,例如,EVM可以在rollup中运行,因此可以将现有的以太坊应用程序迁移到rollup,而无需编写新代码。
汇总是如何工作的?
;
主链中有一个智能合约,它有一个表示汇总状态的状态根mdash;mdash;Merkle根。(状态包括汇总中的账户余额、合同代码等)
任何人都可以在主链中的智能合约上发起批量交易。此批事务是一批汇总内部事务的高压缩,包括旧状态根和新状态根(在旧状态根的基础上执行批事务后生成的新状态根)。主链契约将检查旧状态根是否与新状态根匹配。如果测试通过,主链上的旧状态根将更新为新状态根。
为了支持主链其他部分资产的存取,批量处理中的事务的输入或输出可以处于rolluplt;externalgt状态。如果批量处理中的事务输入来自汇总外部,则批量操作会将主链其他部分的资产转移到汇总合同中。如果批处理中的事务的输出来自rollup之外,则批处理将触发智能合约中的取款操作,以将资产从rollup取回到主链。
整个过程很简单!但还有一个细节。如何知道批处理执行后状态根是正确的?如果有人可以提交一个假州根没有任何后果,他们可以转让所有的资产给自己。这个问题非常重要,因为这个问题有两种不同的解决方案,从而形成两种类的汇总。
乐观汇总与ZK汇总
;
有两种类的汇总
**汇总采用防欺诈的方法解决上述问题:主链的汇总契约记录了汇总内部状态根变化的完整记录和每批的哈希值(触发状态根变化)。如果有人发现一个批对应的新状态根是错误的,可以在主链上证明该批生成的新状态根是错误的。合同验证证书。如果验证通过,则将回滚批处理之后的所有批处理事务。
;
ZK-Rollup,利用有效性证明解决了上述问题:每批包含一个密码证明ZK-snark,本文提出的密码证明只需要具有体积小、验证速度快的特点,不需要零知识,因此只需要snark就可以实现ZK-Rollup,不一定需要ZK-snark。事实上,在ZK rollup中,由于批量事务信息存储在主链中,而这些信息正是在密码学证明系统中被证明的,因此ZK rollup本身并不具备零知识。零知识的ZK汇总称为ZK汇总。无论批处理涉及多少计算,证明都能在主链上得到有效的验证。
;
两个汇总之间的设计权衡是复杂的
属性**rollupzk rollup主链上每批的固定气体成本约为40000(成本相对较轻,主要操作是改变状态根的值)约为500,000(zk snark的验证成本相对较大)提取周期约为一周(应留出时间查看是否有人提交了欺诈证明,取消无效的撤销申请)速度很快(提交撤销申请后可在下一批完成)技术复杂度低(zk snarks)技术相对较新,在数学层面更复杂)实现通用性相对容易(上卷实现EVM的通用性很快就可以部署到主网中)如果只使用部分事务数据,则相对比较困难(用zk snark证明EVM的通用性运算要比简单的计算运算困难得多,当然(比如Cairo)等工作都在试图简化过程)为验证交易的有效性,且不涉及状态变化,这部分数据不能存储在主链中,但在**汇总中,所有数据都需要存储以生成和验证后续的欺诈证明)链下的计算开销相对较低(尽管需要重新计算更完整的节点),而相对较高(生成zk snark证明,特别是通用证明的开销,可能很大,比直接计算大上千倍)
总的来说,我个人的观点是,在短期内,optisitc rollup可能会在通用EVM的实现中胜出,ZK rollup可能会在简单的支付、转账等具体应用中胜出。但从中长期来看,随着zk-snark技术的进步,zk-rollup将在所有应用场景中获胜。
欺诈证明分析
;
**汇总的安全性取决于这样一种思想:如果有人发布了一个无效的批量进行汇总,那么同步该链的任何人只要发现欺诈行为,都可以向主链上的合同出具欺诈证明,证明该批是无效的,应该进行回滚;无论是指主链还是汇总都是正确的。
断言批无效的欺诈证明需要包括上图中标记为绿色的数据:批本身(可以使用存储在链上的哈希值进行检查)和证明该批已读取或修改特定帐户的Merkel树路径。黄色节点可以由绿色节点重构,因此不需要包含在证明中。这些数据足以执行批处理并计算新的状态根(请注意,这与无状态客户机验证单个块的方式完全相同)。如果计算出的新状态根与批中提供的新状态根不同,则该批被证明是欺诈的。
可以确保如果一个批次中存在错误,并且之前的所有批次都是正确的,则可以创建欺诈证明来证明该批次的构造是错误的。注意,如果rollup中有多个无效的批,**尝试证明最早的批是无效的。当然,可以肯定的是,如果一个批次是正确的,就永远不可能创建一个证明该批次无效的欺诈证据。
如何实现压缩?
;
最简单的以太坊传输(发送ETH)大约需要110字节,但在汇总中实现ETH传输只需要12字节左右
参数(单位:字节)以太坊主链汇总契约nonce(序列号)~30gasspice~80-0.5gas30-0.5to(目标地址)214value(传输值)~9~3签名(签名)~68(2+33+33)~0.5from(起始地址)0(从签名还原)4总计~112~12
部分原因是rollup可以使用更简单的**编码技术,而以太坊的当前RLP在每个值的长度上浪费了一个字节。Rollup还使用了一些非常聪明的压缩技术。
Nonce:此参数的目的是防止重播。如果帐户状态的当前nonce为5,则该帐户的下一个事务的nonce参数必须为5。但是,一旦事务被处理,帐户状态中的nonce将增加到6,这样nonce为5的事务就不会被打包。在rollup中,我们可以完全忽略nonce,因为我们只需要在更新之前从状态中恢复nonce;如果有人试图用较早的nonce重放事务,签名验证将失败,因为签名验证将使用较大的nonce数据。
;
天然气价格:我们可以让用户支付固定范围的天然气价格,例如,范围是0-2到16次方。此外,我们只能对每一批收取固定的费用,甚至可以将天然气支付完全移出汇总,这样交易者就可以通过特定渠道向批量创作者支付费用。
;
气体:我们也可以选择总气体范围为2的幂。此外,我们只能在批次级别设置气体限值。(注:天然气价格和天然气用于比较汇总合同和以太坊网络生成的数据量。这并不意味着汇总协议必须包含这些概念。例如,作为一种**汇总协议,fuel基于utxo,完全不包含这些概念);
To:我们可以使用索引而不是20字节的地址(例如,如果地址是添加到树中的第4527个地址,则使用索引4527来表示它)。我们在状态中添加一个子树来存储索引到地址的映射。
;
价值:我们可以使用科学计数来存储价值。在大多数情况下,传输只需要1-3个有效位。
;
签名:我们可以使用BLS aggregate Signature将多个签名聚合为一个大约32-96字节的签名(具体大小取决于使用的协议)。然后,签名可以一次对整个消息集和发送方进行批量检查。表中的~0.5表示可以在主链块中验证的聚合签名的数量是有限的。因此,如果批处理中有许多事务,则大约每100个事务需要生成一次聚合签名。(注:验证聚合签名所需的计算量随着聚合原始签名的数量而增加,而以太坊主链块中可使用的气体数量有上限,因此聚合签名不能一次聚合太多原始签名。)
ZK rollup有一种特别重要的压缩技术:如果事务的一部分仅用于验证,与计算状态更新无关,那么这部分数据可能不会存储在主链中。这不能在optimitc rollup中完成,因为数据仍然需要存储在链中,以便进行后续的防欺诈验证。在ZK rollup中,证明一批处理数据正确性的snark证明证明了相关方提供了验证所需的全部数据。一个重要的例子是隐私保护汇总的实现:在optisitc汇总中,每个事务中大约500字节的隐私保护zk snark需要链接,而在zk汇总中,覆盖整批的隐私保护zk snark可以证明quot;的zk snark是有效的。(注意:由于snark可以嵌套,所以通过将最终生成的最外层snark提交给链,可以在ZK rollup中实现隐私保护。验证外部Snark时,可以同时验证内部Snark的有效性。)
这些压缩技术是rollup扩展的关键。如果没有这些技术,rollup只能在主链扩展的基础上实现10倍左右的扩展(虽然简单rollup的扩展在一些计算量大的特定应用中已经非常强大),但是在使用压缩技术之后,几乎所有应用的膨胀系数都可以超过100倍。
谁可以提交一批?
;
关于谁可以在**汇总或ZK汇总中提交批次,有许多思想流派。一般认为,提交一批的用户必须质押大量定金。如果用户提交了欺诈批次(如提交了无效状态根),则部分押金将被烧掉销毁,另一部分将奖励给提交欺诈证明的用户。但除此之外,还有很多可能性:
(注意:可以将批处理发布到主链的用户称为sequencer,它的名称是因为角色需要对批处理中的事务进行排序。)
完全没有执照的分拣机:任何人都可以在任何时候提交一批。这种方法是最简单的,但是它有一些严重的缺点,例如多个参与者同时生成并尝试提交批,并且只能成功包含一个批。这将导致产生校样的计算成本或提交校样的气体成本的大量浪费。
;
中心化式分拣机:通过分拣机角色提交批量处理(提取操作除外:在提取操作中,用户首先提交提取请求。如果分拣机在下一批中没有处理取款交易,用户可以亲自提交一份只包含一个取款交易的批处理申请。这种方法是最有效的,但它依赖于一个中心化的角色。
;
Sequencer拍卖:拍卖,如每日拍卖,决定谁有权成为第二天的Sequencer。该方案的优点是可以通过rollup的Dao(参见MeV拍卖)来筹集资金。
;
POS集随机选择:任何人都可以将ETH(或rollup协议设置的**币)存入rollup合同。每个批量排序器将从这些存款人中随机选择,被选择的概率与存款金额成正比。此解决方案的主要缺点是需要锁定大量资产。
;
DPO投票:一些序列器通过拍卖选择并执行批处理,但是如果它们表现不好,那么币代持有者可以投票将它们踢出,并举行新的拍卖来替换它们。
;
单独的批处理和状态根提交
;
目前,一些正在开发的汇总采用“分批处理”(quot; split batch 6035)模式,即提交一批两层事务的行为和提交一个状态根的行为分别执行。这有一些关键的优势。
您可以允许多个分拣机并行发布批处理,以提高反审查能力,并减少由于其他批处理提前打包而导致某些批处理无效的担忧。
;
如果状态根中存在欺诈,则不必回滚整个批,而只需回滚状态根并等待有人为同一批提供新的状态根。这样可以更好地确保发送方的事务不会回滚。
;
总的来说,这是一个相当复杂的技术组合,平衡了效率、简单性、反审查和其他目标之间的复杂权衡。现在说哪种组合最有效还为时过早。时间会证明一切的。
加起来会带来多少扩张?
;
在现有的以太坊主链上,每个区块的天然气在线量为1250万,而交易的每个字节存储在链上,成本为16天然气。这意味着如果一个块只包含一个批(假设这里使用ZK rollup,并且验证成本为500000 gas),那么该批可以包含1200万/16=750000字节的数据。如上所述,每个ETH transfer-in rollup只需要12字节的存储空间,这意味着每个批可以包含62500个事务。目前以太坊主链的阻塞区间为13秒,即TPS约为4807(1250000/21000/13=45)。
下表包含其他一些应用程序场景的扩展效率。
应用场景:rollup 以太坊中单个对应操作要链接的字节数主链中对应操作耗气量的**扩展倍数ETH transfer 1221000105xERC20 transfer 16(多余的4个字节用于表示代币)~50,000187xUniswap transaction~14(发送方)4字节+接收者4字节+交易金额3字节+很高价格1字节+杂项1字节)~100000428x隐私保护取款操作(**汇总)296(根索引4字节+消空器4字节+接收者4字节+zk snark proof 256字节)~38000077X私人现金取款(zk汇总)40(根索引4字节+消空器)32字节+接收器4字节)~380000570x
**扩展倍数的计算方法:以太坊主链对应操作的耗气量/(上卷字节数*16)*1200万/1250万
应当指出,由于某些原因,这些数字实际上过于乐观。最重要的原因是一个块几乎不可能只包含一个批,因为将有许多不同的汇总系统。第二个原因是存款和取款业务将一直存在。第三个原因是,短期内汇总的使用率可能较低,因此固定成本收费模式将占主导地位。不过,即使考虑到这些因素,要实现扩容100倍以上应该也不难。
如果我们想实现1000-4000 TPS(取决于具体的应用场景),该怎么办?这需要ETH2数据碎片。在这个方案中,每12秒将打开一个16MB的存储空间。这个存储空间可以填充任何数据,系统将确保对这些数据的可用性达成共识。此数据空间可由汇总使用。1398kb/S的数据吞吐量是以太坊主链60kb/S的23倍。从长远来看,数据容量有望进一步增长。因此,使用ETH2数据碎片的rollup的TPS可以高达100000,这在将来会更大。
剩下的挑战是什么?
;
虽然rollup的基本概念已经为人们所熟知,但我们确信rollup在本质上是可行的和安全的,并且在以太坊的主网中部署了很多rollup,但是还有很多方面的rollup还没有在设计层面得到很好的探索。如果我们想将以太坊生态系统的大部分完全引入到rollup中,那么利用其扩容仍有许多挑战。一些关键挑战包括:
用户和生态圈的进入:目前使用rollup的应用很少,用户对rollup不熟悉,钱包开始集成rollup的也很少。企业和慈善机构还没有接受他们的付款。
;
交叉汇总事务:有效地将资产和数据(如预言机输出)从一个汇总转移到另一个汇总,而无需通过主链转移并产生相应的成本。
;
审计激励:如何使至少一个诚实节点完全验证**汇总的概率**化,从而确保有人在出现问题时出具欺诈证明?对于小规模的汇总,这不是一个重要的问题,可以通过利他主义来实现。然而,对于更大规模的汇总,我们需要对激励问题进行更深入的研究。
;
探索在plaa和rollup之间进行设计的可能性:是否有一种技术可以将与状态更新相关的部分数据放在链上,而不是将所有数据放在链上?通过这项技术会出现新的有用的工具吗?
;
**化预确认的安全性:为了让用户体验更好,很多汇总都提供了“预确认”的概念,即交易完成后,sequencer会立即提供一个承诺:一个交易会被包含在下一批处理中,如果sequencer违背了承诺,他的存款将被销毁。然而,该方案在经济层面上的安全性是有限的,因为定序器可能同时对很多用户做出很多承诺。这一机制能否得到改进?
;
提高缺勤分拣机的响应速度:如果一台汇总分拣机突然离线,如何以低成本尽快恢复?要么以低成本快速退出到另一个汇总,要么更换分拣机。反应快,很有价值。
;
高效的zk-vm:生成一个zk-snark证明,以证明通用EVM代码(或者可以编译现有契约的另一个vm)已经正确地执行并得到了一定的结果。
;
总结
;
Rollup是一种新的、强大的两层扩展模式,有望成为以太坊未来中短期(或可能是长期)扩容的基石。以太坊社区对rollup非常兴奋,因为与以前的两层扩展尝试不同,rollup可以支持公共EVM代码,从而允许现有应用程序轻松迁移。Rollup通过一个关键的折衷方案实现了这个目标:它没有试图完全沿着链向下移动,而是为链上的每个事务保留少量的数据。不存在上述数据可用性问题
有很多种汇总,在设计上有很多选择:optic rollup使用欺诈证明,ZK rollup使用有效性证明。sequencer可以是一个中心化式角色、一个去中心化的自由角色,或者在这两者之间有许多其他选择。Rollup仍然是一项早期技术,开发仍在快速进行,但它们是有效的,有些(尤其是looping、zksync和devosif)已经运行了几个月。预计在未来几年里,将有更多令人兴奋的成就在汇总。
文章标题:一篇关于以太坊扩容汇总解决方案的文章
文章链接:https://www.btchangqing.cn/184960.html
更新时间:2021年01月26日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。