原文标题:《SolvingtheissuewithslippageinEIP-4626?》
原文作者:NickAddison
原文编译:ChinaDeFi
EIP-4626和mStable金库存款
mStableEIP-4626的首个金库将投资于基于Curve3?Pool的Convex池。从EIP-4626的角度来看,金库的资产是Curve3?Pool的流动性提供者代币(?3?Crv)。存款函数是EIP-4626规范的一部分,它指定要存入多少资产以及将接收金库份额的帐户。存款函数返回给接收方会铸造多少金库份额。
functiondeposit(uint?256assets,addressreceiver)
external
returns(uint?256shares);
例如,存入3?CrvConvexmUSD金库将从调用方转移3?Crv,并将vcx?3?CRV-mUSD金库份额转移到接收方。
EIP-4626标准的强大之处在于,在投资池中有一种通用的投资方法,但对资产可以投资到底层平台的内容和时间没有限制。对于mStable的3?CrvConvxmUSD金库来说,3?Crv被添加到CurvemUSDMetapool中,然后产生的流动性提供者代币(musd?3?Crv)被存入ConvexmUSD池中,该池会投资于CurvemUSDgauge并获得更高的回报。
大咖零距离 | 面对312极端行情应该如何调整心态?:4月17日16:00,金色盘面邀请eos柚子公主做客金色财经《大咖零距离》直播间,将分享《面对312极端行情应该如何调整心态?》,敬请关注,欲观看直播扫描下图二维码即可![2020/4/17]
这个过程中的一个技术挑战是如何防止三明治攻击。
什么是三明治攻击?如何预防它们?
当我们向CurveMetapool(或任何其他池)添加流动性时,我们指定自己想存入的资产数量和流动性提供者(LP)代币的最小数量。对于mUSDMetapool,金额是一个包含两项的数组。第一个是mUSD的量,第二个是3?Crv的量。?3?CrvConvex金库只存3?Crv,因此金额数组的第一项将为零。
functionadd_liquidity(uint?256?memoryamounts,uint?256min_mint_amount)
external
returns(uint?256?);
开发金库时的一个技术挑战是我们如何设置预期流动性提供者代币的最小数量。
仅仅将min_mint_amount设置为零是不够的,因为它会让存款交易受到三明治攻击。但在我们深入了解三明治攻击是如何工作之前,我们需要更多地了解CurveMetapool定价是如何工作的。由于金库只添加两个池代币(mUSD和3?Crv)中的一个,因此它接收到的Metapool流动性提供者(LP)代币的数量将取决于Metapool中mUSD和3?Crv的余额。池中的3?Crv越多,当仅将3?Crv添加到Metapool时,返回的LP代币就越少。
动态 | V神阐述如何进行ETH委托挖矿:V神回复网友提问“1.可以通过合约合租一个validator(平民化参与,共享投票身份)吗?2.一个客户端可以跑多个valifator (共享机器)吗?”表示,“你开一个validator,需要设置两个公钥:签名的公钥和取款的公钥。Phase 2后,不一定需要设置取款公钥,也可以设置取款合约。签名的私钥能withdraw,withdraw完成后validator里面的资金都给取款合约的地址。所以你开新的validator到时候,可以先发比如1以太币,设置取款合约,这个合约的规则是,谁deposit多少谁按照比例withdraw多少。一段时间后,你发withdraw的交易。现在因为奖励这个validator的balance是33.6以太币(加 5%),33.6以太币给合约,合约的规则分配1.05给你,8.4, 10.5和13.65 给其他的参与者。签名的私钥是你的,谁能withdraw多少的规则是合约定的。别人能看一个还未activated的validator的withdraw合约的规则,如果他们觉得是合理的,则他们能发他们的币给这个validator,这个是委托的方法。”[2019/10/22]
例如,如果Curve的mUSDMetapool添加了200万个mUSD,?600万个3?Crv和100?k个3?Crv,则将收到100?,?068个LP代币(musd?3?Crv)。如果Metapool有600万个mUSD,添加了200万个3?Crv和100?k个3?Crv,将收到100?,?892个LP代币(musd?3?Crv)。
行情 | 救赎说币:WFEE最好不要买入,不管外界如何利好:据救赎分析,WFEE走势图可以看出,下跌之后,一直横在那里,然后后面一波上涨涨幅1.3倍左右,接着再高点跌下来7倍。无论官方怎么发文也好,外界怎么利好也好,这币没有做市值管理,如果有,就不会跌那么惨,也不会横盘那么久。所以这个币种坚决不能买入。币圈没有底线,更没有下限。技术分析来说,买盘不强,但是卖盘也几乎没有。但是卖盘只是暂时没有,项目方还是手里有币的。但是买盘没有就真的没有了。[2018/7/16]
那么三明治攻击是如何实现的呢?
攻击者在将交易包含到区块之前,就会监控Mempool中可能被利用的交易。为了利用交易,他们贿赂区块生产者,将他们的交易包含在可利用的交易之前和之后。也就是说,他们将易受攻击的交易与自己的交易夹在一起。如果有一笔交易将3?Crv添加到最低LP金额为零的mUSDMetapool,则攻击者的第一笔交易将是减少Metapool中的mUSD数量。这意味着在易受攻击的添加流动性交易中收到的MetapoolLP代币数量远低于应有的数量。在第三个交易中,攻击者返还在第一个交易中删除的mUSD,并将收益装入囊中。
例子
比特币共识大会圆桌讨论有关政府如何使用加密技术:今日比特币共识大会召开,在有关政府如何使用加密技术的圆桌讨论环节,德勤高级经理Wendy Henry表示,美国正着眼于能够实现现代化的技术。这些技术例如区块链技术,实际上可以作为连接的组织,人们必须弄清关于如何使用区块链技术。linux基金会首席营销官Jamie E. Smith表示,区块链技术并非将房子烧毁一样的革命,而是提供政府目前已经提供了的服务的更好版本。[2018/5/15]
使用Curve的mUSDMetapool,池中有6?,?000?,?000mUSD和3?Crv,11?,?917?,?295个LP代币(musd?3?Crv)和1.018095美元的虚拟价格。
攻击者通过使用6?,?500?,?000(?54.5%??????????)池流动性提供者(musd?3?Crv)代币从池中提取5?,?973?,?425的mUSD,使用他们池中的大部分流动性提供者代币(musd?3?Crv)来平衡池。使用remove_liquidity_one_coin函数进行单边提款,池中剩下0.43%??????????mUSD和99.56%??????????3?Crv。虚拟价格上涨了近1%??????????,至1.019105?,因为大量不平衡的提现为池收取了费用。
在美国众议院听证会乔治城大学法学教授表示:监管的重点应该在于数字代币如何被对待:在美国众议院金融服务委员会《检查加密货币和ICO市场》的听证会上,乔治城大学法学教授Chris Brummer博士表示,ICO将会成为区块链行业的主要融资方式,但监管的重点应该在于数字代币如何被对待,以及系统如何被监管。他还表示,许多ICO欺诈非常明显,需要监管机构介入,更新法律法规,并且提供ICO白皮书指导。[2018/3/14]
受害者使用add_liquidity函数将100?,?000个3?Crv添加到不平衡的池中,且没有最小流动性提供者数量。如果池是平衡的,受害者得到81978个LP代币而不是100371个。这意味着受害者得到的LP代币比他们应该得到的少18?,?393个(?18%??????????)。以美元计算,受害者得到的美元价值减少了18?,?643?(?18%??????????)。
对于第三个也是最后一个交易,攻击者使用add_liquidity将他们从第一个交易中提取的5?,?973?,?425个mUSD添加回池中,以接收6?,?503?,?610个LP代币(musd?3?Crv)。比第一次交易多取了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(uint?256?memoryamounts,boolis_deposit)externalviewreturns(uint?256?);
因此问题仍然存在,EIP-4626函数没有办法传递最小量。打破标准来添加这一点是不可取的,使用预言机也是次优的。我们需要链上方法。
mStable的方法
mStable的金库获得一个公平的MetapoolLP代币价格的方法是使用CurveMetapool和Curve3?Pool的虚拟价格。get_virtual_price函数以美元为单位返回池的流动性提供者代币的价格。它通过计算池的不变式来实现这一点,该不变式是池中代币的美元价值除以代币的总供应量。由于池中代币的余额不影响池的不变值或总美元价值,虚拟价格不会受到三明治攻击。
functionget_virtual_price()externalviewreturns(uint?256?);
对于存入mStable金库的存款,我们需要在Curve的3?PoolLP代币(?3?Crv)中对MetapoolLP代币进行定价,因为这是我们在金库中使用的资产。为此,我们得到3?Pool虚拟价格,并将其除以MetapoolLP代币价格。
fairMetapoolLPtokens=3?Crvassets*
?3?Poolvirtualprice/
Metapoolvirtualprice
一旦我们有了一个合理的价格,我们就可以通过目前配置为1%??????????的滑点系数来降低它。这个调整后的公平价格用于计算在向池中添加3?Crv流动性时可以接收的CurveMetapoolLP代币(musd?3?Crv)的最小数量。
存款的全部流程如下:
结论
虽然标准在标准化和获得采用方面起着巨大的作用,但像这样的问题提醒我们,在DeFi方面没有轻松的胜利。我们需要认识到现有标准的局限性,并为它们寻找最佳的解决方案。
在上周发出的首尾相连:DID和链上数据构建的去中心化链路一文中,R3PO指出链上数据是一种“下沉”的数据基础设施,需要配合DID作为一种功能套件嵌入进SocialFi、GameFi、钱包等产品之内.
1900/1/1 0:00:00XRP价格在过去24小时内上涨了1.5%,达到0.358245美元,因为山寨币从昨天的市场抛售中恢复过来.
1900/1/1 0:00:00回顾昨日,昨日我们文章的思路是看涨,原因有二,其一周二破低情况下反弹,空头没有形成延续,其二价格重新收复1100关口,这两点构建了昨日看涨思路,同时文中双币分别给出多单建议,大饼16400完美获得入场位置;那么就今天的走势来看.
1900/1/1 0:00:00加密市场的去中心化属性,注定这里没有美联储,也没有中央银行,像FTX这样暴雷,一旦发生便无人相救,这是加密市场的脆弱性,但同时也让市场朝着区块链技术所提倡的公开透明更进一步.
1900/1/1 0:00:00交易所“巨头”FTX资不抵债最终走向破产,并牵连了多家与其往来密切的交易所、投资机构和做市商等加密企业一同陷入危机,这不仅引发了加密资产价格大幅“跳水”,使得自今年?4?月以来一直震荡下行的市场变得更加脆弱.
1900/1/1 0:00:00根据KuCoin最近的一项调查,足球是加密货币投资者中最受欢迎的运动。在观看2022年FIFA世界杯的70%的观众中,近一半也在交易球迷代币。但加密局正在抬头,所以要保持谨慎。最负盛名的体育赛事之一目前正在卡塔尔的中东地区进行.
1900/1/1 0:00:00