時間:2023-08-11|瀏覽:314
原文標題:《Uniswap的LPToken的鑄造銷毀和權益》 撰文:黃世亮
本文介紹Uniswap中的LPToken的鑄造,銷毀和權益。
Uniswap的交易對手盤模式 在中心化交易所,用戶間掛買單和賣單,交易所的撮合引擎會按時間和價格進行排序,一旦買單和賣單價格重疊,就可以成交完成交換。
但Uniswap里沒有掛單這個設計,取而代之的是流動性資金池充當所有交易的對手盤。
流動性資金池是包含了需要交易的兩種幣,比如ETH和USDT。比如一個流動性池里有x個ETH和y個USDT。此時k=x*y(k是一個常數)
當用戶A想用dy個USDT買ETH,在不考慮滑點的前提下,用戶A買入的價格是y/x。而真實成交時,用戶能買到的ETH數量dx為(不考慮0.3%的手續費):k=(x-dx)*(y+dy),dx=x-k/(y+dy)
交易所,流動性池里的資金就成了:(x-dx)個ETH和(y+dy)個USDT,而此時ETH的價格變成了(y+dy)/(x-dx)。
以上就是Uniswap交易的基本模式。
下面來講這個流動性資金池的設計。
LPToken鑄造 在Uniswap里對某個交易對(pair)第一次添加流動性的人,可以任意對交易對的價格進行定價,即x、y和k都是這個人定的。
創世流動性之后再添加dx和dy,如果按系統默認值去添加,都會受dx/dy=x/y的約束。
添加流動性后,Uniswap會給用戶返回一個erc20代幣,這就是LPToken。
LPToken的總量是變化的,添加流動性就會鑄造新的LPToken,即增發,而贖回流動性則會銷毀LPToken。
假設創世流動性里用戶注入了x個ETH和y個USDT,則創世鑄造LPToken的數量=sqrt(x*y)。(注:sqrt是開方;注:代碼里的公式是sqrt(x*y)-1000*10^-18,這個1000*10^-18是個啥不管它,我沒研究,反正這么小無所謂)
創世流動性之后,有用戶添加了(dx,dy)個幣的流動性,并且dx/dy=x/y,則系統新鑄造出d(LPToken數量)=dx/x*鑄造前LPToken的總量,返回給用戶。
但如果(dx-ddx)/dy=x/y(注:ddx>0),新鑄造的d(LPToken數量)=dy/y*鑄前總量,而這ddx個幣則相當于捐贈給了所有的LPToken持有者。
如果dx/(dy-ddy)=x/y(注:ddy>0),則新鑄造的d(LPToken數量)=dx/x*鑄前總量。ddy變成了捐贈。
可以總結為:添加流動性獲得的LPToken數量=min(dx/x*鑄前總額,dy/y*鑄前總額)。(注:min是取最小值函數)
在極端情況下,有人誤打了dx>0個幣,但dy=0個幣,則不會鑄造新的LPToken,dx全部變成了現有LPToken里的成分,捐贈給了所有現有LPToken的用戶。
這種誤打幣到某個LPToken合約地址,是經常會發生的。
LPToken銷毀 當用戶想贖回流動性時,需要將LPToken銷毀掉。按Uniswap系統的流程就可以完成銷毀。
假設現在一個交易對(ETH/USDT)的流動性有x個ETH,y個USDT,現在有用戶銷毀z個token,則用戶可以得到ETH和USDT的數量分別是:dx=(z/總LPToken)*x,dy=(z/總LPToken)*y
LPToken的權益 從上面分析可以清晰地知道,LPToken代表了一個交易對的資金池的所有權,可以從這個資金池里按比例提取交易對代幣的份額。
LPToken的成分包括了兩種幣,如ETH/USDT交易對的LPToken就包括了ETH和USDT兩種幣。
隨著流動性資金池里成分不一樣,LPToken的價值也不一樣。
用戶在Uniswap交易,是需要付0.3%的手續費。比如用戶用dy個USDT去ETH/USDT交易對買dx個ETH。
Uniswap首先會扣除用戶0.3%*dy的本金,然后去計算該給用戶的dx,在給完用戶dx后,這0.3%*dy的本金會注入到LPToken的成分里,相當于LPToken增值了。
LPToken會獲得所有的捐贈收益,比如用戶誤將dx個ETH轉入了ETH/USDT這個pair的LPToken合約地址,dx個ETH就會變成捐贈給LPToken,增加了LPToken的價值。
感謝PlanckerDao成員李世勝對本文的貢獻
熱點:token