火星链 火星链
Ctrl+D收藏火星链

USD:详解 EIP-4626 中的滑点问题及解决方案

作者:

时间:1900/1/1 0:00:00

简介

EIP-4626提供了一种将代币投资到投资池(通常称为金库)的标准方法。当我们存入自己的资产时,我们会收到一个份额代币,代表我们在金库里的资产。金库将把汇集的资产投资到一个或多个基础平台,为持有者产生收益。

EIP-4626标准的一个结果是,存款和铸币函数没有提供指定回报的最小份额或资产金额的方法。这通常用于防止高滑点或三明治攻击。mStable如何通过其MetaVaults解决这个问题——在保持符合标准的同时减轻高滑点攻击?本文描述了这些挑战,并解释了他们的方法是如何工作的。

EIP-4626和mStable金库存款

mStableEIP-4626的首个金库将投资于基于Curve3Pool的Convex池。从EIP-4626的角度来看,金库的资产是Curve3Pool的流动性提供者代币(3Crv)。存款函数是EIP-4626规范的一部分,它指定要存入多少资产以及将接收金库份额的帐户。存款函数返回给接收方会铸造多少金库份额。

functiondeposit(uint256assets,addressreceiver)

external

returns(uint256shares);

Circle CEO公布今夜证词:支付稳定币有助于增强美元和美国经济的竞争力:6月13日消息,Circle联合创始人兼CEO Jeremy Allaire已公布了将要在美国众议院金融服务委员会举行的数字资产听证会上发表的证词。

Jeremy表示:“美国政府在未来几年采取的措施将对随后几十年的美元竞争力产生重大影响。稳定币法案是一项至关重要的立法,也是创建监管框架的第一步,还将产生远远超出数字资产市场的重大影响。现在是美国领导制定全球规则的时候。有了正确的监管框架,稳定币和区块链网络可以扩展以支持数十亿用户和数万亿美元的支付活动。”

此前消息,美国众议院金融服务委员会主席Patrick McHenry宣布将于美国东部时间6月13日14:00(北京时间6月14日2:00)召开主题为“数字资产的未来:为数字资产生态系统提供清晰度”的听证会。[2023/6/14 21:34:50]

例如,存入3CrvConvexmUSD金库将从调用方转移3Crv,并将vcx3CRV-mUSD金库份额转移到接收方。

NFT借贷协议Blend新增支持Kanpai Pandas和Redacted Remilio Babies两个NFT系列,贷款总额突破4万枚ETH:金色财经报道,据NFT聚合交易市场Blur在社交媒体宣布,旗下NFT借贷协议Blend将在本周新增支持Kanpai Pandas和Redacted Remilio Babies两个NFT系列。另据Dune Analytics最新数据显示, Blend协议贷款总额已突破4万枚 ETH,本文撰写时达到40,131 ETH,贷款交易总量为12,534笔,独立借款人和贷款人均超过1000个。[2023/5/23 15:19:47]

EIP-4626标准的强大之处在于,在投资池中有一种通用的投资方法,但对资产可以投资到底层平台的内容和时间没有限制。对于mStable的3CrvConvxmUSD金库来说,3Crv被添加到CurvemUSDMetapool中,然后产生的流动性提供者代币(musd3Crv)被存入ConvexmUSD池中,该池会投资于CurvemUSDgauge并获得更高的回报。

这个过程中的一个技术挑战是如何防止三明治攻击。

报告:印度到今年年底将拥有超过 1.5 亿加密货币用户:金色财经报道,根据 Statista 最近的一份报告,到今年年底,印度的加密货币社区可能会激增至超过 1.56 亿成员,将有超过 11% 的人口投入加密货币领域。该国的加密货币采用率预计将超过美国、英国、日本和俄罗斯。

Statista 确定,大多数处理数字资产的印度人都受过良好教育,年龄在 18-40 岁之间。之前的研究表明,年轻人也最有可能与其他国家的行业互动。 印度的加密货币市场今年可提供价值约 33 亿美元的利润,而到 2027 年收入可能激增至近 60 亿美元。[2023/3/27 13:27:54]

什么是三明治攻击?如何预防它们?

当我们向CurveMetapool(或任何其他池)添加流动性时,我们指定自己想存入的资产数量和流动性提供者(LP)代币的最小数量。对于mUSDMetapool,金额是一个包含两项的数组。第一个是mUSD的量,第二个是3Crv的量。3CrvConvex金库只存3Crv,因此金额数组的第一项将为零。

