From e305a0f3573b9c6b3ec694f262f012211b62fe6e Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sun, 10 Mar 2024 14:35:38 -0400 Subject: [PATCH 1/5] IGP10 --- contracts/payloads/IGP10/PayloadIGP10.sol | 319 ++++++++++++++++++++++ 1 file changed, 319 insertions(+) create mode 100644 contracts/payloads/IGP10/PayloadIGP10.sol diff --git a/contracts/payloads/IGP10/PayloadIGP10.sol b/contracts/payloads/IGP10/PayloadIGP10.sol new file mode 100644 index 0000000..f2f6439 --- /dev/null +++ b/contracts/payloads/IGP10/PayloadIGP10.sol @@ -0,0 +1,319 @@ +pragma solidity ^0.7.0; +pragma experimental ABIEncoderV2; + +interface IGovernorBravo { + function _acceptAdmin() external; + + function _setVotingDelay(uint newVotingDelay) external; + + function _setVotingPeriod(uint newVotingPeriod) external; + + function _acceptAdminOnTimelock() external; + + function _setImplementation(address implementation_) external; + + function propose( + address[] memory targets, + uint[] memory values, + string[] memory signatures, + bytes[] memory calldatas, + string memory description + ) external returns (uint); + + function admin() external view returns (address); + + function pendingAdmin() external view returns (address); + + function timelock() external view returns (address); + + function votingDelay() external view returns (uint256); + + function votingPeriod() external view returns (uint256); +} + +interface ITimelock { + function acceptAdmin() external; + + function setDelay(uint delay_) external; + + function setPendingAdmin(address pendingAdmin_) external; + + function queueTransaction( + address target, + uint value, + string memory signature, + bytes memory data, + uint eta + ) external returns (bytes32); + + function executeTransaction( + address target, + uint value, + string memory signature, + bytes memory data, + uint eta + ) external payable returns (bytes memory); + + function pendingAdmin() external view returns (address); + + function admin() external view returns (address); + + function delay() external view returns (uint256); +} + +interface IInstaIndex { + function changeMaster(address _newMaster) external; + function updateMaster() external; + function master() external view returns (address); +} + +interface AdminModuleStructs { + struct AddressBool { + address addr; + bool value; + } + + struct AddressUint256 { + address addr; + uint256 value; + } + + struct RateDataV1Params { + address token; + uint256 kink; + uint256 rateAtUtilizationZero; + uint256 rateAtUtilizationKink; + uint256 rateAtUtilizationMax; + } + + struct RateDataV2Params { + address token; + uint256 kink1; + uint256 kink2; + uint256 rateAtUtilizationZero; + uint256 rateAtUtilizationKink1; + uint256 rateAtUtilizationKink2; + uint256 rateAtUtilizationMax; + } + + struct TokenConfig { + address token; + uint256 fee; + uint256 threshold; + } + + struct UserSupplyConfig { + address user; + address token; + uint8 mode; + uint256 expandPercent; + uint256 expandDuration; + uint256 baseWithdrawalLimit; + } + + struct UserBorrowConfig { + address user; + address token; + uint8 mode; + uint256 expandPercent; + uint256 expandDuration; + uint256 baseDebtCeiling; + uint256 maxDebtCeiling; + } +} + +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 IstETHProtocol { + /// @notice initializes the contract with `owner_` as owner + function initialize(address owner_) external; + + /// @notice Sets an address as allowed user or not. Only callable by auths. + /// @param user_ address to set allowed value for + /// @param allowed_ bool flag for whether address is allowed as user or not + function setUserAllowed(address user_, bool allowed_) external; + + /// @notice Sets `maxLTV` to `maxLTV_` (in 1e2: 1% = 100, 100% = 10000). Must be > 0 and < 100%. + function setMaxLTV(uint16 maxLTV_) external; + + /// @notice Sets an address as allowed guardian or not. Only callable by owner. + /// @param guardian_ address to set guardian value for + /// @param allowed_ bool flag for whether address is allowed as guardian or not + function setGuardian(address guardian_, bool allowed_) external; +} + +contract PayloadIGP9 { + uint256 public constant PROPOSAL_ID = 10; + + address public constant PROPOSER = + 0xA45f7bD6A5Ff45D31aaCE6bCD3d426D9328cea01; + + IGovernorBravo public constant GOVERNOR = + IGovernorBravo(0x0204Cd037B2ec03605CFdFe482D8e257C765fA1B); + ITimelock public constant TIMELOCK = + ITimelock(0x2386DC45AdDed673317eF068992F19421B481F4c); + + address public constant TEAM_MULTISIG = + 0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e; + + address public immutable ADDRESS_THIS; + + IFluidLiquidityAdmin public constant LIQUIDITY = IFluidLiquidityAdmin(0x52Aa899454998Be5b000Ad077a46Bbe360F4e497); + + address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + constructor() { + ADDRESS_THIS = address(this); + } + + function propose(string memory description) external { + require(msg.sender == PROPOSER || msg.sender == TEAM_MULTISIG, "msg.sender-not-proposer-or-multisig"); + + uint256 totalActions = 1; + address[] memory targets = new address[](totalActions); + uint256[] memory values = new uint256[](totalActions); + string[] memory signatures = new string[](totalActions); + bytes[] memory calldatas = new bytes[](totalActions); + + // Action 1: call executePayload on timelock contract to execute payload related to Fluid + targets[0] = address(TIMELOCK); + values[0] = 0; + signatures[0] = "executePayload(address,string,bytes)"; + calldatas[0] = abi.encode(ADDRESS_THIS, "execute()", abi.encode()); + + uint256 proposedId = GOVERNOR.propose( + targets, + values, + signatures, + calldatas, + description + ); + + require(proposedId == PROPOSAL_ID, "PROPOSAL_IS_NOT_SAME"); + } + + function execute() external { + require(address(this) == address(TIMELOCK), "not-valid-caller"); + + // Action 1: Update rate current for USDC market + action1(); + + // Action 1: Update rate current for USDT market + action2(); + } + + function verifyProposal() external view {} + + /***********************************| + | Proposal Payload Actions | + |__________________________________*/ + + /// @notice Action 1: Update rate current for USDC market + function action1() internal { + AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1); + + params_[0] = AdminModuleStructs.RateDataV2Params({ + token: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, // USDC + kink1: 80 * 1e2, // 80% + kink2: 93 * 1e2, // 93% + rateAtUtilizationZero: 0, // 0% + rateAtUtilizationKink1: 12 * 1e2, // 12% + rateAtUtilizationKink2: 18 * 1e2, // 18% + rateAtUtilizationMax: 33.34 * 1e2 // 33.34% + }); + + LIQUIDITY.updateRateDataV2s(params_); + } + + /// @notice Action 2: Update rate current for USDT market + function action2() internal { + AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1); + + params_[0] = AdminModuleStructs.RateDataV2Params({ + token: 0xdAC17F958D2ee523a2206206994597C13D831ec7, // USDT + kink1: 80 * 1e2, // 80% + kink2: 93 * 1e2, // 93% + rateAtUtilizationZero: 0, // 0% + rateAtUtilizationKink1: 12 * 1e2, // 12% + rateAtUtilizationKink2: 18 * 1e2, // 18% + rateAtUtilizationMax: 33.34 * 1e2 // 33.34% + }); + + LIQUIDITY.updateRateDataV2s(params_); + } +} From f3add4e9a01f3ad40b9415c37592a68e653e74cf Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sun, 10 Mar 2024 14:48:59 -0400 Subject: [PATCH 2/5] fix --- contracts/payloads/IGP10/PayloadIGP10.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/payloads/IGP10/PayloadIGP10.sol b/contracts/payloads/IGP10/PayloadIGP10.sol index f2f6439..0d5bbee 100644 --- a/contracts/payloads/IGP10/PayloadIGP10.sol +++ b/contracts/payloads/IGP10/PayloadIGP10.sol @@ -217,7 +217,7 @@ interface IstETHProtocol { function setGuardian(address guardian_, bool allowed_) external; } -contract PayloadIGP9 { +contract PayloadIGP10 { uint256 public constant PROPOSAL_ID = 10; address public constant PROPOSER = From a47e9ccd95b8420a85736a3b64e41d200ced2ad3 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sun, 10 Mar 2024 14:53:07 -0400 Subject: [PATCH 3/5] fix --- contracts/payloads/IGP10/PayloadIGP10.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/payloads/IGP10/PayloadIGP10.sol b/contracts/payloads/IGP10/PayloadIGP10.sol index 0d5bbee..af75651 100644 --- a/contracts/payloads/IGP10/PayloadIGP10.sol +++ b/contracts/payloads/IGP10/PayloadIGP10.sol @@ -270,10 +270,10 @@ contract PayloadIGP10 { function execute() external { require(address(this) == address(TIMELOCK), "not-valid-caller"); - // Action 1: Update rate current for USDC market + // Action 1: Update market rates for USDC. action1(); - // Action 1: Update rate current for USDT market + // Action 1: Update market rates for USDT. action2(); } @@ -283,7 +283,7 @@ contract PayloadIGP10 { | Proposal Payload Actions | |__________________________________*/ - /// @notice Action 1: Update rate current for USDC market + /// @notice Action 1: Update market rates for USDC. function action1() internal { AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1); @@ -300,7 +300,7 @@ contract PayloadIGP10 { LIQUIDITY.updateRateDataV2s(params_); } - /// @notice Action 2: Update rate current for USDT market + /// @notice Action 2: Update market rates for USDT. function action2() internal { AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1); From 9c5da11f40350c1317af8348a648bff2f8942705 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sun, 10 Mar 2024 22:23:37 -0400 Subject: [PATCH 4/5] fix --- contracts/payloads/IGP10/PayloadIGP10.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/payloads/IGP10/PayloadIGP10.sol b/contracts/payloads/IGP10/PayloadIGP10.sol index af75651..78fdd2c 100644 --- a/contracts/payloads/IGP10/PayloadIGP10.sol +++ b/contracts/payloads/IGP10/PayloadIGP10.sol @@ -273,7 +273,7 @@ contract PayloadIGP10 { // Action 1: Update market rates for USDC. action1(); - // Action 1: Update market rates for USDT. + // Action 2: Update market rates for USDT. action2(); } From 58182e19765306435753af3f41a83b6368911a24 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Mon, 11 Mar 2024 16:29:32 -0400 Subject: [PATCH 5/5] deployment script --- deployments/mainnet_1/PayloadIGP10.json | 1 + deployments/mainnet_1/PayloadIGP9.json | 1 + scripts/deployIGP10.js | 22 ++++++++++++++++++++++ scripts/deployIGP9.js | 22 ++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 deployments/mainnet_1/PayloadIGP10.json create mode 100644 deployments/mainnet_1/PayloadIGP9.json create mode 100644 scripts/deployIGP10.js create mode 100644 scripts/deployIGP9.js diff --git a/deployments/mainnet_1/PayloadIGP10.json b/deployments/mainnet_1/PayloadIGP10.json new file mode 100644 index 0000000..7c194eb --- /dev/null +++ b/deployments/mainnet_1/PayloadIGP10.json @@ -0,0 +1 @@ +{"metadata":"{\"defaultCompiler\":{\"version\":\"0.7.3\"},\"sources\":{\"contracts/payloads/IGP10/PayloadIGP10.sol\":{\"content\":\"pragma solidity ^0.7.0;\\npragma experimental ABIEncoderV2;\\n\\ninterface IGovernorBravo {\\n function _acceptAdmin() external;\\n\\n function _setVotingDelay(uint newVotingDelay) external;\\n\\n function _setVotingPeriod(uint newVotingPeriod) external;\\n\\n function _acceptAdminOnTimelock() external;\\n\\n function _setImplementation(address implementation_) external;\\n\\n function propose(\\n address[] memory targets,\\n uint[] memory values,\\n string[] memory signatures,\\n bytes[] memory calldatas,\\n string memory description\\n ) external returns (uint);\\n\\n function admin() external view returns (address);\\n\\n function pendingAdmin() external view returns (address);\\n\\n function timelock() external view returns (address);\\n\\n function votingDelay() external view returns (uint256);\\n\\n function votingPeriod() external view returns (uint256);\\n}\\n\\ninterface ITimelock {\\n function acceptAdmin() external;\\n\\n function setDelay(uint delay_) external;\\n\\n function setPendingAdmin(address pendingAdmin_) external;\\n\\n function queueTransaction(\\n address target,\\n uint value,\\n string memory signature,\\n bytes memory data,\\n uint eta\\n ) external returns (bytes32);\\n\\n function executeTransaction(\\n address target,\\n uint value,\\n string memory signature,\\n bytes memory data,\\n uint eta\\n ) external payable returns (bytes memory);\\n\\n function pendingAdmin() external view returns (address);\\n\\n function admin() external view returns (address);\\n\\n function delay() external view returns (uint256);\\n}\\n\\ninterface IInstaIndex {\\n function changeMaster(address _newMaster) external;\\n function updateMaster() external;\\n function master() external view returns (address);\\n}\\n\\ninterface AdminModuleStructs {\\n struct AddressBool {\\n address addr;\\n bool value;\\n }\\n\\n struct AddressUint256 {\\n address addr;\\n uint256 value;\\n }\\n\\n struct RateDataV1Params {\\n address token;\\n uint256 kink;\\n uint256 rateAtUtilizationZero;\\n uint256 rateAtUtilizationKink;\\n uint256 rateAtUtilizationMax;\\n }\\n\\n struct RateDataV2Params {\\n address token;\\n uint256 kink1;\\n uint256 kink2;\\n uint256 rateAtUtilizationZero;\\n uint256 rateAtUtilizationKink1;\\n uint256 rateAtUtilizationKink2;\\n uint256 rateAtUtilizationMax;\\n }\\n\\n struct TokenConfig {\\n address token;\\n uint256 fee;\\n uint256 threshold;\\n }\\n\\n struct UserSupplyConfig {\\n address user;\\n address token;\\n uint8 mode;\\n uint256 expandPercent;\\n uint256 expandDuration;\\n uint256 baseWithdrawalLimit;\\n }\\n\\n struct UserBorrowConfig {\\n address user;\\n address token;\\n uint8 mode;\\n uint256 expandPercent;\\n uint256 expandDuration;\\n uint256 baseDebtCeiling;\\n uint256 maxDebtCeiling;\\n }\\n}\\n\\ninterface IFluidLiquidityAdmin {\\n /// @notice adds/removes auths. Auths generally could be contracts which can have restricted actions defined on contract.\\n /// auths can be helpful in reducing governance overhead where it's not needed.\\n /// @param authsStatus_ array of structs setting allowed status for an address.\\n /// status true => add auth, false => remove auth\\n function updateAuths(AdminModuleStructs.AddressBool[] calldata authsStatus_) external;\\n\\n /// @notice adds/removes guardians. Only callable by Governance.\\n /// @param guardiansStatus_ array of structs setting allowed status for an address.\\n /// status true => add guardian, false => remove guardian\\n function updateGuardians(AdminModuleStructs.AddressBool[] calldata guardiansStatus_) external;\\n\\n /// @notice changes the revenue collector address (contract that is sent revenue). Only callable by Governance.\\n /// @param revenueCollector_ new revenue collector address\\n function updateRevenueCollector(address revenueCollector_) external;\\n\\n /// @notice changes current status, e.g. for pausing or unpausing all user operations. Only callable by Auths.\\n /// @param newStatus_ new status\\n /// status = 2 -> pause, status = 1 -> resume.\\n function changeStatus(uint256 newStatus_) external;\\n\\n /// @notice update tokens rate data version 1. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV1Params with rate data to set for each token\\n function updateRateDataV1s(AdminModuleStructs.RateDataV1Params[] calldata tokensRateData_) external;\\n\\n /// @notice update tokens rate data version 2. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV2Params with rate data to set for each token\\n function updateRateDataV2s(AdminModuleStructs.RateDataV2Params[] calldata tokensRateData_) external;\\n\\n /// @notice updates token configs: fee charge on borrowers interest & storage update utilization threshold.\\n /// Only callable by Auths.\\n /// @param tokenConfigs_ contains token address, fee & utilization threshold\\n function updateTokenConfigs(AdminModuleStructs.TokenConfig[] calldata tokenConfigs_) external;\\n\\n /// @notice updates user classes: 0 is for new protocols, 1 is for established protocols.\\n /// Only callable by Auths.\\n /// @param userClasses_ struct array of uint256 value to assign for each user address\\n function updateUserClasses(AdminModuleStructs.AddressUint256[] calldata userClasses_) external;\\n\\n /// @notice sets user supply configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userSupplyConfigs_ struct array containing user supply config, see `UserSupplyConfig` struct for more info\\n function updateUserSupplyConfigs(AdminModuleStructs.UserSupplyConfig[] memory userSupplyConfigs_) external;\\n\\n /// @notice setting user borrow configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userBorrowConfigs_ struct array containing user borrow config, see `UserBorrowConfig` struct for more info\\n function updateUserBorrowConfigs(AdminModuleStructs.UserBorrowConfig[] memory userBorrowConfigs_) external;\\n\\n /// @notice pause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to pause operations for\\n /// @param supplyTokens_ token addresses to pause withdrawals for\\n /// @param borrowTokens_ token addresses to pause borrowings for\\n function pauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice unpause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to unpause operations for\\n /// @param supplyTokens_ token addresses to unpause withdrawals for\\n /// @param borrowTokens_ token addresses to unpause borrowings for\\n function unpauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice collects revenue for tokens to configured revenueCollector address.\\n /// @param tokens_ array of tokens to collect revenue for\\n /// @dev Note that this can revert if token balance is < revenueAmount (utilization > 100%)\\n function collectRevenue(address[] calldata tokens_) external;\\n\\n /// @notice gets the current updated exchange prices for n tokens and updates all prices, rates related data in storage.\\n /// @param tokens_ tokens to update exchange prices for\\n /// @return supplyExchangePrices_ new supply rates of overall system for each token\\n /// @return borrowExchangePrices_ new borrow rates of overall system for each token\\n function updateExchangePrices(\\n address[] calldata tokens_\\n ) external returns (uint256[] memory supplyExchangePrices_, uint256[] memory borrowExchangePrices_);\\n}\\n\\ninterface IstETHProtocol {\\n /// @notice initializes the contract with `owner_` as owner\\n function initialize(address owner_) external;\\n\\n /// @notice Sets an address as allowed user or not. Only callable by auths.\\n /// @param user_ address to set allowed value for\\n /// @param allowed_ bool flag for whether address is allowed as user or not\\n function setUserAllowed(address user_, bool allowed_) external;\\n\\n /// @notice Sets `maxLTV` to `maxLTV_` (in 1e2: 1% = 100, 100% = 10000). Must be > 0 and < 100%.\\n function setMaxLTV(uint16 maxLTV_) external;\\n\\n /// @notice Sets an address as allowed guardian or not. Only callable by owner.\\n /// @param guardian_ address to set guardian value for\\n /// @param allowed_ bool flag for whether address is allowed as guardian or not\\n function setGuardian(address guardian_, bool allowed_) external;\\n}\\n\\ncontract PayloadIGP10 {\\n uint256 public constant PROPOSAL_ID = 10;\\n\\n address public constant PROPOSER =\\n 0xA45f7bD6A5Ff45D31aaCE6bCD3d426D9328cea01;\\n\\n IGovernorBravo public constant GOVERNOR =\\n IGovernorBravo(0x0204Cd037B2ec03605CFdFe482D8e257C765fA1B);\\n ITimelock public constant TIMELOCK =\\n ITimelock(0x2386DC45AdDed673317eF068992F19421B481F4c);\\n\\n address public constant TEAM_MULTISIG = \\n 0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e;\\n\\n address public immutable ADDRESS_THIS;\\n \\n IFluidLiquidityAdmin public constant LIQUIDITY = IFluidLiquidityAdmin(0x52Aa899454998Be5b000Ad077a46Bbe360F4e497);\\n\\n address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n constructor() {\\n ADDRESS_THIS = address(this);\\n }\\n\\n function propose(string memory description) external {\\n require(msg.sender == PROPOSER || msg.sender == TEAM_MULTISIG, \\\"msg.sender-not-proposer-or-multisig\\\");\\n\\n uint256 totalActions = 1;\\n address[] memory targets = new address[](totalActions);\\n uint256[] memory values = new uint256[](totalActions);\\n string[] memory signatures = new string[](totalActions);\\n bytes[] memory calldatas = new bytes[](totalActions);\\n\\n // Action 1: call executePayload on timelock contract to execute payload related to Fluid\\n targets[0] = address(TIMELOCK);\\n values[0] = 0;\\n signatures[0] = \\\"executePayload(address,string,bytes)\\\";\\n calldatas[0] = abi.encode(ADDRESS_THIS, \\\"execute()\\\", abi.encode());\\n\\n uint256 proposedId = GOVERNOR.propose(\\n targets,\\n values,\\n signatures,\\n calldatas,\\n description\\n );\\n\\n require(proposedId == PROPOSAL_ID, \\\"PROPOSAL_IS_NOT_SAME\\\");\\n }\\n\\n function execute() external {\\n require(address(this) == address(TIMELOCK), \\\"not-valid-caller\\\");\\n\\n // Action 1: Update market rates for USDC.\\n action1();\\n\\n // Action 2: Update market rates for USDT.\\n action2();\\n }\\n\\n function verifyProposal() external view {}\\n\\n /***********************************|\\n | Proposal Payload Actions |\\n |__________________________________*/\\n\\n /// @notice Action 1: Update market rates for USDC.\\n function action1() internal {\\n AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1);\\n\\n params_[0] = AdminModuleStructs.RateDataV2Params({\\n token: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, // USDC\\n kink1: 80 * 1e2, // 80%\\n kink2: 93 * 1e2, // 93%\\n rateAtUtilizationZero: 0, // 0%\\n rateAtUtilizationKink1: 12 * 1e2, // 12%\\n rateAtUtilizationKink2: 18 * 1e2, // 18%\\n rateAtUtilizationMax: 33.34 * 1e2 // 33.34%\\n });\\n\\n LIQUIDITY.updateRateDataV2s(params_);\\n }\\n\\n /// @notice Action 2: Update market rates for USDT.\\n function action2() internal {\\n AdminModuleStructs.RateDataV2Params[] memory params_ = new AdminModuleStructs.RateDataV2Params[](1);\\n\\n params_[0] = AdminModuleStructs.RateDataV2Params({\\n token: 0xdAC17F958D2ee523a2206206994597C13D831ec7, // USDT\\n kink1: 80 * 1e2, // 80%\\n kink2: 93 * 1e2, // 93%\\n rateAtUtilizationZero: 0, // 0%\\n rateAtUtilizationKink1: 12 * 1e2, // 12%\\n rateAtUtilizationKink2: 18 * 1e2, // 18%\\n rateAtUtilizationMax: 33.34 * 1e2 // 33.34%\\n });\\n\\n LIQUIDITY.updateRateDataV2s(params_);\\n }\\n}\\n\",\"versionPragma\":\"^0.7.0\"}}}","address":"0x845aCf270B11E2Aa977fEda62A4b93156c660aa5","bytecode":"0x60a060405234801561001057600080fd5b5030606081901b608052610b94610036600039806103e852806105275250610b946000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637aadef8b116100715780637aadef8b146100fb578063a734f06e14610103578063aa98df391461010b578063b788f3a11461011e578063bffa7f0f14610126578063cc025f7c1461012e576100a9565b80630bc9136e146100ae5780632861c7d1146100cc57806361461954146100e157806366760d7d146100eb5780636dc0ae22146100f3575b600080fd5b6100b6610136565b6040516100c39190610b31565b60405180910390f35b6100d461013b565b6040516100c3919061090f565b6100e9610153565b005b6100e961019f565b6100d46101a1565b6100d46101b9565b6100d46101d1565b6100e961011936600461073e565b6101e9565b6100d46104f5565b6100d461050d565b6100d4610525565b600a81565b7352aa899454998be5b000ad077a46bbe360f4e49781565b30732386dc45added673317ef068992f19421b481f4c1461018f5760405162461bcd60e51b815260040161018690610b07565b60405180910390fd5b610197610549565b61019f61065c565b565b730204cd037b2ec03605cfdfe482d8e257c765fa1b81565b732386dc45added673317ef068992f19421b481f4c81565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3373a45f7bd6a5ff45d31aace6bcd3d426d9328cea01148061021e575033734f6f977acdd1177dcd81ab83074855ecb9c2d49e145b61023a5760405162461bcd60e51b815260040161018690610a96565b604080516001808252818301909252606090826020808301908036833701905050905060608267ffffffffffffffff8111801561027657600080fd5b506040519080825280602002602001820160405280156102a0578160200160208202803683370190505b50905060608367ffffffffffffffff811180156102bc57600080fd5b506040519080825280602002602001820160405280156102f057816020015b60608152602001906001900390816102db5790505b50905060608467ffffffffffffffff8111801561030c57600080fd5b5060405190808252806020026020018201604052801561034057816020015b606081526020019060019003908161032b5790505b509050732386dc45added673317ef068992f19421b481f4c8460008151811061036557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008360008151811061039457fe5b602002602001018181525050604051806060016040528060248152602001610b3b60249139826000815181106103c657fe5b6020908102919091018101919091526040805160008152918201815261040f917f0000000000000000000000000000000000000000000000000000000000000000918101610923565b6040516020818303038152906040528160008151811061042b57fe5b6020908102919091010152604051636d4ab48d60e11b8152600090730204cd037b2ec03605cfdfe482d8e257c765fa1b9063da95691a906104789088908890889088908e9060040161096c565b602060405180830381600087803b15801561049257600080fd5b505af11580156104a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca91906107d3565b9050600a81146104ec5760405162461bcd60e51b815260040161018690610ad9565b50505050505050565b734f6f977acdd1177dcd81ab83074855ecb9c2d49e81565b73a45f7bd6a5ff45d31aace6bcd3d426d9328cea0181565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001808252818301909252606091816020015b6105686106f8565b8152602001906001900390816105605790505090506040518060e0016040528073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b03168152602001611f4081526020016124548152602001600081526020016104b081526020016107088152602001610d06815250816000815181106105e557fe5b6020908102919091010152604051639dde597760e01b81527352aa899454998be5b000ad077a46bbe360f4e49790639dde597790610627908490600401610a0b565b600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b604080516001808252818301909252606091816020015b61067b6106f8565b8152602001906001900390816106735790505090506040518060e0016040528073dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03168152602001611f4081526020016124548152602001600081526020016104b081526020016107088152602001610d06815250816000815181106105e557fe5b6040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020808385031215610750578182fd5b823567ffffffffffffffff80821115610767578384fd5b818501915085601f83011261077a578384fd5b81358181111561078657fe5b604051601f8201601f19168101850183811182821017156107a357fe5b60405281815283820185018810156107b9578586fd5b818585018683013790810190930193909352509392505050565b6000602082840312156107e4578081fd5b5051919050565b60008282518085526020808601955080818302840101818601855b8481101561083457601f198684030189526108228383516108c4565b98840198925090830190600101610806565b5090979650505050505050565b60008282518085526020808601955080818302840101818601855b8481101561083457601f198684030189526108788383516108c4565b9884019892509083019060010161085c565b6000815180845260208085019450808401835b838110156108b95781518752958201959082019060010161089d565b509495945050505050565b60008151808452815b818110156108e9576020818501810151868301820152016108cd565b818111156108fa5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b600060018060a01b038416825260606020830152600960608301526865786563757465282960b81b608083015260a0604083015261096460a08301846108c4565b949350505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156109ae5781516001600160a01b031684529284019290840190600101610989565b505050838103828501526109c2818961088a565b91505082810360408401526109d78187610841565b905082810360608401526109eb81866107eb565b905082810360808401526109ff81856108c4565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610a8957815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610a28565b5091979650505050505050565b60208082526023908201527f6d73672e73656e6465722d6e6f742d70726f706f7365722d6f722d6d756c746960408201526273696760e81b606082015260800190565b60208082526014908201527350524f504f53414c5f49535f4e4f545f53414d4560601b604082015260600190565b60208082526010908201526f3737ba16bb30b634b216b1b0b63632b960811b604082015260600190565b9081526020019056fe657865637574655061796c6f616428616464726573732c737472696e672c627974657329a2646970667358221220eb0cff7bda863bffcddaff7923d011fd81a5fdb85bff7327d0c37c3365433f4a64736f6c63430007030033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637aadef8b116100715780637aadef8b146100fb578063a734f06e14610103578063aa98df391461010b578063b788f3a11461011e578063bffa7f0f14610126578063cc025f7c1461012e576100a9565b80630bc9136e146100ae5780632861c7d1146100cc57806361461954146100e157806366760d7d146100eb5780636dc0ae22146100f3575b600080fd5b6100b6610136565b6040516100c39190610b31565b60405180910390f35b6100d461013b565b6040516100c3919061090f565b6100e9610153565b005b6100e961019f565b6100d46101a1565b6100d46101b9565b6100d46101d1565b6100e961011936600461073e565b6101e9565b6100d46104f5565b6100d461050d565b6100d4610525565b600a81565b7352aa899454998be5b000ad077a46bbe360f4e49781565b30732386dc45added673317ef068992f19421b481f4c1461018f5760405162461bcd60e51b815260040161018690610b07565b60405180910390fd5b610197610549565b61019f61065c565b565b730204cd037b2ec03605cfdfe482d8e257c765fa1b81565b732386dc45added673317ef068992f19421b481f4c81565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3373a45f7bd6a5ff45d31aace6bcd3d426d9328cea01148061021e575033734f6f977acdd1177dcd81ab83074855ecb9c2d49e145b61023a5760405162461bcd60e51b815260040161018690610a96565b604080516001808252818301909252606090826020808301908036833701905050905060608267ffffffffffffffff8111801561027657600080fd5b506040519080825280602002602001820160405280156102a0578160200160208202803683370190505b50905060608367ffffffffffffffff811180156102bc57600080fd5b506040519080825280602002602001820160405280156102f057816020015b60608152602001906001900390816102db5790505b50905060608467ffffffffffffffff8111801561030c57600080fd5b5060405190808252806020026020018201604052801561034057816020015b606081526020019060019003908161032b5790505b509050732386dc45added673317ef068992f19421b481f4c8460008151811061036557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008360008151811061039457fe5b602002602001018181525050604051806060016040528060248152602001610b3b60249139826000815181106103c657fe5b6020908102919091018101919091526040805160008152918201815261040f917f0000000000000000000000000000000000000000000000000000000000000000918101610923565b6040516020818303038152906040528160008151811061042b57fe5b6020908102919091010152604051636d4ab48d60e11b8152600090730204cd037b2ec03605cfdfe482d8e257c765fa1b9063da95691a906104789088908890889088908e9060040161096c565b602060405180830381600087803b15801561049257600080fd5b505af11580156104a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ca91906107d3565b9050600a81146104ec5760405162461bcd60e51b815260040161018690610ad9565b50505050505050565b734f6f977acdd1177dcd81ab83074855ecb9c2d49e81565b73a45f7bd6a5ff45d31aace6bcd3d426d9328cea0181565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001808252818301909252606091816020015b6105686106f8565b8152602001906001900390816105605790505090506040518060e0016040528073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b03168152602001611f4081526020016124548152602001600081526020016104b081526020016107088152602001610d06815250816000815181106105e557fe5b6020908102919091010152604051639dde597760e01b81527352aa899454998be5b000ad077a46bbe360f4e49790639dde597790610627908490600401610a0b565b600060405180830381600087803b15801561064157600080fd5b505af1158015610655573d6000803e3d6000fd5b5050505050565b604080516001808252818301909252606091816020015b61067b6106f8565b8152602001906001900390816106735790505090506040518060e0016040528073dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03168152602001611f4081526020016124548152602001600081526020016104b081526020016107088152602001610d06815250816000815181106105e557fe5b6040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020808385031215610750578182fd5b823567ffffffffffffffff80821115610767578384fd5b818501915085601f83011261077a578384fd5b81358181111561078657fe5b604051601f8201601f19168101850183811182821017156107a357fe5b60405281815283820185018810156107b9578586fd5b818585018683013790810190930193909352509392505050565b6000602082840312156107e4578081fd5b5051919050565b60008282518085526020808601955080818302840101818601855b8481101561083457601f198684030189526108228383516108c4565b98840198925090830190600101610806565b5090979650505050505050565b60008282518085526020808601955080818302840101818601855b8481101561083457601f198684030189526108788383516108c4565b9884019892509083019060010161085c565b6000815180845260208085019450808401835b838110156108b95781518752958201959082019060010161089d565b509495945050505050565b60008151808452815b818110156108e9576020818501810151868301820152016108cd565b818111156108fa5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b600060018060a01b038416825260606020830152600960608301526865786563757465282960b81b608083015260a0604083015261096460a08301846108c4565b949350505050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156109ae5781516001600160a01b031684529284019290840190600101610989565b505050838103828501526109c2818961088a565b91505082810360408401526109d78187610841565b905082810360608401526109eb81866107eb565b905082810360808401526109ff81856108c4565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610a8957815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610a28565b5091979650505050505050565b60208082526023908201527f6d73672e73656e6465722d6e6f742d70726f706f7365722d6f722d6d756c746960408201526273696760e81b606082015260800190565b60208082526014908201527350524f504f53414c5f49535f4e4f545f53414d4560601b604082015260600190565b60208082526010908201526f3737ba16bb30b634b216b1b0b63632b960811b604082015260600190565b9081526020019056fe657865637574655061796c6f616428616464726573732c737472696e672c627974657329a2646970667358221220eb0cff7bda863bffcddaff7923d011fd81a5fdb85bff7327d0c37c3365433f4a64736f6c63430007030033","abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESS_THIS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNOR","outputs":[{"internalType":"contract IGovernorBravo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY","outputs":[{"internalType":"contract IFluidLiquidityAdmin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_MULTISIG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK","outputs":[{"internalType":"contract ITimelock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"verifyProposal","outputs":[],"stateMutability":"view","type":"function"}]} \ No newline at end of file diff --git a/deployments/mainnet_1/PayloadIGP9.json b/deployments/mainnet_1/PayloadIGP9.json new file mode 100644 index 0000000..c872e42 --- /dev/null +++ b/deployments/mainnet_1/PayloadIGP9.json @@ -0,0 +1 @@ +{"metadata":"{\"defaultCompiler\":{\"version\":\"0.7.3\"},\"sources\":{\"contracts/payloads/IGP9/PayloadIGP9.sol\":{\"content\":\"pragma solidity ^0.7.0;\\npragma experimental ABIEncoderV2;\\n\\ninterface IGovernorBravo {\\n function _acceptAdmin() external;\\n\\n function _setVotingDelay(uint newVotingDelay) external;\\n\\n function _setVotingPeriod(uint newVotingPeriod) external;\\n\\n function _acceptAdminOnTimelock() external;\\n\\n function _setImplementation(address implementation_) external;\\n\\n function propose(\\n address[] memory targets,\\n uint[] memory values,\\n string[] memory signatures,\\n bytes[] memory calldatas,\\n string memory description\\n ) external returns (uint);\\n\\n function admin() external view returns (address);\\n\\n function pendingAdmin() external view returns (address);\\n\\n function timelock() external view returns (address);\\n\\n function votingDelay() external view returns (uint256);\\n\\n function votingPeriod() external view returns (uint256);\\n}\\n\\ninterface ITimelock {\\n function acceptAdmin() external;\\n\\n function setDelay(uint delay_) external;\\n\\n function setPendingAdmin(address pendingAdmin_) external;\\n\\n function queueTransaction(\\n address target,\\n uint value,\\n string memory signature,\\n bytes memory data,\\n uint eta\\n ) external returns (bytes32);\\n\\n function executeTransaction(\\n address target,\\n uint value,\\n string memory signature,\\n bytes memory data,\\n uint eta\\n ) external payable returns (bytes memory);\\n\\n function pendingAdmin() external view returns (address);\\n\\n function admin() external view returns (address);\\n\\n function delay() external view returns (uint256);\\n}\\n\\ninterface IInstaIndex {\\n function changeMaster(address _newMaster) external;\\n function updateMaster() external;\\n function master() external view returns (address);\\n}\\n\\ninterface AdminModuleStructs {\\n struct AddressBool {\\n address addr;\\n bool value;\\n }\\n\\n struct AddressUint256 {\\n address addr;\\n uint256 value;\\n }\\n\\n struct RateDataV1Params {\\n address token;\\n uint256 kink;\\n uint256 rateAtUtilizationZero;\\n uint256 rateAtUtilizationKink;\\n uint256 rateAtUtilizationMax;\\n }\\n\\n struct RateDataV2Params {\\n address token;\\n uint256 kink1;\\n uint256 kink2;\\n uint256 rateAtUtilizationZero;\\n uint256 rateAtUtilizationKink1;\\n uint256 rateAtUtilizationKink2;\\n uint256 rateAtUtilizationMax;\\n }\\n\\n struct TokenConfig {\\n address token;\\n uint256 fee;\\n uint256 threshold;\\n }\\n\\n struct UserSupplyConfig {\\n address user;\\n address token;\\n uint8 mode;\\n uint256 expandPercent;\\n uint256 expandDuration;\\n uint256 baseWithdrawalLimit;\\n }\\n\\n struct UserBorrowConfig {\\n address user;\\n address token;\\n uint8 mode;\\n uint256 expandPercent;\\n uint256 expandDuration;\\n uint256 baseDebtCeiling;\\n uint256 maxDebtCeiling;\\n }\\n}\\n\\ninterface IFluidLiquidityAdmin {\\n /// @notice adds/removes auths. Auths generally could be contracts which can have restricted actions defined on contract.\\n /// auths can be helpful in reducing governance overhead where it's not needed.\\n /// @param authsStatus_ array of structs setting allowed status for an address.\\n /// status true => add auth, false => remove auth\\n function updateAuths(AdminModuleStructs.AddressBool[] calldata authsStatus_) external;\\n\\n /// @notice adds/removes guardians. Only callable by Governance.\\n /// @param guardiansStatus_ array of structs setting allowed status for an address.\\n /// status true => add guardian, false => remove guardian\\n function updateGuardians(AdminModuleStructs.AddressBool[] calldata guardiansStatus_) external;\\n\\n /// @notice changes the revenue collector address (contract that is sent revenue). Only callable by Governance.\\n /// @param revenueCollector_ new revenue collector address\\n function updateRevenueCollector(address revenueCollector_) external;\\n\\n /// @notice changes current status, e.g. for pausing or unpausing all user operations. Only callable by Auths.\\n /// @param newStatus_ new status\\n /// status = 2 -> pause, status = 1 -> resume.\\n function changeStatus(uint256 newStatus_) external;\\n\\n /// @notice update tokens rate data version 1. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV1Params with rate data to set for each token\\n function updateRateDataV1s(AdminModuleStructs.RateDataV1Params[] calldata tokensRateData_) external;\\n\\n /// @notice update tokens rate data version 2. Only callable by Auths.\\n /// @param tokensRateData_ array of RateDataV2Params with rate data to set for each token\\n function updateRateDataV2s(AdminModuleStructs.RateDataV2Params[] calldata tokensRateData_) external;\\n\\n /// @notice updates token configs: fee charge on borrowers interest & storage update utilization threshold.\\n /// Only callable by Auths.\\n /// @param tokenConfigs_ contains token address, fee & utilization threshold\\n function updateTokenConfigs(AdminModuleStructs.TokenConfig[] calldata tokenConfigs_) external;\\n\\n /// @notice updates user classes: 0 is for new protocols, 1 is for established protocols.\\n /// Only callable by Auths.\\n /// @param userClasses_ struct array of uint256 value to assign for each user address\\n function updateUserClasses(AdminModuleStructs.AddressUint256[] calldata userClasses_) external;\\n\\n /// @notice sets user supply configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userSupplyConfigs_ struct array containing user supply config, see `UserSupplyConfig` struct for more info\\n function updateUserSupplyConfigs(AdminModuleStructs.UserSupplyConfig[] memory userSupplyConfigs_) external;\\n\\n /// @notice setting user borrow configs per token basis. Eg: with interest or interest-free and automated limits.\\n /// Only callable by Auths.\\n /// @param userBorrowConfigs_ struct array containing user borrow config, see `UserBorrowConfig` struct for more info\\n function updateUserBorrowConfigs(AdminModuleStructs.UserBorrowConfig[] memory userBorrowConfigs_) external;\\n\\n /// @notice pause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to pause operations for\\n /// @param supplyTokens_ token addresses to pause withdrawals for\\n /// @param borrowTokens_ token addresses to pause borrowings for\\n function pauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice unpause operations for a particular user in class 0 (class 1 users can't be paused by guardians).\\n /// Only callable by Guardians.\\n /// @param user_ address of user to unpause operations for\\n /// @param supplyTokens_ token addresses to unpause withdrawals for\\n /// @param borrowTokens_ token addresses to unpause borrowings for\\n function unpauseUser(address user_, address[] calldata supplyTokens_, address[] calldata borrowTokens_) external;\\n\\n /// @notice collects revenue for tokens to configured revenueCollector address.\\n /// @param tokens_ array of tokens to collect revenue for\\n /// @dev Note that this can revert if token balance is < revenueAmount (utilization > 100%)\\n function collectRevenue(address[] calldata tokens_) external;\\n\\n /// @notice gets the current updated exchange prices for n tokens and updates all prices, rates related data in storage.\\n /// @param tokens_ tokens to update exchange prices for\\n /// @return supplyExchangePrices_ new supply rates of overall system for each token\\n /// @return borrowExchangePrices_ new borrow rates of overall system for each token\\n function updateExchangePrices(\\n address[] calldata tokens_\\n ) external returns (uint256[] memory supplyExchangePrices_, uint256[] memory borrowExchangePrices_);\\n}\\n\\ninterface IstETHProtocol {\\n /// @notice initializes the contract with `owner_` as owner\\n function initialize(address owner_) external;\\n\\n /// @notice Sets an address as allowed user or not. Only callable by auths.\\n /// @param user_ address to set allowed value for\\n /// @param allowed_ bool flag for whether address is allowed as user or not\\n function setUserAllowed(address user_, bool allowed_) external;\\n\\n /// @notice Sets `maxLTV` to `maxLTV_` (in 1e2: 1% = 100, 100% = 10000). Must be > 0 and < 100%.\\n function setMaxLTV(uint16 maxLTV_) external;\\n\\n /// @notice Sets an address as allowed guardian or not. Only callable by owner.\\n /// @param guardian_ address to set guardian value for\\n /// @param allowed_ bool flag for whether address is allowed as guardian or not\\n function setGuardian(address guardian_, bool allowed_) external;\\n}\\n\\ncontract PayloadIGP9 {\\n uint256 public constant PROPOSAL_ID = 9;\\n\\n address public constant PROPOSER =\\n 0xA45f7bD6A5Ff45D31aaCE6bCD3d426D9328cea01;\\n\\n IGovernorBravo public constant GOVERNOR =\\n IGovernorBravo(0x0204Cd037B2ec03605CFdFe482D8e257C765fA1B);\\n ITimelock public constant TIMELOCK =\\n ITimelock(0x2386DC45AdDed673317eF068992F19421B481F4c);\\n\\n address public constant TEAM_MULTISIG = \\n 0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e;\\n\\n address public constant LITE =\\n 0xA0D3707c569ff8C87FA923d3823eC5D81c98Be78;\\n address public constant LITE_DSA = \\n 0x9600A48ed0f931d0c422D574e3275a90D8b22745;\\n\\n address public immutable ADDRESS_THIS;\\n \\n IstETHProtocol public constant STETH_PROTOCOL = IstETHProtocol(0x1F6B2bFDd5D1e6AdE7B17027ff5300419a56Ad6b);\\n IFluidLiquidityAdmin public constant LIQUIDITY = IFluidLiquidityAdmin(0x52Aa899454998Be5b000Ad077a46Bbe360F4e497);\\n\\n address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n constructor() {\\n ADDRESS_THIS = address(this);\\n }\\n\\n function propose(string memory description) external {\\n require(msg.sender == PROPOSER, \\\"msg.sender-not-proposer\\\");\\n\\n uint256 totalActions = 1;\\n address[] memory targets = new address[](totalActions);\\n uint256[] memory values = new uint256[](totalActions);\\n string[] memory signatures = new string[](totalActions);\\n bytes[] memory calldatas = new bytes[](totalActions);\\n\\n // Action 1: call executePayload on timelock contract to execute payload related to Fluid\\n targets[0] = address(TIMELOCK);\\n values[0] = 0;\\n signatures[0] = \\\"executePayload(address,string,bytes)\\\";\\n calldatas[0] = abi.encode(ADDRESS_THIS, \\\"execute()\\\", abi.encode());\\n\\n uint256 proposedId = GOVERNOR.propose(\\n targets,\\n values,\\n signatures,\\n calldatas,\\n description\\n );\\n\\n require(proposedId == PROPOSAL_ID, \\\"PROPOSAL_IS_NOT_SAME\\\");\\n }\\n\\n function execute() external {\\n require(address(this) == address(TIMELOCK), \\\"not-valid-caller\\\");\\n\\n // Action 1: list stETH Protocol in Liquidity Layer with max debt ceiling of 5k ETH and base debt ceiling of 5k ETH\\n action1();\\n\\n // Action 2: initialize owner on stETH protocol as governance address\\n action2();\\n\\n // Action 3: Set Max LTV as 93%.\\n action3();\\n\\n // Action 4: Allow Lite DSA as user on stETH Protocol\\n action4();\\n\\n // Action 5: Set Team Avocado Multisig as guardian\\n action5();\\n }\\n\\n function verifyProposal() external view {}\\n\\n /***********************************|\\n | Proposal Payload Actions |\\n |__________________________________*/\\n\\n /// @notice Action 1: list stETH Protocol in Liquidity Layer with max debt ceiling of 5k ETH and base debt ceiling of 5k ETH\\n function action1() internal {\\n AdminModuleStructs.UserBorrowConfig[] memory configs_ = new AdminModuleStructs.UserBorrowConfig[](1);\\n \\n configs_[0] = AdminModuleStructs.UserBorrowConfig({\\n user: address(STETH_PROTOCOL),\\n token: ETH_ADDRESS,\\n mode: 1,\\n expandPercent: 0,\\n expandDuration: 1,\\n baseDebtCeiling: 5000 * 1e18,\\n maxDebtCeiling: 5000 * 1e18\\n });\\n\\n LIQUIDITY.updateUserBorrowConfigs(configs_);\\n }\\n\\n /// @notice Action 2: initialize owner on stETH protocol as governance address\\n function action2() internal {\\n STETH_PROTOCOL.initialize(address(TIMELOCK));\\n }\\n\\n /// @notice Action 3: Set Max LTV as 93%.\\n function action3() internal {\\n STETH_PROTOCOL.setMaxLTV(9300);\\n }\\n\\n /// @notice Action 4: Allow Lite DSA as user on stETH Protocol\\n function action4() internal {\\n STETH_PROTOCOL.setUserAllowed(LITE_DSA, true);\\n }\\n\\n /// @notice Action 5: Set Team Avocado Multisig as guardian\\n function action5() internal {\\n STETH_PROTOCOL.setGuardian(TEAM_MULTISIG, true);\\n }\\n}\\n\",\"versionPragma\":\"^0.7.0\"}}}","address":"0x7e74cC01fa0ceF9E4CE0FcCA4A84A42a3e20AF59","bytecode":"0x60a060405234801561001057600080fd5b5030606081901b608052610d426100366000398061048352806105c25250610d426000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636dc0ae221161008c578063aa98df3911610066578063aa98df3914610164578063b788f3a114610177578063bffa7f0f1461017f578063cc025f7c14610187576100ea565b80636dc0ae221461014c5780637aadef8b14610154578063a734f06e1461015c576100ea565b80631e4a1a8c116100c85780631e4a1a8c1461012a5780632861c7d114610132578063614619541461013a57806366760d7d14610144576100ea565b80630680f417146100ef5780630bc9136e1461010d5780631cbd367e14610122575b600080fd5b6100f761018f565b6040516101049190610a99565b60405180910390f35b6101156101a7565b6040516101049190610cdf565b6100f76101ac565b6100f76101c4565b6100f76101dc565b6101426101f4565b005b610142610258565b6100f761025a565b6100f7610272565b6100f761028a565b6101426101723660046108c8565b6102a2565b6100f7610590565b6100f76105a8565b6100f76105c0565b73a0d3707c569ff8c87fa923d3823ec5d81c98be7881565b600981565b739600a48ed0f931d0c422d574e3275a90d8b2274581565b731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b81565b7352aa899454998be5b000ad077a46bbe360f4e49781565b30732386dc45added673317ef068992f19421b481f4c146102305760405162461bcd60e51b815260040161022790610cb5565b60405180910390fd5b6102386105e4565b610240610722565b6102486107a1565b6102506107da565b610258610828565b565b730204cd037b2ec03605cfdfe482d8e257c765fa1b81565b732386dc45added673317ef068992f19421b481f4c81565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3373a45f7bd6a5ff45d31aace6bcd3d426d9328cea01146102d55760405162461bcd60e51b815260040161022790610c50565b604080516001808252818301909252606090826020808301908036833701905050905060608267ffffffffffffffff8111801561031157600080fd5b5060405190808252806020026020018201604052801561033b578160200160208202803683370190505b50905060608367ffffffffffffffff8111801561035757600080fd5b5060405190808252806020026020018201604052801561038b57816020015b60608152602001906001900390816103765790505b50905060608467ffffffffffffffff811180156103a757600080fd5b506040519080825280602002602001820160405280156103db57816020015b60608152602001906001900390816103c65790505b509050732386dc45added673317ef068992f19421b481f4c8460008151811061040057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008360008151811061042f57fe5b602002602001018181525050604051806060016040528060248152602001610ce9602491398260008151811061046157fe5b602090810291909101810191909152604080516000815291820181526104aa917f0000000000000000000000000000000000000000000000000000000000000000918101610ac8565b604051602081830303815290604052816000815181106104c657fe5b6020908102919091010152604051636d4ab48d60e11b8152600090730204cd037b2ec03605cfdfe482d8e257c765fa1b9063da95691a906105139088908890889088908e90600401610b11565b602060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610565919061095d565b9050600981146105875760405162461bcd60e51b815260040161022790610c87565b50505050505050565b734f6f977acdd1177dcd81ab83074855ecb9c2d49e81565b73a45f7bd6a5ff45d31aace6bcd3d426d9328cea0181565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001808252818301909252606091816020015b610603610876565b8152602001906001900390816105fb5790505090506040518060e00160405280731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b6001600160a01b0316815260200173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001600160ff168152602001600081526020016001815260200169010f0cf064dd59200000815260200169010f0cf064dd59200000815250816000815181106106ac57fe5b602090810291909101015260405162dc47c360e11b81527352aa899454998be5b000ad077a46bbe360f4e497906301b88f86906106ed908490600401610bb0565b600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b5050505050565b60405163189acdbd60e31b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063c4d66de89061076d90732386dc45added673317ef068992f19421b481f4c90600401610a99565b600060405180830381600087803b15801561078757600080fd5b505af115801561079b573d6000803e3d6000fd5b50505050565b6040516351fa075360e11b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063a3f40ea69061076d9061245490600401610c41565b60405163d1a81a8d60e01b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063d1a81a8d9061076d90739600a48ed0f931d0c422d574e3275a90d8b2274590600190600401610aad565b6040516315c50e2d60e11b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b90632b8a1c5a9061076d90734f6f977acdd1177dcd81ab83074855ecb9c2d49e90600190600401610aad565b6040518060e0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b600060208083850312156108da578182fd5b823567ffffffffffffffff808211156108f1578384fd5b818501915085601f830112610904578384fd5b81358181111561091057fe5b604051601f8201601f191681018501838111828210171561092d57fe5b6040528181528382018501881015610943578586fd5b818585018683013790810190930193909352509392505050565b60006020828403121561096e578081fd5b5051919050565b60008282518085526020808601955080818302840101818601855b848110156109be57601f198684030189526109ac838351610a4e565b98840198925090830190600101610990565b5090979650505050505050565b60008282518085526020808601955080818302840101818601855b848110156109be57601f19868403018952610a02838351610a4e565b988401989250908301906001016109e6565b6000815180845260208085019450808401835b83811015610a4357815187529582019590820190600101610a27565b509495945050505050565b60008151808452815b81811015610a7357602081850181015186830182015201610a57565b81811115610a845782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b600060018060a01b038416825260606020830152600960608301526865786563757465282960b81b608083015260a06040830152610b0960a0830184610a4e565b949350505050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015610b535781516001600160a01b031684529284019290840190600101610b2e565b50505083810382850152610b678189610a14565b9150508281036040840152610b7c81876109cb565b90508281036060840152610b908186610975565b90508281036080840152610ba48185610a4e565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610c3457815180516001600160a01b0390811686528782015116878601528581015160ff1686860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610bcd565b5091979650505050505050565b61ffff91909116815260200190565b60208082526017908201527f6d73672e73656e6465722d6e6f742d70726f706f736572000000000000000000604082015260600190565b60208082526014908201527350524f504f53414c5f49535f4e4f545f53414d4560601b604082015260600190565b60208082526010908201526f3737ba16bb30b634b216b1b0b63632b960811b604082015260600190565b9081526020019056fe657865637574655061796c6f616428616464726573732c737472696e672c627974657329a264697066735822122085213f38434f843209a9ba0a2faa85045f2b4d423042a10e0d0733d7c79db9a564736f6c63430007030033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636dc0ae221161008c578063aa98df3911610066578063aa98df3914610164578063b788f3a114610177578063bffa7f0f1461017f578063cc025f7c14610187576100ea565b80636dc0ae221461014c5780637aadef8b14610154578063a734f06e1461015c576100ea565b80631e4a1a8c116100c85780631e4a1a8c1461012a5780632861c7d114610132578063614619541461013a57806366760d7d14610144576100ea565b80630680f417146100ef5780630bc9136e1461010d5780631cbd367e14610122575b600080fd5b6100f761018f565b6040516101049190610a99565b60405180910390f35b6101156101a7565b6040516101049190610cdf565b6100f76101ac565b6100f76101c4565b6100f76101dc565b6101426101f4565b005b610142610258565b6100f761025a565b6100f7610272565b6100f761028a565b6101426101723660046108c8565b6102a2565b6100f7610590565b6100f76105a8565b6100f76105c0565b73a0d3707c569ff8c87fa923d3823ec5d81c98be7881565b600981565b739600a48ed0f931d0c422d574e3275a90d8b2274581565b731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b81565b7352aa899454998be5b000ad077a46bbe360f4e49781565b30732386dc45added673317ef068992f19421b481f4c146102305760405162461bcd60e51b815260040161022790610cb5565b60405180910390fd5b6102386105e4565b610240610722565b6102486107a1565b6102506107da565b610258610828565b565b730204cd037b2ec03605cfdfe482d8e257c765fa1b81565b732386dc45added673317ef068992f19421b481f4c81565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3373a45f7bd6a5ff45d31aace6bcd3d426d9328cea01146102d55760405162461bcd60e51b815260040161022790610c50565b604080516001808252818301909252606090826020808301908036833701905050905060608267ffffffffffffffff8111801561031157600080fd5b5060405190808252806020026020018201604052801561033b578160200160208202803683370190505b50905060608367ffffffffffffffff8111801561035757600080fd5b5060405190808252806020026020018201604052801561038b57816020015b60608152602001906001900390816103765790505b50905060608467ffffffffffffffff811180156103a757600080fd5b506040519080825280602002602001820160405280156103db57816020015b60608152602001906001900390816103c65790505b509050732386dc45added673317ef068992f19421b481f4c8460008151811061040057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008360008151811061042f57fe5b602002602001018181525050604051806060016040528060248152602001610ce9602491398260008151811061046157fe5b602090810291909101810191909152604080516000815291820181526104aa917f0000000000000000000000000000000000000000000000000000000000000000918101610ac8565b604051602081830303815290604052816000815181106104c657fe5b6020908102919091010152604051636d4ab48d60e11b8152600090730204cd037b2ec03605cfdfe482d8e257c765fa1b9063da95691a906105139088908890889088908e90600401610b11565b602060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610565919061095d565b9050600981146105875760405162461bcd60e51b815260040161022790610c87565b50505050505050565b734f6f977acdd1177dcd81ab83074855ecb9c2d49e81565b73a45f7bd6a5ff45d31aace6bcd3d426d9328cea0181565b7f000000000000000000000000000000000000000000000000000000000000000081565b604080516001808252818301909252606091816020015b610603610876565b8152602001906001900390816105fb5790505090506040518060e00160405280731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b6001600160a01b0316815260200173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168152602001600160ff168152602001600081526020016001815260200169010f0cf064dd59200000815260200169010f0cf064dd59200000815250816000815181106106ac57fe5b602090810291909101015260405162dc47c360e11b81527352aa899454998be5b000ad077a46bbe360f4e497906301b88f86906106ed908490600401610bb0565b600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b5050505050565b60405163189acdbd60e31b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063c4d66de89061076d90732386dc45added673317ef068992f19421b481f4c90600401610a99565b600060405180830381600087803b15801561078757600080fd5b505af115801561079b573d6000803e3d6000fd5b50505050565b6040516351fa075360e11b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063a3f40ea69061076d9061245490600401610c41565b60405163d1a81a8d60e01b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b9063d1a81a8d9061076d90739600a48ed0f931d0c422d574e3275a90d8b2274590600190600401610aad565b6040516315c50e2d60e11b8152731f6b2bfdd5d1e6ade7b17027ff5300419a56ad6b90632b8a1c5a9061076d90734f6f977acdd1177dcd81ab83074855ecb9c2d49e90600190600401610aad565b6040518060e0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b600060208083850312156108da578182fd5b823567ffffffffffffffff808211156108f1578384fd5b818501915085601f830112610904578384fd5b81358181111561091057fe5b604051601f8201601f191681018501838111828210171561092d57fe5b6040528181528382018501881015610943578586fd5b818585018683013790810190930193909352509392505050565b60006020828403121561096e578081fd5b5051919050565b60008282518085526020808601955080818302840101818601855b848110156109be57601f198684030189526109ac838351610a4e565b98840198925090830190600101610990565b5090979650505050505050565b60008282518085526020808601955080818302840101818601855b848110156109be57601f19868403018952610a02838351610a4e565b988401989250908301906001016109e6565b6000815180845260208085019450808401835b83811015610a4357815187529582019590820190600101610a27565b509495945050505050565b60008151808452815b81811015610a7357602081850181015186830182015201610a57565b81811115610a845782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039290921682521515602082015260400190565b600060018060a01b038416825260606020830152600960608301526865786563757465282960b81b608083015260a06040830152610b0960a0830184610a4e565b949350505050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015610b535781516001600160a01b031684529284019290840190600101610b2e565b50505083810382850152610b678189610a14565b9150508281036040840152610b7c81876109cb565b90508281036060840152610b908186610975565b90508281036080840152610ba48185610a4e565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610c3457815180516001600160a01b0390811686528782015116878601528581015160ff1686860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101610bcd565b5091979650505050505050565b61ffff91909116815260200190565b60208082526017908201527f6d73672e73656e6465722d6e6f742d70726f706f736572000000000000000000604082015260600190565b60208082526014908201527350524f504f53414c5f49535f4e4f545f53414d4560601b604082015260600190565b60208082526010908201526f3737ba16bb30b634b216b1b0b63632b960811b604082015260600190565b9081526020019056fe657865637574655061796c6f616428616464726573732c737472696e672c627974657329a264697066735822122085213f38434f843209a9ba0a2faa85045f2b4d423042a10e0d0733d7c79db9a564736f6c63430007030033","abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESS_THIS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNOR","outputs":[{"internalType":"contract IGovernorBravo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY","outputs":[{"internalType":"contract IFluidLiquidityAdmin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LITE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LITE_DSA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STETH_PROTOCOL","outputs":[{"internalType":"contract IstETHProtocol","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_MULTISIG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK","outputs":[{"internalType":"contract ITimelock","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"verifyProposal","outputs":[],"stateMutability":"view","type":"function"}]} \ No newline at end of file diff --git a/scripts/deployIGP10.js b/scripts/deployIGP10.js new file mode 100644 index 0000000..97ee594 --- /dev/null +++ b/scripts/deployIGP10.js @@ -0,0 +1,22 @@ +const hre = require("hardhat"); +const { ethers } = hre; + +async function main() { + const PayloadIGP10 = await ethers.getContractFactory("PayloadIGP10") + const payloadIGP10 = await PayloadIGP10.deploy() + await payloadIGP10.deployed() + + console.log("PayloadIGP10: ", payloadIGP10.address) + + await hre.run("verify:verify", { + address: payloadIGP10.address, + constructorArguments: [] + }) +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployIGP9.js b/scripts/deployIGP9.js new file mode 100644 index 0000000..6a10992 --- /dev/null +++ b/scripts/deployIGP9.js @@ -0,0 +1,22 @@ +const hre = require("hardhat"); +const { ethers } = hre; + +async function main() { + const PayloadIGP9 = await ethers.getContractFactory("PayloadIGP9") + const payloadIGP9 = await PayloadIGP9.deploy() + await payloadIGP9.deployed() + + console.log("PayloadIGP9: ", payloadIGP9.address) + + await hre.run("verify:verify", { + address: payloadIGP9.address, + constructorArguments: [] + }) +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + });