mirror of
				https://github.com/Instadapp/dsa-governance.git
				synced 2024-07-29 22:27:52 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| // SPDX-License-Identifier: BUSL-1.1
 | |
| pragma solidity 0.8.21;
 | |
| 
 | |
| /// @notice library that helps in reading / working with storage slot data of Fluid Liquidity.
 | |
| /// @dev as all data for Fluid Liquidity is internal, any data must be fetched directly through manual
 | |
| /// slot reading through this library or, if gas usage is less important, through the FluidLiquidityResolver.
 | |
| library LiquiditySlotsLink {
 | |
|     /// @dev storage slot for status at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_STATUS_SLOT = 1;
 | |
|     /// @dev storage slot for auths mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_AUTHS_MAPPING_SLOT = 2;
 | |
|     /// @dev storage slot for guardians mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_GUARDIANS_MAPPING_SLOT = 3;
 | |
|     /// @dev storage slot for user class mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_USER_CLASS_MAPPING_SLOT = 4;
 | |
|     /// @dev storage slot for exchangePricesAndConfig mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_EXCHANGE_PRICES_MAPPING_SLOT = 5;
 | |
|     /// @dev storage slot for rateData mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_RATE_DATA_MAPPING_SLOT = 6;
 | |
|     /// @dev storage slot for totalAmounts mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_TOTAL_AMOUNTS_MAPPING_SLOT = 7;
 | |
|     /// @dev storage slot for user supply double mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_USER_SUPPLY_DOUBLE_MAPPING_SLOT = 8;
 | |
|     /// @dev storage slot for user borrow double mapping at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_USER_BORROW_DOUBLE_MAPPING_SLOT = 9;
 | |
|     /// @dev storage slot for listed tokens array at Liquidity
 | |
|     uint256 internal constant LIQUIDITY_LISTED_TOKENS_ARRAY_SLOT = 10;
 | |
| 
 | |
|     // --------------------------------
 | |
|     // @dev stacked uint256 storage slots bits position data for each:
 | |
| 
 | |
|     // ExchangePricesAndConfig
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_BORROW_RATE = 0;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_FEE = 16;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_UTILIZATION = 30;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_UPDATE_THRESHOLD = 44;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_LAST_TIMESTAMP = 58;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_SUPPLY_EXCHANGE_PRICE = 91;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_BORROW_EXCHANGE_PRICE = 155;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_SUPPLY_RATIO = 219;
 | |
|     uint256 internal constant BITS_EXCHANGE_PRICES_BORROW_RATIO = 234;
 | |
| 
 | |
|     // RateData:
 | |
|     uint256 internal constant BITS_RATE_DATA_VERSION = 0;
 | |
|     // RateData: V1
 | |
|     uint256 internal constant BITS_RATE_DATA_V1_RATE_AT_UTILIZATION_ZERO = 4;
 | |
|     uint256 internal constant BITS_RATE_DATA_V1_UTILIZATION_AT_KINK = 20;
 | |
|     uint256 internal constant BITS_RATE_DATA_V1_RATE_AT_UTILIZATION_KINK = 36;
 | |
|     uint256 internal constant BITS_RATE_DATA_V1_RATE_AT_UTILIZATION_MAX = 52;
 | |
|     // RateData: V2
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_RATE_AT_UTILIZATION_ZERO = 4;
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_UTILIZATION_AT_KINK1 = 20;
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_RATE_AT_UTILIZATION_KINK1 = 36;
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_UTILIZATION_AT_KINK2 = 52;
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_RATE_AT_UTILIZATION_KINK2 = 68;
 | |
|     uint256 internal constant BITS_RATE_DATA_V2_RATE_AT_UTILIZATION_MAX = 84;
 | |
| 
 | |
|     // TotalAmounts
 | |
|     uint256 internal constant BITS_TOTAL_AMOUNTS_SUPPLY_WITH_INTEREST = 0;
 | |
|     uint256 internal constant BITS_TOTAL_AMOUNTS_SUPPLY_INTEREST_FREE = 64;
 | |
|     uint256 internal constant BITS_TOTAL_AMOUNTS_BORROW_WITH_INTEREST = 128;
 | |
|     uint256 internal constant BITS_TOTAL_AMOUNTS_BORROW_INTEREST_FREE = 192;
 | |
| 
 | |
|     // UserSupplyData
 | |
|     uint256 internal constant BITS_USER_SUPPLY_MODE = 0;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_AMOUNT = 1;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_PREVIOUS_WITHDRAWAL_LIMIT = 65;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_LAST_UPDATE_TIMESTAMP = 129;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_EXPAND_PERCENT = 162;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_EXPAND_DURATION = 176;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_BASE_WITHDRAWAL_LIMIT = 200;
 | |
|     uint256 internal constant BITS_USER_SUPPLY_IS_PAUSED = 255;
 | |
| 
 | |
|     // UserBorrowData
 | |
|     uint256 internal constant BITS_USER_BORROW_MODE = 0;
 | |
|     uint256 internal constant BITS_USER_BORROW_AMOUNT = 1;
 | |
|     uint256 internal constant BITS_USER_BORROW_PREVIOUS_BORROW_LIMIT = 65;
 | |
|     uint256 internal constant BITS_USER_BORROW_LAST_UPDATE_TIMESTAMP = 129;
 | |
|     uint256 internal constant BITS_USER_BORROW_EXPAND_PERCENT = 162;
 | |
|     uint256 internal constant BITS_USER_BORROW_EXPAND_DURATION = 176;
 | |
|     uint256 internal constant BITS_USER_BORROW_BASE_BORROW_LIMIT = 200;
 | |
|     uint256 internal constant BITS_USER_BORROW_MAX_BORROW_LIMIT = 218;
 | |
|     uint256 internal constant BITS_USER_BORROW_IS_PAUSED = 255;
 | |
| 
 | |
|     // --------------------------------
 | |
| 
 | |
|     /// @notice Calculating the slot ID for Liquidity contract for single mapping at `slot_` for `key_`
 | |
|     function calculateMappingStorageSlot(uint256 slot_, address key_) internal pure returns (bytes32) {
 | |
|         return keccak256(abi.encode(key_, slot_));
 | |
|     }
 | |
| 
 | |
|     /// @notice Calculating the slot ID for Liquidity contract for double mapping at `slot_` for `key1_` and `key2_`
 | |
|     function calculateDoubleMappingStorageSlot(
 | |
|         uint256 slot_,
 | |
|         address key1_,
 | |
|         address key2_
 | |
|     ) internal pure returns (bytes32) {
 | |
|         bytes32 intermediateSlot_ = keccak256(abi.encode(key1_, slot_));
 | |
|         return keccak256(abi.encode(key2_, intermediateSlot_));
 | |
|     }
 | |
| }
 | 
