DeFi — Liquidity Mining & Yield Farming Intro

Corn
SWF Lab
Published in
17 min readSep 26, 2022

Here is the explaination in short for LM below:

Liquidity Mining means providing your tokens into the pool then get the retuns.

Based on the last article about Tokenomics , there was a part I mentioned the Value Capture , that’s explain the ways to keep the clients stay in the protocol and help them get the returns .

This time I’m going to introduce the one of the value capture way , and that is “ Liquity Mining” , it is also acting the important role in DeFi .

Let me tell you What is Liquidty Mining , just go along with the following parts.

1. Liquidity Pool

在介紹流動性挖礦前需要先介紹機制的核心”流動性池”,流動性池是建立在自動作市商 AMM 之中用來解決資金供需雙方的搓合問題,在過去傳統金融中會需要有中間商來完成搓合的動作,而流動資金池是在 DeFi 中作為代替中間商的一個合約,以此方式達到去中心化並提高資金效率。

Pool — Exchange

換匯的流動性池一般來說會以 50 : 50 的比例增減流動性並遵從 “ X * Y = K” 的方程式,則我們稱之為 Constant Product Market Makers 最著名的代表是 Uniswap,其中 X 為 A token 之數量,Y 為 B token 之數量,K 唯一常數,兩幣相對價格或稱交換比率為 Relative Price (RP) = X / Y ,當有流動性挹注或收回時 K 會發生變動, 發生交易時則 RP 會發生變動,也就是池裡的價格發生變化。

當池內價格與市場價格不同時就會有套利者或是 AMM 本身進入 pool 裡進行交易直至與市場價格相同。

Resource : https://alexeicondurachi.github.io/files/Master_Thesis.pdf

基於上面的基本模型,在加入手續費的參數後公式會變成下方的樣子:

https://arxiv.org/pdf/2205.08904.pdf

主要是將交易方的兩種幣都徵收了 f 的手續費,簡單來說透過這個參數可以使換出去的代幣減少,而少支付出去的部分會留在留在 Pool 中,間接留給 LPs 作為獎勵。

上述以 Uniswap 之模型為例,因為以兩種幣且相同比例的方式建立 Pool 比較常見,那當然也會有不同比例如 33 : 33 : 33 或更多種的比例的流動性池,這邊提供幾個平台給大家參考 Balancer , Curve

基於數學式上守恆函數的特性,在 Pool 交易時會發生 Slippage (滑點)的問題,意思是在 Pool 交易時所得到的代幣會比以市價兌換的還要少些,當交易數量佔 Pool 越大則損失越多,不過只要 Pool 足夠大基本上在交易時所碰到的滑點損失將小到可以忽略。

Resource:Uniswap

另外補充其他種 AMM 的 Pool ,如 DeFi 知名的項目 Curve 則是使用 Hybrid Constant Function Market Makers 遵從下列恆等式:

Resource:https://alexeicondurachi.github.io/files/Master_Thesis.pdf page 31

Pool — Borrowing & Lending

借貸之流動性池主要為了集中可貸資金與計算借貸利率而存在,控制資金的機制來自於可貸資金的供需。快速促成借貸之交易,無須像傳統金融必須有買賣搓合的問題,在這個借貸池中可以迅速地以當前的利率提供流動性賺取利息與抵押借出流動性,安全且快速。這段主要會提到以 Compound 為例的利率計算與設計。

利用率( Utilization rate ):

U = Borrows / (Cash + Borrows -Reserves)

Borrows :為借款金額

Cash :為資金池中可貸的資金餘額

Reserve:為平台保留之利潤

簡單來說就是總 Borrows 佔 Pool 中總可貸資金的比率,當比率很高時則表示借錢的人很多需求上升進而推升利率,當利率提高則吸引更多人為資金池注入更多資金,反之比率低則利率低,可能因機會成本的關係使資金提供者退出資金。該比率也表示了經濟學中的可貸資金理論的供需進而影響後面決定借貸之利率。

借款利率( Borrowing Interest Rate , BIR):

BIR = Multiplier * U + Base.rate

Multiplier: 為一自訂義常數,主要用來在使用率與利率間做加成效果

Base rate: 為最低借款利率,可想成第一個人借款時所面對的利率( 因為第一個遇見的 U 是0 )

