This commit is contained in:
Thrilok kumar 2024-06-10 19:46:35 -04:00
parent ce46ad09ff
commit 5ba1914bd2

View File

@ -1,4 +1,4 @@
pragma solidity ^0.7.0; pragma solidity >=0.7.0;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
import { BigMathMinified } from "./libraries/bigMathMinified.sol"; import { BigMathMinified } from "./libraries/bigMathMinified.sol";
@ -251,6 +251,8 @@ interface IFluidLiquidityAdmin {
uint256[] memory supplyExchangePrices_, uint256[] memory supplyExchangePrices_,
uint256[] memory borrowExchangePrices_ uint256[] memory borrowExchangePrices_
); );
function readFromStorage(bytes32 slot_) external view returns (uint256 result_);
} }
interface IFluidVaultT1Factory { interface IFluidVaultT1Factory {
@ -278,6 +280,8 @@ interface IFluidVaultT1Factory {
/// @param vaultId_ The ID of the vault. /// @param vaultId_ The ID of the vault.
/// @return vault_ Returns the computed address of the vault. /// @return vault_ Returns the computed address of the vault.
function getVaultAddress(uint256 vaultId_) external view returns (address vault_); function getVaultAddress(uint256 vaultId_) external view returns (address vault_);
function readFromStorage(bytes32 slot_) external view returns (uint256 result_);
} }
@ -326,6 +330,8 @@ interface IFluidVaultT1 {
/// @notice returns all Vault constants /// @notice returns all Vault constants
function constantsView() external view returns (ConstantViews memory constantsView_); function constantsView() external view returns (ConstantViews memory constantsView_);
function readFromStorage(bytes32 slot_) external view returns (uint256 result_);
struct Configs { struct Configs {
uint16 supplyRateMagnifier; uint16 supplyRateMagnifier;
uint16 borrowRateMagnifier; uint16 borrowRateMagnifier;
@ -381,11 +387,18 @@ contract PayloadIGP26 {
IFluidVaultT1Factory public constant VAULT_T1_FACTORY = IFluidVaultT1Factory public constant VAULT_T1_FACTORY =
IFluidVaultT1Factory(0x324c5Dc1fC42c7a4D43d92df1eBA58a54d13Bf2d); IFluidVaultT1Factory(0x324c5Dc1fC42c7a4D43d92df1eBA58a54d13Bf2d);
uint256 internal constant X8 = 0xff;
uint256 internal constant X10 = 0x3ff;
uint256 internal constant X14 = 0x3fff; uint256 internal constant X14 = 0x3fff;
uint256 internal constant X15 = 0x7fff;
uint256 internal constant X16 = 0xffff;
uint256 internal constant X18 = 0x3ffff; uint256 internal constant X18 = 0x3ffff;
uint256 internal constant X24 = 0xffffff; uint256 internal constant X24 = 0xffffff;
uint256 internal constant X64 = 0xffffffffffffffff; uint256 internal constant X64 = 0xffffffffffffffff;
uint256 internal constant DEFAULT_EXPONENT_SIZE = 8;
uint256 internal constant DEFAULT_EXPONENT_MASK = 0xff;
address public constant ETH_ADDRESS = address public constant ETH_ADDRESS =
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
address public constant wstETH_ADDRESS = address public constant wstETH_ADDRESS =
@ -474,7 +487,7 @@ contract PayloadIGP26 {
user: user_, user: user_,
token: token_, token: token_,
mode: uint8(userSupplyData_ & 1), mode: uint8(userSupplyData_ & 1),
expandPercent: (userSupply_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_EXPAND_PERCENT) & X14, expandPercent: (userSupplyData_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_EXPAND_PERCENT) & X14,
expandDuration: (userSupplyData_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_EXPAND_DURATION) & X24, expandDuration: (userSupplyData_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_EXPAND_DURATION) & X24,
baseWithdrawalLimit: BigMathMinified.fromBigNumber( baseWithdrawalLimit: BigMathMinified.fromBigNumber(
(userSupplyData_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_BASE_WITHDRAWAL_LIMIT) & X18, (userSupplyData_ >> LiquiditySlotsLink.BITS_USER_SUPPLY_BASE_WITHDRAWAL_LIMIT) & X18,
@ -486,7 +499,7 @@ contract PayloadIGP26 {
function getUserBorrowData( function getUserBorrowData(
address token_, address token_,
address user_, address user_
) internal view returns(AdminModuleStructs.UserBorrowConfig memory config_) { ) internal view returns(AdminModuleStructs.UserBorrowConfig memory config_) {
bytes32 _LIQUDITY_PROTOCOL_BORROW_SLOT = LiquiditySlotsLink.calculateDoubleMappingStorageSlot( bytes32 _LIQUDITY_PROTOCOL_BORROW_SLOT = LiquiditySlotsLink.calculateDoubleMappingStorageSlot(
LiquiditySlotsLink.LIQUIDITY_USER_BORROW_DOUBLE_MAPPING_SLOT, LiquiditySlotsLink.LIQUIDITY_USER_BORROW_DOUBLE_MAPPING_SLOT,
@ -527,7 +540,7 @@ contract PayloadIGP26 {
} else if (token == sUSDe_ADDRESS) { } else if (token == sUSDe_ADDRESS) {
return (9_200 * 1e18, 13_900 * 1e18); return (9_200 * 1e18, 13_900 * 1e18);
} else { } else {
revert "no allowance found"; revert ("no allowance found");
} }
} }
@ -553,21 +566,21 @@ contract PayloadIGP26 {
} else if (vaultId == 20) { } else if (vaultId == 20) {
return 0x32eE0cB3587C6e9f8Ad2a0CF83B6Cf326848b7c6; // VAULT_WEETH_USDT return 0x32eE0cB3587C6e9f8Ad2a0CF83B6Cf326848b7c6; // VAULT_WEETH_USDT
} else { } else {
revert "no oracle address"; revert ("no oracle address");
} }
} }
function getVaultConfig(address vault) internal view returns (IFluidVaultT1.Configs memory configs) { function getVaultConfig(address vault) internal view returns (IFluidVaultT1.Configs memory configs) {
uint vaultVariables2 = IFluidVaultT1(vault_).readFromStorage(bytes32(1)); uint vaultVariables2 = IFluidVaultT1(vault).readFromStorage(bytes32(uint256(1)));
configs_.supplyRateMagnifier = uint16(vaultVariables2 & X16); configs.supplyRateMagnifier = uint16(vaultVariables2 & X16);
configs_.borrowRateMagnifier = uint16((vaultVariables2 >> 16) & X16); configs.borrowRateMagnifier = uint16((vaultVariables2 >> 16) & X16);
configs_.collateralFactor = (uint16((vaultVariables2 >> 32) & X10)) * 10; configs.collateralFactor = (uint16((vaultVariables2 >> 32) & X10)) * 10;
configs_.liquidationThreshold = (uint16((vaultVariables2 >> 42) & X10)) * 10; configs.liquidationThreshold = (uint16((vaultVariables2 >> 42) & X10)) * 10;
configs_.liquidationMaxLimit = (uint16((vaultVariables2 >> 52) & X10) * 10); configs.liquidationMaxLimit = (uint16((vaultVariables2 >> 52) & X10) * 10);
configs_.withdrawalGap = uint16((vaultVariables2 >> 62) & X10) * 10; configs.withdrawalGap = uint16((vaultVariables2 >> 62) & X10) * 10;
configs_.liquidationPenalty = uint16((vaultVariables2 >> 72) & X10); configs.liquidationPenalty = uint16((vaultVariables2 >> 72) & X10);
configs_.borrowFee = uint16((vaultVariables2 >> 82) & X10); configs.borrowFee = uint16((vaultVariables2 >> 82) & X10);
configs_.oracle = address(uint160(vaultVariables2 >> 96)); configs.oracle = address(uint160(vaultVariables2 >> 96));
} }
function cloneVault(uint256 oldVaultId) internal { function cloneVault(uint256 oldVaultId) internal {
@ -587,9 +600,11 @@ contract PayloadIGP26 {
// Set user supply config for the vault on Liquidity Layer. // Set user supply config for the vault on Liquidity Layer.
{ {
AdminModuleStructs.UserSupplyConfig[] AdminModuleStructs.UserSupplyConfig[]
memory configs_ = getUserSupplyData(newConstants.supplyToken, oldVaultAddress); memory configs_ = new AdminModuleStructs.UserSupplyConfig[](1);
(uint256 baseAllowance, uint256 maxAllowance) = getAllowance(newConstants.supplyToken); configs_[0] = getUserSupplyData(newConstants.supplyToken, oldVaultAddress);
(uint256 baseAllowance, ) = getAllowance(newConstants.supplyToken);
configs_[0].baseWithdrawalLimit = baseAllowance; configs_[0].baseWithdrawalLimit = baseAllowance;
@ -599,9 +614,10 @@ contract PayloadIGP26 {
// Set user borrow config for the vault on Liquidity Layer. // Set user borrow config for the vault on Liquidity Layer.
{ {
AdminModuleStructs.UserBorrowConfig[] AdminModuleStructs.UserBorrowConfig[]
memory configs_ = getUserBorrowData(newConstants.borrowToken, oldVaultAddress); memory configs_ = new AdminModuleStructs.UserBorrowConfig[](1);
(uint256 baseAllowance, uint256 maxAllowance) = getAllowance(newConstants.borrowAllowance); configs_[0] = getUserBorrowData(newConstants.borrowToken, oldVaultAddress);
(uint256 baseAllowance, uint256 maxAllowance) = getAllowance(newConstants.borrowToken);
configs_[0].baseDebtCeiling = baseAllowance; configs_[0].baseDebtCeiling = baseAllowance;
configs_[0].maxDebtCeiling = maxAllowance; configs_[0].maxDebtCeiling = maxAllowance;
@ -617,7 +633,7 @@ contract PayloadIGP26 {
require( require(
IFluidOracle(configs.oracle).getExchangeRate() == IFluidOracle(newOracleAddress).getExchangeRate(), IFluidOracle(configs.oracle).getExchangeRate() == IFluidOracle(newOracleAddress).getExchangeRate(),
"oracle exchangePrice is not same" "oracle exchangePrice is not same"
) );
} }
IFluidVaultT1(newVaultAddress).updateCoreSettings( IFluidVaultT1(newVaultAddress).updateCoreSettings(
@ -626,7 +642,7 @@ contract PayloadIGP26 {
configs.collateralFactor, // collateralFactor configs.collateralFactor, // collateralFactor
configs.liquidationThreshold, // liquidationThreshold configs.liquidationThreshold, // liquidationThreshold
configs.liquidationMaxLimit, // liquidationMaxLimit configs.liquidationMaxLimit, // liquidationMaxLimit
configs.withdrawGap, // withdrawGap configs.withdrawalGap, // withdrawGap
configs.liquidationPenalty, // liquidationPenalty configs.liquidationPenalty, // liquidationPenalty
configs.borrowFee // borrowFee configs.borrowFee // borrowFee
); );
@ -634,12 +650,12 @@ contract PayloadIGP26 {
// Update oracle on new vault. // Update oracle on new vault.
{ {
IFluidVaultT1(vault_).updateOracle(newOracleAddress); IFluidVaultT1(newVaultAddress).updateOracle(newOracleAddress);
} }
// Update rebalancer on new vault. // Update rebalancer on new vault.
{ {
IFluidVaultT1(vault_).updateRebalancer(0x264786EF916af64a1DB19F513F24a3681734ce92); IFluidVaultT1(newVaultAddress).updateRebalancer(0x264786EF916af64a1DB19F513F24a3681734ce92);
} }
} }