深入瞭解阿凡達泰山眾籌商城系統開發詳情版及原始碼功能

Tg_StPv888發表於2023-03-01

  拆分後的交易計算

 交易是否能夠結束的關鍵計算在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部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2937648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章