供給利率( Supply Interest Rate , SIR):

SIR = BIR * U * ( 1 — Reserve.fact )

Reserve fact :儲備因子是用來做為供項目能持續營利的借貸利差( Spread )比率

舉個例子來說:

假設池中目前有 10000 ETH ,而目前總借款為 2000 ETH,Reserve 為 0,Multiplier 為 20%,Base rate 為 2%,Reserve fact 為 10%。

則目前之使用率為 2000/10000 = 20%

BIR = 20% * 20% + 2% = 6%

SIR = 6% * 20% *( 1–10%) = 1.08%

計算總利息,貸方 10000 * 1.08% = 108,借方 2000 * 6% =120 ,對協議來說付給貸方後仍可營利12 元,可以安全地維持營運 。

由 BIR 和 SIR 的公式可看出使用率對 SIR 的影響較 BIR 大,因為 SIR 包含了 BIR 在裡面等於將使用率做了平方,這個發現可以知道該模型的利率取決於借款者,當借款的人越多,表示使用率上升越快,則會加速資金供給者的資金供給,以此做到隨時都有資金能借貸的結果。

另外補充,Jump Rate Model 該模型考慮在極端的使用率下所對借款利率的懲罰,以緩和過熱的市場,基於以上的模型設多了兩個參數 Kink (凹折點) 和 Jump multiplier (跳躍乘數 , JM)。

BIR = Multiplier * Min(U,Kink) + JM * Max(0,U -Kink ) + Base.Rate

Kink:凹折點是一個和使用率比較的比率,可以想像是正常使用率下的底線

Jump multiplier :上方公式可看到這個參數是在放大超過 Kink 部分的乘數

Resource:Compound — DAI

由上圖可看到 Kink 約設為 80% ,一旦使用率超過 80% 則 Pool 就會啟動防禦機制以防池中的錢被借光,借款利率大幅的增加一方面降低借款需求,一方面也提高供給意願( SIR 包含 BIR ),以此機制降低使用率,保護流動池。

以上以 Compound 的利率模型為例,市面上的去中心化借貸協議也會有些許的不同,由於篇幅問題就不再深入討論,這邊提供其他借貸平台的 Document Aave

2. Liquidity Mining

瞭解核心機制後就可以開始認識流動性挖礦!

流動性挖礦的定義為提供流動性(錢)到特定的流動池中賺取報酬,流動池的種類有不同的種類,e.g. 提供交易用的池、提供借貸用的池等等,在傳統金融中最基本的金融服務為借貸與換匯,所以接下來會以 Uniswap 與 Compound 兩大 DeFi 平台為例介紹基本的機制與風險。

Operation — Exchange:

流動性挖礦分為三位角色,以 Uniswap 為例:

  1. AMM 自動造市商 — 負責創建 Liquidity Pool
  2. Liquidity Providers — Pool 裡的供給者 也為流動性挖礦的投資人
  3. Traders — Pool 裡的需求者 意即使用 Pool 服務的人
Resource:Uniswap

Liquidity Providers (LPs) 以 50/50 的比例將 A B 兩種幣放入流動池中,而 Uniswap 就會鑄造出 LP 代幣 (在Uniswap 中為 UNI) 寄到 LP 的錢包中,未來將以 LP 代幣佔池中的份額分配手續費收入給 LP ,如要取出流動性則需要燒毀自身之 LP 代幣。其中 LP 代幣也能在市場上交易,也就是說 LP 代幣不只能代表您提供流動性的證明也是有市場價值的流動性,也是後面高產農業的開端。

以 Uniswap 的 LP 來說,在流動性挖礦的收益就是 手續費 + LP 代幣價差 。

Trader 為服務之使用者,依據自身需求將代幣換成需要的數量,在交易的時候需要支付 0.03% 的手續費,與些微的滑點損失,以微小的成本換取快速且安全的去中心化金融服務。

Pool 為資金池,其運作機制如同前一段所說,這邊的資金持有常多個,除了平台初始創建的 Pool 外,LP 也可以將想要的兩種幣兌注入流動性,自行成立一個新的 Pool,也可以設定手續費大小,而創建池的人將會收到 sqrt( x*y) 個 LP 代幣 。

Resource : Uniswap 建立新 Pool

