107 lines
2.8 KiB
Solidity
107 lines
2.8 KiB
Solidity
// 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);
|
|
}
|
|
|