l无常损失的定义
无常损失,英文为ImpermanentLoss,即资产因币价变化,资产在流动性池内及池外的两种状况的资产差额。无常损失针对的是向DEX的流动性池中注入资产的提供者,称为流动性提供者,LP在将资产注入流动性池,和不将资产注入流动性池,上述两种不同方向下的资产机会成本。
l无常损失举例
为了更好的说明无常损失是什么,首先我们假设有如下三个前提:
第一,假设有如下流动性池。这里仍延续上一期知识小课堂中的AMM例子,流动性池中现有1000FC及250USDT。
如下图FC和USDT流动性池。根据经典流动性池的特点,FC数量和USDT数量的乘积为一个常数,公式即为X*Y=K。初始情况下,FC和USDT在池子中的价格为1:1,若FC现价为0.25美元,USDT为稳定币1美元,假设池子中的FC数量为为1000个,则USDT的数量为/1=250个。根据X*Y=K,可得常数K为1000*250=250000。
LendHub被黑简析:系LendHub中存在新旧两市场:金色财经报道,据慢雾安全区情报,2023 年 1 月 13 日,HECO 生态跨链借贷平台 LendHub 被攻击损失近 600 万美金。慢雾安全团队以简讯的形式分享如下:
此次攻击原因系 LendHub 中存在两个 lBSV cToken,其一已在 2021 年 4 月被废弃但并未从市场中移除,这导致了新旧两个 lBSV 都存在市场中。且新旧两个 lBSV 所对应的 Comptroller 并不相同但却都在市场中有价格,这造成新旧市场负债计算割裂。攻击者利用此问题在旧的市场进行抵押赎回,在新的市场进行借贷操作,恶意套取了新市场中的协议资金。
目前主要黑客获利地址为 0x9d01..ab03,黑客攻击手续费来源为 1 月 12 日从 Tornado.Cash 接收的 100 ETH。截至此时,黑客已分 11 笔共转 1,100 ETH 到 Tornado.Cash。通过威胁情报网络,已经得到黑客的部分痕迹,慢雾安全团队将持续跟进分析。[2023/1/13 11:11:00]
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]
第二,假设流动性池中有我提供的100FC及25USDT,我就有流动性池中10%的资产;
慢雾:GenomesDAO被黑简析:据慢雾区hacktivist消息,MATIC上@GenomesDAO项目遭受黑客攻击,导致其LPSTAKING合约中资金被非预期的取出。慢雾安全团队进行分析有以下原因:
1.由于GenomesDAO的LPSTAKING合约的initialized函数公开可调用且无权限与不可能重复初始化限制,攻击者利用initialized函数将合约的stakingToken设置为攻击者创建的虚假LP代币。
2.随后攻击者通过stake函数进行虚假LP代币的抵押操作,以获得大量的LPSTAKING抵押凭证。
3.获得凭证后再次通过initialized函数将合约的stakingToken设置为原先真是的LP代币,随后通过withdraw函数销毁LPSTAKING凭证获取合约中真实的LP抵押物。
4.最后将LP发送至DEX中移除流动性获利。
本次事件是因为GenomesDAO的LPSTAKING合约可被任意重复初始化设置关键参数而导致合约中的抵押物被恶意耗尽。[2022/8/7 12:07:06]
第三,FC不断上涨,直至某一时刻,流动性池中FC数量减少至500个,USDT数量增加至500个。
慢雾: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]
Force DAO 代币增发漏洞简析:据慢雾区消息,DeFi 量化对冲基金 Force DAO 项目的 FORCE 代币被大量增发。经慢雾安全团队分析发现: 在用户进行 deposit 操纵时,Force DAO 会为用户铸造 xFORCE 代币,并通过 FORCE 代币合约的 transferFrom 函数将 FORCE 代币转入 ForceProfitSharing 合约中。但 FORCE 代币合约的 transferFrom 函数使用了 if-else 逻辑来检查用户的授权额度,当用户的授权额度不足时 transferFrom 函数返回 false,而 ForceProfitSharing 合约并未对其返回值进行检查。导致了 deposit 的逻辑正常执行,xFORCE 代币被顺利铸造给用户,但由于 transferFrom 函数执行失败 FORCE 代币并未被真正充值进 ForceProfitSharing 合约中。最终造成 FORCE 代币被非预期的大量铸造的问题。 此漏洞发生的主要原因在于 FORCE 代币的 transferFrom 函数使用了`假充值`写法,但外部合约在对其进行调用时并未严格的判断其返回值,最终导致这一惨剧的发生。慢雾安全团队建议在对接此类写法的代币时使用 require 对其返回值进行检查,以避免此问题的发生。[2021/4/4 19:45:30]
问题一:根据假设,我目前的资产状况如何?
答:因为我所占流动性池的比例为10%,所以目前我在流动性池中的资产为50FC及50USDT;
问题二:如果未参与提供流动性,那么我的资产状况如何?
答:若未提供流动性,则我的资产为100FC及25USDT
问题三:此刻我本次的无常损失是多少?
答:本次的无常损失为25美元,资产损失为20%。计算过程如下:
1、未提供流动性情况下:
我的资产为100FC及25USDT,即100*FC现价+25*USDT价格=100*1+25*1=125
2、提供流动性情况下:
我的资产为50FC及50USDT,即50*FC现价+50*USDT价格=50*1+50*1=100
3、未提供流动性情况下的资产价格与提供流动性情况下的资产价格差:
125-100=25。损失比率为25/125=20%。
问题四:为什么会出现无常损失?
答:因为FC价格不断上涨,而原始流动性池中FC相对就会比较便宜,所以就会有人不断在流动性池中充入USDT,换出FC套利,池子中的FC就会减少,USDT就会变多。对于我作为流动性提供者来说,相当于我手中的FC在不断被以比较低的价格卖出,而收入的是相对FC不断贬值的USDT,这也就产生了无常损失。无常损失是从英文ImpermanentLoss翻译来的,其实英文直译就是临时损失,也就是说,当我初始存入FC和USDT时,因为币价的变动FC和USDT的价值比变了,这时也就产生了ImpermanentLoss。但当一段时间以后,FC和USDT的价格比又回到了我初始存入时的比例时,这种损失就会消失。所以称为临时损失。
问题五:无常损失的函数曲线什么样的?
首先,通过计算,我们可以列出几个流动性池的FC和USDT数量的时间点,并依据问题三中提到的无常损失计算方法,得出相应的损失比例。如下图表:
根据此表,可以得出如下横轴为FC数量,纵轴为损失比率的折线图。
上图中折线交横轴的点也就是上表中初始流动性池中的USDT为25,FC为100时状态,此时损失比例为0。这也就意味着,如果不考虑其他收入的情况下,流动性提供者LP随着时间的推移,资产不会增长,而最多持平。
问题六:问题五中的折线图为什么抛物线不是对称的呢?
答:根据问题五中图表可得知,对于FC的变动,其实损失比率也是均匀变动的。之所以问题五中折线图不是对称图的原因是横轴取值范围为0-2000,若把问题五折线图横轴取值范围扩大至0至无穷大,同时将FC数量为100为中轴线画图,得出的图形大致如下:
问题七:盈利区间在哪呢?
答:以上问题所画的图中,均未考虑流动性提供者的收入,这里主要就是手续费收入,手续费收入又和DEX中交易对的交易频率还有交易量有关。如果我们将手续费考虑在内的话,图形大概如下:
如上图,只有在坐标轴横轴的上方,且在抛物线内的区间,才是流动性提供者LP能够盈利的区间。
问题八:无常损失这么厉害,那为什么还有人要做流动性提供者呢?
答:大致有如下情况三种主要情况:
1、如问题七,有盈利区间可以盈利;
2、有些币价比较稳定的交易对,在足够长的时间内,是很大可能会回到原始比例的,这时候取出就没有无常损失;
3、参与流动性挖矿,挖矿年华收益较高时,盈利的可能性比较大。
今天的FLUX课堂——无常损失,能够让大家了解流动性提供者的危与机,有助于大家走近DeFi,了解DEX。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。