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。
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]
Beosin:UVT項目被黑客攻擊事件簡析,被盜資金已全部轉入Tornado Cash:金色財經報道,據Beosin EagleEye 安全預警與監控平臺檢測顯示,UVT項目被黑客攻擊,涉及金額為150萬美元。攻擊交易為0x54121ed538f27ffee2dbb232f9d9be33e39fdaf34adf993e5e019c00f6afd499
經Beosin安全團隊分析,發現攻擊者首先利用開發者部署的另一個合約的具有Controller權限的0xc81daf6e方法,該方法會調用被攻擊合約的0x7e39d2f8方法,因為合約具有Controller權限,所以通過驗證直接轉走了被攻擊合約的所有UVT代幣,Beosin安全團隊通過Beosin Trace進行追蹤,發現被盜資金已全部轉入Tornado Cash。[2022/10/27 11:48:46]
第二,假設流動性池中有我提供的100FC及25USDT,我就有流動性池中10%的資產;
Grim Finance 被黑簡析:攻擊者通過閃電貸借出 WFTM 與 BTC 代幣:據慢霧區情報,2021 年 12 月 19 日,Fantom 鏈上 Grim Finance 項目遭受攻擊。慢霧安全團隊進行分析后以簡訊的形式分享給大家。
1. 攻擊者通過閃電貸借出 WFTM 與 BTC 代幣,并在 SpiritSwap 中添加流動性獲得 SPIRIT-LP 流動性憑證。
2. 隨后攻擊者通過 Grim Finance 的 GrimBoostVault 合約中的 depositFor 函數進行流動性抵押操作,而 depositFor 允許用戶指定轉入的 token 并通過 safeTransferFrom 將用戶指定的代幣轉入 GrimBoostVault 中,depositFor 會根據用戶轉賬前后本合約與策略池預期接收代幣(預期接收 want 代幣,本次攻擊中應為 SPIRIT-LP)的差值為用戶鑄造抵押憑證。
3. 但由于 depositFor 函數并未檢查用戶指定轉入的 token 的合法性,攻擊者在調用 depositFor 函數時傳入了由攻擊者惡意創建的代幣合約地址。當 GrimBoostVault 通過 safeTransferFrom 函數調用惡意合約的 transferFrom 函數時,惡意合約再次重入調用了 depositFor 函數。攻擊者進行了多次重入并在最后一次轉入真正的 SPIRIT-LP 流動性憑證進行抵押,此操作確保了在重入前后 GrimBoostVault 預期接收代幣的差值存在。隨后 depositFor 函數根據此差值計算并為攻擊者鑄造對應的抵押憑證。
4. 由于攻擊者對 GrimBoostVault 合約重入了多次,因此 GrimBoostVault 合約為攻擊者鑄造了遠多于預期的抵押憑證。攻擊者使用此憑證在 GrimBoostVault 合約中取出了遠多于之前抵押的 SPIRIT-LP 流動性憑證。隨后攻擊者使用此 SPIRIT-LP 流動性憑證移除流動性獲得 WFTM 與 BTC 代幣并歸還閃電貸完成獲利。
此次攻擊是由于 GrimBoostVault 合約的 depositFor 函數未對用戶傳入的 token 的合法性進行檢查且無防重入鎖,導致惡意用戶可以傳入惡意代幣地址對 depositFor 進行重入獲得遠多于預期的抵押憑證。慢霧安全團隊建議:對于用戶傳入的參數應檢查其是否符合預期,對于函數中的外部調用應控制好外部調用帶來的重入攻擊等風險。[2021/12/19 7:49:04]
第三,FC不斷上漲,直至某一時刻,流動性池中FC數量減少至500個,USDT數量增加至500個。
慢霧: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]
慢霧: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。
Visa在日前舉行的一季度財報電話會議,該公司董事長兼首席執行官AlKelly重申了Visa支持加密支付和法定貨幣onramps的承諾.
1900/1/1 0:00:00前言前天,有星球好友參考小辣椒的文章做了投資,對此,小辣椒一方面是開心,文章有人看;另一方面則是敬畏心,今天的正確不代表明天的正確,說不準什么時候就誤人錢財.
1900/1/1 0:00:00“您可以使用NFT出售任何數字產品:虛擬小牛隊的裝備,運動鞋,藝術品,圖片,視頻,體驗,以及我們能想到的一切。”——MarkCuban,美國最知名的投資人之一.
1900/1/1 0:00:00行情概述: 繼上期報告所述,大盤后市如期進入寬幅無序震蕩區間,如今比特幣波動率不斷下降,小時級別ATR達到近兩日低位區,寬幅震蕩區間不斷收窄,小級別或將向上突破.
1900/1/1 0:00:00今日快訊: 1.北京將于明年啟動法定數字貨幣試驗區和建設區塊鏈服務平臺。2.3iQ旗下比特幣基金建立ATM計劃,將不定時向公眾發行1.5億美元的A類份額.
1900/1/1 0:00:00現在似乎已經不再是公鏈爭鋒的火熱的時代了,幣圈所有的目光都被以比特幣為代表的數字貨幣飆升的市場行情吸引過去了,聰明的企業迅速將觸角伸向了數字貨幣基金、數字貨幣期貨、數字貨幣儲備領域.
1900/1/1 0:00:00