SWAP:简析主要 Layer 2 DEX 优劣势:StarkNet、Loopring、ZKSwap 与 Unipig

近期以太坊上的高手续费和低TPS使以太坊上的Layer2扩容之争变成了焦点。本篇文章将以市场上既有的产品为基础,从技术方案角度出发,比较当下ZKSwap方案和其他扩容方案的异同之处。在具体的展开描述之前,也将简短的介绍下目前市场上的Layer2扩容技术的基本状况。

Layer2扩容技术概述

迄今为止,Layer2市场上已经是一片繁荣,技术上不断创新,各种产品也层出不穷。对于市场上的所有的产品,从技术角度上划分,可以大体分为三类:

状态通道:通过促进链下交易来减轻以太坊的负担,具有即时存取、高吞吐的特点,其弊端是设置通道浪费耗时,并且需要在通道中支付锁定资金,同时定时监测通道状态;

侧链技术:具有独立共识规则的独立区块链,与Layer1的共识不同步,这是它的弊端;

Rollup技术:可以看作是一个高级的非托管侧链技术,它将计算放在链下,交易数据以及最新世界状态放在链上,保证了链上数据可用性。

与其他的两种方案相比,Rollup无需提前锁定代币,也不用设置自己的共识规则;而且它还可以保持和Layer1同样等级的安全性,同时方案本身具有通用性。随着Layer2技术的持续发展,Rollup技术方案也变得多样化,根据交易数据存储的位置和使用的证明方法的不同,又可以将Rollup技术细分为以下四类:

Beosin:SEAMAN合约遭受漏洞攻击简析:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin EagleEye 安全风险监控、预警与阻断平台监测显示,2022年11月29日,SEAMAN合约遭受漏洞攻击。Beosin分析发现是由于SEAMAN合约在每次transfer函数时,都会将SEAMAN代币兑换为凭证代币GVC,而SEAMAN代币和GVC代币分别处于两个交易对,导致攻击者可以利用该函数影响其中一个代币的价格。

攻击者首先通过50万BUSD兑换为GVC代币,接下来攻击者调用SEAMAN合约的transfer函数并转入最小单位的SEAMAN代币,此时会触发合约将能使用的SEAMAN代币兑换为GVC,兑换过程是合约在BUSD-SEAMAN交易对中将SEAMAN代币兑换为BUSD,接下来在BUSD-GVC交易对中将BUSD兑换为GVC,攻击者通过多次调用transfer函数触发_splitlpToken()函数,并且会将GVC分发给lpUser,会消耗BUSD-GVC交易对中GVC的数量,从而抬高了该交易对中GVC的价格。最后攻击者通过之前兑换的GVC兑换了50.7万的BUSD,获利7781 BUSD。Beosin Trace追踪发现被盗金额仍在攻击者账户(0x49fac69c51a303b4597d09c18bc5e7bf38ecf89c),将持续关注资金走向。[2022/11/29 21:10:04]

ZKRollup:Layer1+Validityproofs,数据存储在链上,用零知识证明来保证状态转换的有效性;

安全团队:获利约900万美元,Moola协议遭受黑客攻击事件简析:10月19日消息,据Beosin EagleEye Web3安全预警与监控平台监测显示,Celo上的Moola协议遭受攻击,黑客获利约900万美元。Beosin安全团队第一时间对事件进行了分析,结果如下:

第一步:攻击者进行了多笔交易,用CELO买入MOO,攻击者起始资金(182000枚CELO).

第二步:攻击者使用MOO作为抵押品借出CELO。根据抵押借贷的常见逻辑,攻击者抵押了价值a的MOO,可借出价值b的CELO。

第三步:攻击者用贷出的CELO购买MOO,从而继续提高MOO的价格。每次交换之后,Moo对应CELO的价格变高。

第四步:由于抵押借贷合约在借出时会使用交易对中的实时价格进行判断,导致用户之前的借贷数量,并未达到价值b,所以用户可以继续借出CELO。通过不断重复这个过程,攻击者把MOO的价格从0.02 CELO提高到0.73 CELO。

第五步:攻击者进行了累计4次抵押MOO,10次swap(CELO换MOO),28次借贷,达到获利过程。

本次遭受攻击的抵押借贷实现合约并未开源,根据攻击特征可以猜测攻击属于价格操纵攻击。截止发文时,通过Beosin Trace追踪发现攻击者将约93.1%的所得资金 返还给了Moola Market项目方,将50万CELO 捐给了impact market。自己留下了总计65万个CELO作为赏金。[2022/10/19 17:32:31]

