109 lines
4.1 KiB
Solidity
109 lines
4.1 KiB
Solidity
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||
|
pragma solidity >=0.7.5;
|
||
|
pragma abicoder v2;
|
||
|
|
||
|
/// @title Router token swapping functionality
|
||
|
/// @notice Functions for swapping tokens via Uniswap Algebra
|
||
|
interface IUniswapRouterV3 {
|
||
|
/// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap.
|
||
|
/// @dev In the implementation you must pay the pool tokens owed for the swap.
|
||
|
/// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory.
|
||
|
/// amount0Delta and amount1Delta can both be 0 if no tokens were swapped.
|
||
|
/// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by
|
||
|
/// the end of the swap. If positive, the callback must send that amount of token0 to the pool.
|
||
|
/// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by
|
||
|
/// the end of the swap. If positive, the callback must send that amount of token1 to the pool.
|
||
|
/// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap call
|
||
|
function uniswapV3SwapCallback(
|
||
|
int256 amount0Delta,
|
||
|
int256 amount1Delta,
|
||
|
bytes calldata data
|
||
|
) external;
|
||
|
|
||
|
struct ExactInputSingleParams {
|
||
|
address tokenIn;
|
||
|
address tokenOut;
|
||
|
uint24 fee;
|
||
|
address recipient;
|
||
|
uint256 deadline;
|
||
|
uint256 amountIn;
|
||
|
uint256 amountOutMinimum;
|
||
|
uint160 sqrtPriceLimitX96;
|
||
|
}
|
||
|
|
||
|
/// @notice Swaps `amountIn` of one token for as much as possible of another token
|
||
|
/// @param params The parameters necessary for the swap, encoded as `ExactInputSingleParams` in calldata
|
||
|
/// @return amountOut The amount of the received token
|
||
|
function exactInputSingle(ExactInputSingleParams calldata params)
|
||
|
external
|
||
|
payable
|
||
|
returns (uint256 amountOut);
|
||
|
|
||
|
struct ExactInputParams {
|
||
|
bytes path;
|
||
|
address recipient;
|
||
|
uint256 deadline;
|
||
|
uint256 amountIn;
|
||
|
uint256 amountOutMinimum;
|
||
|
}
|
||
|
|
||
|
/// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path
|
||
|
/// @param params The parameters necessary for the multi-hop swap, encoded as `ExactInputParams` in calldata
|
||
|
/// @return amountOut The amount of the received token
|
||
|
function exactInput(ExactInputParams calldata params)
|
||
|
external
|
||
|
payable
|
||
|
returns (uint256 amountOut);
|
||
|
|
||
|
struct ExactOutputSingleParams {
|
||
|
address tokenIn;
|
||
|
address tokenOut;
|
||
|
uint24 fee;
|
||
|
address recipient;
|
||
|
uint256 deadline;
|
||
|
uint256 amountOut;
|
||
|
uint256 amountInMaximum;
|
||
|
uint160 sqrtPriceLimitX96;
|
||
|
}
|
||
|
|
||
|
/// @notice Swaps as little as possible of one token for `amountOut` of another token
|
||
|
/// @param params The parameters necessary for the swap, encoded as `ExactOutputSingleParams` in calldata
|
||
|
/// @return amountIn The amount of the input token
|
||
|
function exactOutputSingle(ExactOutputSingleParams calldata params)
|
||
|
external
|
||
|
payable
|
||
|
returns (uint256 amountIn);
|
||
|
|
||
|
struct ExactOutputParams {
|
||
|
bytes path;
|
||
|
address recipient;
|
||
|
uint256 deadline;
|
||
|
uint256 amountOut;
|
||
|
uint256 amountInMaximum;
|
||
|
}
|
||
|
|
||
|
/// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)
|
||
|
/// @param params The parameters necessary for the multi-hop swap, encoded as `ExactOutputParams` in calldata
|
||
|
/// @return amountIn The amount of the input token
|
||
|
function exactOutput(ExactOutputParams calldata params)
|
||
|
external
|
||
|
payable
|
||
|
returns (uint256 amountIn);
|
||
|
|
||
|
function WETH9() external view returns (address);
|
||
|
|
||
|
function WNativeToken() external view returns (address);
|
||
|
|
||
|
function refundETH() external payable;
|
||
|
|
||
|
function refundNativeToken() external payable;
|
||
|
|
||
|
function unwrapWETH9(uint256 amountMinimum, address recipient)
|
||
|
external
|
||
|
payable;
|
||
|
|
||
|
function unwrapWNativeToken(uint256 amountMinimum, address recipient)
|
||
|
external
|
||
|
payable;
|
||
|
}
|