Initial commit
This commit is contained in:
106
contracts/interfaces/IFlashLoanRouter.sol
Normal file
106
contracts/interfaces/IFlashLoanRouter.sol
Normal file
@@ -0,0 +1,106 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.24;
|
||||
|
||||
/**
|
||||
* @title IFlashLoanRouter
|
||||
* @notice Interface for multi-provider flash loan router
|
||||
* @dev Aggregates flash loans from Aave, Balancer, Uniswap, DAI flash mint
|
||||
*/
|
||||
interface IFlashLoanRouter {
|
||||
enum FlashLoanProvider {
|
||||
AAVE,
|
||||
BALANCER,
|
||||
UNISWAP,
|
||||
DAI_FLASH
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Flash loan parameters
|
||||
* @param asset Asset to borrow
|
||||
* @param amount Amount to borrow
|
||||
* @param provider Provider to use (or AUTO for liquidity-weighted)
|
||||
*/
|
||||
struct FlashLoanParams {
|
||||
address asset;
|
||||
uint256 amount;
|
||||
FlashLoanProvider provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Emitted when flash loan is initiated
|
||||
* @param asset Asset borrowed
|
||||
* @param amount Amount borrowed
|
||||
* @param provider Provider used
|
||||
*/
|
||||
event FlashLoanInitiated(
|
||||
address indexed asset,
|
||||
uint256 amount,
|
||||
FlashLoanProvider provider
|
||||
);
|
||||
|
||||
/**
|
||||
* @notice Emitted when flash loan is repaid
|
||||
* @param asset Asset repaid
|
||||
* @param amount Amount repaid (principal + fee)
|
||||
*/
|
||||
event FlashLoanRepaid(address indexed asset, uint256 amount);
|
||||
|
||||
/**
|
||||
* @notice Execute a flash loan with callback
|
||||
* @param params Flash loan parameters
|
||||
* @param callbackData Data to pass to callback
|
||||
*/
|
||||
function flashLoan(
|
||||
FlashLoanParams memory params,
|
||||
bytes memory callbackData
|
||||
) external;
|
||||
|
||||
/**
|
||||
* @notice Execute multi-asset flash loan
|
||||
* @param params Array of flash loan parameters
|
||||
* @param callbackData Data to pass to callback
|
||||
*/
|
||||
function flashLoanBatch(
|
||||
FlashLoanParams[] memory params,
|
||||
bytes memory callbackData
|
||||
) external;
|
||||
|
||||
/**
|
||||
* @notice Get available liquidity for an asset from a provider
|
||||
* @param asset Asset address
|
||||
* @param provider Provider to check
|
||||
* @return available Available liquidity
|
||||
*/
|
||||
function getAvailableLiquidity(
|
||||
address asset,
|
||||
FlashLoanProvider provider
|
||||
) external view returns (uint256 available);
|
||||
|
||||
/**
|
||||
* @notice Get fee for flash loan from a provider
|
||||
* @param asset Asset address
|
||||
* @param amount Amount to borrow
|
||||
* @param provider Provider to check
|
||||
* @return fee Fee amount
|
||||
*/
|
||||
function getFlashLoanFee(
|
||||
address asset,
|
||||
uint256 amount,
|
||||
FlashLoanProvider provider
|
||||
) external view returns (uint256 fee);
|
||||
|
||||
/**
|
||||
* @notice Callback function executed during flash loan
|
||||
* @param asset Asset borrowed
|
||||
* @param amount Amount borrowed
|
||||
* @param fee Fee for the flash loan
|
||||
* @param callbackData Data passed from caller
|
||||
*/
|
||||
function onFlashLoan(
|
||||
address asset,
|
||||
uint256 amount,
|
||||
uint256 fee,
|
||||
bytes calldata callbackData
|
||||
) external returns (bytes32);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user