dsa-connectors/contracts/optimism/connectors/uniswap/v3_swap/interface.sol
2022-04-30 15:10:43 +05:30

111 lines
3.6 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol";
/**
* @title Callback for IUniswapV3PoolActions#swap
* @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interface
*/
interface IUniswapV3SwapCallback {
/**
* @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;
}
interface ISwapRouter is IUniswapV3SwapCallback {
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);
}