mirror of
https://github.com/Instadapp/fluid-contracts-public.git
synced 2024-07-29 21:57:37 +00:00
d7a58e88ff
ARB: deploy protocols
113 lines
7.1 KiB
Solidity
113 lines
7.1 KiB
Solidity
//SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.21;
|
|
|
|
import { IProxy } from "../../infiniteProxy/interfaces/iProxy.sol";
|
|
import { Structs as AdminModuleStructs } from "../adminModule/structs.sol";
|
|
|
|
interface IFluidLiquidityAdmin {
|
|
/// @notice adds/removes auths. Auths generally could be contracts which can have restricted actions defined on contract.
|
|
/// auths can be helpful in reducing governance overhead where it's not needed.
|
|
/// @param authsStatus_ array of structs setting allowed status for an address.
|
|
/// status true => add auth, false => remove auth
|
|
function updateAuths(AdminModuleStructs.AddressBool[] calldata authsStatus_) external;
|
|
|
|
/// @notice adds/removes guardians. Only callable by Governance.
|
|
/// @param guardiansStatus_ array of structs setting allowed status for an address.
|
|
/// status true => add guardian, false => remove guardian
|
|
function updateGuardians(AdminModuleStructs.AddressBool[] calldata guardiansStatus_) external;
|
|
|
|
/// @notice changes the revenue collector address (contract that is sent revenue). Only callable by Governance.
|
|
/// @param revenueCollector_ new revenue collector address
|
|
function updateRevenueCollector(address revenueCollector_) external;
|
|
|
|
/// @notice changes current status, e.g. for pausing or unpausing all user operations. Only callable by Auths.
|
|
/// @param newStatus_ new status
|
|
/// status = 2 -> pause, status = 1 -> resume.
|
|
function changeStatus(uint256 newStatus_) external;
|
|
|
|
/// @notice update tokens rate data version 1. Only callable by Auths.
|
|
/// @param tokensRateData_ array of RateDataV1Params with rate data to set for each token
|
|
function updateRateDataV1s(AdminModuleStructs.RateDataV1Params[] calldata tokensRateData_) external;
|
|
|
|
/// @notice update tokens rate data version 2. Only callable by Auths.
|
|
/// @param tokensRateData_ array of RateDataV2Params with rate data to set for each token
|
|
function updateRateDataV2s(AdminModuleStructs.RateDataV2Params[] calldata tokensRateData_) external;
|
|
|
|
/// @notice updates token configs: fee charge on borrowers interest & storage update utilization threshold.
|
|
/// Only callable by Auths.
|
|
/// @param tokenConfigs_ contains token address, fee & utilization threshold
|
|
function updateTokenConfigs(AdminModuleStructs.TokenConfig[] calldata tokenConfigs_) external;
|
|
|
|
/// @notice updates user classes: 0 is for new protocols, 1 is for established protocols.
|
|
/// Only callable by Auths.
|
|
/// @param userClasses_ struct array of uint256 value to assign for each user address
|
|
function updateUserClasses(AdminModuleStructs.AddressUint256[] calldata userClasses_) external;
|
|
|
|
/// @notice sets user supply configs per token basis. Eg: with interest or interest-free and automated limits.
|
|
/// Only callable by Auths.
|
|
/// @param userSupplyConfigs_ struct array containing user supply config, see `UserSupplyConfig` struct for more info
|
|
function updateUserSupplyConfigs(AdminModuleStructs.UserSupplyConfig[] memory userSupplyConfigs_) external;
|
|
|
|
/// @notice setting user borrow configs per token basis. Eg: with interest or interest-free and automated limits.
|
|
/// Only callable by Auths.
|
|
/// @param userBorrowConfigs_ struct array containing user borrow config, see `UserBorrowConfig` struct for more info
|
|
function updateUserBorrowConfigs(AdminModuleStructs.UserBorrowConfig[] memory userBorrowConfigs_) external;
|
|
|
|
/// @notice pause operations for a particular user in class 0 (class 1 users can't be paused by guardians).
|
|
/// Only callable by Guardians.
|
|
/// @param user_ address of user to pause operations for
|
|
/// @param supplyTokens_ token addresses to pause withdrawals for
|
|
/// @param borrowTokens_ token addresses to pause borrowings for
|
|
function pauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;
|
|
|
|
/// @notice unpause operations for a particular user in class 0 (class 1 users can't be paused by guardians).
|
|
/// Only callable by Guardians.
|
|
/// @param user_ address of user to unpause operations for
|
|
/// @param supplyTokens_ token addresses to unpause withdrawals for
|
|
/// @param borrowTokens_ token addresses to unpause borrowings for
|
|
function unpauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;
|
|
|
|
/// @notice collects revenue for tokens to configured revenueCollector address.
|
|
/// @param tokens_ array of tokens to collect revenue for
|
|
/// @dev Note that this can revert if token balance is < revenueAmount (utilization > 100%)
|
|
function collectRevenue(address[] calldata tokens_) external;
|
|
|
|
/// @notice gets the current updated exchange prices for n tokens and updates all prices, rates related data in storage.
|
|
/// @param tokens_ tokens to update exchange prices for
|
|
/// @return supplyExchangePrices_ new supply rates of overall system for each token
|
|
/// @return borrowExchangePrices_ new borrow rates of overall system for each token
|
|
function updateExchangePrices(
|
|
address[] calldata tokens_
|
|
) external returns (uint256[] memory supplyExchangePrices_, uint256[] memory borrowExchangePrices_);
|
|
}
|
|
|
|
interface IFluidLiquidityLogic is IFluidLiquidityAdmin {
|
|
/// @notice Single function which handles supply, withdraw, borrow & payback
|
|
/// @param token_ address of token (0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for native)
|
|
/// @param supplyAmount_ if +ve then supply, if -ve then withdraw, if 0 then nothing
|
|
/// @param borrowAmount_ if +ve then borrow, if -ve then payback, if 0 then nothing
|
|
/// @param withdrawTo_ if withdrawal then to which address
|
|
/// @param borrowTo_ if borrow then to which address
|
|
/// @param callbackData_ callback data passed to `liquidityCallback` method of protocol
|
|
/// @return memVar3_ updated supplyExchangePrice
|
|
/// @return memVar4_ updated borrowExchangePrice
|
|
/// @dev to trigger skipping in / out transfers when in&out amounts balance themselves out (gas optimization):
|
|
/// - supply(+) == borrow(+), withdraw(-) == payback(-).
|
|
/// - `withdrawTo_` / `borrowTo_` must be msg.sender (protocol)
|
|
/// - `callbackData_` MUST be encoded so that "from" address is at last 20 bytes (if this optimization is desired),
|
|
/// also for native token operations where liquidityCallback is not triggered!
|
|
/// from address must come at last position if there is more data. I.e. encode like:
|
|
/// abi.encode(otherVar1, otherVar2, FROM_ADDRESS). Note dynamic types used with abi.encode come at the end
|
|
/// so if dynamic types are needed, you must use abi.encodePacked to ensure the from address is at the end.
|
|
function operate(
|
|
address token_,
|
|
int256 supplyAmount_,
|
|
int256 borrowAmount_,
|
|
address withdrawTo_,
|
|
address borrowTo_,
|
|
bytes calldata callbackData_
|
|
) external payable returns (uint256 memVar3_, uint256 memVar4_);
|
|
}
|
|
|
|
interface IFluidLiquidity is IProxy, IFluidLiquidityLogic {}
|