mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.7 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";
 | |
| 
 | |
| struct ExactInputSingleParams {
 | |
| 	address tokenIn;
 | |
| 	address tokenOut;
 | |
| 	uint24 fee;
 | |
| 	address recipient;
 | |
| 	uint256 amountIn;
 | |
| 	uint256 amountOutMinimum;
 | |
| 	uint160 sqrtPriceLimitX96;
 | |
| }
 | |
| 
 | |
| struct ExactInputParams {
 | |
| 	bytes path;
 | |
| 	address recipient;
 | |
| 	uint256 amountIn;
 | |
| 	uint256 amountOutMinimum;
 | |
| }
 | |
| 
 | |
| struct ExactOutputSingleParams {
 | |
| 	address tokenIn;
 | |
| 	address tokenOut;
 | |
| 	uint24 fee;
 | |
| 	address recipient;
 | |
| 	uint256 amountOut;
 | |
| 	uint256 amountInMaximum;
 | |
| 	uint160 sqrtPriceLimitX96;
 | |
| }
 | |
| 
 | |
| struct ExactOutputParams {
 | |
| 	bytes path;
 | |
| 	address recipient;
 | |
| 	uint256 amountOut;
 | |
| 	uint256 amountInMaximum;
 | |
| }
 | |
| 
 | |
| /// @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 IV3SwapRouter is IUniswapV3SwapCallback {
 | |
| 	/// @notice Swaps `amountIn` of one token for as much as possible of another token
 | |
| 	/// @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,
 | |
| 	/// and swap the entire amount, enabling contracts to send tokens before calling this function.
 | |
| 	/// @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);
 | |
| 
 | |
| 	/// @notice Swaps `amountIn` of one token for as much as possible of another along the specified path
 | |
| 	/// @dev Setting `amountIn` to 0 will cause the contract to look up its own balance,
 | |
| 	/// and swap the entire amount, enabling contracts to send tokens before calling this function.
 | |
| 	/// @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);
 | |
| 
 | |
| 	/// @notice Swaps as little as possible of one token for `amountOut` of another token
 | |
| 	/// that may remain in the router after the swap.
 | |
| 	/// @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);
 | |
| 
 | |
| 	/// @notice Swaps as little as possible of one token for `amountOut` of another along the specified path (reversed)
 | |
| 	/// that may remain in the router after the swap.
 | |
| 	/// @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);
 | |
| }
 | |
| 
 | |
| interface IApproveAndCall {}
 | |
| 
 | |
| /// @title Multicall interface
 | |
| /// @notice Enables calling multiple methods in a single call to the contract
 | |
| interface IMulticall {
 | |
| 
 | |
| }
 | |
| 
 | |
| /// @title MulticallExtended interface
 | |
| /// @notice Enables calling multiple methods in a single call to the contract with optional validation
 | |
| interface IMulticallExtended is IMulticall {
 | |
| 
 | |
| }
 | |
| 
 | |
| /// @title Self Permit
 | |
| /// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route
 | |
| interface ISelfPermit {
 | |
| 
 | |
| }
 | |
| 
 | |
| /// @title Router token swapping functionality
 | |
| /// @notice Functions for swapping tokens via Uniswap V2
 | |
| interface IV2SwapRouter {
 | |
| 
 | |
| }
 | |
| 
 | |
| interface ISwapRouter02 is
 | |
| 	IV2SwapRouter,
 | |
| 	IV3SwapRouter,
 | |
| 	IApproveAndCall,
 | |
| 	IMulticallExtended,
 | |
| 	ISelfPermit
 | |
| {}
 | 
