ITPub博客

首页 > 区块链 > 区块链 > 深入了解阿凡达泰山众筹商城系统开发详情版及源码功能

深入了解阿凡达泰山众筹商城系统开发详情版及源码功能

原创 区块链 作者:Tg_StPv888 时间:2023-03-01 16:11:28 0 删除 编辑

  拆分后的交易计算

 交易是否能够结束的关键计算在SwapMath.computeSwapStep中完成,函数部分代码进行分析(这里仅摘取exactIn时的代码):

 function computeSwapStep(

 uint160 sqrtRatioCurrentX96,

 uint160 sqrtRatioTargetX96,

 uint128 liquidity,

 int256 amountRemaining,

 uint24 feePips

 )

 internal

 pure

 returns(

 uint160 sqrtRatioNextX96,

 uint256 amountIn,

 uint256 amountOut,

 uint256 feeAmount

 )

 {案例及需求:StPv888

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

 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);方案及源码:yy625019

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

 if(amountRemainingLessFee>=amountIn)sqrtRatioNextX96=sqrtRatioTargetX96;

 else

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

 sqrtRatioNextX96=SqrtPriceMath.getNextSqrtPriceFromInput(

 sqrtRatioCurrentX96,

 liquidity,

 amountRemainingLessFee,

 zeroForOne

 );

 }else{

 ...

 }


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2937648/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95697