Operation — Lending & Borrowing :

流動性挖礦分為三位角色,以 Compound 為例:

  1. AMM 自動造市商 — 負責創建 Liquidity Pool
  2. Liquidity Providers — Pool 裡的資金供給者 也為流動性挖礦的投資人
  3. Borrowers — Pool 裡的需求者 為池中的借款者同時為流動性挖礦的投資人
Resource:Myself

Liquidity Providers( LPs ),以上圖為例,為資金池中提供 DAI 後 Pool 會鑄造出 cToken 給 LP 用來表示佔池中的份額,利息是以 cToken : Token 的比率上升做為利息的成長,亦即時間拉長 cToken 能換到的 Token 就越多。取出流動性時將 cToken 換回相應之流動性,其中的價差就是供給期間所獲得的利息報酬,這邊需要注意的是 cToken 是無法在市場上交易的僅做為持有份額之表示。除此之外還有提供額外的報酬,Compound 提供治理代幣 COMP 給供需雙方做為獎勵,COMP 僅投票功能大多時候都會賣掉實現報酬,而 COMP 的發行方式為每一個以太坊的區塊成形就會發出 0.5 個 COMP,供需雙方五五分,最後在按池子的份額分給 LPs 和 Borrowers。

以 Compound 來說 LP 在流動性挖礦的主要收入來自 利息 + LP Token。

Borrowers,如果想要從池中借出流動性的話需要先抵押資產,以上圖來說假設 Borrower 抵押 ETH 並借出 DAI ,則會如圖中所見拿到 cETH 和 DAI 其中 cETH 表示存入的份額,在抵押的期間則不會有利息收入,想要取出抵押品時則須把借款連本帶利的清償,才能用 cToken 把流動性贖回。

在 Compound 的協議中特別的是 Borrowers 不僅為服務的需求者同時也可以做流動性挖礦,其中的報酬為治理代幣,前面提到每個以太坊的區塊行程就會發出 0.5 個 COMP 讓供需對分,則只要獲得 COMP 的報酬率大於借款利率即可做為流動性挖礦的一種 — 槓桿型流動性挖礦,實際上的操作原理是不斷的把借出流動性再持續拿去抵押,提高在 Borrowing 中的份額獲得更多的 COMP。其中需注意的是擔保比率不要壓得太緊繃,不然抵押品之波動突然太大,就會像傳統金融中的期貨保證金不夠就會被強制清算。

AMM 依據第一段的 Pool 模型創建借貸 Pool,利用模型的中的借貸利率完成去中心化的借貸,以即進行治理與舉辦投票。

Risk

投資一定有風險,那流動性挖礦也不會例外,本段將介紹常考慮到的潛在風險,其中會特別在無償損失的部分多加琢磨,解釋為什麼會發生與該如何解決。

  • 投入之流動性價格下跌

提供流動性所獲得的報酬也會是一種代幣,而每個代幣的價格波動也有所不同,所以當持有代幣的數量增加,但市場的代幣價格下跌,則報酬就可能會由盈轉虧。

  • 協議風險

因為去中心化的協議都是靠智能合約的程式碼在運作且當合約開始運行後就不能修改,所以當合約有漏洞被駭客攻擊則會對投資人造成很大的傷害。

  • Impermanent Loss ( 無償損失 , IE )

定義: IE_r = ( Value_h — Value_p ) / Value_h

IE_r = 無償損失率

Value_p = 代幣在 Pool 的價值

Value_h = 代幣在市場中的持有價值

無償損失用一句話解釋為 ” 不選擇持有代幣的機會成本 ”

從公式來看,一旦池內外價格有不同則必定會發生,在只要沒有取回流動性就不會實現這個損失,換句話說當池內外價格相同時取出流動性就可以避免這項損失的發生。

原因可從公式加上圖形理解:

Resource:https://medium.com/phoenix-finance/understanding-the-xyk-model-of-pooled-liquidity-7340fdc20d9c

V2’ = 交易後的 Value_h

V2 = 交易後的 Value_p

P2 = ( y — dy )/( x + dx) 交易後價格

x1 x2 = 分別為第一期與第二期之 x token 數量

y1 y2 = 分別為第一期與第二期之 y token 數量