OptimisticRollup:Layer1+Fraudproofs,数据存储在链上,在挑战期间,用欺诈证明来验证状态转换的有效性;

慢雾:DEUS Finance 二次被黑简析:据慢雾区情报,DEUS Finance DAO在4月28日遭受闪电贷攻击,慢雾安全团队以简讯的形式将攻击原理分享如下:

1.攻击者在攻击之前先往DeiLenderSolidex抵押了SolidexsAMM-USDC/DEI的LP。

2.在几个小时后攻击者先从多个池子闪电贷借出143200000USDC。

3.随后攻击者使用借来的USDC在BaseV1Pair进行了swap操作,兑换出了9547716.9个的DEI,由于DeiLenderSolidex中的getOnChainPrice函数是直接获取DEI-USDC交易对的代币余额进行LP价格计算。因此在此次Swap操作中将拉高getOnChainPrice函数获取的LP价格。

4.在进行Swap操作后,攻击者在DeiLenderSolidex合约中通过borrow函数进行借贷,由于borrow函数中用isSolvent进行借贷检查,而在isSolvent是使用了getOnChainPrice函数参与检查。但在步骤3中getOnChainPrice的结果已经被拉高了。导致攻击者超额借出更多的DEI。

5.最后着攻击者在把用借贷出来DEI兑换成USDC归还从几个池子借出来的USDC,获利离场。

针对该事件,慢雾安全团队给出以下防范建议:本次攻击的原因主要在于使用了不安全的预言机来计算LP价格,慢雾安全团队建议可以参考Alpha Finance关于获取公平LP价格的方法。[2022/4/28 2:37:18]

Validium:Layer2+Validityproofs,数据存在链下,用零知识证明来保证状态转换的有效性,并设立「数据可用性委员会」来保证链下数据的可用性;

慢雾:Avalanche链上Zabu Finance被黑简析:据慢雾区情报,9月12日,Avalanche上Zabu Finance项目遭受闪电贷攻击,慢雾安全团队进行分析后以简讯的形式分享给大家参考:

1.攻击者首先创建两个攻击合约,随后通过攻击合约1在Pangolin将WAVAX兑换成SPORE代币,并将获得的SPORE代币抵押至ZABUFarm合约中,为后续获取ZABU代币奖励做准备。

2.攻击者通过攻击合约2从Pangolin闪电贷借出SPORE代币,随后开始不断的使用SPORE代币在ZABUFarm合约中进行`抵押/提现`操作。由于SPORE代币在转账过程中需要收取一定的手续费(SPORE合约收取),而ZABUFarm合约实际接收到的SPORE代币数量是小于攻击者传入的抵押数量的。分析中我们注意到ZABUFarm合约在用户抵押时会直接记录用户传入的抵押数量,而不是记录合约实际收到的代币数量,但ZABUFarm合约在用户提现时允许用户全部提取用户抵押时合约记录的抵押数量。这就导致了攻击者在抵押时ZABUFarm合约实际接收到的SPORE代币数量小于攻击者在提现时ZABUFarm合约转出给攻击者的代币数量。

3.攻击者正是利用了ZABUFarm合约与SPORE代币兼容性问题导致的记账缺陷,从而不断通过`抵押/提现`操作将ZABUFarm合约中的SPORE资金消耗至一个极低的数值。而ZABUFarm合约的抵押奖励正是通过累积的区块奖励除合约中抵押的SPORE代币总量参与计算的,因此当ZABUFarm合约中的SPORE代币总量降低到一个极低的数值时无疑会计算出一个极大的奖励数值。

4.攻击者通过先前已在ZABUFarm中有进行抵押的攻击合约1获取了大量的ZABU代币奖励,随后便对ZABU代币进行了抛售。

此次攻击是由于ZabuFinance的抵押模型与SPORE代币不兼容导致的,此类问题导致的攻击已经发生的多起,慢雾安全团队建议:项目抵押模型在对接通缩型代币时应记录用户在转账前后合约实际的代币变化,而不是依赖于用户传入的抵押代币数量。[2021/9/12 23:19:21]

Plasma:Layer2+Fraudproofs,数据存储在链下,用户提供欺诈证明来验证状态转换的有效性;

