DeFi流动性挖矿系统开发流程及源码

380 阅读3分钟

DeFi 是 Decentralized Finance 去中心化金融的简称,也叫开放式金融,指的是搭建在公有链上的应用。DeFi 的目的是创造一个没有中心化机构的金融服务,让世界上任何一个人都可以随时随地进行金融活动。 DeFi流动性挖矿主要发生在以太坊区块链上的产品中,它通过为以太坊上的DeFi产品提供流动性来赚取利润。可以简单地理解为用户通过存款代币获得被动回报,但如果他们想获得更高的回报,就需要对其进行管理。不同协议之间的回报有差异,即便是同一协议不同货币市场或代币池之间的收益也存在很大的差异。 流动性挖矿可以获得什么收益? 流动性挖矿的收益包括治理代币、交易费等。

 如今DeFi的大部分高收益是由股权(加密资产)的增长所驱动的。例如,当你在Compound上进行挖矿时,你实际上是把钱借给该协议,并获得免费股权(免费的COMP代币)。因此你可以从贷款资产中获得基本收益(来自自然的借款需求),另外还赚到了COMP代币升值的「收益」。 流动性挖矿的收益取决于很多因素,主要取决于奖励代币的价格、流动性本身的权重(影响因子决定)以及占流动性总量的比例等。  

举例来说,Compound代币价格的不同直接影响挖矿收益率的大小;同时,随着不同货币市场总存款量和总借款量的增加,挖矿收益也被越来越多的流动性所稀释;Compound原来将不同货币市场的借贷利率作为其重要的分配依据,而现在已将这一因素去除。这对货币市场的资产流向具有很大的引流作用。之前BAT的借贷利率最高,导致Compound上BAT的流动性最高,而在改变规则之后,极大刺激了对稳定币DAI的需求。

总的来说,流动性挖矿系统本质上是激励用户直接为平台扩大业务量,提供超高回报作为奖励,而这种奖励分配过程也是新币生成和发行的一种机制。流动性挖矿系统的主要好处是治理代币和交易费用。 

DeFi流动性挖矿系统源码示例:

struct AddLiquidityParams{

address token0;//token0

的地址

address token1;//token1

的地址

uint24 fee;//

交易费率

address recipient;//

流动性的所属人地址

int24 tickLower;//

流动性的价格下限(以

token0

计价),这里传入的是

tick index

int24 tickUpper;//

流动性的价格上线(以

token0

计价),这里传入的是

tick index

uint128 amount;//

流动性

L

的值

uint256 amount0Max;//

提供的

token0

上限数

uint256 amount1Max;//

提供的

token1

上限数

}

function addLiquidity(AddLiquidityParams memory params)

internal

returns(

uint256 amount0,

uint256 amount1,

IUniswapV3Pool pool

)

{

PoolAddress.PoolKey memory poolKey=

PoolAddress.PoolKey({token0:params.token0,token1:params.token1,fee:params.fee});

//

这里不需要访问

factory

合约,可以通过

token0,token1,fee

三个参数计算出

pool

的合约地址

pool=IUniswapV3Pool(PoolAddress.computeAddress(factory,poolKey));

(amount0,amount1)=pool.mint(

params.recipient,

params.tickLower,

params.tickUpper,

params.amount,

//

这里是

pool

合约回调所使用的参数

abi.encode(MintCallbackData({poolKey:poolKey,payer:msg.sender}))

);

require(amount0<=params.amount0Max);

require(amount1<=params.amount1Max);

}