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

网友贡献9个月前更新 领域OK
15 0 0

 

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

DeFi流动性有差异即便是同一协议不同货币市场或代币池之间的收益也存在很大的差异。

 

流动性挖矿可以获得什么收益?

 

流动性挖矿的收益包括治理代币、交易费等。

如今DeFi的大部分高收益是由股权(加密资产)的增长所驱动的。例如,当你在Compound上进行挖矿时,你实际上是把钱借给该协议,并获得免费股权(免费的COMP代币)。因此你可以从贷款资产中获得基本收益(来自自然的借款需求),另外还赚到了COMP代币升值的「收益」。

 

流动性挖矿的收益取决于很多因素,主要取决于奖励代币的价格、流动性本身的权重(影响因子决定)以及占流动性总量的比例等。

 

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

  }

 

 

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...