Resource:https://medium.com/phoenix-finance/understanding-the-xyk-model-of-pooled-liquidity-7340fdc20d9c

以公式的結論來說,假設 dx 為正則在圖形上看到 T1 → T2,而 P2 就是 T2 點上之切線斜率,P_swapper則都會是 T1 T2 兩點之間連線之斜率,故因為數學式的關係讓無償損失會大於等於0,直到斜率相同亦即回到原點無償損失才會等於0。

以另一個角度來說,因為 LPs 持有池中的兩種幣,假如 A 幣下跌了以 Pool 的模型機制會減少 B 幣以換取 A 幣的增加來使池內外的價格相同,但事實上 A 幣是相對於 B 幣下跌的,但因為機制關係用較高價值的幣去買較低價值的幣所發生的損失就是無償損失,然而如果有一種幣一直下跌則損失也隨之擴大。

下圖為現在幣價初始投入幣價之比值變動對無償損失的影響畫成圖型的樣子,可以看到 100% 時無償損失才會為 0 ,而 100% 就是回到原價格的比值。

Resource:Uniswap

解決方法:

利用手續費補償 LPs:在模型中加入收續費這項參數經過數學的計算可以證明在波動不要太大的情況下仍可使 LPs 獲利,這也是為什麼 Uniswap 會收取 0.3% 的手續費,不然從上圖可以看到 LPs 怎麼做都會損失,而波動大小的範圍取決於手續費的比率,0.3% 與 10% 相比,則 10% 手續費讓 LPs 能夠獲利的波動 Range 就會更大,所以許多平台在不同波動程度的幣會設定不同的手續費比率。其中數學證明可以看這裡

3. Yield Farming

Yield Farming 中文又稱為” 收益農業 ”,這個概念是基於上面錢到的流動性挖礦而衍伸出來的,目前已經有許多文章解釋這個概念,經過我的理解可以這樣解釋 :

對平台提供流動性,再以該平台的 LP Token 為下一個平台提供流動性

用這種方式將流動性挖礦的收益提高到極致,也相對的會有更大的風險,可以想像是每使用一個平台就會再面臨一次前面提到 Risk 中提到的風險。

舉個例子:

向 Compound 提供 DAI ,取得 cDAI 後再向 Uniswap 提供流動性,這樣一來可以從 DAI 賺取 COMP + 利息,從 cDAI 賺取 UNI + 手續費,如此一來可以看到會比單純在一個平台提供流動性賺取更多收益,但是也會面臨更多的無償損失風險。

另一個例子,與上一篇提到的 veToekn 有關,簡短的解釋 veToken 就利用鎖定不同時間得到不同報酬的一種代幣機制,我們將其在帶入收益農業中:

向 Compound 提供 USDT,取得 cUSDT 後再向 Curve 提供流動性,這樣一來可以從 USDT 賺取 COMP + 利息,cUSDT 則賺取 CRV + 手續費,再將 CRV 質押進 Curve 換取 veCRV 為流動池提高分潤權重與獲得平台上的收益分潤。

上述提供的例子可以看到從流動性挖礦到收益農業整個 DeFi 生態越來越複雜,進而出現像是 Yearn.finance 等,這樣的聚合型系統,其致力於找到最佳的殖利率策略,降低 LPs 的投資負擔。

4. Conclusion

本篇以介紹完流動性挖礦(Liquidity Mining)和 收益農業(Yield Farming)的基本知識以及機制,現今的 DeFi 也越來越複雜,市面上有許多各種不同的收益工具吸引著投資人,理想的數學式與實際應用還是有落差,這也是為何如今還是百家爭鳴的情況,並無最佳的平台出現。從過去宏大的歷史來看最終複雜的東西都會收斂成簡單明白,那也是我們所樂見的,儘管 DeFi 看似離成熟還有段路要走,但我們仍可期待 DeFi 對於人類金融的發展有著巨大的潛力,未來我也會分享其他 DeFi 產品的文章,感謝各位讀完本篇。

5. Appendix

下列模型可以試試幣的交易池中價格變化與滑點問題,還有無償損失的估算。https://docs.google.com/spreadsheets/d/1vmycvLIEf6tCQlC8dpv_5n8vagxSpKdJoeHQMmUex_U/edit?usp=sharing

6. Reference

Reviewer

Ping Chen

--

--