欢迎光临散文网 会员登陆 & 注册

阿凡达(泰山众筹)开发丨泰山众筹(阿凡达)系统开发方案及逻辑

2023-02-24 14:09 作者:bili_88076104257  | 我要投稿

//只要tokenIn while(state.amountSpecifiedRemaining!=0&&state.sqrtPriceX96!=sqrtPriceLimitX96){ //交易过程每一次循环的状态变量 StepComputations memory step; //交易的起始价格 step.sqrtPriceStartX96=state.sqrtPriceX96; //通过位图找到下一个可以选的交易价格,这里可能是下一个流动性的边界,也可能还是在本流动性中 (step.tickNext,step.initialized)=tickBitmap.nextInitializedTickWithinOneWord(开发众筹模式I35流程7o98详细o7I8 state.tick, tickSpacing, zeroForOne ); ... //从tick index计算sqrt(price) step.sqrtPriceNextX96=TickMath.getSqrtRatioAtTick(step.tickNext);案例版开发:mrsfu123 //计算当价格到达下一个交易价格时,tokenIn是否被耗尽,如果被耗尽,则交易结束,还需要重新计算出tokenIn耗尽时的价格 //如果没被耗尽,那么还需要继续进入下一个循环 (state.sqrtPriceX96,step.amountIn,step.amountOut,step.feeAmount)=SwapMath.computeSwapStep( state.sqrtPriceX96, (zeroForOne?step.sqrtPriceNextX96<sqrtPriceLimitX96:step.sqrtPriceNextX96>sqrtPriceLimitX96) ?sqrtPriceLimitX96 :step.sqrtPriceNextX96, state.liquidity, state.amountSpecifiedRemaining, fee ); //更新tokenIn的余额,以及tokenOut数量,注意当指定tokenIn的数量进行交易时,这里的tokenOut是负数 if(exactInput){ state.amountSpecifiedRemaining-=(step.amountIn+step.feeAmount).toInt256(); state.amountCalculated=state.amountCalculated.sub(step.amountOut.toInt256()); }else{ state.amountSpecifiedRemaining+=step.amountOut.toInt256(); state.amountCalculated=state.amountCalculated.add((step.amountIn+step.feeAmount).toInt256()); } ... //按需决定是否需要更新流动性L的值 if(state.sqrtPriceX96==step.sqrtPriceNextX96){ //检查tick index是否为另一个流动性的边界 if(step.initialized){ int128 liquidityNet= ticks.cross( step.tickNext, (zeroForOne?state.feeGrowthGlobalX128:feeGrowthGlobal0X128), (zeroForOne?feeGrowthGlobal1X128:state.feeGrowthGlobalX128) ); //根据价格增加/减少,即向左或向右移动,增加/减少相应的流动性 if(zeroForOne)liquidityNet=-liquidityNet; secondsOutside.cross(step.tickNext,tickSpacing,cache.blockTimestamp); //更新流动性 state.liquidity=LiquidityMath.addDelta(state.liquidity,liquidityNet); } //在这里更tick的值,使得下一次循环时让tickB

阿凡达(泰山众筹)开发丨泰山众筹(阿凡达)系统开发方案及逻辑的评论 (共 条)

分享到微博请遵守国家法律