慢雾:BSC项目Value DeFi vSwap 模块被黑简析:据慢雾区情报,币安智能链项目 Value DeFi 的 vSwap 模块被黑,慢雾安全团队第一时间介入分析,并将结果以简讯的形式分享,供大家参考:

1. 攻击者首先使用 0.05 枚 WBNB 通过 vSwap 合约兑换出 vBSWAP 代币;

2. 攻击者在兑换的同时也进行闪电贷操作,因此 vSwap 合约会将兑换的 vBSWAP 代币与闪电贷借出的 WBNB 转给攻击者;

3. 而在完成整个兑换流程并更新池子中代币数量前,会根据池子的 tokenWeight0 参数是否为 50 来选择不同的算法来检查池子中的代币数量是否符合预期;

4. 由于 vSwap 合约的 tokenWeight0 参数设置为 70,因此将会采用第二种算法对池子中的代币数量进行检查;

5. 而漏洞的关键点就在于采用第二种算法进行检查时,可以通过特殊构造的数据来使检查通过;

6. 第二种算法是通过调用 formula 合约的 ensureConstantValue 函数并传入池子中缓存的代币数量与实时的代币数量进行检查的;

7. 在通过对此算法进行具体分析调试后我们可以发现,在使用 WBNB 兑换最小单位(即 0.000000000000000001) vBSWAP 时,池子中缓存的 WBNB 值与实时的值之间允许有一个巨大的波动范围,在此范围内此算法检查都将通过;

8. 因此攻击者可以转入 WBNB 进行最小单位的 vBSWAP 代币兑换的同时,将池子中的大量 WBNB 代币通过闪电贷的方式借出,由于算法问题,在不归还闪电贷的情况下仍可以通过 vSwap 的检查;

9. 攻击者只需要在所有的 vSwap 池子中,不断的重复此过程,即可将池子中的流动性盗走完成获利。详情见原文链接。[2021/5/8 21:37:37]

在实际的产品设计过程中,基于不同的业务场景,设计者往往需要在效率和安全性上做出权衡,要效率还是要绝对安全,每个产品设计时都有自己的侧重面。因此,也就有了上述的四种Rollup方案。现在市面上的大部分产品,按技术分类的话,应该大都属于上述四类,更准确的说,是属于前三类,第四类方案提出的最早,安全性考虑的较少。

所以,ZKSwap团队推出的Layer2扩容方案Zkspeed同样也属于上述范畴。然而,作为Layer2赛道上的一个新星,Zkspeed方案与其他主流产品推出的Layer2方案相比会有什么样的技术优势呢?产品体验又有何异同呢?接下来,我们将选取市场上具有代表性的几个产品,从技术方案和实际体验效果上做一些简单的对比分析,来看看Zkspeed扩容方案是否优胜同时产品体验是否更好。

Layer2技术对比分析

根据我们的市场调研,我们选取了三个市场上具有代表性和前沿性的的产品,分别是StarkWare的StarkNet、Uniswap的unipig、Loopring的loopring。首先,我们先从技术方案的角度,来看一下Zkspeed和starkNet、Unipig、Loopring的区别,具体的如下表所示:

表1.Layer2扩容方案分析表。图片说明:crs对应需要多次可信设置的zkp算法;srs对应只需要一次可信设置的zkp算法

根据上述表格可以看出:

Loopring

使用的Layer2扩容方案是基于ZKRollup方案设计的,同时也支持Validium方案,即链上数据可用性是可以选择的。该方案使用的零知识证明算法是zksnark算法,需要第三方生成可信设置。

优点是:这种算法的proof大小是常量大小的;

缺点是:可信设置是不通用的,针对不同的交易类型,都需要单独进行可信设置。因此,为了提高证明傲率,每个区块里的交易类型要求为同一交易类型,导致了如果某种类型的交易较少,那它上链的速度就会很慢,因为要等待足够的交易才打包区块。不过,在Loopring发布的协议3.6版本里可以看到,已经取消了了区块里是相同类型的交易的限制,相信会有更好的交易体验。

StarkWare

StarkWare团队研发的Layer2扩容引擎starkEx,支持Validium方案和ZKRollup方案两种模式可选。状态更新的有效性由零知识证明来保证,其用到的零知识证明算法是zkstark算法。

优点是:与常用的zksnark算法不同,zkstark算法不需要第三方的可信设置,而且其算法本身不依赖数学难题假设,具有一定的抗量子性;

