有人能告诉我如何使用onchain计算swapRouter.exactInputSingle()函数中的D1参数吗?我已经有了一个工作的uniswapV3 oracle,它可以检索令牌的价格,并且我的V3交换函数可以像预期的那样工作。如果需要,我们可以很容易地将oracle实现更改为收回两种价格。我已经包含了下面的一些代码-参见TODO
function swapExactInputSingle(
address _tokenIn,
address _tokenOut,
uint256 _amountIn
) private returns (uint256 amountOut) {
TransferHelper.safeApprove(_tokenIn, address(swapRouter), _amountIn);
uint32 secondsIn = 10;
uint256 price = IUniswapV3PriceOracle(uniswapV3PriceOracle).estimateAmountOut(_tokenIn, uint128(_amountIn), secondsIn);
// TODO: We need to use the price from the oracle to calculate amountOutMinimum
uint256 amountOutMinimum = 1;
ISwapRouter.ExactInputSingleParams memory params = ISwapRouter
.ExactInputSingleParams({
tokenIn: _tokenIn,
tokenOut: _tokenOut,
fee: poolFee,
recipient: address(this),
deadline: block.timestamp,
amountIn: _amountIn,
amountOutMinimum: amountOutMinimum,
sqrtPriceLimitX96: 0
});
amountOut = swapRouter.exactInputSingle(params);
}发布于 2022-07-09 22:37:59
我敢打赌你需要改变:
amountOutMinimum: amountOutMinimum,为
amountOutMinimum: price,https://ethereum.stackexchange.com/questions/130154
复制相似问题