LP質(zhì)押流動性是一種通過質(zhì)押加密貨幣,系統(tǒng)開發(fā)I34-搭建1633-案例53I9,來獲取更多加密貨幣的方法。它是去中心化金融(DeFi)中的一種新趨勢,能夠讓加密貨幣投資者充分發(fā)揮其加密資產(chǎn)的作用并獲得較高的收益回報,并且任何人都可以參與這個生態(tài)系統(tǒng)。簡單來說,這意味著鎖定加密貨幣即可獲得獎勵。
流動性挖況是如何運行的?
流動性wa礦的運行與流動性提供者(LP)及流動資金池有著密切的關系:流動性提供者為流動資金池提供資金以獲得流動性代幣(LP token),流動資金池為市場提供動力并產(chǎn)生手續(xù)費用,再按照LP token份額占比支付獎勵給流動性提供者,如此反復進行。
如何獲得流動性收益?
用戶存入資產(chǎn)到池中就能獲得獎勵代幣(流動性代幣),池中只要有人交易就會產(chǎn)生費用,并按照制定的獎勵規(guī)則進行代幣分配,這些都是流動性挖收益。
Periphery 邏輯
核心邏輯實現(xiàn)在 UniswapV2Router02.sol 中。稱為 Router,因為 Periphery 實現(xiàn)了“路由”,支持各個 swap 之間的連接?;旧蠈崿F(xiàn)了三個功能:1/add liquidity(增加流動性)2/remove liqudity(抽取流動性)3/swap(交換)。
1.add liqudity
增加流動性,就是同時提供兩種代幣。因為代幣有可能是 ETH,針對不同情況有不同的接口。邏輯類似。
add liqudity 查看之前有沒有創(chuàng)建相應的交易對。如果有相應的交易對,確定目前的兌換比例在希望的范圍內(nèi)(期望 amountDesired 和不低于 amountMin)。如果兌換比例 OK,將相應的代幣轉入對應的交易對池子,并調(diào)用其的 mint 函數(shù)。
2.remove liqudity
提供流動性的相反的操作就是抽取流動性。也就是說,流動性提供者不再提供相應的流動性
liquidity 是抽取的流動性的量。amountMin 是抽取代幣的小的個數(shù)。to 是抽取代幣的目標地址。deadline 是個有意思的設計:抽取的操作有時效性。超過了一定的 deadline(區(qū)塊高度),這次抽取操作看成無效。
先收回需要抽取的 Token,并且銷毀:
IUniswapV2Pair(pair).transferFrom(msg.sender,pair,liquidity);//send liquidity to pair
(uint amount0,uint amount1)=IUniswapV2Pair(pair).burn(to);
3.swap
swap 是普通用戶進行代幣交易的操作。普通用戶通過 swap 操作實現(xiàn)兩種 token 之間的交易。
Uniswap 支持多種代幣的交換。具體的含義是,Uniswap 提供了多級交易池的路由功能。舉個例子,已有兩個交易對 TokenA-TokenB,以及 TokenB-TokenC,通過 swap 接口,可以實現(xiàn) TokenA-TokenC 的交換,其中經(jīng)過的 TokenA-TokenB,TokenB-TokenC,稱為路徑(path)。amountIn 是路徑中的一個代幣的數(shù)量,amountOutMin 是期望的交換后的少的數(shù)量。
amounts=UniswapV2Library.getAmountsOut(factory,amountIn,path);
require(amounts[amounts.length-1]>=amountOutMin,'UniswapV2Router:INSUFFICIENT_OUTPUT_AMOUNT');
amounts 是每個路徑上的交換后的數(shù)量。amounts[amounts.length-1]也就是后一條路徑的輸出數(shù)量。注意,UniswapV2Library.getAmountsOut 的實現(xiàn)(在獲取每個交易對的 reserve 信息后,調(diào)用 getAmountOut 函數(shù))