前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流动性挖矿开发上线版丨流动性挖矿系统开发(详细流程及源码)

流动性挖矿开发上线版丨流动性挖矿系统开发(详细流程及源码)

原创
作者头像
DD_MrsFu123
发布2023-02-24 14:20:59
2550
发布2023-02-24 14:20:59
举报
文章被收录于专栏:IT软件开发IT软件开发

  拆分后的交易计算

  交易是否能够结束的关键计算在SwapMath.computeSwapStep中完成,这里计算了交易是否能在目标价格范围内结束,以及消耗的tokenIn和得到的tokenOut.这里摘取此函数部分代码进行分析(这里仅摘取exactIn时的代码):

代码语言:javascript
复制

  function computeSwapStep(

  uint160 sqrtRatioCurrentX96,

  uint160 sqrtRatioTargetX96,

  uint128 liquidity,

  int256 amountRemaining,

  uint24 feePips

  )

  internal

  pure

  returns(

  uint160 sqrtRatioNextX96,

  uint256 amountIn,

  uint256 amountOut,

  uint256 feeAmount

  )

  {

  //判断交易的方向,即价格降低或升高

  bool zeroForOne=sqrtRatioCurrentX96>=sqrtRatioTargetX96;

  //判断是否指定了精确的tokenIn数量

  bool exactIn=amountRemaining>=0;

  ...

  if(exactIn){

  //先将tokenIn的余额扣除掉最大所需的手续费

  uint256 amountRemainingLessFee=FullMath.mulDiv(uint256(amountRemaining),1e6-feePips,1e6);

  //通过公式计算出到达目标价所需要的tokenIn数量,这里对x token和y token计算的公式是不一样的

  amountIn=zeroForOne

  ?SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96,sqrtRatioCurrentX96,liquidity,true)

  :SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96,sqrtRatioTargetX96,liquidity,true);

  //判断余额是否充足,如果充足,那么这次交易可以到达目标交易价格,否则需要计算出当前tokenIn能到达的目标交易价

  if(amountRemainingLessFee>=amountIn)sqrtRatioNextX96=sqrtRatioTargetX96;

  else

  //当余额不充足的时候计算能够到达的目标交易价

  sqrtRatioNextX96=SqrtPriceMath.getNextSqrtPriceFromInput(

  sqrtRatioCurrentX96,

  liquidity,

  amountRemainingLessFee,

  zeroForOne

  );

  }else{

  ...

  }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档