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