汇总汇总以太坊的不完整指南

2021-01-05 15:24:27

汇总在以太坊社区中风靡一时,并有望在可预见的未来成为以太坊的关键可扩展性解决方案。但是,这项技术究竟是什么?您能从中得到什么期望?您将如何使用它?这篇文章将尝试回答其中一些关键问题。

扩展区块链生态系统有两种方法。首先,您可以使区块链本身具有更高的交易能力。这项技术的主要挑战是具有更大区块的区块链。本质上更难以验证,并且可能变得更加集中。为了避免此类风险,开发人员可以提高客户端软件的效率,或者更可持续地使用分片之类的技术,以使构建和验证链的工作分散在多个节点上。被称为" eth2"的工作目前正在构建向以太坊的升级。

其次,您可以更改使用区块链的方式。用户无需将所有活动直接放在区块链上,而是在"第2层"链下进行大部分活动。协议。链上有一个智能合约,它只有两个任务:处理充值和提款,以及核实证明链下发生的所有事情都遵循规则。进行这些证明的方法有多种,但是它们都具有以下特性:在链上验证证明比在链上进行原始计算便宜得多。

第2层缩放的三种主要类型是状态通道,等离子和汇总。它们是三种不同的范式,具有不同的优势和劣势,在这一点上,我们相当有信心所有第2层缩放都大致可归为这三类(尽管命名争议存在于边缘,例如,参见" validium&# 34;)。

想象一下,爱丽丝(Alice)正在提供与鲍勃(Bob)的互联网连接,以换取鲍勃(Bob)向她支付每兆字节0.001美元的费用。爱丽丝(Alice)和鲍勃(Bob)使用以下第2层方案,而不是每次付款都进行交易。

首先,鲍勃将1美元(或一些ETH或稳定币等价物)放入智能合约中。为了向爱丽丝支付第一笔款项,鲍勃签署了一张“票”。 (一条链外消息),只需说" $ 0.001"并将其发送给Alice。要进行第二次付款,Bob会在另一张票上写明" $ 0.002&#34 ;,并将其发送给Alice。依此类推,可以根据需要进行多次付款。当爱丽丝(Alice)和鲍勃(Bob)完成交易后,爱丽丝(Alice)可以发布价值最高的票证,用她自己的另一个签名包裹。智能合约验证Alice和Bob的签名,向Bob的票款支付Alice的金额,并将其余的退还给Bob。如果Alice不愿意关闭频道(由于恶意或技术故障),则Bob可以启动撤回期限(例如7天);如果爱丽丝在这段时间内不提供门票,那么鲍勃会退还所有钱。

该技术功能强大:可以对其进行调整,以处理双向支付,智能合约关系(例如,爱丽丝和鲍勃在渠道内签订金融合同)和组成(如果爱丽丝和鲍勃拥有开放渠道,鲍勃和查理也是如此),爱丽丝可以不信任地与查理互动)。但是渠道可以做什么受到限制。不能使用渠道将资金从链下发送给尚未参与的人。通道不能用于表示没有明确逻辑所有者的对象(例如Uniswap)。而且渠道,特别是如果用来做比简单的定期付款更复杂的事情的渠道,需要锁定大量资金。

Warning: Can only detect less than 5000 characters

为了支持存款和提款,我们增加了进行输入或输出为" outside"的交易的功能。汇总状态。如果批次具有来自外部的输入,则提交该批次的事务也需要将这些资产转移到汇总合同中。如果某个批次有外部输出,则在处理该批次时,智能合约会启动这些提款。

就是这样!除了一个主要细节:如何知道批次中的状态后根是正确的?如果某人可以提交具有任何后期状态根源的批次而没有任何后果,那么他们可以将汇总中的所有硬币转移给自己。这个问题很关键,因为有两个非常不同的解决方案系列,而这两个解决方案系列导致了两种汇总方式。

