33 lines
1.1 KiB
Solidity
33 lines
1.1 KiB
Solidity
// SPDX-License-Identifier: BUSL-1.1
|
|
pragma solidity ^0.8.26;
|
|
|
|
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
|
|
pragma abicoder v2;
|
|
|
|
interface IExecutor {
|
|
/**
|
|
* @notice Performs a swap on a liquidity pool.
|
|
* @dev This method takes the amount of the input token and returns the amount of
|
|
* the output token which has been swapped.
|
|
*
|
|
* Note Part of the informal interface is that the executor supports sending the received
|
|
* tokens to a receiver address. If the underlying smart contract does not provide this
|
|
* functionality consider adding an additional transfer in the implementation.
|
|
*
|
|
* @param givenAmount The amount of the input token to swap.
|
|
* @param data Data that holds information necessary to perform the swap.
|
|
* @return calculatedAmount The amount of the output token swapped, depending on
|
|
* the givenAmount inputted.
|
|
*/
|
|
function swap(
|
|
uint256 givenAmount,
|
|
bytes calldata data
|
|
) external payable returns (uint256 calculatedAmount);
|
|
}
|
|
|
|
interface IExecutorErrors {
|
|
error InvalidParameterLength(uint256);
|
|
error UnknownPoolType(uint8);
|
|
}
|