functionadd_liquidity(uint256memoryamounts,uint256min_mint_amount)

external

returns(uint256);

Instagram将推出NFT铸造和销售功能:11月3日消息,Meta宣布Instagram正开发NFT铸造和销售功能,将允许用户创建和推出自己的NFT,并通过Instagram进行销售。该功能预计首先向摄影师DrifterShot、视觉艺术家IlseValfré等艺术家开放。此外,Instagram将从OpenSea中提取NFT数据,以便用户在Instagram上查看NFT系列名称和描述。

此前报道,9月份Meta宣布Facebook和Instagram上的美国地区用户可连接钱包并分享数字收藏品,这包括用户能够在Facebook和Instagram上交叉发布他们持有数字收藏品。此外,在Instagram上提供数字收藏品的100个国家/地区的用户也可以使用这一功能。[2022/11/3 12:11:54]

开发金库时的一个技术挑战是我们如何设置预期流动性提供者代币的最小数量。

仅仅将min_mint_amount设置为零是不够的,因为它会让存款交易受到三明治攻击。但在我们深入了解三明治攻击是如何工作之前,我们需要更多地了解CurveMetapool定价是如何工作的。由于金库只添加两个池代币(mUSD和3Crv)中的一个,因此它接收到的Metapool流动性提供者(LP)代币的数量将取决于Metapool中mUSD和3Crv的余额。池中的3Crv越多,当仅将3Crv添加到Metapool时,返回的LP代币就越少。

英国央行行长:加密货币资产可能具有“外在”价值:7月11日消息,英国央行行长贝利表示,加密货币资产可能具有“外在”价值,加密资产没有“内在”价值,人们喜欢收藏加密货币,赋予它价值。无担保的加密货币资产“风险非常高”,金融科技创新与金融稳定之间不应该存在取舍。[2022/7/12 2:06:35]

例如,如果Curve的mUSDMetapool添加了200万个mUSD,600万个3Crv和100k个3Crv,则将收到100,068个LP代币(musd3Crv)。如果Metapool有600万个mUSD,添加了200万个3Crv和100k个3Crv,将收到100,892个LP代币(musd3Crv)。

那么三明治攻击是如何实现的呢?

攻击者在将交易包含到区块之前,就会监控Mempool中可能被利用的交易。为了利用交易,他们贿赂区块生产者,将他们的交易包含在可利用的交易之前和之后。也就是说,他们将易受攻击的交易与自己的交易夹在一起。如果有一笔交易将3Crv添加到最低LP金额为零的mUSDMetapool,则攻击者的第一笔交易将是减少Metapool中的mUSD数量。这意味着在易受攻击的添加流动性交易中收到的MetapoolLP代币数量远低于应有的数量。在第三个交易中,攻击者返还在第一个交易中删除的mUSD,并将收益装入囊中。

例子

使用Curve的mUSDMetapool,池中有6,000,000mUSD和3Crv,11,917,295个LP代币(musd3Crv)和1.018095美元的虚拟价格。

攻击者通过使用6,500,000(54.5%)池流动性提供者(musd3Crv)代币从池中提取5,973,425的mUSD,使用他们池中的大部分流动性提供者代币(musd3Crv)来平衡池。使用remove_liquidity_one_coin函数进行单边提款,池中剩下0.43%mUSD和99.56%3Crv。虚拟价格上涨了近1%,至1.019105,因为大量不平衡的提现为池收取了费用。

受害者使用add_liquidity函数将100,000个3Crv添加到不平衡的池中,且没有最小流动性提供者数量。如果池是平衡的,受害者得到81978个LP代币而不是100371个。这意味着受害者得到的LP代币比他们应该得到的少18,393个(18%)。以美元计算,受害者得到的美元价值减少了18,643(18%)。

对于第三个也是最后一个交易,攻击者使用add_liquidity将他们从第一个交易中提取的5,973,425个mUSD添加回池中,以接收6,503,610个LP代币(musd3Crv)。比第一次交易多取了3610美元。池的虚拟价格将增加1%至1.019216,因为这是另一个不平衡的交易。以美元计算,攻击者的LP价值从6,500,000*1.018095=6,617,617美元上升到6,503,610*1.019216=6,628,583美元,增加了10,966美元(1.65%)。

如果受害者损失了18643美元价值,而攻击者只获得了10966美元价值,那么缺失的7677美元价值在哪里?

使池失衡的0.04%费用由流动性提供者和Curve投票托管的CRV(veCRV)持有者平均分摊。攻击者未持有的5,417,295LP代币的价值从5,515,323美元增加到5,520,794美元。这比池费用的50%增加了5,471美元。增加的美元价值归于托管CRV(veCRV)持有人。