乐观汇总,使用欺诈证明:汇总合同会跟踪其整个状态根历史以及每个批次的哈希。如果有人发现某个批次的状态后根不正确,则可以发布要链接的证明,以证明该批次的计算不正确。合同将验证证明,并还原该批次及其之后的所有批次。

ZK汇总,使用有效性证明:每个批次都包含一个称为ZK-SNARK的加密证明(例如,使用PLONK协议),这证明后状态根是执行批次的正确结果。无论计算量有多大,都可以在链上非常迅速地验证证明。

〜1周(需要延迟提款,以便留出时间让某人发布欺诈证明并在欺诈的情况下取消提款)

更加艰苦(ZK-SNARK证明通用EVM执行比证明简单计算要困难得多,尽管有很多努力(例如Cairo)正在对此进行改进)

较低(如果事务中的数据仅用于验证而不引起状态更改,则可以忽略此数据,而在乐观汇总中,则需要发布该数据,以防需要在欺诈证明中对其进行检查)

更高(尤其是针对通用计算的ZK-SNARK证明可能是昂贵的,比直接运行计算可能要贵数千倍)

总的来说,我个人认为,在短期内,对于通用EVM计算而言,乐观汇总可能会胜出,而对于简单付款,交易和其他特定于应用的用例,ZK汇总可能会胜出。随着ZK-SNARK技术的改进,中长期ZK汇总将在所有用例中胜出。

乐观汇总的安全性取决于以下想法:如果有人将无效的批次发布到汇总中,则任何跟得上链并检测到欺诈的人都可以发布欺诈证明,以证明该批次无效并向合同证明。应该还原。

声称某批次无效的欺诈证明将包含绿色的数据:该批次本身(可以对照存储在链上的哈希值进行检查)以及Merkle树的各个部分,它们仅需要证明已读取和//特定的帐户即可或按批次修改。可以从绿色的节点中重建黄色的树中节点,因此无需提供。此数据足以执行批处理并计算状态后的根(请注意,这与无状态客户端验证单个块的方式完全相同)。如果批次中计算出的状态后根与提供的状态后根不同,则说明该批次是欺诈性的。

可以保证,如果一个批次的构造不正确,并且所有先前的批次都正确构造,则可以创建一个欺诈证明,证明该批次的构造不正确。请注意有关先前批次的声明:如果有多个无效批次发布到汇总中,那么最好尝试证明最早的无效批次。当然,还可以保证,如果正确构造了一个批次,则永远不可能创建表明该批次无效的欺诈证明。

一个简单的以太坊交易(发送ETH)需要约110个字节。但是,汇总中的ETH传输仅占用〜12个字节:

这部分只是简单的高级编码:以太坊的RLP在每个值的长度上每个值浪费1个字节。但是,还有一些非常聪明的压缩技巧正在发生:

Nonce:该参数的目的是防止重放。如果帐户的当前随机数为5,则该帐户的下一个交易记录必须具有5随机数,但是一旦处理了该交易,该帐户中的随机数将增加为6,因此无法再次处理该交易。在汇总中,我们可以完全省略随机数,因为我们只是从预状态中恢复了随机数。如果有人尝试使用较早的随机数重播事务,则签名将无法验证,因为将根据包含新的较高随机数的数据检查签名。

汽油价格:我们可以允许用户以固定价格范围的汽油价格进行支付,例如选择两个连续的16次幂。或者,我们可以将每批产品的费用定为固定水平,或者甚至将天然气付款完全移到汇总协议之外,并让交易商向批处理者支付费用以通过渠道将其包括在内。

气体:我们可以类似地将总气体选择为两个连续幂。另外,我们也可以只在批次级别设置气体限制。

要:我们可以用索引替换20字节地址(例如,如果地址是添加到树中的第4527个地址,我们只需使用索引4527对其进行引用即可。我们会在状态中添加一个子树来存储该树索引到地址的映射)。

价值:我们可以用科学记数法存储价值。在大多数情况下,转帐只需要1-3个有效数字。

