mirror of
https://github.com/Instadapp/fluid-contracts-public.git
synced 2024-07-29 21:57:37 +00:00
d7a58e88ff
ARB: deploy protocols
112 lines
4.8 KiB
Solidity
112 lines
4.8 KiB
Solidity
// SPDX-License-Identifier: BUSL-1.1
|
|
pragma solidity 0.8.21;
|
|
|
|
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
|
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
|
|
|
|
import { LiquiditySlotsLink } from "../../libraries/liquiditySlotsLink.sol";
|
|
import { IFluidLiquidity } from "../../liquidity/interfaces/iLiquidity.sol";
|
|
import { ILidoWithdrawalQueue } from "./interfaces/external/iLidoWithdrawalQueue.sol";
|
|
import { Structs } from "./structs.sol";
|
|
|
|
abstract contract Constants {
|
|
/// @dev hundred percent at 1e2 precision
|
|
uint256 internal constant HUNDRED_PERCENT = 1e4;
|
|
|
|
/// @dev precision for exchange prices in Liquidity
|
|
uint256 internal constant EXCHANGE_PRICES_PRECISION = 1e12;
|
|
|
|
/// @dev address that is mapped to the chain native token at Liquidity
|
|
address internal constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
|
|
|
|
/// @dev dust amount to borrow from Liquidity at initialize()
|
|
uint256 internal constant DUST_BORROW_AMOUNT = 1e12;
|
|
|
|
/// @notice address of the Liquidity contract.
|
|
IFluidLiquidity internal immutable LIQUIDITY;
|
|
|
|
/// @notice address of the Lido Withdrawal Queue contract (0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)
|
|
ILidoWithdrawalQueue internal immutable LIDO_WITHDRAWAL_QUEUE;
|
|
|
|
/// @notice address of the StETH contract.
|
|
IERC20 internal immutable STETH;
|
|
|
|
/// @dev slot id in Liquidity contract for exchange prices storage slot for NATIVE_TOKEN_ADDRESS.
|
|
bytes32 internal immutable LIQUIDITY_EXCHANGE_PRICES_SLOT;
|
|
|
|
constructor(IFluidLiquidity liquidity_, ILidoWithdrawalQueue lidoWithdrawalQueue_, IERC20 stETH_) {
|
|
LIQUIDITY = liquidity_;
|
|
|
|
LIDO_WITHDRAWAL_QUEUE = lidoWithdrawalQueue_;
|
|
|
|
STETH = stETH_;
|
|
|
|
LIQUIDITY_EXCHANGE_PRICES_SLOT = LiquiditySlotsLink.calculateMappingStorageSlot(
|
|
LiquiditySlotsLink.LIQUIDITY_EXCHANGE_PRICES_MAPPING_SLOT,
|
|
NATIVE_TOKEN_ADDRESS
|
|
);
|
|
}
|
|
|
|
/// @notice returns the constant values for LIQUIDITY, LIDO_WITHDRAWAL_QUEUE, STETH
|
|
function constantsView() external view returns (IFluidLiquidity, ILidoWithdrawalQueue, IERC20) {
|
|
return (LIQUIDITY, LIDO_WITHDRAWAL_QUEUE, STETH);
|
|
}
|
|
}
|
|
|
|
abstract contract Variables is Initializable, OwnableUpgradeable, Constants, Structs {
|
|
// ------------ storage variables from inherited contracts (Initializable, OwnableUpgradeable) come before vars here --------
|
|
// @dev variables here start at storage slot 101, before is:
|
|
// - Initializable with storage slot 0:
|
|
// uint8 private _initialized;
|
|
// bool private _initializing;
|
|
// - OwnableUpgradeable with slots 1 to 100:
|
|
// uint256[50] private __gap; (from ContextUpgradeable, slot 1 until slot 50)
|
|
// address private _owner; (at slot 51)
|
|
// uint256[49] private __gap; (slot 52 until slot 100)
|
|
|
|
// ----------------------- slot 101 ---------------------------
|
|
|
|
/// @notice maps claimTo address and requestIdFrom to the Claim struct containing necessary information for executing the claim process.
|
|
mapping(address => mapping(uint256 => Claim)) public claims;
|
|
|
|
// ----------------------- slot 102 ---------------------------
|
|
|
|
/// @dev status for reentrancy guard
|
|
uint8 internal _status;
|
|
|
|
/// @notice maximum allowed percentage of LTV (loan-to-value). E.g. 90% -> max. 90 ETH can be borrowed with 100 stETH
|
|
/// as collateral in withdrawal queue. ETH will be received at time of claim to cover the paid borrowed ETH amount.
|
|
/// In 1e2 (1% = 100, 90% = 9_000, 100% = 10_000).
|
|
/// Configurable by auths.
|
|
uint16 public maxLTV;
|
|
|
|
/// @notice flag whether allow list behavior is enabled or not.
|
|
bool public allowListActive;
|
|
|
|
// 28 bytes free
|
|
|
|
// ----------------------- slot 103 ---------------------------
|
|
/// @dev auths can update maxLTV.
|
|
/// owner can add/remove auths.
|
|
/// Owner is auth by default.
|
|
mapping(address => uint256) internal _auths;
|
|
|
|
// ----------------------- slot 104 ---------------------------
|
|
/// @dev guardians can pause/unpause queue() and claim().
|
|
/// owner can add/remove guardians.
|
|
/// Owner is guardian by default.
|
|
mapping(address => uint256) internal _guardians;
|
|
|
|
// ----------------------- slot 105 ---------------------------
|
|
/// @dev allowed users can use the StETH protocol (if `allowListActive` is true, then use is open for everyone).
|
|
/// owner and auths can add/remove allowed users.
|
|
mapping(address => uint256) internal _allowed;
|
|
|
|
constructor(
|
|
IFluidLiquidity liquidity_,
|
|
ILidoWithdrawalQueue lidoWithdrawalQueue_,
|
|
IERC20 stETH_
|
|
) Constants(liquidity_, lidoWithdrawalQueue_, stETH_) {}
|
|
}
|