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]
慢雾:跨链互操作协议Nomad桥攻击事件简析:金色财经消息,据慢雾区消息,跨链互操作协议Nomad桥遭受黑客攻击,导致资金被非预期的取出。慢雾安全团队分析如下:
1. 在Nomad的Replica合约中,用户可以通过send函数发起跨链交易,并在目标链上通过process函数进行执行。在进行process操作时会通过acceptableRoot检查用户提交的消息必须属于是可接受的根,其会在prove中被设置。因此用户必须提交有效的消息才可进行操作。
2. 项目方在进行Replica合约部署初始化时,先将可信根设置为0,随后又通过update函数对可信根设置为正常非0数据。Replica合约中会通过confirmAt映射保存可信根开始生效的时间以便在acceptableRoot中检查消息根是否有效。但在update新根时却并未将旧的根的confirmAt设置为0,这将导致虽然合约中可信根改变了但旧的根仍然在生效状态。
3. 因此攻击者可以直接构造任意消息,由于未经过prove因此此消息映射返回的根是0,而项目方由于在初始化时将0设置为可信根且其并未随着可信根的修改而失效,导致了攻击者任意构造的消息可以正常执行,从而窃取Nomad桥的资产。
综上,本次攻击是由于Nomad桥Replica合约在初始化时可信根被设置为0x0,且在进行可信根修改时并未将旧根失效,导致了攻击可以构造任意消息对桥进行资金窃取。[2022/8/2 2:52:59]
第二,假设流动性池中有我提供的100FC及25USDT,我就有流动性池中10%的资产;
慢雾:Harmony Horizon bridge遭攻击简析:据慢雾安全团队消息,Harmony Horizon bridge 遭到黑客攻击。经慢雾 MistTrack 分析,攻击者(0x0d0...D00)获利超 1 亿美元,包括 11 种 ERC20 代币、13,100 ETH、5,000 BNB 以及 640,000 BUSD,在以太坊链攻击者将大部分代币转移到两个新钱包地址,并将代币兑换为 ETH,接着将 ETH 均转回初始地址(0x0d0...D00),目前地址(0x0d0...D00)约 85,837 ETH 暂无转移,同时,攻击者在 BNB 链暂无资金转移操作。慢雾 MistTrack 将持续监控被盗资金的转移。[2022/6/24 1:28:30]
第三,FC不断上涨,直至某一时刻,流动性池中FC数量减少至500个,USDT数量增加至500个。
慢雾: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]
慢雾:Spartan Protocol被黑简析:据慢雾区情报,币安智能链项目 Spartan Protocol 被黑,损失金额约 3000 万美元,慢雾安全团队第一时间介入分析,并以简讯的形式分享给大家参考:
1. 攻击者通过闪电贷先从 PancakeSwap 中借出 WBNB;
2. 在 WBNB-SPT1 的池子中,先使用借来的一部分 WBNB 不断的通过 swap 兑换成 SPT1,导致兑换池中产生巨大滑点;
3. 攻击者将持有的 WBNB 与 SPT1 向 WBNB-SPT1 池子添加流动性获得 LP 凭证,但是在添加流动性的时候存在一个滑点修正机制,在添加流动性时将对池的滑点进行修正,但没有限制最高可修正的滑点大小,此时添加流动性,由于滑点修正机制,获得的 LP 数量并不是一个正常的值;
4. 随后继续进行 swap 操作将 WBNB 兑换成 SPT1,此时池子中的 WBNB 增多 SPT1 减少;
5. swap 之后攻击者将持有的 WBNB 和 SPT1 都转移给 WBNB-SPT1 池子,然后进行移除流动性操作;
6. 在移除流动性时会通过池子中实时的代币数量来计算用户的 LP 可获得多少对应的代币,由于步骤 5,此时会获得比添加流动性时更多的代币;
7. 在移除流动性之后会更新池子中的 baseAmount 与 tokenAmount,由于移除流动性时没有和添加流动性一样存在滑点修正机制,移除流动性后两种代币的数量和合约记录的代币数量会存在一定的差值;
8. 因此在与实际有差值的情况下还能再次添加流动性获得 LP,此后攻击者只要再次移除流动性就能再次获得对应的两种代币;
9. 之后攻击者只需再将 SPT1 代币兑换成 WBNB,最后即可获得更多的 WBNB。详情见原文链接。[2021/5/2 21:17:59]
问题一:根据假设,我目前的资产状况如何?
答:因为我所占流动性池的比例为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。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。