签名:我们可以使用BLS聚合签名,该签名允许将许多签名聚合为单个〜32-96字节(取决于协议)的签名。然后可以一次检查整个签名和发件人的签名集。表中的〜0.5表示一个事实,即可以在单个块中验证的集合中可以组合的签名数量有一个限制,因此大批量每100个事务需要一个签名。

ZK汇总特有的一个重要压缩技巧是,如果事务的一部分仅用于验证,而与计算状态更新无关,则可以将该部分留在链下。这不能在乐观汇总中完成,因为如果以后需要在欺诈证明中检查数据,则仍需要将数据包含在链上,而在ZK汇总中,SNARK证明批次的正确性已经证明了任何数据提供了验证所需的信息。一个重要的例子是隐私保护汇总:在乐观汇总中,每笔交易中用于隐私的〜500字节ZK-SNARK需要进行连锁,而在ZK汇总中,覆盖整个批次的ZK-SNARK已经没有了。怀疑内部" ZK-SNARK有效。

这些压缩技巧是汇总可伸缩性的关键。没有它们,汇总可能只会使基础链的可伸缩性提高约10倍(尽管有一些特定的计算繁重的应用程序,即使简单的汇总也很强大),而采用压缩技巧时,缩放系数几乎可以超过100倍所有应用程序。

可以提交乐观或ZK汇总的批处理有许多思想流派。通常,每个人都同意,为了能够提交一批,用户必须放下大量的押金。如果该用户曾经提交过欺诈性批次(例如,具有无效的状态根),则该存款将被部分燃烧,并作为对欺诈证明者的奖励。除此之外,还有许多可能性:

完全无政府状态:任何人都可以随时提交一批。这是最简单的方法,但是有一些重要的缺点。特别地,存在多个参与者将生成并尝试并行提交批次的风险,并且这些批次中只有一个可以被成功地包括在内。这导致在将批量发布到链中时在生成证明和/或浪费的气体方面浪费了大量的精力。

集中式音序器:只有一个演员,即音序器,可以提交批次(提款除外):通常的技术是用户可以先提交提款请求,然后如果音序器在下一次不处理提款请求批处理,那么用户可以自己提交一次操作批处理)。这是最有效的方法,但是它依赖于中心角色的生动性。

音序器拍卖:举行拍卖(例如每天),以确定谁有权在第二天成为音序器。该技术的优点在于它筹集了可以由例如银行分配的资金。由汇总控制的DAO(请参阅:MEV拍卖)

从PoS集中随机选择:任何人都可以将ETH(或可能的汇总协议令牌)存入汇总合同中,并且从一批存款者中随机选择每批的定序器,被选中的概率为与存款金额成正比。该技术的主要缺点是导致大量不必要的资本锁定。

DPoS投票:在拍卖中选择了一个音序器,但是如果它们的表现不佳,令牌持有者可以投票将其踢出并进行新的拍卖来替换它们。

当前正在开发的一些汇总使用的是& split batch"范例,其中提交一批第2层事务的操作和提交状态根的操作是分别完成的。这具有一些关键优势:

您可以允许许多定序器并行发布批处理,以提高检查的抵抗力,而不必担心某些批处理将是无效的,因为其他批处理已首先包含在内。

如果状态根是欺诈性的,则无需还原整个批次。您可以只还原状态根,然后等待某人为同一批次提供新的状态根。这为交易发送者提供了更好的保证,即他们的交易将不会被还原。

因此,总而言之,有一个相当复杂的技术动物园正在尝试在涉及效率,简单性,审查制度阻力和其他目标的复杂权衡之间取得平衡。现在说这些想法的哪种组合效果最好还为时过早。时间会证明一切。

在现有的以太坊链上,gas限制为1,250万,交易中每个字节的数据花费16 gas。这意味着,如果一个区块仅包含一个批处理(我们将使用ZK汇总,在验证验证上花费500k瓦斯),则该批处理可以拥有(1200万/ 16)= 750,000字节的数据。如上所示,ETH转移汇总需要o

......