缺点是:proof的大小比其他的zkp算法要大的多,生成证明需要消耗大量的计算资源和存储空间。同时,StarkWare团队研发的Layer2扩容解决方案值得期待,一种以太坊上的基于STARK的去中心化无许可L2ZK-Rollup产品,并且支持基于Cairo语言的通用计算;具体内容可参考链接starkNet。

Uniswap

使用的Unipig扩容方案是基于OptimisticRollup设计的,如前图所示,改方案存在挑战期,即在挑战期间,用户可以提供欺诈证明来验证执行者的行为是否作恶。

优点是:该方案兼容EVM,并且交易数据存在链上,保证了安全性;

缺点是:由于存在潜在的欺诈性证明,链上事务处理的时机会延缓;挑战成本昂贵,导致挑战模式基本上算是形同虚设。

ZKSwap

推出的Zkspeed扩容方案兼顾了ZKRollup、Validium和OptimisticRollup方案的特点。即实现所有与Layer1交互的交易数据全部上链,把单纯Layer2的交易数据存放在链下(Validium),交易hash数据上链,同时ZKSpeed也会提供一个完全上链的版本,这样可以实现更高的安全性,并提供零知识证明保证状态转换的有效性。

ZKSwap采用自己研发的Zkspeed与其他三个扩容方案的差异:

Zkspeed方案采用PLONK零知识证明算法,所有交易类型共用一套可信设置,如此就无需按照交易类型进行区块打包;

Zkspeed方案采用了GPU实现版的PLONK算法,相比于普通的CPU实现版本运行速度上提升了3倍以上,再加上顶尖的硬件设备,使得证明的生成时间大大缩短,大幅提高了系统的吞吐量;

ZKSwap团队经过反复研究论证,在Zkspeed方案上探索性的采用了聚合证明方案,并首先应用到AMM的DEX领域,把多个区块的证明聚合成一个证明,使得链上一次就可以完成多个区块的验证,大大的降低了交易的平均成本。

聚合证明的技术原理如下图所示:

图2.Aggregation方案

在Rollup方案里,一个很明显的技术特点就是交易的批量处理,即对区块里的所有交易的有效性产生一个证明,然后链上主合约完成证明的有效性验证。如图2左侧所示,这和原始的单个交易处理力度相比,已经有了巨大的吞吐率的提升和交易成本的降低。然而,ZKSwap团队发现,受限于零知识证明算法椭圆曲线参数的选取,一个区块内能批量处理的交易数量是有限的,再加上链上一次验证计算的成本高达50WGas,导致每笔交易的成本并没有低到预期。因此,ZKSwap技术团队持续进行技术应用创新的突破,并最终关注到了聚合证明方案。

如上图右侧所示,聚合证明的思想很简单,可简单表述为:把每个区块的proof当作输入,把链上验证的过程当作证明电路,证明链上的验证过程是正确的,由于验证的形式就是一个双线性配对,因此,多个proof可以进行线性组合,然后利用一次双线性配对完成所有proof的有效性验证。这样一来,多个证明的验证过程由多次变成1次,验证成本大幅降低,成本降低的幅度取决于区块聚合度,目前Zkspeed方案支持聚合上链的交易笔数可根据实际情况进行调配,20、10、5笔均支持。同时,为了探索进一步降低交易成本的可能性,ZKSwap团队追求精益求精,继续对上链数据进行聚合提交,即,多个区块一次提交,节省了一些固定成本,进一步压缩交易成本,最终实现一笔交易的成本消耗最低至1400Gas,远低于行业其他产品。

展望

遗憾的是,目前ZKSwap的方案还不兼容EVM,ZKSwap团队的愿景是构建一个支持通用EVM的Rollup扩容解决方案,使得其他应用无需重新编写智能合约就能实现快速迁移,目前ZKSwap团队已经投入研究,并取得了一些进展。除此之外,starkWare和MatterLabs分别开发了starkNet和zinc的Layer2扩容解决方案,需要用对应新设计的DSL语言来编写证明逻辑,虽然此方案不算完美,但也算是一个阶段性的研发成果。未来ZKSwap团队愿和其他团队一起,共同致力于以太坊的Layer2扩容建设。

撰文:江小白

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

金星链

比特币交易LAYER:以太坊Rollup生态全景解读

以太坊Rollup生态全景解读哔哔News刚刚10Rollup被认为是一个确定性的机会。随着以太坊拥堵问题日益突出,已经有越来越多的项目在尝试Rollup解决方案,包括Synthetix、Uni.

[0:0ms0-1:602ms