Pool合约中swap函数中条件判断语句存在写反的可能
// 计算交易的具体数值
(
state.sqrtPriceX96,
state.amountIn,
state.amountOut,
state.feeAmount
) = SwapMath.computeSwapStep(
sqrtPriceX96,
(
zeroForOne
? sqrtPriceX96PoolLimit < sqrtPriceLimitX96
: sqrtPriceX96PoolLimit > sqrtPriceLimitX96
)
? sqrtPriceLimitX96
: sqrtPriceX96PoolLimit,
liquidity,
amountSpecified,
fee
);
按照之前教学步骤中逻辑可知,zeroForOne为true代表交易者希望存入token0换取token1,那么池子中token0的价格走向趋于更低,可得此时条件判断句【sqrtPriceX96PoolLimit < sqrtPriceLimitX96?sqrtPriceLimitX96: sqrtPriceX96PoolLimit】这里应该取更小的sqrtPriceX96PoolLimit而不是sqrtPriceLimitX96; 同理可得zeroForOne为false的时候应该取值更大的sqrtPriceX96PoolLimit而不是sqrtPriceLimitX96。
关闭于 2025-02-11 3 条评论