Curve的保护

为了防止三明治攻击,在向CurveMetapool添加流动性时,需要指定一个合理的最小LP代币数量。通常,DeFi协议会在交易中传入相当数量的金额。Curve池中的add_liquidity函数就是min_mint_amount的一个很好的例子。但是对于标准的EIP-4626存款函数,没有定义参数来指定最小金额,因此我们无法传入相当数量的链下计算的MetapoolLP代币。

Curve池有一个calc_token_amount函数,它可以计算池代币存款收到的LP代币数量。但这不能用来防止三明治攻击。如果已经运行了一个交易来平衡池,那么calc_token_amount函数将只返回当前不公平的LP代币数量。

functioncalc_token_amount(uint256memoryamounts,boolis_deposit)externalviewreturns(uint256);

因此问题仍然存在,EIP-4626函数没有办法传递最小量。打破标准来添加这一点是不可取的,使用预言机也是次优的。我们需要链上方法。

mStable的方法

mStable的金库获得一个公平的MetapoolLP代币价格的方法是使用CurveMetapool和Curve3Pool的虚拟价格。get_virtual_price函数以美元为单位返回池的流动性提供者代币的价格。它通过计算池的不变式来实现这一点,该不变式是池中代币的美元价值除以代币的总供应量。由于池中代币的余额不影响池的不变值或总美元价值,虚拟价格不会受到三明治攻击。

functionget_virtual_price()externalviewreturns(uint256);

对于存入mStable金库的存款,我们需要在Curve的3PoolLP代币(3Crv)中对MetapoolLP代币进行定价,因为这是我们在金库中使用的资产。为此,我们得到3Pool虚拟价格,并将其除以MetapoolLP代币价格。

fairMetapoolLPtokens=3Crvassets*

3Poolvirtualprice/

Metapoolvirtualprice

一旦我们有了一个合理的价格,我们就可以通过目前配置为1%的滑点系数来降低它。这个调整后的公平价格用于计算在向池中添加3Crv流动性时可以接收的CurveMetapoolLP代币(musd3Crv)的最小数量。

存款的全部流程如下:

结论

虽然标准在标准化和获得采用方面起着巨大的作用,但像这样的问题提醒我们,在DeFi方面没有轻松的胜利。我们需要认识到现有标准的局限性,并为它们寻找最佳的解决方案。

标签:CRV3CRVUSDPOOLCRV币3CRV价格PegsUSDJackPool

以太坊最新价格热门资讯
zkSync:全面解析以太坊 L2 明星扩容方案 zkSync2.0

长期以来围绕着以太坊将如何扩展,以及哪种方式或技术将最成功,在区块链行业一直争论不休,经过四年的准备,zkSync2.0的推出或将终结这一纷争,zkSync也是第一个推出主网的zkEVM.

1900/1/1 0:00:00
ARY:FTX被盗迷踪:神秘的CTO Gary Wang是谁?

短短一周之内,曾为全球第二大交易所的?FTX??轰然崩塌。而更大的drama接踵而至,资产本已不多的FTX居然离奇遭遇黑客入侵,被盗数亿美元.

1900/1/1 0:00:00
CYBER:DODO research:CeFi 信任危机会开启真正的 DeFi 2.0 吗?

为什么DeFi是大势所趋CeFi信任危机FTX作为行业仅次于币安的第二大加密生态,在短时间内遭遇挤兑,突然暴雷,震惊了整个加密货币世界。我们应该重新审视CEX的风险.

1900/1/1 0:00:00
NFT:对话王峰:Web3最精彩的是不确定性,一个互联网OG的加密之旅

王峰,一个横亘WEB2与WEB3的名字,从远古互联网时期走来,一路走到WEB3.0前沿,火星财经创始人,共识实验室创始合伙人,NFT交易平台Element创始人.

1900/1/1 0:00:00
NFT:Opensea链上版税工具引争议,以版税之名行垄断之实?

2022年11月6日Opensea发布公告称,将推出链上强制执行版税工具。因为当时只是提出,市场并无任何反响.

1900/1/1 0:00:00
SOURCE:钱包类项目的社交化思路

我们可以远离虚拟空间,但永远也不会远离社交。Web3的社交圈正在不断扩大,且正在和Web2的社交模式加速融合,可以预见的是一个或多个更加抗审查的全球化分布式社交网络.

1900/1/1 0:00:00