Files
no_five/contracts/interfaces/IFlashLoanRouter.sol
2025-11-20 15:35:25 -08:00

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);
}