diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a15a3f72fa..07b2cb6887 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -44,8 +44,8 @@ jobs: - run: yarn lint - run: pip3 install solc-select slither-analyzer - run: pip3 install slitherin - - run: solc-select install 0.8.19 - - run: solc-select use 0.8.19 + - run: solc-select install 0.8.28 + - run: solc-select use 0.8.28 - run: yarn slither plugin-unit-tests: diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index 7e50e1dc38..2d13a3bac0 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -10166,6 +10166,6846 @@ } } } + }, + "b45a04d1949470d620ed7f1c332711a21ef29c353c9d3b5f00df173a400a0395": { + "address": "0x090e88BC794cCe2d622738cAFb5b8BA0cAe37661", + "txHash": "0x15be7816e42b4b88e1b4f7ed56eac7586ef4a921d6813d2bb27f0d2cc0670385", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoleData)69_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:57" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" + }, + { + "label": "longFreezes", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_address,t_uint256)", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:36" + }, + { + "label": "unfreezeAt", + "offset": 0, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:38" + }, + { + "label": "shortFreeze", + "offset": 6, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:39" + }, + { + "label": "longFreeze", + "offset": 12, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:40" + }, + { + "label": "tradingPaused", + "offset": 18, + "slot": "152", + "type": "t_bool", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:45", + "renamedFrom": "paused" + }, + { + "label": "issuancePaused", + "offset": 19, + "slot": "152", + "type": "t_bool", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:46" + }, + { + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)48_storage", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:225" + }, + { + "label": "rToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IRToken)15534", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:33" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "202", + "type": "t_contract(IStRSR)15898", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:42" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "203", + "type": "t_contract(IAssetRegistry)13821", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:51" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "204", + "type": "t_contract(IBasketHandler)14200", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:60" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "205", + "type": "t_contract(IBackingManager)13928", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:69" + }, + { + "label": "distributor", + "offset": 0, + "slot": "206", + "type": "t_contract(IDistributor)14758", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:78" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "207", + "type": "t_contract(IRevenueTrader)15647", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:87" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "208", + "type": "t_contract(IRevenueTrader)15647", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:96" + }, + { + "label": "furnace", + "offset": 0, + "slot": "209", + "type": "t_contract(IFurnace)14819", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:105" + }, + { + "label": "broker", + "offset": 0, + "slot": "210", + "type": "t_contract(IBroker)14385", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:114" + }, + { + "label": "isComponent", + "offset": 0, + "slot": "211", + "type": "t_mapping(t_address,t_bool)", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:124" + }, + { + "label": "__gap", + "offset": 0, + "slot": "212", + "type": "t_array(t_uint256)39_storage", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:149" + }, + { + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "301", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "rsr", + "offset": 0, + "slot": "351", + "type": "t_contract(IERC20)5493", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:32" + }, + { + "label": "versionRegistry", + "offset": 0, + "slot": "352", + "type": "t_contract(VersionRegistry)27828", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:33" + }, + { + "label": "assetPluginRegistry", + "offset": 0, + "slot": "353", + "type": "t_contract(AssetPluginRegistry)27277", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:34" + }, + { + "label": "daoFeeRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(DAOFeeRegistry)27528", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:35" + }, + { + "label": "__gap", + "offset": 0, + "slot": "355", + "type": "t_array(t_uint256)46_storage", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:190" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)39_storage": { + "label": "uint256[39]", + "numberOfBytes": "1248" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(AssetPluginRegistry)27277": { + "label": "contract AssetPluginRegistry", + "numberOfBytes": "20" + }, + "t_contract(DAOFeeRegistry)27528": { + "label": "contract DAOFeeRegistry", + "numberOfBytes": "20" + }, + "t_contract(IAssetRegistry)13821": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)13928": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)14200": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IBroker)14385": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)14758": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)5493": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)14819": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IRToken)15534": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)15647": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)15898": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_contract(VersionRegistry)27828": { + "label": "contract VersionRegistry", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)69_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(RoleData)69_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "0af3a1317d69d5693cd757fc9103e3f99a89b1f19cbb2d4b64e3fc89f1971235": { + "address": "0x43FEb1Ff2dA2539AEC1B45DB293b2a4FE3e3497c", + "txHash": "0x973d6762441c6c3c228dff249841d0bce902b3f1627ecf1ca541ccf0dea83083", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "201", + "type": "t_contract(IBasketHandler)30348", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:19" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "202", + "type": "t_contract(IBackingManager)30076", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:20" + }, + { + "label": "_erc20s", + "offset": 0, + "slot": "203", + "type": "t_struct(AddressSet)22715_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:23" + }, + { + "label": "assets", + "offset": 0, + "slot": "205", + "type": "t_mapping(t_contract(IERC20)13972,t_contract(IAsset)29692)", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:26" + }, + { + "label": "lastRefresh", + "offset": 0, + "slot": "206", + "type": "t_uint48", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:30" + }, + { + "label": "__gap", + "offset": 0, + "slot": "207", + "type": "t_array(t_uint256)46_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:273" + } + ], + "types": { + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAsset)29692": { + "label": "contract IAsset", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)30076": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)30348": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)13972,t_contract(IAsset)29692)": { + "label": "mapping(contract IERC20 => contract IAsset)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)22715_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)22400_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)22400_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "6d1cbfa4690c6218fe8c011ee787b10f53c6e2e269177beb5930c5ba16ade03d": { + "address": "0x3e6Cd7C1Ae9e575552A1AAd774017A6a6345AD21", + "txHash": "0xd2d5345d0cb806a666b699e315cb0fdb73998e36dffab47b7f1837b018527f6a", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_status", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "broker", + "offset": 0, + "slot": "251", + "type": "t_contract(IBroker)30533", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:29" + }, + { + "label": "trades", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32529)", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:32" + }, + { + "label": "tradesOpen", + "offset": 0, + "slot": "253", + "type": "t_uint48", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:33" + }, + { + "label": "maxTradeSlippage", + "offset": 6, + "slot": "253", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:36" + }, + { + "label": "minTradeVolume", + "offset": 0, + "slot": "254", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:37" + }, + { + "label": "tradesNonce", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "256", + "type": "t_array(t_uint256)45_storage", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:185" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "301", + "type": "t_contract(IAssetRegistry)29969", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:25" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "302", + "type": "t_contract(IBasketHandler)30348", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:26" + }, + { + "label": "distributor", + "offset": 0, + "slot": "303", + "type": "t_contract(IDistributor)30955", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:27" + }, + { + "label": "rToken", + "offset": 0, + "slot": "304", + "type": "t_contract(IRToken)31994", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:28" + }, + { + "label": "rsr", + "offset": 0, + "slot": "305", + "type": "t_contract(IERC20)13972", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:29" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "306", + "type": "t_contract(IStRSR)32382", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:30" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "307", + "type": "t_contract(IRevenueTrader)32131", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:31" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "308", + "type": "t_contract(IRevenueTrader)32131", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:32" + }, + { + "label": "tradingDelay", + "offset": 20, + "slot": "308", + "type": "t_uint48", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:36" + }, + { + "label": "backingBuffer", + "offset": 0, + "slot": "309", + "type": "t_uint192", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:37" + }, + { + "label": "furnace", + "offset": 0, + "slot": "310", + "type": "t_contract(IFurnace)31279", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:40" + }, + { + "label": "tradeEnd", + "offset": 0, + "slot": "311", + "type": "t_mapping(t_enum(TradeKind)30411,t_uint48)", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:41" + }, + { + "label": "tokensOut", + "offset": 0, + "slot": "312", + "type": "t_mapping(t_contract(IERC20)13972,t_uint192)", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "313", + "type": "t_array(t_uint256)38_storage", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:356" + } + ], + "types": { + "t_array(t_uint256)38_storage": { + "label": "uint256[38]", + "numberOfBytes": "1216" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IAssetRegistry)29969": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)30348": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IBroker)30533": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)30955": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31279": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)31994": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)32131": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)32382": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32529": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_enum(TradeKind)30411": { + "label": "enum TradeKind", + "members": [ + "DUTCH_AUCTION", + "BATCH_AUCTION" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32529)": { + "label": "mapping(contract IERC20 => contract ITrade)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)13972,t_uint192)": { + "label": "mapping(contract IERC20 => uint192)", + "numberOfBytes": "32" + }, + "t_mapping(t_enum(TradeKind)30411,t_uint48)": { + "label": "mapping(enum TradeKind => uint48)", + "numberOfBytes": "32" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "be245dacaa6afbf1c938eb4634ab23d36cf4a45e75f81820b7f49eee2fb40b4a": { + "address": "0x2B3C7516564261fFF2190f5496C53C1155790857", + "txHash": "0xa1cae3f29b75f3df0a7b70757df7c3d14d28b0a6667c1a60e78c75494b54eec9", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)15297", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "201", + "type": "t_contract(IAssetRegistry)13821", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:38" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "202", + "type": "t_contract(IBackingManager)13928", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:39" + }, + { + "label": "rsr", + "offset": 0, + "slot": "203", + "type": "t_contract(IERC20)5493", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:40" + }, + { + "label": "rToken", + "offset": 0, + "slot": "204", + "type": "t_contract(IRToken)15534", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:41" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "205", + "type": "t_contract(IStRSR)15898", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:42" + }, + { + "label": "config", + "offset": 0, + "slot": "206", + "type": "t_struct(BasketConfig)22540_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:46" + }, + { + "label": "basket", + "offset": 0, + "slot": "210", + "type": "t_struct(Basket)22550_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:50" + }, + { + "label": "nonce", + "offset": 0, + "slot": "212", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:52" + }, + { + "label": "timestamp", + "offset": 6, + "slot": "212", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:53" + }, + { + "label": "disabled", + "offset": 12, + "slot": "212", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:57" + }, + { + "label": "_targetNames", + "offset": 0, + "slot": "213", + "type": "t_struct(Bytes32Set)12914_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:63" + }, + { + "label": "_newBasket", + "offset": 0, + "slot": "215", + "type": "t_struct(Basket)22550_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:64" + }, + { + "label": "warmupPeriod", + "offset": 0, + "slot": "217", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:70" + }, + { + "label": "lastStatusTimestamp", + "offset": 6, + "slot": "217", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:74" + }, + { + "label": "lastStatus", + "offset": 12, + "slot": "217", + "type": "t_enum(CollateralStatus)13594", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:75" + }, + { + "label": "basketHistory", + "offset": 0, + "slot": "218", + "type": "t_mapping(t_uint48,t_struct(Basket)22550_storage)", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:81" + }, + { + "label": "_targetAmts", + "offset": 0, + "slot": "219", + "type": "t_struct(Bytes32ToUintMap)12496_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:84" + }, + { + "label": "reweightable", + "offset": 0, + "slot": "222", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:90" + }, + { + "label": "lastCollateralized", + "offset": 1, + "slot": "222", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:92" + }, + { + "label": "enableIssuancePremium", + "offset": 7, + "slot": "222", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:97" + }, + { + "label": "__gap", + "offset": 0, + "slot": "223", + "type": "t_array(t_uint256)36_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:789" + } + ], + "types": { + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)5493)dyn_storage": { + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)36_storage": { + "label": "uint256[36]", + "numberOfBytes": "1152" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)13821": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)13928": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)5493": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)15297": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)15534": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)15898": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_enum(CollateralStatus)13594": { + "label": "enum CollateralStatus", + "members": [ + "SOUND", + "IFFY", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_bytes32)": { + "label": "mapping(bytes32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(BackupConfig)22520_storage)": { + "label": "mapping(bytes32 => struct BackupConfig)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)5493,t_bytes32)": { + "label": "mapping(contract IERC20 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)5493,t_uint192)": { + "label": "mapping(contract IERC20 => uint192)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint48,t_struct(Basket)22550_storage)": { + "label": "mapping(uint48 => struct Basket)", + "numberOfBytes": "32" + }, + "t_struct(BackupConfig)22520_storage": { + "label": "struct BackupConfig", + "members": [ + { + "label": "max", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)5493)dyn_storage", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Basket)22550_storage": { + "label": "struct Basket", + "members": [ + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)5493)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "refAmts", + "type": "t_mapping(t_contract(IERC20)5493,t_uint192)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(BasketConfig)22540_storage": { + "label": "struct BasketConfig", + "members": [ + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)5493)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "targetAmts", + "type": "t_mapping(t_contract(IERC20)5493,t_uint192)", + "offset": 0, + "slot": "1" + }, + { + "label": "targetNames", + "type": "t_mapping(t_contract(IERC20)5493,t_bytes32)", + "offset": 0, + "slot": "2" + }, + { + "label": "backups", + "type": "t_mapping(t_bytes32,t_struct(BackupConfig)22520_storage)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Bytes32Set)12914_storage": { + "label": "struct EnumerableSet.Bytes32Set", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)12720_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Bytes32ToBytes32Map)11467_storage": { + "label": "struct EnumerableMap.Bytes32ToBytes32Map", + "members": [ + { + "label": "_keys", + "type": "t_struct(Bytes32Set)12914_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_values", + "type": "t_mapping(t_bytes32,t_bytes32)", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Bytes32ToUintMap)12496_storage": { + "label": "struct EnumerableMap.Bytes32ToUintMap", + "members": [ + { + "label": "_inner", + "type": "t_struct(Bytes32ToBytes32Map)11467_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Set)12720_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "d7dd9605945c6ed5d9d6337f1c6cecb2e40a8c87a78ee88d82c623e056aa5fd6": { + "address": "0x9cE1E9c0595796E897d4596cBeaC4046bBC7E095", + "txHash": "0xe6839fb9a272267075d3af196f5a1cafee5271ccdba848a5c3536d0ac9bea440", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "201", + "type": "t_contract(IBackingManager)30076", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:31" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "202", + "type": "t_contract(IRevenueTrader)32131", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:32" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "203", + "type": "t_contract(IRevenueTrader)32131", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:33" + }, + { + "label": "batchTradeImplementation", + "offset": 0, + "slot": "204", + "type": "t_contract(ITrade)32529", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:37", + "renamedFrom": "tradeImplementation" + }, + { + "label": "gnosis_DEPRECATED", + "offset": 0, + "slot": "205", + "type": "t_contract(IGnosis)31379", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:41", + "renamedFrom": "gnosis" + }, + { + "label": "batchAuctionLength", + "offset": 20, + "slot": "205", + "type": "t_uint48", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:45", + "renamedFrom": "auctionLength" + }, + { + "label": "batchTradeDisabled", + "offset": 26, + "slot": "205", + "type": "t_bool", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:51", + "renamedFrom": "disabled" + }, + { + "label": "trades", + "offset": 0, + "slot": "206", + "type": "t_mapping(t_address,t_bool)", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:54" + }, + { + "label": "dutchTradeImplementation", + "offset": 0, + "slot": "207", + "type": "t_contract(ITrade)32529", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:59" + }, + { + "label": "dutchAuctionLength", + "offset": 20, + "slot": "207", + "type": "t_uint48", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:62" + }, + { + "label": "dutchTradeDisabled", + "offset": 0, + "slot": "208", + "type": "t_mapping(t_contract(IERC20Metadata)14624,t_bool)", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:65" + }, + { + "label": "rToken", + "offset": 0, + "slot": "209", + "type": "t_contract(IRToken)31994", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:69" + }, + { + "label": "trustedFillerRegistry", + "offset": 0, + "slot": "210", + "type": "t_contract(ITrustedFillerRegistry)23118", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:73" + }, + { + "label": "trustedFillerEnabled", + "offset": 20, + "slot": "210", + "type": "t_bool", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:74" + }, + { + "label": "__gap", + "offset": 0, + "slot": "211", + "type": "t_array(t_uint256)40_storage", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:329" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)40_storage": { + "label": "uint256[40]", + "numberOfBytes": "1280" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IBackingManager)30076": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20Metadata)14624": { + "label": "contract IERC20Metadata", + "numberOfBytes": "20" + }, + "t_contract(IGnosis)31379": { + "label": "contract IGnosis", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)31994": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)32131": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32529": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_contract(ITrustedFillerRegistry)23118": { + "label": "contract ITrustedFillerRegistry", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20Metadata)14624,t_bool)": { + "label": "mapping(contract IERC20Metadata => bool)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "99a946a000be45875d9260e29ee20aae2753567d83c2a6551d1846644cd08a27": { + "address": "0xe569926D0FAAFe00bA6Ee696b8c61EF3E9201151", + "txHash": "0x5c4541843d0b833d3c3eeefb908dc4872d1b2d1d887c75a6431803b69188b279", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "destinations", + "offset": 0, + "slot": "201", + "type": "t_struct(AddressSet)22715_storage", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:17" + }, + { + "label": "distribution", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_address,t_struct(RevenueShare)30882_storage)", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:18" + }, + { + "label": "rsr", + "offset": 0, + "slot": "204", + "type": "t_contract(IERC20)13972", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:37" + }, + { + "label": "rToken", + "offset": 0, + "slot": "205", + "type": "t_contract(IERC20)13972", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:38" + }, + { + "label": "furnace", + "offset": 0, + "slot": "206", + "type": "t_contract(IFurnace)31279", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:39" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "207", + "type": "t_contract(IStRSR)32382", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:40" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "208", + "type": "t_address", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:41" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "209", + "type": "t_address", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:42" + }, + { + "label": "__gap", + "offset": 0, + "slot": "210", + "type": "t_array(t_uint256)44_storage", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:290" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31279": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)32382": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(RevenueShare)30882_storage)": { + "label": "mapping(address => struct RevenueShare)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)22715_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)22400_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RevenueShare)30882_storage": { + "label": "struct RevenueShare", + "members": [ + { + "label": "rTokenDist", + "type": "t_uint16", + "offset": 0, + "slot": "0" + }, + { + "label": "rsrDist", + "type": "t_uint16", + "offset": 2, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Set)22400_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "f108be48bfed3b676ab292c1ea9e77a7598b768a84a0255f79deb075f7642b70": { + "address": "0xA8Da82f29581250c5613fA8c2857191EFC65A6e9", + "txHash": "0x7a31d06934cf1361f345cf6ca85488d7e6c0dbf27842e8642559bec8525e9aaf", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "rToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IRToken)31994", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:17" + }, + { + "label": "ratio", + "offset": 0, + "slot": "202", + "type": "t_uint192", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:20" + }, + { + "label": "lastPayout", + "offset": 24, + "slot": "202", + "type": "t_uint48", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:23" + }, + { + "label": "lastPayoutBal", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:24" + }, + { + "label": "__gap", + "offset": 0, + "slot": "204", + "type": "t_array(t_uint256)47_storage", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:97" + } + ], + "types": { + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)31994": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "380bf1ba991ad2592e3de5592052e6963ba63977e5881a1c1ec966d9d76ac51c": { + "address": "0xE5FEe6464F90E38e54c68C63AaDF7120b534Aa6c", + "txHash": "0xfc62a188c1c50a496b56cec89a9e12fb27319bd4321452d27ede600609c8f4eb", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_status", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "broker", + "offset": 0, + "slot": "251", + "type": "t_contract(IBroker)30533", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:29" + }, + { + "label": "trades", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32529)", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:32" + }, + { + "label": "tradesOpen", + "offset": 0, + "slot": "253", + "type": "t_uint48", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:33" + }, + { + "label": "maxTradeSlippage", + "offset": 6, + "slot": "253", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:36" + }, + { + "label": "minTradeVolume", + "offset": 0, + "slot": "254", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:37" + }, + { + "label": "tradesNonce", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "256", + "type": "t_array(t_uint256)45_storage", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:185" + }, + { + "label": "tokenToBuy", + "offset": 0, + "slot": "301", + "type": "t_contract(IERC20)13972", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:19" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "302", + "type": "t_contract(IAssetRegistry)29969", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:20" + }, + { + "label": "distributor", + "offset": 0, + "slot": "303", + "type": "t_contract(IDistributor)30955", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:21" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "304", + "type": "t_contract(IBackingManager)30076", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:22" + }, + { + "label": "furnace", + "offset": 0, + "slot": "305", + "type": "t_contract(IFurnace)31279", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:23" + }, + { + "label": "rToken", + "offset": 0, + "slot": "306", + "type": "t_contract(IRToken)31994", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:24" + }, + { + "label": "rsr", + "offset": 0, + "slot": "307", + "type": "t_contract(IERC20)13972", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:25" + }, + { + "label": "__gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)43_storage", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:206" + } + ], + "types": { + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IAssetRegistry)29969": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)30076": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBroker)30533": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)30955": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31279": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)31994": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32529": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32529)": { + "label": "mapping(contract IERC20 => contract ITrade)", + "numberOfBytes": "32" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "651fee07158d690f4e26a088e4cb70032f2615bc4c5c0c5e8efdd18186ab15f2": { + "address": "0xd1e0A59953AE2Ae13ac31748dFd6fFfaD774AE04", + "txHash": "0xd9ffaf0572e8e60367389e8553a06fd5a20608e92bc04764b52a5c29021db81a", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_balances", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "251", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "252", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "254", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "_nonces", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_struct(Counter)6665_storage)", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:37" + }, + { + "label": "_PERMIT_TYPEHASH_DEPRECATED_SLOT", + "offset": 0, + "slot": "304", + "type": "t_bytes32", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:51", + "renamedFrom": "_PERMIT_TYPEHASH" + }, + { + "label": "__gap", + "offset": 0, + "slot": "305", + "type": "t_array(t_uint256)48_storage", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:129" + }, + { + "label": "mandate", + "offset": 0, + "slot": "353", + "type": "t_string_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:45" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IAssetRegistry)29969", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:48" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "355", + "type": "t_contract(IBasketHandler)30348", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:49" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "356", + "type": "t_contract(IBackingManager)30076", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:50" + }, + { + "label": "furnace", + "offset": 0, + "slot": "357", + "type": "t_contract(IFurnace)31279", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:51" + }, + { + "label": "basketsNeeded", + "offset": 0, + "slot": "358", + "type": "t_uint192", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:56" + }, + { + "label": "issuanceThrottle", + "offset": 0, + "slot": "359", + "type": "t_struct(Throttle)35173_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:59" + }, + { + "label": "redemptionThrottle", + "offset": 0, + "slot": "363", + "type": "t_struct(Throttle)35173_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:60" + }, + { + "label": "__gap", + "offset": 0, + "slot": "367", + "type": "t_array(t_uint256)42_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:611" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)42_storage": { + "label": "uint256[42]", + "numberOfBytes": "1344" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)29969": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)30076": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)30348": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31279": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Counter)6665_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Counter)6665_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Params)35165_storage": { + "label": "struct ThrottleLib.Params", + "members": [ + { + "label": "amtRate", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "pctRate", + "type": "t_uint192", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Throttle)35173_storage": { + "label": "struct ThrottleLib.Throttle", + "members": [ + { + "label": "params", + "type": "t_struct(Params)35165_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "lastTimestamp", + "type": "t_uint48", + "offset": 0, + "slot": "2" + }, + { + "label": "lastAvailable", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "11167e0f3237d0ebaa08be3374e979e45f618553f914a107795946b5c66d4e1c": { + "address": "0xd6D40df79C7BC1E3DC5c0d957d6da74a4860960b", + "txHash": "0x9f833ad31df814a3c7f52d58a527b5237ffc407831dee75fca397c7da8c8eae9", + "layout": { + "solcVersion": "0.8.19", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)31757", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "201", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "202", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "203", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "name", + "offset": 0, + "slot": "253", + "type": "t_string_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:45" + }, + { + "label": "symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:46" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "255", + "type": "t_contract(IAssetRegistry)29969", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:51" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "256", + "type": "t_contract(IBackingManager)30076", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:52" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "257", + "type": "t_contract(IBasketHandler)30348", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:53" + }, + { + "label": "rsr", + "offset": 0, + "slot": "258", + "type": "t_contract(IERC20)13972", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:54" + }, + { + "label": "era", + "offset": 0, + "slot": "259", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:59" + }, + { + "label": "stakes", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:63" + }, + { + "label": "totalStakes", + "offset": 0, + "slot": "261", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:64" + }, + { + "label": "stakeRSR", + "offset": 0, + "slot": "262", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:65" + }, + { + "label": "stakeRate", + "offset": 0, + "slot": "263", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:66" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "264", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:71" + }, + { + "label": "draftEra", + "offset": 0, + "slot": "265", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:76" + }, + { + "label": "draftQueues", + "offset": 0, + "slot": "266", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(CumulativeDraft)59174_storage)dyn_storage))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:84" + }, + { + "label": "firstRemainingDraft", + "offset": 0, + "slot": "267", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:85" + }, + { + "label": "totalDrafts", + "offset": 0, + "slot": "268", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:86" + }, + { + "label": "draftRSR", + "offset": 0, + "slot": "269", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:87" + }, + { + "label": "draftRate", + "offset": 0, + "slot": "270", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:88" + }, + { + "label": "_nonces", + "offset": 0, + "slot": "271", + "type": "t_mapping(t_address,t_struct(Counter)6665_storage)", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:126" + }, + { + "label": "_delegationNonces", + "offset": 0, + "slot": "272", + "type": "t_mapping(t_address,t_struct(Counter)6665_storage)", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:128" + }, + { + "label": "unstakingDelay", + "offset": 0, + "slot": "273", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:138" + }, + { + "label": "rewardRatio", + "offset": 6, + "slot": "273", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:139" + }, + { + "label": "payoutLastPaid", + "offset": 0, + "slot": "274", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:150" + }, + { + "label": "rsrRewardsAtLastPayout", + "offset": 0, + "slot": "275", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:153" + }, + { + "label": "leaked", + "offset": 0, + "slot": "276", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:159" + }, + { + "label": "lastWithdrawRefresh", + "offset": 24, + "slot": "276", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:160" + }, + { + "label": "withdrawalLeak", + "offset": 0, + "slot": "277", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:161" + }, + { + "label": "__gap", + "offset": 0, + "slot": "278", + "type": "t_array(t_uint256)28_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:1052" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "306", + "type": "t_mapping(t_address,t_address)", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:34" + }, + { + "label": "_eras", + "offset": 0, + "slot": "307", + "type": "t_array(t_struct(Checkpoint)61449_storage)dyn_storage", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:37" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "308", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(Checkpoint)61449_storage)dyn_storage))", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:41" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "309", + "type": "t_mapping(t_uint256,t_array(t_struct(Checkpoint)61449_storage)dyn_storage)", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:43" + }, + { + "label": "__gap", + "offset": 0, + "slot": "310", + "type": "t_array(t_uint256)46_storage", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:309" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Checkpoint)61449_storage)dyn_storage": { + "label": "struct StRSRP1Votes.Checkpoint[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(CumulativeDraft)59174_storage)dyn_storage": { + "label": "struct StRSRP1.CumulativeDraft[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)28_storage": { + "label": "uint256[28]", + "numberOfBytes": "896" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)29969": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)30076": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)30348": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)31757": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_struct(Checkpoint)61449_storage)dyn_storage)": { + "label": "mapping(address => struct StRSRP1Votes.Checkpoint[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_struct(CumulativeDraft)59174_storage)dyn_storage)": { + "label": "mapping(address => struct StRSRP1.CumulativeDraft[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Counter)6665_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_array(t_struct(Checkpoint)61449_storage)dyn_storage)": { + "label": "mapping(uint256 => struct StRSRP1Votes.Checkpoint[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(Checkpoint)61449_storage)dyn_storage))": { + "label": "mapping(uint256 => mapping(address => struct StRSRP1Votes.Checkpoint[]))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(CumulativeDraft)59174_storage)dyn_storage))": { + "label": "mapping(uint256 => mapping(address => struct StRSRP1.CumulativeDraft[]))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))": { + "label": "mapping(uint256 => mapping(address => mapping(address => uint256)))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Checkpoint)61449_storage": { + "label": "struct StRSRP1Votes.Checkpoint", + "members": [ + { + "label": "fromTimepoint", + "type": "t_uint48", + "offset": 0, + "slot": "0" + }, + { + "label": "val", + "type": "t_uint224", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Counter)6665_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(CumulativeDraft)59174_storage": { + "label": "struct StRSRP1.CumulativeDraft", + "members": [ + { + "label": "drafts", + "type": "t_uint176", + "offset": 0, + "slot": "0" + }, + { + "label": "availableAt", + "type": "t_uint64", + "offset": 22, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint176": { + "label": "uint176", + "numberOfBytes": "22" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint224": { + "label": "uint224", + "numberOfBytes": "28" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "12aae8fab60df5e4abca399f5797a45aa079867becf957ccfaf19baff89c347b": { + "address": "0xc5bf686CfB85786fcFfF557297D4afF8F4e15e44", + "txHash": "0x509497f08a0f817023252aaabb518937f64493265d8ea0d6ad712bfab6fe91c7", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoleData)69_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:57" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" + }, + { + "label": "longFreezes", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_address,t_uint256)", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:36" + }, + { + "label": "unfreezeAt", + "offset": 0, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:38" + }, + { + "label": "shortFreeze", + "offset": 6, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:39" + }, + { + "label": "longFreeze", + "offset": 12, + "slot": "152", + "type": "t_uint48", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:40" + }, + { + "label": "tradingPaused", + "offset": 18, + "slot": "152", + "type": "t_bool", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:45", + "renamedFrom": "paused" + }, + { + "label": "issuancePaused", + "offset": 19, + "slot": "152", + "type": "t_bool", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:46" + }, + { + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)48_storage", + "contract": "Auth", + "src": "contracts/mixins/Auth.sol:225" + }, + { + "label": "rToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IRToken)17521", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:33" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "202", + "type": "t_contract(IStRSR)17909", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:42" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "203", + "type": "t_contract(IAssetRegistry)15771", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:51" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "204", + "type": "t_contract(IBasketHandler)16151", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:60" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "205", + "type": "t_contract(IBackingManager)15879", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:69" + }, + { + "label": "distributor", + "offset": 0, + "slot": "206", + "type": "t_contract(IDistributor)16702", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:78" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "207", + "type": "t_contract(IRevenueTrader)17658", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:87" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "208", + "type": "t_contract(IRevenueTrader)17658", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:96" + }, + { + "label": "furnace", + "offset": 0, + "slot": "209", + "type": "t_contract(IFurnace)16805", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:105" + }, + { + "label": "broker", + "offset": 0, + "slot": "210", + "type": "t_contract(IBroker)16338", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:114" + }, + { + "label": "isComponent", + "offset": 0, + "slot": "211", + "type": "t_mapping(t_address,t_bool)", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:124" + }, + { + "label": "__gap", + "offset": 0, + "slot": "212", + "type": "t_array(t_uint256)39_storage", + "contract": "ComponentRegistry", + "src": "contracts/mixins/ComponentRegistry.sol:149" + }, + { + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "301", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "rsr", + "offset": 0, + "slot": "351", + "type": "t_contract(IERC20)7392", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:32" + }, + { + "label": "versionRegistry", + "offset": 0, + "slot": "352", + "type": "t_contract(VersionRegistry)36670", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:33" + }, + { + "label": "assetPluginRegistry", + "offset": 0, + "slot": "353", + "type": "t_contract(AssetPluginRegistry)36119", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:34" + }, + { + "label": "daoFeeRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(DAOFeeRegistry)36370", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:35" + }, + { + "label": "__gap", + "offset": 0, + "slot": "355", + "type": "t_array(t_uint256)46_storage", + "contract": "MainP1", + "src": "contracts/p1/Main.sol:190" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)39_storage": { + "label": "uint256[39]", + "numberOfBytes": "1248" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(AssetPluginRegistry)36119": { + "label": "contract AssetPluginRegistry", + "numberOfBytes": "20" + }, + "t_contract(DAOFeeRegistry)36370": { + "label": "contract DAOFeeRegistry", + "numberOfBytes": "20" + }, + "t_contract(IAssetRegistry)15771": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)15879": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)16151": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IBroker)16338": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)16702": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)7392": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)16805": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IRToken)17521": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)17658": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)17909": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_contract(VersionRegistry)36670": { + "label": "contract VersionRegistry", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)69_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_struct(RoleData)69_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "e0e054f27477f92ffde02dbeabcd5bcedde48cb2821bece13c45c1a85ef111e5": { + "address": "0x718bD96B607cFa71517Fa52777302fB5fE40199f", + "txHash": "0x01da77761d370601c4e608fd56420daf57a9b73cf67d60012ed1fad5388bf277", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)17284", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "201", + "type": "t_contract(IBasketHandler)16151", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:20" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "202", + "type": "t_contract(IBackingManager)15879", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:21" + }, + { + "label": "_erc20s", + "offset": 0, + "slot": "203", + "type": "t_struct(AddressSet)11094_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:24" + }, + { + "label": "assets", + "offset": 0, + "slot": "205", + "type": "t_mapping(t_contract(IERC20)7392,t_contract(IAsset)15484)", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:27" + }, + { + "label": "lastRefresh", + "offset": 0, + "slot": "206", + "type": "t_uint48", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:31" + }, + { + "label": "__gap", + "offset": 0, + "slot": "207", + "type": "t_array(t_uint256)46_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:292" + } + ], + "types": { + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAsset)15484": { + "label": "contract IAsset", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)15879": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)16151": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IERC20)7392": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)17284": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)7392,t_contract(IAsset)15484)": { + "label": "mapping(contract IERC20 => contract IAsset)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)11094_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)10779_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)10779_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "bedbaa046a2c78cc119489c4af8e1558e8fa22aefa059f85280ceea43cced717": { + "address": "0xc501c9074CE15A4B00dd0B51B3c372518e6D3BA2", + "txHash": "0xe887a616182e251802e5e7da71e2e6e1baa522fe72a18ba4e100c7288e96e7a2", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)32072", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_status", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "broker", + "offset": 0, + "slot": "251", + "type": "t_contract(IBroker)30848", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:29" + }, + { + "label": "trades", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32844)", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:32" + }, + { + "label": "tradesOpen", + "offset": 0, + "slot": "253", + "type": "t_uint48", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:33" + }, + { + "label": "maxTradeSlippage", + "offset": 6, + "slot": "253", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:36" + }, + { + "label": "minTradeVolume", + "offset": 0, + "slot": "254", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:37" + }, + { + "label": "tradesNonce", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "256", + "type": "t_array(t_uint256)45_storage", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:185" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "301", + "type": "t_contract(IAssetRegistry)30281", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:25" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "302", + "type": "t_contract(IBasketHandler)30661", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:26" + }, + { + "label": "distributor", + "offset": 0, + "slot": "303", + "type": "t_contract(IDistributor)31261", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:27" + }, + { + "label": "rToken", + "offset": 0, + "slot": "304", + "type": "t_contract(IRToken)32309", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:28" + }, + { + "label": "rsr", + "offset": 0, + "slot": "305", + "type": "t_contract(IERC20)13972", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:29" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "306", + "type": "t_contract(IStRSR)32697", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:30" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "307", + "type": "t_contract(IRevenueTrader)32446", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:31" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "308", + "type": "t_contract(IRevenueTrader)32446", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:32" + }, + { + "label": "tradingDelay", + "offset": 20, + "slot": "308", + "type": "t_uint48", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:36" + }, + { + "label": "backingBuffer", + "offset": 0, + "slot": "309", + "type": "t_uint192", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:37" + }, + { + "label": "furnace", + "offset": 0, + "slot": "310", + "type": "t_contract(IFurnace)31593", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:40" + }, + { + "label": "tradeEnd", + "offset": 0, + "slot": "311", + "type": "t_mapping(t_enum(TradeKind)30724,t_uint48)", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:41" + }, + { + "label": "tokensOut", + "offset": 0, + "slot": "312", + "type": "t_mapping(t_contract(IERC20)13972,t_uint192)", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "313", + "type": "t_array(t_uint256)38_storage", + "contract": "BackingManagerP1", + "src": "contracts/p1/BackingManager.sol:356" + } + ], + "types": { + "t_array(t_uint256)38_storage": { + "label": "uint256[38]", + "numberOfBytes": "1216" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IAssetRegistry)30281": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)30661": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IBroker)30848": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)31261": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31593": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)32072": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)32309": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)32446": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)32697": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32844": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_enum(TradeKind)30724": { + "label": "enum TradeKind", + "members": [ + "DUTCH_AUCTION", + "BATCH_AUCTION" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32844)": { + "label": "mapping(contract IERC20 => contract ITrade)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)13972,t_uint192)": { + "label": "mapping(contract IERC20 => uint192)", + "numberOfBytes": "32" + }, + "t_mapping(t_enum(TradeKind)30724,t_uint48)": { + "label": "mapping(enum TradeKind => uint48)", + "numberOfBytes": "32" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "117588215db3fded515576d8391e4ba1cc52358b7cf13e4e2791acf31996de62": { + "address": "0x54A8fa5217970e2040590DDD7c16f72B1fb57a3C", + "txHash": "0x043337dc7338d7bddb7c5fcb790117c6710e973ca68274d7d7b726a7c3e24daf", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)17284", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "201", + "type": "t_contract(IAssetRegistry)15771", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:38" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "202", + "type": "t_contract(IBackingManager)15879", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:39" + }, + { + "label": "rsr", + "offset": 0, + "slot": "203", + "type": "t_contract(IERC20)7392", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:40" + }, + { + "label": "rToken", + "offset": 0, + "slot": "204", + "type": "t_contract(IRToken)17521", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:41" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "205", + "type": "t_contract(IStRSR)17909", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:42" + }, + { + "label": "config", + "offset": 0, + "slot": "206", + "type": "t_struct(BasketConfig)30251_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:46" + }, + { + "label": "basket", + "offset": 0, + "slot": "210", + "type": "t_struct(Basket)30262_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:50" + }, + { + "label": "nonce", + "offset": 0, + "slot": "212", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:52" + }, + { + "label": "timestamp", + "offset": 6, + "slot": "212", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:53" + }, + { + "label": "disabled", + "offset": 12, + "slot": "212", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:57" + }, + { + "label": "_targetNames", + "offset": 0, + "slot": "213", + "type": "t_struct(Bytes32Set)10973_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:63" + }, + { + "label": "_newBasket", + "offset": 0, + "slot": "215", + "type": "t_struct(Basket)30262_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:64" + }, + { + "label": "warmupPeriod", + "offset": 0, + "slot": "217", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:70" + }, + { + "label": "lastStatusTimestamp", + "offset": 6, + "slot": "217", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:74" + }, + { + "label": "lastStatus", + "offset": 12, + "slot": "217", + "type": "t_enum(CollateralStatus)15535", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:75" + }, + { + "label": "basketHistory", + "offset": 0, + "slot": "218", + "type": "t_mapping(t_uint48,t_struct(Basket)30262_storage)", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:81" + }, + { + "label": "_targetAmts", + "offset": 0, + "slot": "219", + "type": "t_struct(Bytes32ToUintMap)10555_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:84" + }, + { + "label": "reweightable", + "offset": 0, + "slot": "222", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:90" + }, + { + "label": "lastCollateralized", + "offset": 1, + "slot": "222", + "type": "t_uint48", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:92" + }, + { + "label": "enableIssuancePremium", + "offset": 7, + "slot": "222", + "type": "t_bool", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:97" + }, + { + "label": "__gap", + "offset": 0, + "slot": "223", + "type": "t_array(t_uint256)36_storage", + "contract": "BasketHandlerP1", + "src": "contracts/p1/BasketHandler.sol:789" + } + ], + "types": { + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)7392)dyn_storage": { + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)36_storage": { + "label": "uint256[36]", + "numberOfBytes": "1152" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)15771": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)15879": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)7392": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)17284": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)17521": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)17909": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_enum(CollateralStatus)15535": { + "label": "enum CollateralStatus", + "members": [ + "SOUND", + "IFFY", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_bytes32)": { + "label": "mapping(bytes32 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(BackupConfig)30231_storage)": { + "label": "mapping(bytes32 => struct BackupConfig)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)7392,t_bytes32)": { + "label": "mapping(contract IERC20 => bytes32)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)7392,t_uint192)": { + "label": "mapping(contract IERC20 => uint192)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint48,t_struct(Basket)30262_storage)": { + "label": "mapping(uint48 => struct Basket)", + "numberOfBytes": "32" + }, + "t_struct(BackupConfig)30231_storage": { + "label": "struct BackupConfig", + "members": [ + { + "label": "max", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)7392)dyn_storage", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Basket)30262_storage": { + "label": "struct Basket", + "members": [ + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)7392)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "refAmts", + "type": "t_mapping(t_contract(IERC20)7392,t_uint192)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(BasketConfig)30251_storage": { + "label": "struct BasketConfig", + "members": [ + { + "label": "erc20s", + "type": "t_array(t_contract(IERC20)7392)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "targetAmts", + "type": "t_mapping(t_contract(IERC20)7392,t_uint192)", + "offset": 0, + "slot": "1" + }, + { + "label": "targetNames", + "type": "t_mapping(t_contract(IERC20)7392,t_bytes32)", + "offset": 0, + "slot": "2" + }, + { + "label": "backups", + "type": "t_mapping(t_bytes32,t_struct(BackupConfig)30231_storage)", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Bytes32Set)10973_storage": { + "label": "struct EnumerableSet.Bytes32Set", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)10779_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Bytes32ToBytes32Map)9526_storage": { + "label": "struct EnumerableMap.Bytes32ToBytes32Map", + "members": [ + { + "label": "_keys", + "type": "t_struct(Bytes32Set)10973_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_values", + "type": "t_mapping(t_bytes32,t_bytes32)", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Bytes32ToUintMap)10555_storage": { + "label": "struct EnumerableMap.Bytes32ToUintMap", + "members": [ + { + "label": "_inner", + "type": "t_struct(Bytes32ToBytes32Map)9526_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "96" + }, + "t_struct(Set)10779_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "8a6e856f4492e61ac155a6cd369da422c5d4d818e02628c52e4dd1bba2c29fe2": { + "address": "0x63c61086418406eBB062c5C6dF80F46c6d052d4c", + "txHash": "0xd81a65befd102290dd3c83b7e0d133465d0f6d6736a5b94ce38c2c5ced84177b", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)32072", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "201", + "type": "t_contract(IBackingManager)30389", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:31" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "202", + "type": "t_contract(IRevenueTrader)32446", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:32" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "203", + "type": "t_contract(IRevenueTrader)32446", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:33" + }, + { + "label": "batchTradeImplementation", + "offset": 0, + "slot": "204", + "type": "t_contract(ITrade)32844", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:37", + "renamedFrom": "tradeImplementation" + }, + { + "label": "gnosis_DEPRECATED", + "offset": 0, + "slot": "205", + "type": "t_contract(IGnosis)31693", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:41", + "renamedFrom": "gnosis" + }, + { + "label": "batchAuctionLength", + "offset": 20, + "slot": "205", + "type": "t_uint48", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:45", + "renamedFrom": "auctionLength" + }, + { + "label": "batchTradeDisabled", + "offset": 26, + "slot": "205", + "type": "t_bool", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:51", + "renamedFrom": "disabled" + }, + { + "label": "trades", + "offset": 0, + "slot": "206", + "type": "t_mapping(t_address,t_bool)", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:54" + }, + { + "label": "dutchTradeImplementation", + "offset": 0, + "slot": "207", + "type": "t_contract(ITrade)32844", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:59" + }, + { + "label": "dutchAuctionLength", + "offset": 20, + "slot": "207", + "type": "t_uint48", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:62" + }, + { + "label": "dutchTradeDisabled", + "offset": 0, + "slot": "208", + "type": "t_mapping(t_contract(IERC20Metadata)14624,t_bool)", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:65" + }, + { + "label": "rToken", + "offset": 0, + "slot": "209", + "type": "t_contract(IRToken)32309", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:69" + }, + { + "label": "trustedFillerRegistry", + "offset": 0, + "slot": "210", + "type": "t_contract(ITrustedFillerRegistry)23119", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:73" + }, + { + "label": "trustedFillerEnabled", + "offset": 20, + "slot": "210", + "type": "t_bool", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:74" + }, + { + "label": "__gap", + "offset": 0, + "slot": "211", + "type": "t_array(t_uint256)40_storage", + "contract": "BrokerP1", + "src": "contracts/p1/Broker.sol:329" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)40_storage": { + "label": "uint256[40]", + "numberOfBytes": "1280" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IBackingManager)30389": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20Metadata)14624": { + "label": "contract IERC20Metadata", + "numberOfBytes": "20" + }, + "t_contract(IGnosis)31693": { + "label": "contract IGnosis", + "numberOfBytes": "20" + }, + "t_contract(IMain)32072": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)32309": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(IRevenueTrader)32446": { + "label": "contract IRevenueTrader", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32844": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_contract(ITrustedFillerRegistry)23119": { + "label": "contract ITrustedFillerRegistry", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20Metadata)14624,t_bool)": { + "label": "mapping(contract IERC20Metadata => bool)", + "numberOfBytes": "32" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "af38140bd527a7bffc02074aacd228d8e87471e8d91f701a515f11ab22840045": { + "address": "0x5593F9d1141E2dcae50a5315fa9Ee0Ad64d88F32", + "txHash": "0xa14922082933bee3491c4cd4d864dada7c7e4bb80b7e77931555a6a39c85849a", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)32072", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "destinations", + "offset": 0, + "slot": "201", + "type": "t_struct(AddressSet)22716_storage", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:17" + }, + { + "label": "distribution", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_address,t_struct(RevenueShare)31187_storage)", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:18" + }, + { + "label": "rsr", + "offset": 0, + "slot": "204", + "type": "t_contract(IERC20)13972", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:37" + }, + { + "label": "rToken", + "offset": 0, + "slot": "205", + "type": "t_contract(IERC20)13972", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:38" + }, + { + "label": "furnace", + "offset": 0, + "slot": "206", + "type": "t_contract(IFurnace)31593", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:39" + }, + { + "label": "stRSR", + "offset": 0, + "slot": "207", + "type": "t_contract(IStRSR)32697", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:40" + }, + { + "label": "rTokenTrader", + "offset": 0, + "slot": "208", + "type": "t_address", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:41" + }, + { + "label": "rsrTrader", + "offset": 0, + "slot": "209", + "type": "t_address", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:42" + }, + { + "label": "__gap", + "offset": 0, + "slot": "210", + "type": "t_array(t_uint256)44_storage", + "contract": "DistributorP1", + "src": "contracts/p1/Distributor.sol:290" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]", + "numberOfBytes": "1408" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31593": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)32072": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IStRSR)32697": { + "label": "contract IStRSR", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_struct(RevenueShare)31187_storage)": { + "label": "mapping(address => struct RevenueShare)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)22716_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)22401_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RevenueShare)31187_storage": { + "label": "struct RevenueShare", + "members": [ + { + "label": "rTokenDist", + "type": "t_uint16", + "offset": 0, + "slot": "0" + }, + { + "label": "rsrDist", + "type": "t_uint16", + "offset": 2, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Set)22401_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "28cc2ce92558c31fedf46f82d9333731149befe1951cbed87c36026c0ff53ab0": { + "address": "0x518fcA5e31eEea484276A68Ad5F7E5838F74F03F", + "txHash": "0x6d870d2852bfba0f3cf3dc43d3fe4ee8c95e625d9929a4059b101980f0f3c0a5", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)32072", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "rToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IRToken)32309", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:17" + }, + { + "label": "ratio", + "offset": 0, + "slot": "202", + "type": "t_uint192", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:20" + }, + { + "label": "lastPayout", + "offset": 24, + "slot": "202", + "type": "t_uint48", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:23" + }, + { + "label": "lastPayoutBal", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:24" + }, + { + "label": "__gap", + "offset": 0, + "slot": "204", + "type": "t_array(t_uint256)47_storage", + "contract": "FurnaceP1", + "src": "contracts/p1/Furnace.sol:97" + } + ], + "types": { + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IMain)32072": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)32309": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "18797921e05e345a4e284d6fff2b9362cc64fde695091bffa3c38d30497aa10a": { + "address": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "txHash": "0xcdb531b85ff882d1c786ec87c54ec33a7d8b3b6b260ff83a51b351f7da16b9e7", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)32072", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_status", + "offset": 0, + "slot": "201", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "broker", + "offset": 0, + "slot": "251", + "type": "t_contract(IBroker)30848", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:29" + }, + { + "label": "trades", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32844)", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:32" + }, + { + "label": "tradesOpen", + "offset": 0, + "slot": "253", + "type": "t_uint48", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:33" + }, + { + "label": "maxTradeSlippage", + "offset": 6, + "slot": "253", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:36" + }, + { + "label": "minTradeVolume", + "offset": 0, + "slot": "254", + "type": "t_uint192", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:37" + }, + { + "label": "tradesNonce", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "256", + "type": "t_array(t_uint256)45_storage", + "contract": "TradingP1", + "src": "contracts/p1/mixins/Trading.sol:185" + }, + { + "label": "tokenToBuy", + "offset": 0, + "slot": "301", + "type": "t_contract(IERC20)13972", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:19" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "302", + "type": "t_contract(IAssetRegistry)30281", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:20" + }, + { + "label": "distributor", + "offset": 0, + "slot": "303", + "type": "t_contract(IDistributor)31261", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:21" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "304", + "type": "t_contract(IBackingManager)30389", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:22" + }, + { + "label": "furnace", + "offset": 0, + "slot": "305", + "type": "t_contract(IFurnace)31593", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:23" + }, + { + "label": "rToken", + "offset": 0, + "slot": "306", + "type": "t_contract(IRToken)32309", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:24" + }, + { + "label": "rsr", + "offset": 0, + "slot": "307", + "type": "t_contract(IERC20)13972", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:25" + }, + { + "label": "__gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)43_storage", + "contract": "RevenueTraderP1", + "src": "contracts/p1/RevenueTrader.sol:206" + } + ], + "types": { + "t_array(t_uint256)43_storage": { + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IAssetRegistry)30281": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)30389": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBroker)30848": { + "label": "contract IBroker", + "numberOfBytes": "20" + }, + "t_contract(IDistributor)31261": { + "label": "contract IDistributor", + "numberOfBytes": "20" + }, + "t_contract(IERC20)13972": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)31593": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)32072": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_contract(IRToken)32309": { + "label": "contract IRToken", + "numberOfBytes": "20" + }, + "t_contract(ITrade)32844": { + "label": "contract ITrade", + "numberOfBytes": "20" + }, + "t_mapping(t_contract(IERC20)13972,t_contract(ITrade)32844)": { + "label": "mapping(contract IERC20 => contract ITrade)", + "numberOfBytes": "32" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "d98eed29ed0aa3086e8c28bd66c646f0a30dafcc882748d12f575fe17b3864a4": { + "address": "0xB20909FD35c548069d1Cc0Ff38337e6b362CA8a0", + "txHash": "0x4a0ade2389860c9df7e8468cbfbe7d53e8a0a7b6d7e81752efd9dddd4b883bcb", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)17284", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_balances", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "202", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "251", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "252", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "254", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "255", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "_nonces", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_struct(Counter)2919_storage)", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:37" + }, + { + "label": "_PERMIT_TYPEHASH_DEPRECATED_SLOT", + "offset": 0, + "slot": "304", + "type": "t_bytes32", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:51", + "renamedFrom": "_PERMIT_TYPEHASH" + }, + { + "label": "__gap", + "offset": 0, + "slot": "305", + "type": "t_array(t_uint256)48_storage", + "contract": "ERC20PermitUpgradeable", + "src": "contracts/vendor/ERC20PermitUpgradeable.sol:129" + }, + { + "label": "mandate", + "offset": 0, + "slot": "353", + "type": "t_string_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:45" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IAssetRegistry)15771", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:48" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "355", + "type": "t_contract(IBasketHandler)16151", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:49" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "356", + "type": "t_contract(IBackingManager)15879", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:50" + }, + { + "label": "furnace", + "offset": 0, + "slot": "357", + "type": "t_contract(IFurnace)16805", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:51" + }, + { + "label": "basketsNeeded", + "offset": 0, + "slot": "358", + "type": "t_uint192", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:56" + }, + { + "label": "issuanceThrottle", + "offset": 0, + "slot": "359", + "type": "t_struct(Throttle)20610_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:59" + }, + { + "label": "redemptionThrottle", + "offset": 0, + "slot": "363", + "type": "t_struct(Throttle)20610_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:60" + }, + { + "label": "__gap", + "offset": 0, + "slot": "367", + "type": "t_array(t_uint256)42_storage", + "contract": "RTokenP1", + "src": "contracts/p1/RToken.sol:611" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)42_storage": { + "label": "uint256[42]", + "numberOfBytes": "1344" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)15771": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)15879": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)16151": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IFurnace)16805": { + "label": "contract IFurnace", + "numberOfBytes": "20" + }, + "t_contract(IMain)17284": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Counter)2919_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Counter)2919_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(Params)20602_storage": { + "label": "struct ThrottleLib.Params", + "members": [ + { + "label": "amtRate", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "pctRate", + "type": "t_uint192", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Throttle)20610_storage": { + "label": "struct ThrottleLib.Throttle", + "members": [ + { + "label": "params", + "type": "t_struct(Params)20602_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "lastTimestamp", + "type": "t_uint48", + "offset": 0, + "slot": "2" + }, + { + "label": "lastAvailable", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "45afa8124b6b0e8861847d1bbb9bd3d79738f963f6bbc25b5f1dc2740f0d500b": { + "address": "0x8E594FFb702C48a9fF8ae56FAeC795D83A69B387", + "txHash": "0x8f8d8c046a4b7676db1d5fea4491e2ea1fcc291e5fea40f8d7bf59b21d5819ca", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)17284", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "_hashedName", + "offset": 0, + "slot": "201", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:40", + "renamedFrom": "_HASHED_NAME" + }, + { + "label": "_hashedVersion", + "offset": 0, + "slot": "202", + "type": "t_bytes32", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:42", + "renamedFrom": "_HASHED_VERSION" + }, + { + "label": "_name", + "offset": 0, + "slot": "203", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:44" + }, + { + "label": "_version", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:45" + }, + { + "label": "__gap", + "offset": 0, + "slot": "205", + "type": "t_array(t_uint256)48_storage", + "contract": "EIP712Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol:204" + }, + { + "label": "name", + "offset": 0, + "slot": "253", + "type": "t_string_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:45" + }, + { + "label": "symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:46" + }, + { + "label": "assetRegistry", + "offset": 0, + "slot": "255", + "type": "t_contract(IAssetRegistry)15771", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:51" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "256", + "type": "t_contract(IBackingManager)15879", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:52" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "257", + "type": "t_contract(IBasketHandler)16151", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:53" + }, + { + "label": "rsr", + "offset": 0, + "slot": "258", + "type": "t_contract(IERC20)7392", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:54" + }, + { + "label": "era", + "offset": 0, + "slot": "259", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:59" + }, + { + "label": "stakes", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:63" + }, + { + "label": "totalStakes", + "offset": 0, + "slot": "261", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:64" + }, + { + "label": "stakeRSR", + "offset": 0, + "slot": "262", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:65" + }, + { + "label": "stakeRate", + "offset": 0, + "slot": "263", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:66" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "264", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:71" + }, + { + "label": "draftEra", + "offset": 0, + "slot": "265", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:76" + }, + { + "label": "draftQueues", + "offset": 0, + "slot": "266", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(CumulativeDraft)27144_storage)dyn_storage))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:84" + }, + { + "label": "firstRemainingDraft", + "offset": 0, + "slot": "267", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:85" + }, + { + "label": "totalDrafts", + "offset": 0, + "slot": "268", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:86" + }, + { + "label": "draftRSR", + "offset": 0, + "slot": "269", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:87" + }, + { + "label": "draftRate", + "offset": 0, + "slot": "270", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:88" + }, + { + "label": "_nonces", + "offset": 0, + "slot": "271", + "type": "t_mapping(t_address,t_struct(Counter)2919_storage)", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:126" + }, + { + "label": "_delegationNonces", + "offset": 0, + "slot": "272", + "type": "t_mapping(t_address,t_struct(Counter)2919_storage)", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:128" + }, + { + "label": "unstakingDelay", + "offset": 0, + "slot": "273", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:138" + }, + { + "label": "rewardRatio", + "offset": 6, + "slot": "273", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:139" + }, + { + "label": "payoutLastPaid", + "offset": 0, + "slot": "274", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:150" + }, + { + "label": "rsrRewardsAtLastPayout", + "offset": 0, + "slot": "275", + "type": "t_uint256", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:153" + }, + { + "label": "leaked", + "offset": 0, + "slot": "276", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:159" + }, + { + "label": "lastWithdrawRefresh", + "offset": 24, + "slot": "276", + "type": "t_uint48", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:160" + }, + { + "label": "withdrawalLeak", + "offset": 0, + "slot": "277", + "type": "t_uint192", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:161" + }, + { + "label": "__gap", + "offset": 0, + "slot": "278", + "type": "t_array(t_uint256)28_storage", + "contract": "StRSRP1", + "src": "contracts/p1/StRSR.sol:1052" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "306", + "type": "t_mapping(t_address,t_address)", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:34" + }, + { + "label": "_eras", + "offset": 0, + "slot": "307", + "type": "t_array(t_struct(Checkpoint)29417_storage)dyn_storage", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:37" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "308", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(Checkpoint)29417_storage)dyn_storage))", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:41" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "309", + "type": "t_mapping(t_uint256,t_array(t_struct(Checkpoint)29417_storage)dyn_storage)", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:43" + }, + { + "label": "__gap", + "offset": 0, + "slot": "310", + "type": "t_array(t_uint256)46_storage", + "contract": "StRSRP1Votes", + "src": "contracts/p1/StRSRVotes.sol:309" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_struct(Checkpoint)29417_storage)dyn_storage": { + "label": "struct StRSRP1Votes.Checkpoint[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(CumulativeDraft)27144_storage)dyn_storage": { + "label": "struct StRSRP1.CumulativeDraft[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)28_storage": { + "label": "uint256[28]", + "numberOfBytes": "896" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)48_storage": { + "label": "uint256[48]", + "numberOfBytes": "1536" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAssetRegistry)15771": { + "label": "contract IAssetRegistry", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)15879": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)16151": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IERC20)7392": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)17284": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_struct(Checkpoint)29417_storage)dyn_storage)": { + "label": "mapping(address => struct StRSRP1Votes.Checkpoint[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_struct(CumulativeDraft)27144_storage)dyn_storage)": { + "label": "mapping(address => struct StRSRP1.CumulativeDraft[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(Counter)2919_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_array(t_struct(Checkpoint)29417_storage)dyn_storage)": { + "label": "mapping(uint256 => struct StRSRP1Votes.Checkpoint[])", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(Checkpoint)29417_storage)dyn_storage))": { + "label": "mapping(uint256 => mapping(address => struct StRSRP1Votes.Checkpoint[]))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_array(t_struct(CumulativeDraft)27144_storage)dyn_storage))": { + "label": "mapping(uint256 => mapping(address => struct StRSRP1.CumulativeDraft[]))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))": { + "label": "mapping(uint256 => mapping(address => mapping(address => uint256)))", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Checkpoint)29417_storage": { + "label": "struct StRSRP1Votes.Checkpoint", + "members": [ + { + "label": "fromTimepoint", + "type": "t_uint48", + "offset": 0, + "slot": "0" + }, + { + "label": "val", + "type": "t_uint224", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Counter)2919_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(CumulativeDraft)27144_storage": { + "label": "struct StRSRP1.CumulativeDraft", + "members": [ + { + "label": "drafts", + "type": "t_uint176", + "offset": 0, + "slot": "0" + }, + { + "label": "availableAt", + "type": "t_uint64", + "offset": 22, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_uint176": { + "label": "uint176", + "numberOfBytes": "22" + }, + "t_uint192": { + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint224": { + "label": "uint224", + "numberOfBytes": "28" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "9dd795cfe91aa7c75750792392d516a6a4137a38202b770ec09b620c1a29f808": { + "address": "0xcB7e10000De0DAcE5A79c620191Cab2517693637", + "txHash": "0x495f3e0facfb284ac935c0b3511a90ddba296f68f32965687008ae6572c01584", + "layout": { + "solcVersion": "0.8.28", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "main", + "offset": 0, + "slot": "151", + "type": "t_contract(IMain)13539", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:21" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "ComponentP1", + "src": "contracts/p1/mixins/Component.sol:87" + }, + { + "label": "basketHandler", + "offset": 0, + "slot": "201", + "type": "t_contract(IBasketHandler)12448", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:20" + }, + { + "label": "backingManager", + "offset": 0, + "slot": "202", + "type": "t_contract(IBackingManager)12176", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:21" + }, + { + "label": "_erc20s", + "offset": 0, + "slot": "203", + "type": "t_struct(AddressSet)11009_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:24" + }, + { + "label": "assets", + "offset": 0, + "slot": "205", + "type": "t_mapping(t_contract(IERC20)7392,t_contract(IAsset)11781)", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:27" + }, + { + "label": "lastRefresh", + "offset": 0, + "slot": "206", + "type": "t_uint48", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:31" + }, + { + "label": "__gap", + "offset": 0, + "slot": "207", + "type": "t_array(t_uint256)46_storage", + "contract": "AssetRegistryP1", + "src": "contracts/p1/AssetRegistry.sol:297" + } + ], + "types": { + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IAsset)11781": { + "label": "contract IAsset", + "numberOfBytes": "20" + }, + "t_contract(IBackingManager)12176": { + "label": "contract IBackingManager", + "numberOfBytes": "20" + }, + "t_contract(IBasketHandler)12448": { + "label": "contract IBasketHandler", + "numberOfBytes": "20" + }, + "t_contract(IERC20)7392": { + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMain)13539": { + "label": "contract IMain", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20)7392,t_contract(IAsset)11781)": { + "label": "mapping(contract IERC20 => contract IAsset)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)11009_storage": { + "label": "struct EnumerableSet.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)10694_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)10694_storage": { + "label": "struct EnumerableSet.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "label": "uint48", + "numberOfBytes": "6" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } } } } diff --git a/CHANGELOG.md b/CHANGELOG.md index c2bf1cede2..efaee898c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ # 4.2.0 +Bump solidity version to 0.8.28 + - **Trusted Fillers**: Rtokens are now integrated with [Trusted Fillers](https://github.com/reserve-protocol/trusted-fillers/) and can be enabled by governance to allow async fillers to compete in auctions to provide better prices. All auction limitations still apply to these fillers. Currently, the only supported async filler is CoW Swap. # 4.1.0 diff --git a/common/configuration.ts b/common/configuration.ts index 8fff48bd44..178628243c 100644 --- a/common/configuration.ts +++ b/common/configuration.ts @@ -19,10 +19,15 @@ export interface ITokens { MIM?: string crvUSD?: string aDAI?: string + saDAI?: string // our wrapper aUSDC?: string + saUSDC?: string // our wrapper aUSDT?: string + saUSDT?: string // our wrapper aBUSD?: string + saBUSD?: string // our wrapper aUSDP?: string + saUSDP?: string // our wrapper aWETH?: string aWBTC?: string aCRV?: string @@ -71,6 +76,7 @@ export interface ITokens { wcUSDCv3?: string cUSDbCv3?: string cUSDTv3?: string + wcUSDTv3?: string ONDO?: string sFRAX?: string sDAI?: string @@ -134,6 +140,23 @@ export interface ITokens { USDS?: string sUSDS?: string + // Convex + wcvx3Pool?: string + wcvxPayPool?: string + wcvxCrvUSDUSDC?: string + wcvxCrvUSDUSDT?: string + wcvxeUSDFRAXBP?: string + wcvxETHPlusETH?: string + + // Aerodrome + waeroUSDCeUSD?: string + waeroWETHAERO?: string + waeroMOGWETH?: string + waeroUSDzUSDC?: string + waeroWETHcbBTC?: string + waeroWETHWELL?: string + waeroWETHDEGEN?: string + // RTokens eUSD?: string ETHPLUS?: string @@ -223,9 +246,13 @@ export const networkConfig: { [key: string]: INetworkConfig } = { crvUSD: '0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E', eUSD: '0xA0d69E286B938e21CBf7E51D71F6A4c8918f482F', aDAI: '0x028171bCA77440897B824Ca71D1c56caC55b68A3', + saDAI: '0x717AC7A53C6a6a5529175dff7fCc76858436f8c0', aUSDC: '0xBcca60bB61934080951369a648Fb03DF4F96263C', + saUSDC: '0xa8157BF67Fd7BcDCC139CB9Bf1bd7Eb921A779D3', aUSDT: '0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811', + saUSDT: '0x684AA4faf9b07d5091B88c6e0a8160aCa5e6d17b', aBUSD: '0xA361718326c15715591c299427c62086F69923D9', + saBUSD: '0xf3840c4B214699F94fBB69ad3922f44176c93658', aUSDP: '0x2e8F4bdbE3d47d7d7DE490437AeA9915D930F1A3', aWETH: '0x030bA81f1c18d280636F32af80b9AAd02Cf0854e', aEthUSDC: '0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c', @@ -266,8 +293,9 @@ export const networkConfig: { [key: string]: INetworkConfig } = { pxETH: '0x04C154b66CB340F3Ae24111CC767e0184Ed00Cc6', apxETH: '0x9Ba021B0a9b958B5E75cE9f6dff97C7eE52cb3E6', cUSDCv3: '0xc3d688B66703497DAA19211EEdff47f25384cdc3', - wcUSDCv3: '0x27F2f159Fe990Ba83D57f39Fd69661764BEbf37a', + wcUSDCv3: '0x27F2f159Fe990Ba83D57f39Fd69661764BEbf37a', // our wrapper cUSDTv3: '0x3Afdc9BCA9213A35503b077a6072F3D0d5AB0840', + wcUSDTv3: '0xEB74EC1d4C1DAB412D5d6674F6833FD19d3118Ce', // our wrapper ONDO: '0xfAbA6f8e4a5E8Ab82F62fe7C39859FA577269BE3', sFRAX: '0xA663B02CF0a4b149d2aD41910CB81e23e1c41c32', sDAI: '0x83f20f44975d03b1b09e64809b757c47f942beea', @@ -295,6 +323,18 @@ export const networkConfig: { [key: string]: INetworkConfig } = { USDS: '0xdC035D45d973E3EC169d2276DDab16f1e407384F', sUSDS: '0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD', wOETH: '0xDcEe70654261AF21C44c093C300eD3Bb97b78192', + wcvx3Pool: '0x24CDc6b4Edd3E496b7283D94D93119983A61056a', // our wrapper + wcvxPayPool: '0x511daB8150966aFfE15F0a5bFfBa7F4d2b62DEd4', // our wrapper + wcvxCrvUSDUSDC: '0x6ad24C0B8fD4B594C6009A7F7F48450d9F56c6b8', // our wrapper + wcvxCrvUSDUSDT: '0x5d1B749bA7f689ef9f260EDC54326C48919cA88b', // our wrapper + wcvxeUSDFRAXBP: '0x81697e25DFf8564d9E0bC6D27edb40006b34ea2A', // our wrapper + wcvxETHPlusETH: '0xDbC0cE2321B76D3956412B36e9c0FA9B0fD176E7', // our wrapper + maUSDT: '0x9FD7165AEf369913258F4C8B19c9C350C2dE63cC', // our wrapper + maUSDC: '0x6Bf3356923E6D611b8352B4895135e1Edfcf217B', // our wrapper + maDAI: '0x9E5EC103944c19D7E7aBfb2947a865d51bc6947C', // our wrapper + maWBTC: '0x1F423dC943738b9c31cB3d96c2A744dd7502593d', // our wrapper + maWETH: '0xB7c4c4a2B7453E10d7e4e23Fa8E8D2335d09afab', // our wrapper + maStETH: '0xAdc10669354aAd42A581E6F6cC8990B540AA5689', // our wrapper }, chainlinkFeeds: { RSR: '0x759bBC1be8F90eE6457C44abc7d443842a976d02', @@ -564,6 +604,13 @@ export const networkConfig: { [key: string]: INetworkConfig } = { cbBTC: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', WELL: '0xA88594D404727625A9437C3f886C7643872296AE', DEGEN: '0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed', + waeroUSDCeUSD: '0xDB5b8cead52f77De0f6B5255f73F348AAf2CBb8D', + waeroWETHAERO: '0x65f2c1b253a3E45670aDD259C9688Edf1A3b814d', + waeroMOGWETH: '0xfaAC26b279338dF8cF56B11A572617f674A2F69C', + waeroUSDzUSDC: '0x246Df11B856E9fD6120494F168475e1b41321c61', + waeroWETHcbBTC: '0x4BD08a771CdAbA5333CAc6F20322eD7d72b6cBfA', + waeroWETHWELL: '0x1F599F8657CAA38Ee825e4E2d64F695749E2a161', + waeroWETHDEGEN: '0xA762F790a31654D9AeF7DE550A473A0F5621E4F1', bsdETH: '0xcb327b99ff831bf8223cced12b1338ff3aa322ff', }, chainlinkFeeds: { diff --git a/common/registries.ts b/common/registries.ts index e9e4952b4a..7d340f2a1a 100644 --- a/common/registries.ts +++ b/common/registries.ts @@ -20,26 +20,26 @@ export const registryConfig: Record = { '1': { registryControl: { owner: '0xe8259842e71f4E44F2F68D6bfbC15EDA56E63064', - feeRecipient: '', + feeRecipient: '0xcBCa96091f43C024730a020E57515A18b5dC633B', }, registries: { roleRegistry: '0xE1eC57C8EE970280f237863910B606059e9641C9', - versionRegistry: '', - assetPluginRegistry: '', - daoFeeRegistry: '', + versionRegistry: '0xBA8CD83f793aA046Fe5Ab7bA01f855742F2D6a30', + assetPluginRegistry: '0x6cf05Ea2A94a101CE6A44Ec2a2995b43F1b0958f', + daoFeeRegistry: '0xec716deD4eABa060937D1a915F166E237039342B', trustedFillerRegistry: '0x279ccF56441fC74f1aAC39E7faC165Dec5A88B3A', }, }, '8453': { registryControl: { owner: '0xe8259842e71f4E44F2F68D6bfbC15EDA56E63064', - feeRecipient: '', + feeRecipient: '0xcBCa96091f43C024730a020E57515A18b5dC633B', }, registries: { roleRegistry: '0xE1eC57C8EE970280f237863910B606059e9641C9', - versionRegistry: '', - assetPluginRegistry: '', - daoFeeRegistry: '', + versionRegistry: '0x3BECE5EC596331033726E5C6C188c313Ff4E3fE5', + assetPluginRegistry: '0x87A959e0377C68A50b08a91ae5ab3aFA7F41ACA4', + daoFeeRegistry: '0x3513D2c7D2F51c678889CeC083E7D7Ae27b219aD', trustedFillerRegistry: '0x72DB5f49D0599C314E2f2FEDf6Fe33E1bA6C7A18', }, }, diff --git a/contracts/facade/DeployerRegistry.sol b/contracts/facade/DeployerRegistry.sol index b344682299..e3294087ab 100644 --- a/contracts/facade/DeployerRegistry.sol +++ b/contracts/facade/DeployerRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/access/Ownable.sol"; import "../interfaces/IDeployerRegistry.sol"; diff --git a/contracts/facade/Facade.sol b/contracts/facade/Facade.sol index 548a5b5c9e..8bbee252c5 100644 --- a/contracts/facade/Facade.sol +++ b/contracts/facade/Facade.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/access/Ownable.sol"; import "../interfaces/IFacade.sol"; diff --git a/contracts/facade/FacadeMonitor.sol b/contracts/facade/FacadeMonitor.sol index 28a1e69f1d..707646d516 100644 --- a/contracts/facade/FacadeMonitor.sol +++ b/contracts/facade/FacadeMonitor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; diff --git a/contracts/facade/FacadeTest.sol b/contracts/facade/FacadeTest.sol index f95d350282..ce4083af39 100644 --- a/contracts/facade/FacadeTest.sol +++ b/contracts/facade/FacadeTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IAsset.sol"; diff --git a/contracts/facade/FacadeWrite.sol b/contracts/facade/FacadeWrite.sol index 965309f268..c9da60c72b 100644 --- a/contracts/facade/FacadeWrite.sol +++ b/contracts/facade/FacadeWrite.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../interfaces/IFacadeWrite.sol"; import "../interfaces/IDeployer.sol"; diff --git a/contracts/facade/facets/ActFacet.sol b/contracts/facade/facets/ActFacet.sol index 86da30b294..61f3efcc5c 100644 --- a/contracts/facade/facets/ActFacet.sol +++ b/contracts/facade/facets/ActFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/Address.sol"; diff --git a/contracts/facade/facets/BackingBufferFacet.sol b/contracts/facade/facets/BackingBufferFacet.sol index d911c8c5a7..975aad9bb4 100644 --- a/contracts/facade/facets/BackingBufferFacet.sol +++ b/contracts/facade/facets/BackingBufferFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../interfaces/IAssetRegistry.sol"; diff --git a/contracts/facade/facets/MaxIssuableFacet.sol b/contracts/facade/facets/MaxIssuableFacet.sol index 7581b617c3..3a83d226b1 100644 --- a/contracts/facade/facets/MaxIssuableFacet.sol +++ b/contracts/facade/facets/MaxIssuableFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../interfaces/IBasketHandler.sol"; diff --git a/contracts/facade/facets/ReadFacet.sol b/contracts/facade/facets/ReadFacet.sol index c793d8b03d..be038cf308 100644 --- a/contracts/facade/facets/ReadFacet.sol +++ b/contracts/facade/facets/ReadFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../plugins/trading/DutchTrade.sol"; diff --git a/contracts/facade/facets/RevenueFacet.sol b/contracts/facade/facets/RevenueFacet.sol index b0dd976fba..cf89bd3e6c 100644 --- a/contracts/facade/facets/RevenueFacet.sol +++ b/contracts/facade/facets/RevenueFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../interfaces/IAssetRegistry.sol"; diff --git a/contracts/facade/facets/TradeHelperFacet.sol b/contracts/facade/facets/TradeHelperFacet.sol index b5c40825d6..f06cda81e5 100644 --- a/contracts/facade/facets/TradeHelperFacet.sol +++ b/contracts/facade/facets/TradeHelperFacet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../plugins/trading/DutchTrade.sol"; diff --git a/contracts/facade/lib/FacadeWriteLib.sol b/contracts/facade/lib/FacadeWriteLib.sol index 8ad05ba40e..92dcda3a32 100644 --- a/contracts/facade/lib/FacadeWriteLib.sol +++ b/contracts/facade/lib/FacadeWriteLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../plugins/governance/Governance.sol"; diff --git a/contracts/facade/lib/FacetLib.sol b/contracts/facade/lib/FacetLib.sol index 930a22f2b3..8e7760fd46 100644 --- a/contracts/facade/lib/FacetLib.sol +++ b/contracts/facade/lib/FacetLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/Address.sol"; import "../../interfaces/IBackingManager.sol"; diff --git a/contracts/facade/oracles/ExchangeRateOracle.sol b/contracts/facade/oracles/ExchangeRateOracle.sol index 4bd78c935a..049fec51b3 100644 --- a/contracts/facade/oracles/ExchangeRateOracle.sol +++ b/contracts/facade/oracles/ExchangeRateOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { FIX_ONE, divuu } from "../../libraries/Fixed.sol"; import { IExchangeRateOracle } from "./IExchangeRateOracle.sol"; diff --git a/contracts/facade/oracles/IExchangeRateOracle.sol b/contracts/facade/oracles/IExchangeRateOracle.sol index 1dbbb638b8..7c4f664ec5 100644 --- a/contracts/facade/oracles/IExchangeRateOracle.sol +++ b/contracts/facade/oracles/IExchangeRateOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; diff --git a/contracts/facade/oracles/OracleFactory.sol b/contracts/facade/oracles/OracleFactory.sol index af727e7340..5aec2f9c91 100644 --- a/contracts/facade/oracles/OracleFactory.sol +++ b/contracts/facade/oracles/OracleFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { ExchangeRateOracle } from "./ExchangeRateOracle.sol"; import { ReferenceRateOracle } from "./ReferenceRateOracle.sol"; diff --git a/contracts/facade/oracles/ReferenceRateOracle.sol b/contracts/facade/oracles/ReferenceRateOracle.sol index cd5536453c..384068a4ca 100644 --- a/contracts/facade/oracles/ReferenceRateOracle.sol +++ b/contracts/facade/oracles/ReferenceRateOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { FIX_MAX } from "../../libraries/Fixed.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/interfaces/IAsset.sol b/contracts/interfaces/IAsset.sol index 4cc223a63d..1543b2c781 100644 --- a/contracts/interfaces/IAsset.sol +++ b/contracts/interfaces/IAsset.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/interfaces/IAssetRegistry.sol b/contracts/interfaces/IAssetRegistry.sol index 9a29b0b842..a53b34ad00 100644 --- a/contracts/interfaces/IAssetRegistry.sol +++ b/contracts/interfaces/IAssetRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IAsset.sol"; @@ -37,6 +37,12 @@ interface IAssetRegistry is IComponent { /// @custom:refresher function refresh() external; + /// Register a new JIT-deployed RTokenAsset instance + /// @param maxTradeVolume {UoA} The maximum trade volume for the RTokenAsset + /// @return swapped If the asset was swapped for a previously-registered asset + /// @custom:governance + function registerNewRTokenAsset(uint192 maxTradeVolume) external returns (bool swapped); + /// Register `asset` /// If either the erc20 address or the asset was already registered, fail /// @return true if the erc20 address was not already registered. diff --git a/contracts/interfaces/IBackingManager.sol b/contracts/interfaces/IBackingManager.sol index fef9a3491b..df4f18553c 100644 --- a/contracts/interfaces/IBackingManager.sol +++ b/contracts/interfaces/IBackingManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IAssetRegistry.sol"; diff --git a/contracts/interfaces/IBasketHandler.sol b/contracts/interfaces/IBasketHandler.sol index 315790554e..d5f21969f7 100644 --- a/contracts/interfaces/IBasketHandler.sol +++ b/contracts/interfaces/IBasketHandler.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../libraries/Fixed.sol"; diff --git a/contracts/interfaces/IBroker.sol b/contracts/interfaces/IBroker.sol index fdd1fd3d10..c0903bde9f 100644 --- a/contracts/interfaces/IBroker.sol +++ b/contracts/interfaces/IBroker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@reserve-protocol/trusted-fillers/contracts/interfaces/ITrustedFillerRegistry.sol"; diff --git a/contracts/interfaces/IComponent.sol b/contracts/interfaces/IComponent.sol index 88d221e4b6..5aa699073b 100644 --- a/contracts/interfaces/IComponent.sol +++ b/contracts/interfaces/IComponent.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IMain.sol"; import "./IVersioned.sol"; diff --git a/contracts/interfaces/IDeployer.sol b/contracts/interfaces/IDeployer.sol index db5f6fc704..ede062536a 100644 --- a/contracts/interfaces/IDeployer.sol +++ b/contracts/interfaces/IDeployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../libraries/Throttle.sol"; @@ -121,9 +121,5 @@ interface IDeployer is IVersioned { Registries calldata registries ) external returns (address); - /// Deploys a new RTokenAsset instance. Not needed during normal deployment flow - /// @param maxTradeVolume {UoA} The maximum trade volume for the RTokenAsset - function deployRTokenAsset(IRToken rToken, uint192 maxTradeVolume) external returns (IAsset); - function implementations() external view returns (Implementations memory); } diff --git a/contracts/interfaces/IDeployerRegistry.sol b/contracts/interfaces/IDeployerRegistry.sol index 25e0a33bd5..d8d6f8ec59 100644 --- a/contracts/interfaces/IDeployerRegistry.sol +++ b/contracts/interfaces/IDeployerRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IDeployer.sol"; diff --git a/contracts/interfaces/IDistributor.sol b/contracts/interfaces/IDistributor.sol index 32de4b401e..e248d7dd86 100644 --- a/contracts/interfaces/IDistributor.sol +++ b/contracts/interfaces/IDistributor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IComponent.sol"; diff --git a/contracts/interfaces/IFacade.sol b/contracts/interfaces/IFacade.sol index 0d4549183d..9e7412b7dd 100644 --- a/contracts/interfaces/IFacade.sol +++ b/contracts/interfaces/IFacade.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../facade/facets/ActFacet.sol"; import "../facade/facets/ReadFacet.sol"; diff --git a/contracts/interfaces/IFacadeMonitor.sol b/contracts/interfaces/IFacadeMonitor.sol index 0794a8e2f9..d9ad87d0cc 100644 --- a/contracts/interfaces/IFacadeMonitor.sol +++ b/contracts/interfaces/IFacadeMonitor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IRToken.sol"; diff --git a/contracts/interfaces/IFacadeTest.sol b/contracts/interfaces/IFacadeTest.sol index 6d2de1ece5..815dfd9348 100644 --- a/contracts/interfaces/IFacadeTest.sol +++ b/contracts/interfaces/IFacadeTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IRToken.sol"; import "./IStRSR.sol"; diff --git a/contracts/interfaces/IFacadeWrite.sol b/contracts/interfaces/IFacadeWrite.sol index a8ac83daac..d5d80ad651 100644 --- a/contracts/interfaces/IFacadeWrite.sol +++ b/contracts/interfaces/IFacadeWrite.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IDeployer.sol"; diff --git a/contracts/interfaces/IFurnace.sol b/contracts/interfaces/IFurnace.sol index 170cb4c554..3c65be0cd6 100644 --- a/contracts/interfaces/IFurnace.sol +++ b/contracts/interfaces/IFurnace.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../libraries/Fixed.sol"; import "./IComponent.sol"; diff --git a/contracts/interfaces/IGnosis.sol b/contracts/interfaces/IGnosis.sol index 4439de8055..275443059a 100644 --- a/contracts/interfaces/IGnosis.sol +++ b/contracts/interfaces/IGnosis.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/interfaces/IMain.sol b/contracts/interfaces/IMain.sol index 876b4e8010..80aa0e06ac 100644 --- a/contracts/interfaces/IMain.sol +++ b/contracts/interfaces/IMain.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/interfaces/IRToken.sol b/contracts/interfaces/IRToken.sol index 7a6049e021..ce62e8db27 100644 --- a/contracts/interfaces/IRToken.sol +++ b/contracts/interfaces/IRToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; // solhint-disable-next-line max-line-length diff --git a/contracts/interfaces/IRTokenOracle.sol b/contracts/interfaces/IRTokenOracle.sol index e4f42dde38..0cd73dee1a 100644 --- a/contracts/interfaces/IRTokenOracle.sol +++ b/contracts/interfaces/IRTokenOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // RToken Oracle Interface interface IRTokenOracle { diff --git a/contracts/interfaces/IRevenueTrader.sol b/contracts/interfaces/IRevenueTrader.sol index c8cea3f4bd..4692bf3aa2 100644 --- a/contracts/interfaces/IRevenueTrader.sol +++ b/contracts/interfaces/IRevenueTrader.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IComponent.sol"; import "./ITrading.sol"; diff --git a/contracts/interfaces/IRewardable.sol b/contracts/interfaces/IRewardable.sol index 44cfa3352b..d1802380b3 100644 --- a/contracts/interfaces/IRewardable.sol +++ b/contracts/interfaces/IRewardable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/interfaces/IStRSR.sol b/contracts/interfaces/IStRSR.sol index 4cf9d280d1..24c9233693 100644 --- a/contracts/interfaces/IStRSR.sol +++ b/contracts/interfaces/IStRSR.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; // solhint-disable-next-line max-line-length diff --git a/contracts/interfaces/IStRSRVotes.sol b/contracts/interfaces/IStRSRVotes.sol index 128b86d75c..8e620eb4aa 100644 --- a/contracts/interfaces/IStRSRVotes.sol +++ b/contracts/interfaces/IStRSRVotes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/governance/utils/IVotesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/interfaces/IERC5805Upgradeable.sol"; diff --git a/contracts/interfaces/ITrade.sol b/contracts/interfaces/ITrade.sol index dddec70325..bcfbcc82d2 100644 --- a/contracts/interfaces/ITrade.sol +++ b/contracts/interfaces/ITrade.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "./IBroker.sol"; diff --git a/contracts/interfaces/ITrading.sol b/contracts/interfaces/ITrading.sol index 842a12487d..923153e800 100644 --- a/contracts/interfaces/ITrading.sol +++ b/contracts/interfaces/ITrading.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../libraries/Fixed.sol"; diff --git a/contracts/interfaces/IVersioned.sol b/contracts/interfaces/IVersioned.sol index b7d98407c4..a335eacd58 100644 --- a/contracts/interfaces/IVersioned.sol +++ b/contracts/interfaces/IVersioned.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IVersioned { function version() external view returns (string memory); diff --git a/contracts/libraries/Allowance.sol b/contracts/libraries/Allowance.sol index bd5fea1bd8..8c4436fba6 100644 --- a/contracts/libraries/Allowance.sol +++ b/contracts/libraries/Allowance.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IERC20ApproveOnly { function approve(address spender, uint256 value) external; diff --git a/contracts/libraries/Array.sol b/contracts/libraries/Array.sol index 5a46e97ff3..4c6c7ffaf9 100644 --- a/contracts/libraries/Array.sol +++ b/contracts/libraries/Array.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/libraries/Fixed.sol b/contracts/libraries/Fixed.sol index c075b79deb..699f64572c 100644 --- a/contracts/libraries/Fixed.sol +++ b/contracts/libraries/Fixed.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BlueOak-1.0.0 // solhint-disable func-name-mixedcase func-visibility // slither-disable-start divide-before-multiply -pragma solidity 0.8.19; +pragma solidity 0.8.28; /// @title FixedPoint, a fixed-point arithmetic library defining the custom type uint192 /// @author Matt Elder and the Reserve Team diff --git a/contracts/libraries/Permit.sol b/contracts/libraries/Permit.sol index ecda68e89d..1c79c45a6f 100644 --- a/contracts/libraries/Permit.sol +++ b/contracts/libraries/Permit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/cryptography/SignatureCheckerUpgradeable.sol"; diff --git a/contracts/libraries/String.sol b/contracts/libraries/String.sol index 53a473fe5a..356467623f 100644 --- a/contracts/libraries/String.sol +++ b/contracts/libraries/String.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // From https://gist.github.com/ottodevs/c43d0a8b4b891ac2da675f825b1d1dbf library StringLib { diff --git a/contracts/libraries/Throttle.sol b/contracts/libraries/Throttle.sol index 8619a3d5a9..900ecd56e8 100644 --- a/contracts/libraries/Throttle.sol +++ b/contracts/libraries/Throttle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./Fixed.sol"; diff --git a/contracts/libraries/test/ArrayCallerMock.sol b/contracts/libraries/test/ArrayCallerMock.sol index ab823990b4..5f3d88e2c6 100644 --- a/contracts/libraries/test/ArrayCallerMock.sol +++ b/contracts/libraries/test/ArrayCallerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "../Array.sol"; diff --git a/contracts/libraries/test/FixedCallerMock.sol b/contracts/libraries/test/FixedCallerMock.sol index f86dd1cd09..f3702aad30 100644 --- a/contracts/libraries/test/FixedCallerMock.sol +++ b/contracts/libraries/test/FixedCallerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "../Fixed.sol"; diff --git a/contracts/libraries/test/StringCallerMock.sol b/contracts/libraries/test/StringCallerMock.sol index 7b3e39bc02..2c4b671307 100644 --- a/contracts/libraries/test/StringCallerMock.sol +++ b/contracts/libraries/test/StringCallerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "../String.sol"; diff --git a/contracts/mixins/Auth.sol b/contracts/mixins/Auth.sol index 0b8028c2f7..ea9156d398 100644 --- a/contracts/mixins/Auth.sol +++ b/contracts/mixins/Auth.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "../interfaces/IMain.sol"; diff --git a/contracts/mixins/ComponentRegistry.sol b/contracts/mixins/ComponentRegistry.sol index 0bafd742c4..00b288d59a 100644 --- a/contracts/mixins/ComponentRegistry.sol +++ b/contracts/mixins/ComponentRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; diff --git a/contracts/mixins/Versioned.sol b/contracts/mixins/Versioned.sol index 43a00d22a2..94d275cb85 100644 --- a/contracts/mixins/Versioned.sol +++ b/contracts/mixins/Versioned.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../interfaces/IVersioned.sol"; diff --git a/contracts/mocks/AssetPluginRegistryMock.sol b/contracts/mocks/AssetPluginRegistryMock.sol index 14aede2c95..d373a567f2 100644 --- a/contracts/mocks/AssetPluginRegistryMock.sol +++ b/contracts/mocks/AssetPluginRegistryMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; contract AssetPluginRegistryMock { function isValidAsset(bytes32, address) public view returns (bool) { diff --git a/contracts/mocks/DeployerMock.sol b/contracts/mocks/DeployerMock.sol index d6e57d03d9..1672b54e58 100644 --- a/contracts/mocks/DeployerMock.sol +++ b/contracts/mocks/DeployerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../mixins/Versioned.sol"; import "../interfaces/IDeployer.sol"; diff --git a/contracts/p0/AssetRegistry.sol b/contracts/p0/AssetRegistry.sol index a0e8bded18..37eb43b9a7 100644 --- a/contracts/p0/AssetRegistry.sol +++ b/contracts/p0/AssetRegistry.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "../plugins/assets/RTokenAsset.sol"; import "../interfaces/IMain.sol"; import "./mixins/Component.sol"; @@ -42,10 +43,23 @@ contract AssetRegistryP0 is ComponentP0, IAssetRegistry { lastRefresh = uint48(block.timestamp); } + /// Register a new JIT-deployed RTokenAsset instance + /// @param maxTradeVolume {UoA} The maximum trade volume for the RTokenAsset + /// @return swapped If the asset was swapped for a previously-registered asset + /// @custom:governance + function registerNewRTokenAsset(uint192 maxTradeVolume) + external + governance + returns (bool swapped) + { + swapped = _registerIgnoringCollisions(new RTokenAsset(main.rToken(), maxTradeVolume)); + } + /// Forbids registering a different asset for an ERC20 that is already registered /// @return If the asset was moved from unregistered to registered /// @custom:governance function register(IAsset asset) external governance returns (bool) { + require(address(asset.erc20()) != address(main.rToken()), "cannot register RToken"); return _register(asset); } @@ -54,6 +68,7 @@ contract AssetRegistryP0 is ComponentP0, IAssetRegistry { /// @return swapped If the asset was swapped for a previously-registered asset /// @custom:governance function swapRegistered(IAsset asset) external governance returns (bool swapped) { + require(address(asset.erc20()) != address(main.rToken()), "cannot swap RToken"); require(_erc20s.contains(address(asset.erc20())), "no ERC20 collision"); assert(assets[asset.erc20()] != IAsset(address(0))); @@ -70,6 +85,7 @@ contract AssetRegistryP0 is ComponentP0, IAssetRegistry { /// Unregister an asset, requiring that it is already registered /// @custom:governance function unregister(IAsset asset) external governance { + require(address(asset.erc20()) != address(main.rToken()), "cannot unregister RToken"); require(_erc20s.contains(address(asset.erc20())), "no asset to unregister"); require(assets[asset.erc20()] == asset, "asset not found"); diff --git a/contracts/p0/BackingManager.sol b/contracts/p0/BackingManager.sol index de11a8a827..752c94ccaf 100644 --- a/contracts/p0/BackingManager.sol +++ b/contracts/p0/BackingManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/BasketHandler.sol b/contracts/p0/BasketHandler.sol index a828d2986b..aca8db918a 100644 --- a/contracts/p0/BasketHandler.sol +++ b/contracts/p0/BasketHandler.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/Broker.sol b/contracts/p0/Broker.sol index 902d1b0ed3..fe07717a39 100644 --- a/contracts/p0/Broker.sol +++ b/contracts/p0/Broker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/p0/Deployer.sol b/contracts/p0/Deployer.sol index bdf8d4167e..60a83e3591 100644 --- a/contracts/p0/Deployer.sol +++ b/contracts/p0/Deployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../plugins/assets/Asset.sol"; @@ -148,14 +148,17 @@ contract DeployerP0 is IDeployer, Versioned { params.redemptionThrottle ); - // Deploy RToken/RSR Assets - IAsset[] memory assets = new IAsset[](2); - assets[0] = new RTokenAsset(components.rToken, params.rTokenMaxTradeVolume); - assets[1] = rsrAsset; - - // Init Asset Registry + // Register RSR Asset + IAsset[] memory assets = new IAsset[](1); + assets[0] = rsrAsset; main.assetRegistry().init(main, assets); + // Register RToken Asset + require( + main.assetRegistry().registerNewRTokenAsset(params.rTokenMaxTradeVolume), + "RTokenAsset already registered" + ); + // Transfer Ownership main.grantRole(OWNER, owner); main.renounceRole(OWNER, address(this)); diff --git a/contracts/p0/Distributor.sol b/contracts/p0/Distributor.sol index 1f2a18700f..c6a88d4edf 100644 --- a/contracts/p0/Distributor.sol +++ b/contracts/p0/Distributor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/Furnace.sol b/contracts/p0/Furnace.sol index 53fd90ebb5..ed503ff059 100644 --- a/contracts/p0/Furnace.sol +++ b/contracts/p0/Furnace.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../libraries/Fixed.sol"; import "../interfaces/IFurnace.sol"; diff --git a/contracts/p0/Main.sol b/contracts/p0/Main.sol index 3948d51f83..52c89eac66 100644 --- a/contracts/p0/Main.sol +++ b/contracts/p0/Main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/RToken.sol b/contracts/p0/RToken.sol index bcc7c9f283..7f687d3a24 100644 --- a/contracts/p0/RToken.sol +++ b/contracts/p0/RToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/p0/RevenueTrader.sol b/contracts/p0/RevenueTrader.sol index 8fecf2eb76..079a6d0799 100644 --- a/contracts/p0/RevenueTrader.sol +++ b/contracts/p0/RevenueTrader.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/StRSR.sol b/contracts/p0/StRSR.sol index 4257579956..f85f88bbbd 100644 --- a/contracts/p0/StRSR.sol +++ b/contracts/p0/StRSR.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/interfaces/IERC1271Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol"; diff --git a/contracts/p0/mixins/Component.sol b/contracts/p0/mixins/Component.sol index 7e62372ade..35fb15b0e9 100644 --- a/contracts/p0/mixins/Component.sol +++ b/contracts/p0/mixins/Component.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; diff --git a/contracts/p0/mixins/Rewardable.sol b/contracts/p0/mixins/Rewardable.sol index a74a250016..3f6731a8bf 100644 --- a/contracts/p0/mixins/Rewardable.sol +++ b/contracts/p0/mixins/Rewardable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/Address.sol"; import "./Component.sol"; diff --git a/contracts/p0/mixins/Trading.sol b/contracts/p0/mixins/Trading.sol index 1dd27487ef..855741a0a7 100644 --- a/contracts/p0/mixins/Trading.sol +++ b/contracts/p0/mixins/Trading.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p0/mixins/TradingLib.sol b/contracts/p0/mixins/TradingLib.sol index 4d18250a3d..deea59f831 100644 --- a/contracts/p0/mixins/TradingLib.sol +++ b/contracts/p0/mixins/TradingLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../interfaces/IAsset.sol"; diff --git a/contracts/p1/AssetRegistry.sol b/contracts/p1/AssetRegistry.sol index 3918990b47..82e1911c05 100644 --- a/contracts/p1/AssetRegistry.sol +++ b/contracts/p1/AssetRegistry.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "../plugins/assets/RTokenAsset.sol"; import "../interfaces/IAssetRegistry.sol"; import "../interfaces/IMain.sol"; import "./mixins/Component.sol"; @@ -68,6 +69,18 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { lastRefresh = uint48(block.timestamp); // safer to do this at end than start, actually } + /// Register a new JIT-deployed RTokenAsset instance + /// @param maxTradeVolume {UoA} The maximum trade volume for the RTokenAsset + /// @return swapped If the asset was swapped for a previously-registered asset + /// @custom:governance + function registerNewRTokenAsset(uint192 maxTradeVolume) + external + governance + returns (bool swapped) + { + swapped = _registerIgnoringCollisions(new RTokenAsset(main.rToken(), maxTradeVolume)); + } + /// Register `asset` /// If either the erc20 address or the asset was already registered, fail /// @return true if the erc20 address was not already registered. @@ -76,6 +89,7 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { // effects: assets' = assets.set(asset.erc20(), asset) // returns: (asset.erc20 not in keys(assets)) function register(IAsset asset) external governance returns (bool) { + require(address(asset.erc20()) != address(main.rToken()), "cannot register RToken"); return _register(asset); } @@ -88,6 +102,7 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { // effects: assets' = assets + {asset.erc20(): asset} // actions: if asset.erc20() is in basketHandler's basket then basketHandler.disableBasket() function swapRegistered(IAsset asset) external governance returns (bool swapped) { + require(address(asset.erc20()) != address(main.rToken()), "cannot swap RToken"); require(_erc20s.contains(address(asset.erc20())), "no ERC20 collision"); try basketHandler.quantity{ gas: _reserveGas() }(asset.erc20()) returns (uint192 quantity) { @@ -106,6 +121,7 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { // checks: assets[asset.erc20()] == asset // effects: assets' = assets - {asset.erc20():_} + {asset.erc20(), asset} function unregister(IAsset asset) external governance { + require(address(asset.erc20()) != address(main.rToken()), "cannot unregister RToken"); require(_erc20s.contains(address(asset.erc20())), "no asset to unregister"); require(assets[asset.erc20()] == asset, "asset not found"); @@ -168,19 +184,21 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { /// @inheritdoc IAssetRegistry function validateCurrentAssets() external view { - Registry memory registry = getRegistry(); AssetPluginRegistry assetPluginRegistry = main.assetPluginRegistry(); if (address(assetPluginRegistry) != address(0)) { + bytes32 versionHash = keccak256(abi.encodePacked(this.version())); + address rToken = address(main.rToken()); + + Registry memory registry = getRegistry(); + uint256 assetLen = registry.assets.length; for (uint256 i = 0; i < assetLen; ++i) { IAsset asset = registry.assets[i]; require( - assetPluginRegistry.isValidAsset( - keccak256(abi.encodePacked(this.version())), - address(asset) - ), + address(asset.erc20()) == address(rToken) || + assetPluginRegistry.isValidAsset(versionHash, address(asset)), "unsupported asset" ); } @@ -192,6 +210,8 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { return _erc20s.length(); } + // === Internal === + /// Register an asset /// Forbids registering a different asset for an ERC20 that is already registered /// @return registered If the asset was moved from unregistered to registered @@ -218,18 +238,22 @@ contract AssetRegistryP1 is ComponentP1, IAssetRegistry { ); } - AssetPluginRegistry assetPluginRegistry = main.assetPluginRegistry(); - if (address(assetPluginRegistry) != address(0)) { - require( - main.assetPluginRegistry().isValidAsset( - keccak256(abi.encodePacked(this.version())), - address(asset) - ), - "unsupported asset" - ); + IERC20Metadata erc20 = asset.erc20(); + + if (address(erc20) != address(main.rToken())) { + AssetPluginRegistry assetPluginRegistry = main.assetPluginRegistry(); + + if (address(assetPluginRegistry) != address(0)) { + require( + assetPluginRegistry.isValidAsset( + keccak256(abi.encodePacked(this.version())), + address(asset) + ), + "unsupported asset" + ); + } } - IERC20Metadata erc20 = asset.erc20(); if (_erc20s.contains(address(erc20))) { if (assets[erc20] == asset) return false; else emit AssetUnregistered(erc20, assets[erc20]); diff --git a/contracts/p1/BackingManager.sol b/contracts/p1/BackingManager.sol index 5c1e60c174..d2e5b6aea3 100644 --- a/contracts/p1/BackingManager.sol +++ b/contracts/p1/BackingManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p1/BasketHandler.sol b/contracts/p1/BasketHandler.sol index b67bccf2ea..97fab98355 100644 --- a/contracts/p1/BasketHandler.sol +++ b/contracts/p1/BasketHandler.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p1/Broker.sol b/contracts/p1/Broker.sol index 7ca1cee353..a13b0c63a1 100644 --- a/contracts/p1/Broker.sol +++ b/contracts/p1/Broker.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; diff --git a/contracts/p1/Deployer.sol b/contracts/p1/Deployer.sol index 39346105e2..32a494734b 100644 --- a/contracts/p1/Deployer.sol +++ b/contracts/p1/Deployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/proxy/Clones.sol"; import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -17,7 +17,6 @@ import "../interfaces/IRToken.sol"; import "../interfaces/IStRSR.sol"; import "../mixins/Versioned.sol"; import "../plugins/assets/Asset.sol"; -import "../plugins/assets/RTokenAsset.sol"; import "./Main.sol"; import "../libraries/String.sol"; import "../plugins/trading/GnosisTrade.sol"; @@ -251,14 +250,6 @@ contract DeployerP1 is IDeployer, Versioned { params.redemptionThrottle ); - // Deploy RToken/RSR Assets - IAsset[] memory assets = new IAsset[](2); - assets[0] = new RTokenAsset(components.rToken, params.rTokenMaxTradeVolume); - assets[1] = rsrAsset; - - // Init Asset Registry - components.assetRegistry.init(main, assets); - // Assign DAO Registries if (address(registries.versionRegistry) != address(0)) { main.setVersionRegistry(registries.versionRegistry); @@ -270,6 +261,17 @@ contract DeployerP1 is IDeployer, Versioned { main.setDAOFeeRegistry(registries.daoFeeRegistry); } + // Register RSR Asset + IAsset[] memory assets = new IAsset[](1); + assets[0] = rsrAsset; + components.assetRegistry.init(main, assets); + + // Register RToken Asset + require( + components.assetRegistry.registerNewRTokenAsset(params.rTokenMaxTradeVolume), + "RTokenAsset already registered" + ); + // Transfer Ownership main.grantRole(OWNER, owner); main.renounceRole(OWNER, address(this)); @@ -278,15 +280,4 @@ contract DeployerP1 is IDeployer, Versioned { return (address(components.rToken)); } - - /// Deploys a new RTokenAsset instance. Not needed during normal deployment flow - /// @param maxTradeVolume {UoA} The maximum trade volume for the RTokenAsset - /// @return rTokenAsset The address of the newly deployed RTokenAsset - function deployRTokenAsset(IRToken rToken, uint192 maxTradeVolume) - external - returns (IAsset rTokenAsset) - { - rTokenAsset = new RTokenAsset(rToken, maxTradeVolume); - emit RTokenAssetCreated(rToken, rTokenAsset); - } } diff --git a/contracts/p1/Distributor.sol b/contracts/p1/Distributor.sol index 11b914adaa..b3a8f01816 100644 --- a/contracts/p1/Distributor.sol +++ b/contracts/p1/Distributor.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p1/Furnace.sol b/contracts/p1/Furnace.sol index 1ea0a43581..72755f9d46 100644 --- a/contracts/p1/Furnace.sol +++ b/contracts/p1/Furnace.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../libraries/Fixed.sol"; import "../interfaces/IFurnace.sol"; diff --git a/contracts/p1/Main.sol b/contracts/p1/Main.sol index 14a2a542da..eee2dd0002 100644 --- a/contracts/p1/Main.sol +++ b/contracts/p1/Main.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; diff --git a/contracts/p1/RToken.sol b/contracts/p1/RToken.sol index bcf4150cc9..7989a802c5 100644 --- a/contracts/p1/RToken.sol +++ b/contracts/p1/RToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; diff --git a/contracts/p1/RevenueTrader.sol b/contracts/p1/RevenueTrader.sol index 6ddc8091a9..d51d048073 100644 --- a/contracts/p1/RevenueTrader.sol +++ b/contracts/p1/RevenueTrader.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p1/StRSR.sol b/contracts/p1/StRSR.sol index d9264cdb5f..a98d749cc4 100644 --- a/contracts/p1/StRSR.sol +++ b/contracts/p1/StRSR.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/interfaces/IERC1271Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; @@ -195,7 +195,7 @@ abstract contract StRSRP1 is Initializable, ComponentP1, IStRSR, EIP712Upgradeab rsr = IERC20(address(main_.rsr())); payoutLastPaid = uint48(block.timestamp); - rsrRewardsAtLastPayout = main_.rsr().balanceOf(address(this)); + rsrRewardsAtLastPayout = rsr.balanceOf(address(this)); setUnstakingDelay(unstakingDelay_); setRewardRatio(rewardRatio_); setWithdrawalLeak(withdrawalLeak_); diff --git a/contracts/p1/StRSRVotes.sol b/contracts/p1/StRSRVotes.sol index aaead2ee96..e185637582 100644 --- a/contracts/p1/StRSRVotes.sol +++ b/contracts/p1/StRSRVotes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol"; diff --git a/contracts/p1/mixins/BasketLib.sol b/contracts/p1/mixins/BasketLib.sol index 3e5c3eb02a..adda41231b 100644 --- a/contracts/p1/mixins/BasketLib.sol +++ b/contracts/p1/mixins/BasketLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; diff --git a/contracts/p1/mixins/Component.sol b/contracts/p1/mixins/Component.sol index bebe5ada7e..09dae1fbab 100644 --- a/contracts/p1/mixins/Component.sol +++ b/contracts/p1/mixins/Component.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; diff --git a/contracts/p1/mixins/GlobalReentrancyGuard.sol b/contracts/p1/mixins/GlobalReentrancyGuard.sol index 30ada9c361..f743cebace 100644 --- a/contracts/p1/mixins/GlobalReentrancyGuard.sol +++ b/contracts/p1/mixins/GlobalReentrancyGuard.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length // Based on OpenZeppelin Upgradeable Contracts (last updated v5.1.0) (utils/ReentrancyGuardUpgradeable.sol) diff --git a/contracts/p1/mixins/RecollateralizationLib.sol b/contracts/p1/mixins/RecollateralizationLib.sol index 402aabc2be..3242a1761b 100644 --- a/contracts/p1/mixins/RecollateralizationLib.sol +++ b/contracts/p1/mixins/RecollateralizationLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/p1/mixins/RewardableLib.sol b/contracts/p1/mixins/RewardableLib.sol index 79cb91426f..aeac1f6407 100644 --- a/contracts/p1/mixins/RewardableLib.sol +++ b/contracts/p1/mixins/RewardableLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/p1/mixins/TradeLib.sol b/contracts/p1/mixins/TradeLib.sol index 83e565e63d..eab2df2c7d 100644 --- a/contracts/p1/mixins/TradeLib.sol +++ b/contracts/p1/mixins/TradeLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../interfaces/IAsset.sol"; diff --git a/contracts/p1/mixins/Trading.sol b/contracts/p1/mixins/Trading.sol index b00c425013..239be92dd4 100644 --- a/contracts/p1/mixins/Trading.sol +++ b/contracts/p1/mixins/Trading.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/assets/AppreciatingFiatCollateral.sol b/contracts/plugins/assets/AppreciatingFiatCollateral.sol index 4c6b9b76b8..b5e5fd4f6c 100644 --- a/contracts/plugins/assets/AppreciatingFiatCollateral.sol +++ b/contracts/plugins/assets/AppreciatingFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../interfaces/IAsset.sol"; diff --git a/contracts/plugins/assets/Asset.sol b/contracts/plugins/assets/Asset.sol index b13eed30b2..10c9f1cf43 100644 --- a/contracts/plugins/assets/Asset.sol +++ b/contracts/plugins/assets/Asset.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/ERC4626FiatCollateral.sol b/contracts/plugins/assets/ERC4626FiatCollateral.sol index 3c5b73c904..51b72f8d30 100644 --- a/contracts/plugins/assets/ERC4626FiatCollateral.sol +++ b/contracts/plugins/assets/ERC4626FiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import { Asset, AppreciatingFiatCollateral, CollateralConfig, IRewardable } from "./AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/EURFiatCollateral.sol b/contracts/plugins/assets/EURFiatCollateral.sol index b21ee6c63d..a9525658ab 100644 --- a/contracts/plugins/assets/EURFiatCollateral.sol +++ b/contracts/plugins/assets/EURFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/FiatCollateral.sol b/contracts/plugins/assets/FiatCollateral.sol index ff043fa9f5..e4a4243421 100644 --- a/contracts/plugins/assets/FiatCollateral.sol +++ b/contracts/plugins/assets/FiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../interfaces/IAsset.sol"; diff --git a/contracts/plugins/assets/L2LSDCollateral.sol b/contracts/plugins/assets/L2LSDCollateral.sol index 4167bea7cd..ffca99ce15 100644 --- a/contracts/plugins/assets/L2LSDCollateral.sol +++ b/contracts/plugins/assets/L2LSDCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { CEIL, FIX_MAX, FixLib, _safeWrap } from "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/NonFiatCollateral.sol b/contracts/plugins/assets/NonFiatCollateral.sol index bc5ccf0d3d..858d82886b 100644 --- a/contracts/plugins/assets/NonFiatCollateral.sol +++ b/contracts/plugins/assets/NonFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/OracleErrors.sol b/contracts/plugins/assets/OracleErrors.sol index 535ff002c6..f6b13b99c2 100644 --- a/contracts/plugins/assets/OracleErrors.sol +++ b/contracts/plugins/assets/OracleErrors.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // 0x19abf40e error StalePrice(); diff --git a/contracts/plugins/assets/OracleLib.sol b/contracts/plugins/assets/OracleLib.sol index 7e51b9b7be..b8bf02cfc4 100644 --- a/contracts/plugins/assets/OracleLib.sol +++ b/contracts/plugins/assets/OracleLib.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/RTokenAsset.sol b/contracts/plugins/assets/RTokenAsset.sol index 18eb3b4f3a..938032cf01 100644 --- a/contracts/plugins/assets/RTokenAsset.sol +++ b/contracts/plugins/assets/RTokenAsset.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../p1/mixins/RecollateralizationLib.sol"; import "../../interfaces/IMain.sol"; diff --git a/contracts/plugins/assets/SelfReferentialCollateral.sol b/contracts/plugins/assets/SelfReferentialCollateral.sol index 06007e07cb..6d12e5af05 100644 --- a/contracts/plugins/assets/SelfReferentialCollateral.sol +++ b/contracts/plugins/assets/SelfReferentialCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/VersionedAsset.sol b/contracts/plugins/assets/VersionedAsset.sol index b419449bbb..7cde39f95d 100644 --- a/contracts/plugins/assets/VersionedAsset.sol +++ b/contracts/plugins/assets/VersionedAsset.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../interfaces/IVersioned.sol"; diff --git a/contracts/plugins/assets/aave-v3/AaveV3FiatCollateral.sol b/contracts/plugins/assets/aave-v3/AaveV3FiatCollateral.sol index 2201a86970..e3938efc87 100644 --- a/contracts/plugins/assets/aave-v3/AaveV3FiatCollateral.sol +++ b/contracts/plugins/assets/aave-v3/AaveV3FiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../libraries/Fixed.sol"; import "../AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/aave-v3/mock/MockStaticATokenV3.sol b/contracts/plugins/assets/aave-v3/mock/MockStaticATokenV3.sol index 33fd031d93..859efc2981 100644 --- a/contracts/plugins/assets/aave-v3/mock/MockStaticATokenV3.sol +++ b/contracts/plugins/assets/aave-v3/mock/MockStaticATokenV3.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { StaticATokenV3LM, IPool, IRewardsController } from "../vendor/StaticATokenV3LM.sol"; diff --git a/contracts/plugins/assets/aave/ATokenFiatCollateral.sol b/contracts/plugins/assets/aave/ATokenFiatCollateral.sol index 0950cdb4c7..036b9747cb 100644 --- a/contracts/plugins/assets/aave/ATokenFiatCollateral.sol +++ b/contracts/plugins/assets/aave/ATokenFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/aerodrome/AerodromeGaugeWrapper.sol b/contracts/plugins/assets/aerodrome/AerodromeGaugeWrapper.sol index dc6ff7f5af..018ab5d1fb 100644 --- a/contracts/plugins/assets/aerodrome/AerodromeGaugeWrapper.sol +++ b/contracts/plugins/assets/aerodrome/AerodromeGaugeWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../erc20/RewardableERC20Wrapper.sol"; diff --git a/contracts/plugins/assets/aerodrome/AerodromePoolTokens.sol b/contracts/plugins/assets/aerodrome/AerodromePoolTokens.sol index fa62c625ee..58e0311dd5 100644 --- a/contracts/plugins/assets/aerodrome/AerodromePoolTokens.sol +++ b/contracts/plugins/assets/aerodrome/AerodromePoolTokens.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/aerodrome/AerodromeStableCollateral.sol b/contracts/plugins/assets/aerodrome/AerodromeStableCollateral.sol index 5c7965702b..aff12b4e6e 100644 --- a/contracts/plugins/assets/aerodrome/AerodromeStableCollateral.sol +++ b/contracts/plugins/assets/aerodrome/AerodromeStableCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./AerodromeVolatileCollateral.sol"; diff --git a/contracts/plugins/assets/aerodrome/AerodromeVolatileCollateral.sol b/contracts/plugins/assets/aerodrome/AerodromeVolatileCollateral.sol index 8b8e8bd9f6..404d88266b 100644 --- a/contracts/plugins/assets/aerodrome/AerodromeVolatileCollateral.sol +++ b/contracts/plugins/assets/aerodrome/AerodromeVolatileCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/aerodrome/vendor/IAeroGauge.sol b/contracts/plugins/assets/aerodrome/vendor/IAeroGauge.sol index 4611f5f505..8d4fc7400f 100644 --- a/contracts/plugins/assets/aerodrome/vendor/IAeroGauge.sol +++ b/contracts/plugins/assets/aerodrome/vendor/IAeroGauge.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IAeroGauge { error ZeroAmount(); diff --git a/contracts/plugins/assets/aerodrome/vendor/IAeroPool.sol b/contracts/plugins/assets/aerodrome/vendor/IAeroPool.sol index 7070453f6e..cbc8e119ff 100644 --- a/contracts/plugins/assets/aerodrome/vendor/IAeroPool.sol +++ b/contracts/plugins/assets/aerodrome/vendor/IAeroPool.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/aerodrome/vendor/IAeroRouter.sol b/contracts/plugins/assets/aerodrome/vendor/IAeroRouter.sol index c183e56f9c..f8ab0f251b 100644 --- a/contracts/plugins/assets/aerodrome/vendor/IAeroRouter.sol +++ b/contracts/plugins/assets/aerodrome/vendor/IAeroRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IAeroRouter { /// @notice Add liquidity of two tokens to a Pool diff --git a/contracts/plugins/assets/ankr/AnkrStakedEthCollateral.sol b/contracts/plugins/assets/ankr/AnkrStakedEthCollateral.sol index 871d0e248e..8bec4495d4 100644 --- a/contracts/plugins/assets/ankr/AnkrStakedEthCollateral.sol +++ b/contracts/plugins/assets/ankr/AnkrStakedEthCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/ankr/vendor/IAnkrETH.sol b/contracts/plugins/assets/ankr/vendor/IAnkrETH.sol index 660c8ae584..c13fb461f2 100644 --- a/contracts/plugins/assets/ankr/vendor/IAnkrETH.sol +++ b/contracts/plugins/assets/ankr/vendor/IAnkrETH.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/cbeth/CBETHCollateral.sol b/contracts/plugins/assets/cbeth/CBETHCollateral.sol index 87cf8e4d24..def31d30aa 100644 --- a/contracts/plugins/assets/cbeth/CBETHCollateral.sol +++ b/contracts/plugins/assets/cbeth/CBETHCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/cbeth/CBETHCollateralL2.sol b/contracts/plugins/assets/cbeth/CBETHCollateralL2.sol index e2e3eec971..88cba033d5 100644 --- a/contracts/plugins/assets/cbeth/CBETHCollateralL2.sol +++ b/contracts/plugins/assets/cbeth/CBETHCollateralL2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/cbeth/vendor/ICBEth.sol b/contracts/plugins/assets/cbeth/vendor/ICBEth.sol index a842a59f3e..7580d623d2 100644 --- a/contracts/plugins/assets/cbeth/vendor/ICBEth.sol +++ b/contracts/plugins/assets/cbeth/vendor/ICBEth.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/compoundv2/CTokenFiatCollateral.sol b/contracts/plugins/assets/compoundv2/CTokenFiatCollateral.sol index d679f98140..374051d2b5 100644 --- a/contracts/plugins/assets/compoundv2/CTokenFiatCollateral.sol +++ b/contracts/plugins/assets/compoundv2/CTokenFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/compoundv2/CTokenNonFiatCollateral.sol b/contracts/plugins/assets/compoundv2/CTokenNonFiatCollateral.sol index 38b7e95e61..f4c9ee23e4 100644 --- a/contracts/plugins/assets/compoundv2/CTokenNonFiatCollateral.sol +++ b/contracts/plugins/assets/compoundv2/CTokenNonFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/compoundv2/CTokenSelfReferentialCollateral.sol b/contracts/plugins/assets/compoundv2/CTokenSelfReferentialCollateral.sol index 7a358abf46..ab4e7613c5 100644 --- a/contracts/plugins/assets/compoundv2/CTokenSelfReferentialCollateral.sol +++ b/contracts/plugins/assets/compoundv2/CTokenSelfReferentialCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../erc20/RewardableERC20Wrapper.sol"; import "../AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/compoundv2/DEPRECATED_CTokenWrapper.sol b/contracts/plugins/assets/compoundv2/DEPRECATED_CTokenWrapper.sol index c4c5a10d80..ee7d6d5ae2 100644 --- a/contracts/plugins/assets/compoundv2/DEPRECATED_CTokenWrapper.sol +++ b/contracts/plugins/assets/compoundv2/DEPRECATED_CTokenWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../erc20/RewardableERC20Wrapper.sol"; diff --git a/contracts/plugins/assets/compoundv2/ICToken.sol b/contracts/plugins/assets/compoundv2/ICToken.sol index 2fa76ec185..c70b83b497 100644 --- a/contracts/plugins/assets/compoundv2/ICToken.sol +++ b/contracts/plugins/assets/compoundv2/ICToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/compoundv3/CFiatV3Wrapper.sol b/contracts/plugins/assets/compoundv3/CFiatV3Wrapper.sol index 8072bc39a3..23dd4d6dbe 100644 --- a/contracts/plugins/assets/compoundv3/CFiatV3Wrapper.sol +++ b/contracts/plugins/assets/compoundv3/CFiatV3Wrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "./vendor/CometInterface.sol"; diff --git a/contracts/plugins/assets/compoundv3/CTokenV3Collateral.sol b/contracts/plugins/assets/compoundv3/CTokenV3Collateral.sol index f6537f71c3..50cbc9c723 100644 --- a/contracts/plugins/assets/compoundv3/CTokenV3Collateral.sol +++ b/contracts/plugins/assets/compoundv3/CTokenV3Collateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/assets/compoundv3/CometHelpers.sol b/contracts/plugins/assets/compoundv3/CometHelpers.sol index bc67617cb5..fd19e2cea6 100644 --- a/contracts/plugins/assets/compoundv3/CometHelpers.sol +++ b/contracts/plugins/assets/compoundv3/CometHelpers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; contract CometHelpers { uint64 internal constant BASE_INDEX_SCALE = 1e15; diff --git a/contracts/plugins/assets/compoundv3/ICFiatV3Wrapper.sol b/contracts/plugins/assets/compoundv3/ICFiatV3Wrapper.sol index 1d73dd6358..f39fae81f5 100644 --- a/contracts/plugins/assets/compoundv3/ICFiatV3Wrapper.sol +++ b/contracts/plugins/assets/compoundv3/ICFiatV3Wrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/compoundv3/IWrappedERC20.sol b/contracts/plugins/assets/compoundv3/IWrappedERC20.sol index b9e08fca18..ed66643329 100644 --- a/contracts/plugins/assets/compoundv3/IWrappedERC20.sol +++ b/contracts/plugins/assets/compoundv3/IWrappedERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/compoundv3/WrappedERC20.sol b/contracts/plugins/assets/compoundv3/WrappedERC20.sol index 138d48e3cd..f3066abcf9 100644 --- a/contracts/plugins/assets/compoundv3/WrappedERC20.sol +++ b/contracts/plugins/assets/compoundv3/WrappedERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IWrappedERC20.sol"; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometCore.sol b/contracts/plugins/assets/compoundv3/vendor/CometCore.sol index 3626c0f3c5..c7730ad1dc 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometCore.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometCore.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CometStorage.sol"; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometExtInterface.sol b/contracts/plugins/assets/compoundv3/vendor/CometExtInterface.sol index 70d9664aac..2b2e294d52 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometExtInterface.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometExtInterface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; struct TotalsBasic { uint64 baseSupplyIndex; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometExtMock.sol b/contracts/plugins/assets/compoundv3/vendor/CometExtMock.sol index cc182262b2..c44334a131 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometExtMock.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometExtMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CometCore.sol"; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometInterface.sol b/contracts/plugins/assets/compoundv3/vendor/CometInterface.sol index b68bd08137..fdf9dfce6f 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometInterface.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometInterface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CometMainInterface.sol"; import "./CometExtInterface.sol"; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometMainInterface.sol b/contracts/plugins/assets/compoundv3/vendor/CometMainInterface.sol index 247bc7738a..84ec394a86 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometMainInterface.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometMainInterface.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; struct AssetInfo { uint8 offset; diff --git a/contracts/plugins/assets/compoundv3/vendor/CometStorage.sol b/contracts/plugins/assets/compoundv3/vendor/CometStorage.sol index 946b8983f4..23219f21b3 100644 --- a/contracts/plugins/assets/compoundv3/vendor/CometStorage.sol +++ b/contracts/plugins/assets/compoundv3/vendor/CometStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; /** * @title Compound's Comet Configuration Interface diff --git a/contracts/plugins/assets/compoundv3/vendor/IComet.sol b/contracts/plugins/assets/compoundv3/vendor/IComet.sol index e249a3663a..6be1d58b12 100644 --- a/contracts/plugins/assets/compoundv3/vendor/IComet.sol +++ b/contracts/plugins/assets/compoundv3/vendor/IComet.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IComet { function getReserves() external view returns (int256); diff --git a/contracts/plugins/assets/compoundv3/vendor/ICometConfigurator.sol b/contracts/plugins/assets/compoundv3/vendor/ICometConfigurator.sol index d92675a384..08c08d710b 100644 --- a/contracts/plugins/assets/compoundv3/vendor/ICometConfigurator.sol +++ b/contracts/plugins/assets/compoundv3/vendor/ICometConfigurator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface ICometConfigurator { struct Configuration { diff --git a/contracts/plugins/assets/compoundv3/vendor/ICometProxyAdmin.sol b/contracts/plugins/assets/compoundv3/vendor/ICometProxyAdmin.sol index bb778143fe..9cf0bf6b34 100644 --- a/contracts/plugins/assets/compoundv3/vendor/ICometProxyAdmin.sol +++ b/contracts/plugins/assets/compoundv3/vendor/ICometProxyAdmin.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; diff --git a/contracts/plugins/assets/compoundv3/vendor/ICometRewards.sol b/contracts/plugins/assets/compoundv3/vendor/ICometRewards.sol index f953f9edbb..d53800688a 100644 --- a/contracts/plugins/assets/compoundv3/vendor/ICometRewards.sol +++ b/contracts/plugins/assets/compoundv3/vendor/ICometRewards.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface ICometRewards { struct RewardConfig { diff --git a/contracts/plugins/assets/curve/CurveAppreciatingRTokenFiatCollateral.sol b/contracts/plugins/assets/curve/CurveAppreciatingRTokenFiatCollateral.sol index 2c9b7fb0f5..919d97bc8f 100644 --- a/contracts/plugins/assets/curve/CurveAppreciatingRTokenFiatCollateral.sol +++ b/contracts/plugins/assets/curve/CurveAppreciatingRTokenFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurveStableCollateral.sol"; diff --git a/contracts/plugins/assets/curve/CurveAppreciatingRTokenSelfReferentialCollateral.sol b/contracts/plugins/assets/curve/CurveAppreciatingRTokenSelfReferentialCollateral.sol index 4416c14851..014289aecd 100644 --- a/contracts/plugins/assets/curve/CurveAppreciatingRTokenSelfReferentialCollateral.sol +++ b/contracts/plugins/assets/curve/CurveAppreciatingRTokenSelfReferentialCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurveAppreciatingRTokenFiatCollateral.sol"; diff --git a/contracts/plugins/assets/curve/CurveRecursiveCollateral.sol b/contracts/plugins/assets/curve/CurveRecursiveCollateral.sol index 87b9d57640..64accb7f21 100644 --- a/contracts/plugins/assets/curve/CurveRecursiveCollateral.sol +++ b/contracts/plugins/assets/curve/CurveRecursiveCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/assets/curve/CurveStableCollateral.sol b/contracts/plugins/assets/curve/CurveStableCollateral.sol index ec6898dca6..68f98aea6a 100644 --- a/contracts/plugins/assets/curve/CurveStableCollateral.sol +++ b/contracts/plugins/assets/curve/CurveStableCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/assets/curve/CurveStableMetapoolCollateral.sol b/contracts/plugins/assets/curve/CurveStableMetapoolCollateral.sol index 95b85d6596..6b958675e7 100644 --- a/contracts/plugins/assets/curve/CurveStableMetapoolCollateral.sol +++ b/contracts/plugins/assets/curve/CurveStableMetapoolCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurveStableCollateral.sol"; diff --git a/contracts/plugins/assets/curve/CurveStableRTokenMetapoolCollateral.sol b/contracts/plugins/assets/curve/CurveStableRTokenMetapoolCollateral.sol index beb713def7..50eab5bcd3 100644 --- a/contracts/plugins/assets/curve/CurveStableRTokenMetapoolCollateral.sol +++ b/contracts/plugins/assets/curve/CurveStableRTokenMetapoolCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurveStableMetapoolCollateral.sol"; diff --git a/contracts/plugins/assets/curve/L2ConvexStableCollateral.sol b/contracts/plugins/assets/curve/L2ConvexStableCollateral.sol index 38c5bc5db3..a9a09103f2 100644 --- a/contracts/plugins/assets/curve/L2ConvexStableCollateral.sol +++ b/contracts/plugins/assets/curve/L2ConvexStableCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurveStableCollateral.sol"; diff --git a/contracts/plugins/assets/curve/PoolTokens.sol b/contracts/plugins/assets/curve/PoolTokens.sol index bc04b35be0..70270fa7b9 100644 --- a/contracts/plugins/assets/curve/PoolTokens.sol +++ b/contracts/plugins/assets/curve/PoolTokens.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/curve/crv/CurveGaugeWrapper.sol b/contracts/plugins/assets/curve/crv/CurveGaugeWrapper.sol index 8531894bb9..bc277ac9b3 100644 --- a/contracts/plugins/assets/curve/crv/CurveGaugeWrapper.sol +++ b/contracts/plugins/assets/curve/crv/CurveGaugeWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../../erc20/RewardableERC20Wrapper.sol"; diff --git a/contracts/plugins/assets/curve/cvx/vendor/ConvexInterfaces.sol b/contracts/plugins/assets/curve/cvx/vendor/ConvexInterfaces.sol index 5335f9a4e1..91688c5d5a 100644 --- a/contracts/plugins/assets/curve/cvx/vendor/ConvexInterfaces.sol +++ b/contracts/plugins/assets/curve/cvx/vendor/ConvexInterfaces.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface ICurveGauge { function deposit(uint256) external; diff --git a/contracts/plugins/assets/curve/cvx/vendor/IConvexStakingWrapper.sol b/contracts/plugins/assets/curve/cvx/vendor/IConvexStakingWrapper.sol index 970aaf3f72..831d8a8df6 100644 --- a/contracts/plugins/assets/curve/cvx/vendor/IConvexStakingWrapper.sol +++ b/contracts/plugins/assets/curve/cvx/vendor/IConvexStakingWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IConvexStakingWrapper { function crv() external returns (address); diff --git a/contracts/plugins/assets/curve/stakedao/StakeDAORecursiveCollateral.sol b/contracts/plugins/assets/curve/stakedao/StakeDAORecursiveCollateral.sol index 8d98302e01..c60efc2f53 100644 --- a/contracts/plugins/assets/curve/stakedao/StakeDAORecursiveCollateral.sol +++ b/contracts/plugins/assets/curve/stakedao/StakeDAORecursiveCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../CurveRecursiveCollateral.sol"; diff --git a/contracts/plugins/assets/dsr/SDaiCollateral.sol b/contracts/plugins/assets/dsr/SDaiCollateral.sol index 6e0e88c279..ebdadfa80f 100644 --- a/contracts/plugins/assets/dsr/SDaiCollateral.sol +++ b/contracts/plugins/assets/dsr/SDaiCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/erc20/RewardableERC20.sol b/contracts/plugins/assets/erc20/RewardableERC20.sol index ed741e15ec..86169b48ff 100644 --- a/contracts/plugins/assets/erc20/RewardableERC20.sol +++ b/contracts/plugins/assets/erc20/RewardableERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/assets/erc20/RewardableERC20Wrapper.sol b/contracts/plugins/assets/erc20/RewardableERC20Wrapper.sol index 3738b61d13..d64f0955e2 100644 --- a/contracts/plugins/assets/erc20/RewardableERC20Wrapper.sol +++ b/contracts/plugins/assets/erc20/RewardableERC20Wrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/assets/erc20/RewardableERC4626Vault.sol b/contracts/plugins/assets/erc20/RewardableERC4626Vault.sol index 3966e66ea9..7667cdff3c 100644 --- a/contracts/plugins/assets/erc20/RewardableERC4626Vault.sol +++ b/contracts/plugins/assets/erc20/RewardableERC4626Vault.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/assets/ethena/USDeFiatCollateral.sol b/contracts/plugins/assets/ethena/USDeFiatCollateral.sol index a419a494c2..f89e5e3c6a 100644 --- a/contracts/plugins/assets/ethena/USDeFiatCollateral.sol +++ b/contracts/plugins/assets/ethena/USDeFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { CollateralConfig } from "../AppreciatingFiatCollateral.sol"; import { ERC4626FiatCollateral } from "../ERC4626FiatCollateral.sol"; diff --git a/contracts/plugins/assets/ethx/ETHxCollateral.sol b/contracts/plugins/assets/ethx/ETHxCollateral.sol index 75930873fd..7422a95612 100644 --- a/contracts/plugins/assets/ethx/ETHxCollateral.sol +++ b/contracts/plugins/assets/ethx/ETHxCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { CEIL, FixLib, _safeWrap } from "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/ethx/vendor/IETHx.sol b/contracts/plugins/assets/ethx/vendor/IETHx.sol index acb2d1fc0c..71d44e30d2 100644 --- a/contracts/plugins/assets/ethx/vendor/IETHx.sol +++ b/contracts/plugins/assets/ethx/vendor/IETHx.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import { IStaderConfig } from "./IStaderConfig.sol"; diff --git a/contracts/plugins/assets/ethx/vendor/IStaderConfig.sol b/contracts/plugins/assets/ethx/vendor/IStaderConfig.sol index 4b15d4045b..521356d8d3 100644 --- a/contracts/plugins/assets/ethx/vendor/IStaderConfig.sol +++ b/contracts/plugins/assets/ethx/vendor/IStaderConfig.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IStaderConfig { function getStakePoolManager() external view returns (address); diff --git a/contracts/plugins/assets/ethx/vendor/IStaderOracle.sol b/contracts/plugins/assets/ethx/vendor/IStaderOracle.sol index a2b978ff34..66f3c03b58 100644 --- a/contracts/plugins/assets/ethx/vendor/IStaderOracle.sol +++ b/contracts/plugins/assets/ethx/vendor/IStaderOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; /// @title ExchangeRate /// @notice This struct holds data related to the exchange rate between ETH and ETHX. diff --git a/contracts/plugins/assets/ethx/vendor/IStaderStakePoolManager.sol b/contracts/plugins/assets/ethx/vendor/IStaderStakePoolManager.sol index 823bc7d385..cd0fca38e9 100644 --- a/contracts/plugins/assets/ethx/vendor/IStaderStakePoolManager.sol +++ b/contracts/plugins/assets/ethx/vendor/IStaderStakePoolManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IStaderStakePoolManager { /** diff --git a/contracts/plugins/assets/ethx/vendor/StaderOracleMock.sol b/contracts/plugins/assets/ethx/vendor/StaderOracleMock.sol index 035775b2ac..610b70af1e 100644 --- a/contracts/plugins/assets/ethx/vendor/StaderOracleMock.sol +++ b/contracts/plugins/assets/ethx/vendor/StaderOracleMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./IStaderConfig.sol"; import "./IStaderOracle.sol"; diff --git a/contracts/plugins/assets/frax-eth/SFraxEthCollateral.sol b/contracts/plugins/assets/frax-eth/SFraxEthCollateral.sol index 5c37fcd7d3..40c161ba09 100644 --- a/contracts/plugins/assets/frax-eth/SFraxEthCollateral.sol +++ b/contracts/plugins/assets/frax-eth/SFraxEthCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/frax-eth/vendor/IfrxEthMinter.sol b/contracts/plugins/assets/frax-eth/vendor/IfrxEthMinter.sol index b8a71ad335..fa4c277f55 100644 --- a/contracts/plugins/assets/frax-eth/vendor/IfrxEthMinter.sol +++ b/contracts/plugins/assets/frax-eth/vendor/IfrxEthMinter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; interface IfrxEthMinter { function submitAndDeposit(address recipient) external payable returns (uint256 shares); diff --git a/contracts/plugins/assets/frax-eth/vendor/IsfrxEth.sol b/contracts/plugins/assets/frax-eth/vendor/IsfrxEth.sol index fe904d0193..feb7053bc2 100644 --- a/contracts/plugins/assets/frax-eth/vendor/IsfrxEth.sol +++ b/contracts/plugins/assets/frax-eth/vendor/IsfrxEth.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/frax/SFraxCollateral.sol b/contracts/plugins/assets/frax/SFraxCollateral.sol index 3128adf501..e7e23366e4 100644 --- a/contracts/plugins/assets/frax/SFraxCollateral.sol +++ b/contracts/plugins/assets/frax/SFraxCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../libraries/Fixed.sol"; import "../../../vendor/oz/IERC4626.sol"; diff --git a/contracts/plugins/assets/lido/L2LidoStakedEthCollateral.sol b/contracts/plugins/assets/lido/L2LidoStakedEthCollateral.sol index ee3b9d533a..e80269e1d6 100644 --- a/contracts/plugins/assets/lido/L2LidoStakedEthCollateral.sol +++ b/contracts/plugins/assets/lido/L2LidoStakedEthCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/lido/LidoStakedEthCollateral.sol b/contracts/plugins/assets/lido/LidoStakedEthCollateral.sol index e25cef35b2..8bceb31580 100644 --- a/contracts/plugins/assets/lido/LidoStakedEthCollateral.sol +++ b/contracts/plugins/assets/lido/LidoStakedEthCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/lido/vendor/ISTETH.sol b/contracts/plugins/assets/lido/vendor/ISTETH.sol index 9a1b416421..77b1c13930 100644 --- a/contracts/plugins/assets/lido/vendor/ISTETH.sol +++ b/contracts/plugins/assets/lido/vendor/ISTETH.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/assets/lido/vendor/IWSTETH.sol b/contracts/plugins/assets/lido/vendor/IWSTETH.sol index 4f5446df5d..e2dbe88450 100644 --- a/contracts/plugins/assets/lido/vendor/IWSTETH.sol +++ b/contracts/plugins/assets/lido/vendor/IWSTETH.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/meta-morpho/MetaMorphoFiatCollateral.sol b/contracts/plugins/assets/meta-morpho/MetaMorphoFiatCollateral.sol index eb1f8435ff..a0e692e0cf 100644 --- a/contracts/plugins/assets/meta-morpho/MetaMorphoFiatCollateral.sol +++ b/contracts/plugins/assets/meta-morpho/MetaMorphoFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { CollateralConfig } from "../AppreciatingFiatCollateral.sol"; import { ERC4626FiatCollateral } from "../ERC4626FiatCollateral.sol"; diff --git a/contracts/plugins/assets/meta-morpho/MetaMorphoSelfReferentialCollateral.sol b/contracts/plugins/assets/meta-morpho/MetaMorphoSelfReferentialCollateral.sol index 651ed31fdd..1be02a9e61 100644 --- a/contracts/plugins/assets/meta-morpho/MetaMorphoSelfReferentialCollateral.sol +++ b/contracts/plugins/assets/meta-morpho/MetaMorphoSelfReferentialCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; diff --git a/contracts/plugins/assets/morpho-aave/IMorpho.sol b/contracts/plugins/assets/morpho-aave/IMorpho.sol index bc9ec4bce7..0e05199e93 100644 --- a/contracts/plugins/assets/morpho-aave/IMorpho.sol +++ b/contracts/plugins/assets/morpho-aave/IMorpho.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC20Metadata } from "../erc20/RewardableERC4626Vault.sol"; import { IERC4626 } from "../../../vendor/oz/IERC4626.sol"; diff --git a/contracts/plugins/assets/morpho-aave/MorphoAaveV2TokenisedDeposit.sol b/contracts/plugins/assets/morpho-aave/MorphoAaveV2TokenisedDeposit.sol index bc5f32abd8..25a361a57a 100644 --- a/contracts/plugins/assets/morpho-aave/MorphoAaveV2TokenisedDeposit.sol +++ b/contracts/plugins/assets/morpho-aave/MorphoAaveV2TokenisedDeposit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { IERC20, IERC20Metadata } from "@openzeppelin/contracts/interfaces/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/morpho-aave/MorphoFiatCollateral.sol b/contracts/plugins/assets/morpho-aave/MorphoFiatCollateral.sol index bf868400a0..a519795ceb 100644 --- a/contracts/plugins/assets/morpho-aave/MorphoFiatCollateral.sol +++ b/contracts/plugins/assets/morpho-aave/MorphoFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import { Asset, AppreciatingFiatCollateral, CollateralConfig, IRewardable } from "../AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/morpho-aave/MorphoNonFiatCollateral.sol b/contracts/plugins/assets/morpho-aave/MorphoNonFiatCollateral.sol index 1710441b05..2fc065985f 100644 --- a/contracts/plugins/assets/morpho-aave/MorphoNonFiatCollateral.sol +++ b/contracts/plugins/assets/morpho-aave/MorphoNonFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { CollateralConfig, MorphoFiatCollateral } from "./MorphoFiatCollateral.sol"; diff --git a/contracts/plugins/assets/morpho-aave/MorphoSelfReferentialCollateral.sol b/contracts/plugins/assets/morpho-aave/MorphoSelfReferentialCollateral.sol index 0a75dc6afb..ceec2869cb 100644 --- a/contracts/plugins/assets/morpho-aave/MorphoSelfReferentialCollateral.sol +++ b/contracts/plugins/assets/morpho-aave/MorphoSelfReferentialCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable max-line-length import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import { Asset, AppreciatingFiatCollateral, CollateralConfig, IRewardable } from "../AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/morpho-aave/MorphoTokenisedDeposit.sol b/contracts/plugins/assets/morpho-aave/MorphoTokenisedDeposit.sol index e2bf558fe5..3bde5f30c3 100644 --- a/contracts/plugins/assets/morpho-aave/MorphoTokenisedDeposit.sol +++ b/contracts/plugins/assets/morpho-aave/MorphoTokenisedDeposit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { IERC20, IERC20Metadata } from "@openzeppelin/contracts/interfaces/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/mountain/USDMCollateral.sol b/contracts/plugins/assets/mountain/USDMCollateral.sol index b49b93cbb7..6b42b03c3e 100644 --- a/contracts/plugins/assets/mountain/USDMCollateral.sol +++ b/contracts/plugins/assets/mountain/USDMCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../libraries/Fixed.sol"; import "../ERC4626FiatCollateral.sol"; diff --git a/contracts/plugins/assets/mountain/vendor/IChronicle.sol b/contracts/plugins/assets/mountain/vendor/IChronicle.sol index 66989bd7b6..a071bc820e 100644 --- a/contracts/plugins/assets/mountain/vendor/IChronicle.sol +++ b/contracts/plugins/assets/mountain/vendor/IChronicle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; /// Toll (whitelist) interface IToll { diff --git a/contracts/plugins/assets/origin/OETHCollateral.sol b/contracts/plugins/assets/origin/OETHCollateral.sol index e34bf6263c..d3a62c7099 100644 --- a/contracts/plugins/assets/origin/OETHCollateral.sol +++ b/contracts/plugins/assets/origin/OETHCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../ERC4626FiatCollateral.sol"; diff --git a/contracts/plugins/assets/origin/OETHCollateralL2Base.sol b/contracts/plugins/assets/origin/OETHCollateralL2Base.sol index f563afb40a..14187c0329 100644 --- a/contracts/plugins/assets/origin/OETHCollateralL2Base.sol +++ b/contracts/plugins/assets/origin/OETHCollateralL2Base.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/pirex-eth/ApxEthCollateral.sol b/contracts/plugins/assets/pirex-eth/ApxEthCollateral.sol index 471416b100..3a6f5ea5d1 100644 --- a/contracts/plugins/assets/pirex-eth/ApxEthCollateral.sol +++ b/contracts/plugins/assets/pirex-eth/ApxEthCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/math/Math.sol"; import "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/pirex-eth/vendor/IApxETH.sol b/contracts/plugins/assets/pirex-eth/vendor/IApxETH.sol index bb80aa89e8..3b47e7a86a 100644 --- a/contracts/plugins/assets/pirex-eth/vendor/IApxETH.sol +++ b/contracts/plugins/assets/pirex-eth/vendor/IApxETH.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/rocket-eth/RethCollateral.sol b/contracts/plugins/assets/rocket-eth/RethCollateral.sol index 11cb1d1af9..6f53f0799c 100644 --- a/contracts/plugins/assets/rocket-eth/RethCollateral.sol +++ b/contracts/plugins/assets/rocket-eth/RethCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; import { CEIL, FixLib, _safeWrap } from "../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/rocket-eth/vendor/IReth.sol b/contracts/plugins/assets/rocket-eth/vendor/IReth.sol index 8983c3b317..e9185e9e78 100644 --- a/contracts/plugins/assets/rocket-eth/vendor/IReth.sol +++ b/contracts/plugins/assets/rocket-eth/vendor/IReth.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/rocket-eth/vendor/IRocketNetworkBalances.sol b/contracts/plugins/assets/rocket-eth/vendor/IRocketNetworkBalances.sol index 117fb79799..a13a93bcb6 100644 --- a/contracts/plugins/assets/rocket-eth/vendor/IRocketNetworkBalances.sol +++ b/contracts/plugins/assets/rocket-eth/vendor/IRocketNetworkBalances.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IRocketNetworkBalances { function getTotalETHBalance() external view returns (uint256); diff --git a/contracts/plugins/assets/rocket-eth/vendor/IRocketStorage.sol b/contracts/plugins/assets/rocket-eth/vendor/IRocketStorage.sol index 4ae67598ed..27cc1815f2 100644 --- a/contracts/plugins/assets/rocket-eth/vendor/IRocketStorage.sol +++ b/contracts/plugins/assets/rocket-eth/vendor/IRocketStorage.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IRocketStorage { function setUint(bytes32 _key, uint256 _value) external; diff --git a/contracts/plugins/assets/sky/SUSDSCollateral.sol b/contracts/plugins/assets/sky/SUSDSCollateral.sol index 926af4bfd6..c33f296cf1 100644 --- a/contracts/plugins/assets/sky/SUSDSCollateral.sol +++ b/contracts/plugins/assets/sky/SUSDSCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../ERC4626FiatCollateral.sol"; diff --git a/contracts/plugins/assets/sky/vendor/ISUsds.sol b/contracts/plugins/assets/sky/vendor/ISUsds.sol index 43e1868d6c..5faf56a430 100644 --- a/contracts/plugins/assets/sky/vendor/ISUsds.sol +++ b/contracts/plugins/assets/sky/vendor/ISUsds.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface ISUsds { function vow() external view returns (address); diff --git a/contracts/plugins/assets/sky/vendor/SUsdcMock.sol b/contracts/plugins/assets/sky/vendor/SUsdcMock.sol index 695acaccd6..a579aa6a2b 100644 --- a/contracts/plugins/assets/sky/vendor/SUsdcMock.sol +++ b/contracts/plugins/assets/sky/vendor/SUsdcMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface VatLike { function hope(address) external; diff --git a/contracts/plugins/assets/stargate/DO_NOT_USE_StargatePoolETHCollateral.sol b/contracts/plugins/assets/stargate/DO_NOT_USE_StargatePoolETHCollateral.sol index 9182839d21..9815ad3c66 100644 --- a/contracts/plugins/assets/stargate/DO_NOT_USE_StargatePoolETHCollateral.sol +++ b/contracts/plugins/assets/stargate/DO_NOT_USE_StargatePoolETHCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../libraries/Fixed.sol"; import "../OracleLib.sol"; diff --git a/contracts/plugins/assets/stargate/StargatePoolFiatCollateral.sol b/contracts/plugins/assets/stargate/StargatePoolFiatCollateral.sol index 01178b80e5..e868b59e2a 100644 --- a/contracts/plugins/assets/stargate/StargatePoolFiatCollateral.sol +++ b/contracts/plugins/assets/stargate/StargatePoolFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../libraries/Fixed.sol"; import "../AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/assets/stargate/StargateRewardableWrapper.sol b/contracts/plugins/assets/stargate/StargateRewardableWrapper.sol index 54acf6e721..7de9c54824 100644 --- a/contracts/plugins/assets/stargate/StargateRewardableWrapper.sol +++ b/contracts/plugins/assets/stargate/StargateRewardableWrapper.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; import "./interfaces/IStargateLPStaking.sol"; import "./interfaces/IStargatePool.sol"; diff --git a/contracts/plugins/assets/stargate/interfaces/IStargateLPStaking.sol b/contracts/plugins/assets/stargate/interfaces/IStargateLPStaking.sol index c6caae692c..1e96cf4aa0 100644 --- a/contracts/plugins/assets/stargate/interfaces/IStargateLPStaking.sol +++ b/contracts/plugins/assets/stargate/interfaces/IStargateLPStaking.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/stargate/interfaces/IStargatePool.sol b/contracts/plugins/assets/stargate/interfaces/IStargatePool.sol index 3ddfc90797..27fc8cafad 100644 --- a/contracts/plugins/assets/stargate/interfaces/IStargatePool.sol +++ b/contracts/plugins/assets/stargate/interfaces/IStargatePool.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/assets/stargate/interfaces/IStargateRouter.sol b/contracts/plugins/assets/stargate/interfaces/IStargateRouter.sol index f58298192d..e93cc63d8c 100644 --- a/contracts/plugins/assets/stargate/interfaces/IStargateRouter.sol +++ b/contracts/plugins/assets/stargate/interfaces/IStargateRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; interface IStargateRouter { function addLiquidity( diff --git a/contracts/plugins/assets/stargate/mocks/StargateLPStakingMock.sol b/contracts/plugins/assets/stargate/mocks/StargateLPStakingMock.sol index 81dc7959dd..be6900f80f 100644 --- a/contracts/plugins/assets/stargate/mocks/StargateLPStakingMock.sol +++ b/contracts/plugins/assets/stargate/mocks/StargateLPStakingMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../interfaces/IStargateLPStaking.sol"; import "../../../mocks/ERC20Mock.sol"; diff --git a/contracts/plugins/assets/stargate/mocks/StargatePoolMock.sol b/contracts/plugins/assets/stargate/mocks/StargatePoolMock.sol index 3a18e5465a..eae6d059f8 100644 --- a/contracts/plugins/assets/stargate/mocks/StargatePoolMock.sol +++ b/contracts/plugins/assets/stargate/mocks/StargatePoolMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../../../libraries/Fixed.sol"; diff --git a/contracts/plugins/assets/yearnv2/YearnV2CurveFiatCollateral.sol b/contracts/plugins/assets/yearnv2/YearnV2CurveFiatCollateral.sol index 3443c68b80..57498bfd50 100644 --- a/contracts/plugins/assets/yearnv2/YearnV2CurveFiatCollateral.sol +++ b/contracts/plugins/assets/yearnv2/YearnV2CurveFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../curve/CurveStableCollateral.sol"; diff --git a/contracts/plugins/governance/Governance.sol b/contracts/plugins/governance/Governance.sol index 12c100eaa4..7278def9f8 100644 --- a/contracts/plugins/governance/Governance.sol +++ b/contracts/plugins/governance/Governance.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../interfaces/IStRSRVotes.sol"; import "./vendor/extensions/GovernorCountingSimple.sol"; diff --git a/contracts/plugins/mocks/ATokenMock.sol b/contracts/plugins/mocks/ATokenMock.sol index 4d7203ed7f..6748c90d3a 100644 --- a/contracts/plugins/mocks/ATokenMock.sol +++ b/contracts/plugins/mocks/ATokenMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/aave/ATokenFiatCollateral.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/AaveLendingPoolMock.sol b/contracts/plugins/mocks/AaveLendingPoolMock.sol index 647f7d87ca..e96bd4d168 100644 --- a/contracts/plugins/mocks/AaveLendingPoolMock.sol +++ b/contracts/plugins/mocks/AaveLendingPoolMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // See: https://github.com/aave/protocol-v2/tree/master/contracts/interfaces interface IAaveLendingPool { diff --git a/contracts/plugins/mocks/AppreciatingMockDecimals.sol b/contracts/plugins/mocks/AppreciatingMockDecimals.sol index 3082b56e7e..4b08b1272b 100644 --- a/contracts/plugins/mocks/AppreciatingMockDecimals.sol +++ b/contracts/plugins/mocks/AppreciatingMockDecimals.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/aave/ATokenFiatCollateral.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/AppreciatingMockDecimalsCollateral.sol b/contracts/plugins/mocks/AppreciatingMockDecimalsCollateral.sol index 7c8c56d577..c57ff60829 100644 --- a/contracts/plugins/mocks/AppreciatingMockDecimalsCollateral.sol +++ b/contracts/plugins/mocks/AppreciatingMockDecimalsCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import { Asset, AppreciatingFiatCollateral, CollateralConfig, IRewardable } from "../assets/AppreciatingFiatCollateral.sol"; diff --git a/contracts/plugins/mocks/ApxEthMock.sol b/contracts/plugins/mocks/ApxEthMock.sol index 2638ed2261..ddac790443 100644 --- a/contracts/plugins/mocks/ApxEthMock.sol +++ b/contracts/plugins/mocks/ApxEthMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/AssetMock.sol b/contracts/plugins/mocks/AssetMock.sol index 0396a5ea35..ae07e8b990 100644 --- a/contracts/plugins/mocks/AssetMock.sol +++ b/contracts/plugins/mocks/AssetMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/Asset.sol"; diff --git a/contracts/plugins/mocks/BackingMgrBackCompatible.sol b/contracts/plugins/mocks/BackingMgrBackCompatible.sol index 9fe7767cc2..b601548245 100644 --- a/contracts/plugins/mocks/BackingMgrBackCompatible.sol +++ b/contracts/plugins/mocks/BackingMgrBackCompatible.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../p1/BackingManager.sol"; diff --git a/contracts/plugins/mocks/BadCollateralPlugin.sol b/contracts/plugins/mocks/BadCollateralPlugin.sol index 954484f888..fb149eb680 100644 --- a/contracts/plugins/mocks/BadCollateralPlugin.sol +++ b/contracts/plugins/mocks/BadCollateralPlugin.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/aave/ATokenFiatCollateral.sol"; diff --git a/contracts/plugins/mocks/BadERC20.sol b/contracts/plugins/mocks/BadERC20.sol index dc0c9a0c52..5dd94e1222 100644 --- a/contracts/plugins/mocks/BadERC20.sol +++ b/contracts/plugins/mocks/BadERC20.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/Address.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/CFiatV3WrapperMock.sol b/contracts/plugins/mocks/CFiatV3WrapperMock.sol index 592d0d2569..6fbc61c3f5 100644 --- a/contracts/plugins/mocks/CFiatV3WrapperMock.sol +++ b/contracts/plugins/mocks/CFiatV3WrapperMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/compoundv3/CFiatV3Wrapper.sol"; import "../assets/compoundv3/ICFiatV3Wrapper.sol"; diff --git a/contracts/plugins/mocks/CTokenMock.sol b/contracts/plugins/mocks/CTokenMock.sol index 78666d8e33..369468196f 100644 --- a/contracts/plugins/mocks/CTokenMock.sol +++ b/contracts/plugins/mocks/CTokenMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/CallbackDutchTradeBidder.sol b/contracts/plugins/mocks/CallbackDutchTradeBidder.sol index 5ba6b26fbf..453b0f7300 100644 --- a/contracts/plugins/mocks/CallbackDutchTradeBidder.sol +++ b/contracts/plugins/mocks/CallbackDutchTradeBidder.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IDutchTradeCallee, DutchTrade } from "../trading/DutchTrade.sol"; diff --git a/contracts/plugins/mocks/CometMock.sol b/contracts/plugins/mocks/CometMock.sol index cfd14e1356..597a74c15d 100644 --- a/contracts/plugins/mocks/CometMock.sol +++ b/contracts/plugins/mocks/CometMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // prettier-ignore contract CometMock { diff --git a/contracts/plugins/mocks/ComptrollerMock.sol b/contracts/plugins/mocks/ComptrollerMock.sol index 249bcdb088..c27a5d8b39 100644 --- a/contracts/plugins/mocks/ComptrollerMock.sol +++ b/contracts/plugins/mocks/ComptrollerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/compoundv2/ICToken.sol"; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/CurveMetapoolMock.sol b/contracts/plugins/mocks/CurveMetapoolMock.sol index 3ab6963c85..55bd70f03b 100644 --- a/contracts/plugins/mocks/CurveMetapoolMock.sol +++ b/contracts/plugins/mocks/CurveMetapoolMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./CurvePoolMock.sol"; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/CurvePoolMock.sol b/contracts/plugins/mocks/CurvePoolMock.sol index 8a325880dd..ba2c74d744 100644 --- a/contracts/plugins/mocks/CurvePoolMock.sol +++ b/contracts/plugins/mocks/CurvePoolMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../plugins/assets/curve/PoolTokens.sol"; diff --git a/contracts/plugins/mocks/CurveReentrantReceiver.sol b/contracts/plugins/mocks/CurveReentrantReceiver.sol index c56ecd7288..068d02adfa 100644 --- a/contracts/plugins/mocks/CurveReentrantReceiver.sol +++ b/contracts/plugins/mocks/CurveReentrantReceiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../interfaces/IAsset.sol"; diff --git a/contracts/plugins/mocks/DutchTradeCallbackReentrantTest.sol b/contracts/plugins/mocks/DutchTradeCallbackReentrantTest.sol index 0d3356b607..f384ae6f4f 100644 --- a/contracts/plugins/mocks/DutchTradeCallbackReentrantTest.sol +++ b/contracts/plugins/mocks/DutchTradeCallbackReentrantTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/mocks/DutchTradeRouter.sol b/contracts/plugins/mocks/DutchTradeRouter.sol index 6e5198586b..7609b692a4 100644 --- a/contracts/plugins/mocks/DutchTradeRouter.sol +++ b/contracts/plugins/mocks/DutchTradeRouter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/mocks/EACAggregatorProxyMock.sol b/contracts/plugins/mocks/EACAggregatorProxyMock.sol index 82b2b52d49..3969d8f40f 100644 --- a/contracts/plugins/mocks/EACAggregatorProxyMock.sol +++ b/contracts/plugins/mocks/EACAggregatorProxyMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity 0.8.19; +pragma solidity 0.8.28; /** * @title The Owned contract diff --git a/contracts/plugins/mocks/ERC1271Mock.sol b/contracts/plugins/mocks/ERC1271Mock.sol index ccc982ed19..a1ebac8110 100644 --- a/contracts/plugins/mocks/ERC1271Mock.sol +++ b/contracts/plugins/mocks/ERC1271Mock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/Address.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/ERC20Mock.sol b/contracts/plugins/mocks/ERC20Mock.sol index f374070f52..abfb7ced9d 100644 --- a/contracts/plugins/mocks/ERC20Mock.sol +++ b/contracts/plugins/mocks/ERC20Mock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/contracts/plugins/mocks/ERC20MockDecimals.sol b/contracts/plugins/mocks/ERC20MockDecimals.sol index d0449c1bf9..15974e9303 100644 --- a/contracts/plugins/mocks/ERC20MockDecimals.sol +++ b/contracts/plugins/mocks/ERC20MockDecimals.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/ERC20MockReentrant.sol b/contracts/plugins/mocks/ERC20MockReentrant.sol index 1a61c74966..4413e837b0 100644 --- a/contracts/plugins/mocks/ERC20MockReentrant.sol +++ b/contracts/plugins/mocks/ERC20MockReentrant.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/Address.sol"; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/ERC20MockRewarding.sol b/contracts/plugins/mocks/ERC20MockRewarding.sol index 69b0aff235..115d53322e 100644 --- a/contracts/plugins/mocks/ERC20MockRewarding.sol +++ b/contracts/plugins/mocks/ERC20MockRewarding.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20MockDecimals.sol"; diff --git a/contracts/plugins/mocks/EmaPriceOracleStableSwapMock.sol b/contracts/plugins/mocks/EmaPriceOracleStableSwapMock.sol index ab7b0fa4f3..434e68e20c 100644 --- a/contracts/plugins/mocks/EmaPriceOracleStableSwapMock.sol +++ b/contracts/plugins/mocks/EmaPriceOracleStableSwapMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: ISC -pragma solidity ^0.8.19; +pragma solidity ^0.8.28; interface IEmaPriceOracleStableSwap { function price_oracle() external view returns (uint256); diff --git a/contracts/plugins/mocks/FiatCollateralMockReentrant.sol b/contracts/plugins/mocks/FiatCollateralMockReentrant.sol index 20d2db9d01..72e322a116 100644 --- a/contracts/plugins/mocks/FiatCollateralMockReentrant.sol +++ b/contracts/plugins/mocks/FiatCollateralMockReentrant.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/FiatCollateral.sol"; import "./ERC20MockReentrant.sol"; diff --git a/contracts/plugins/mocks/FraxAggregator.sol b/contracts/plugins/mocks/FraxAggregator.sol index 9bb33bc2d3..aef6ba6578 100644 --- a/contracts/plugins/mocks/FraxAggregator.sol +++ b/contracts/plugins/mocks/FraxAggregator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; diff --git a/contracts/plugins/mocks/GasGuzzlingFiatCollateral.sol b/contracts/plugins/mocks/GasGuzzlingFiatCollateral.sol index ae3b822833..7c0a998e2e 100644 --- a/contracts/plugins/mocks/GasGuzzlingFiatCollateral.sol +++ b/contracts/plugins/mocks/GasGuzzlingFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/FiatCollateral.sol"; diff --git a/contracts/plugins/mocks/GenericOracleMock.sol b/contracts/plugins/mocks/GenericOracleMock.sol new file mode 100644 index 0000000000..ad6fa23d1d --- /dev/null +++ b/contracts/plugins/mocks/GenericOracleMock.sol @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: BlueOak-1.0.0 +pragma solidity 0.8.28; + +import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; + +/** + * @title GenericOracleMock + * @notice Simple mock implementation compatible with Redstone oracles + * @dev Mirrors EACAggregatorProxyMock behavior for testing + */ +contract GenericOracleMock is AggregatorV3Interface { + uint8 private _decimals; + + // Current round data + uint256 public __latestRound; + int256 public __latestAnswer; + uint256 public __latestTimestamp; + uint256 public __latestAnsweredRound; + + // Historical round data + mapping(uint256 => int256) public __getAnswer; + mapping(uint256 => uint256) public __getTimestamp; + mapping(uint256 => uint256) private __getStartedAt; + + constructor(uint8 decimals_, int256 initialAnswer) { + _decimals = decimals_; + updateAnswer(initialAnswer); + } + + /** + * @notice Initialize storage after bytecode replacement + * @dev Call this after hardhat_setCode to properly initialize storage at target address + */ + function initialize(uint8 decimals_, int256 initialAnswer) external { + _decimals = decimals_; + __latestRound = 0; + __latestAnswer = 0; + __latestTimestamp = 0; + __latestAnsweredRound = 0; + updateAnswer(initialAnswer); + } + + function decimals() external view override returns (uint8) { + return _decimals; + } + + function description() external pure override returns (string memory) { + return "GenericOracleMock"; + } + + function version() external pure override returns (uint256) { + return 1; + } + + function updateAnswer(int256 _answer) public { + __latestAnswer = _answer; + __latestTimestamp = block.timestamp; + __latestRound++; + __getAnswer[__latestRound] = _answer; + __getTimestamp[__latestRound] = block.timestamp; + __getStartedAt[__latestRound] = block.timestamp; + __latestAnsweredRound = __latestRound; + } + + function updateRoundData( + uint80 _roundId, + int256 _answer, + uint256 _timestamp, + uint256 _startedAt + ) public { + __latestRound = _roundId; + __latestAnswer = _answer; + __latestTimestamp = _timestamp; + __getAnswer[__latestRound] = _answer; + __getTimestamp[__latestRound] = _timestamp; + __getStartedAt[__latestRound] = _startedAt; + __latestAnsweredRound = _roundId; + } + + function latestRoundData() + external + view + override + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ) + { + return ( + uint80(__latestRound), + __getAnswer[__latestRound], + __getStartedAt[__latestRound], + __getTimestamp[__latestRound], + uint80(__latestAnsweredRound) + ); + } + + function getRoundData(uint80 _roundId) + external + view + override + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ) + { + return ( + _roundId, + __getAnswer[_roundId], + __getStartedAt[_roundId], + __getTimestamp[_roundId], + _roundId + ); + } +} diff --git a/contracts/plugins/mocks/GnosisMock.sol b/contracts/plugins/mocks/GnosisMock.sol index 3d5490188c..8612fdf214 100644 --- a/contracts/plugins/mocks/GnosisMock.sol +++ b/contracts/plugins/mocks/GnosisMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/mocks/GnosisMockReentrant.sol b/contracts/plugins/mocks/GnosisMockReentrant.sol index 52d2382afd..8077f0ad1f 100644 --- a/contracts/plugins/mocks/GnosisMockReentrant.sol +++ b/contracts/plugins/mocks/GnosisMockReentrant.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/mocks/InvalidATokenFiatCollateralMock.sol b/contracts/plugins/mocks/InvalidATokenFiatCollateralMock.sol index dfd5197c20..26b41ef39a 100644 --- a/contracts/plugins/mocks/InvalidATokenFiatCollateralMock.sol +++ b/contracts/plugins/mocks/InvalidATokenFiatCollateralMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/aave/ATokenFiatCollateral.sol"; diff --git a/contracts/plugins/mocks/InvalidBrokerMock.sol b/contracts/plugins/mocks/InvalidBrokerMock.sol index d1a4112637..0d7fcfcf71 100644 --- a/contracts/plugins/mocks/InvalidBrokerMock.sol +++ b/contracts/plugins/mocks/InvalidBrokerMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/mocks/InvalidFiatCollateral.sol b/contracts/plugins/mocks/InvalidFiatCollateral.sol index 89787b0290..4453bb6cc0 100644 --- a/contracts/plugins/mocks/InvalidFiatCollateral.sol +++ b/contracts/plugins/mocks/InvalidFiatCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/FiatCollateral.sol"; diff --git a/contracts/plugins/mocks/InvalidRefPerTokCollateral.sol b/contracts/plugins/mocks/InvalidRefPerTokCollateral.sol index 8c41902248..8c37b9ef3f 100644 --- a/contracts/plugins/mocks/InvalidRefPerTokCollateral.sol +++ b/contracts/plugins/mocks/InvalidRefPerTokCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../libraries/Fixed.sol"; diff --git a/contracts/plugins/mocks/InvalidRevTraderP1Mock.sol b/contracts/plugins/mocks/InvalidRevTraderP1Mock.sol index ccb2b0f31e..10f7f161bc 100644 --- a/contracts/plugins/mocks/InvalidRevTraderP1Mock.sol +++ b/contracts/plugins/mocks/InvalidRevTraderP1Mock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/plugins/mocks/MakerPotMock.sol b/contracts/plugins/mocks/MakerPotMock.sol index 1e59ac1582..e2981de32d 100644 --- a/contracts/plugins/mocks/MakerPotMock.sol +++ b/contracts/plugins/mocks/MakerPotMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/dsr/SDaiCollateral.sol"; diff --git a/contracts/plugins/mocks/MockMetaMorpho4626.sol b/contracts/plugins/mocks/MockMetaMorpho4626.sol index c71af1218b..198947b936 100644 --- a/contracts/plugins/mocks/MockMetaMorpho4626.sol +++ b/contracts/plugins/mocks/MockMetaMorpho4626.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IERC4626 } from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol"; import "@openzeppelin/contracts/utils/Address.sol"; diff --git a/contracts/plugins/mocks/MockRoleRegistry.sol b/contracts/plugins/mocks/MockRoleRegistry.sol index 976128f495..01340a32c5 100644 --- a/contracts/plugins/mocks/MockRoleRegistry.sol +++ b/contracts/plugins/mocks/MockRoleRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; contract MockRoleRegistry { function isOwner(address) public pure returns (bool) { diff --git a/contracts/plugins/mocks/MockableCollateral.sol b/contracts/plugins/mocks/MockableCollateral.sol index 33cc5ab2fd..a3ade6e74f 100644 --- a/contracts/plugins/mocks/MockableCollateral.sol +++ b/contracts/plugins/mocks/MockableCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/aave/ATokenFiatCollateral.sol"; diff --git a/contracts/plugins/mocks/MorphoAaveV2TokenisedDepositMock.sol b/contracts/plugins/mocks/MorphoAaveV2TokenisedDepositMock.sol index 4c999e69eb..caf32e7de2 100644 --- a/contracts/plugins/mocks/MorphoAaveV2TokenisedDepositMock.sol +++ b/contracts/plugins/mocks/MorphoAaveV2TokenisedDepositMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { MorphoAaveV2TokenisedDeposit, MorphoAaveV2TokenisedDepositConfig } from "../assets/morpho-aave/MorphoAaveV2TokenisedDeposit.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/plugins/mocks/NontrivialPegCollateral.sol b/contracts/plugins/mocks/NontrivialPegCollateral.sol index f86816d06f..ce805e2c7c 100644 --- a/contracts/plugins/mocks/NontrivialPegCollateral.sol +++ b/contracts/plugins/mocks/NontrivialPegCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/FiatCollateral.sol"; diff --git a/contracts/plugins/mocks/RTokenCollateral.sol b/contracts/plugins/mocks/RTokenCollateral.sol index f10f01287a..1935e79a58 100644 --- a/contracts/plugins/mocks/RTokenCollateral.sol +++ b/contracts/plugins/mocks/RTokenCollateral.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../../interfaces/IMain.sol"; diff --git a/contracts/plugins/mocks/RevenueTraderBackComp.sol b/contracts/plugins/mocks/RevenueTraderBackComp.sol index 73069f15ad..6a7dfb806a 100644 --- a/contracts/plugins/mocks/RevenueTraderBackComp.sol +++ b/contracts/plugins/mocks/RevenueTraderBackComp.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../p1/RevenueTrader.sol"; diff --git a/contracts/plugins/mocks/RevertingFacetMock.sol b/contracts/plugins/mocks/RevertingFacetMock.sol index 772f6fbdb6..1b1749458f 100644 --- a/contracts/plugins/mocks/RevertingFacetMock.sol +++ b/contracts/plugins/mocks/RevertingFacetMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; contract RevertingFacetMock { constructor() {} diff --git a/contracts/plugins/mocks/RewardableERC20WrapperTest.sol b/contracts/plugins/mocks/RewardableERC20WrapperTest.sol index 52fa49cc90..a9ed755c3a 100644 --- a/contracts/plugins/mocks/RewardableERC20WrapperTest.sol +++ b/contracts/plugins/mocks/RewardableERC20WrapperTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/erc20/RewardableERC20Wrapper.sol"; import "./ERC20MockRewarding.sol"; diff --git a/contracts/plugins/mocks/RewardableERC4626VaultTest.sol b/contracts/plugins/mocks/RewardableERC4626VaultTest.sol index 27ee042b33..36fc186564 100644 --- a/contracts/plugins/mocks/RewardableERC4626VaultTest.sol +++ b/contracts/plugins/mocks/RewardableERC4626VaultTest.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../assets/erc20/RewardableERC4626Vault.sol"; import "./ERC20MockRewarding.sol"; diff --git a/contracts/plugins/mocks/SelfdestructTransferMock.sol b/contracts/plugins/mocks/SelfdestructTransferMock.sol index b6820aabc3..cdf1c1b23f 100644 --- a/contracts/plugins/mocks/SelfdestructTransferMock.sol +++ b/contracts/plugins/mocks/SelfdestructTransferMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; contract SelfdestructTransfer { function destroyAndTransfer(address payable to) external payable { diff --git a/contracts/plugins/mocks/SfraxEthMock.sol b/contracts/plugins/mocks/SfraxEthMock.sol index bde9e9e45c..2e3428584e 100644 --- a/contracts/plugins/mocks/SfraxEthMock.sol +++ b/contracts/plugins/mocks/SfraxEthMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/USDCMock.sol b/contracts/plugins/mocks/USDCMock.sol index b1096a2000..d50c0645b3 100644 --- a/contracts/plugins/mocks/USDCMock.sol +++ b/contracts/plugins/mocks/USDCMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/UnpricedPlugins.sol b/contracts/plugins/mocks/UnpricedPlugins.sol index 178a7196a8..64e0dfa9b4 100644 --- a/contracts/plugins/mocks/UnpricedPlugins.sol +++ b/contracts/plugins/mocks/UnpricedPlugins.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; diff --git a/contracts/plugins/mocks/WBTCMock.sol b/contracts/plugins/mocks/WBTCMock.sol index 0d5bf09c1b..b7929e93d5 100644 --- a/contracts/plugins/mocks/WBTCMock.sol +++ b/contracts/plugins/mocks/WBTCMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/WETH.sol b/contracts/plugins/mocks/WETH.sol index 89e04c6ffe..b76452039c 100644 --- a/contracts/plugins/mocks/WETH.sol +++ b/contracts/plugins/mocks/WETH.sol @@ -13,7 +13,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -pragma solidity 0.8.19; +pragma solidity 0.8.28; /// https://github.com/gnosis/canonical-weth at commit 0dd1ea3e295eef916d0c6223ec63141137d22d67 diff --git a/contracts/plugins/mocks/ZeroDecimalMock.sol b/contracts/plugins/mocks/ZeroDecimalMock.sol index 70cb2a4c5a..ca9f8fd87f 100644 --- a/contracts/plugins/mocks/ZeroDecimalMock.sol +++ b/contracts/plugins/mocks/ZeroDecimalMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "./ERC20Mock.sol"; diff --git a/contracts/plugins/mocks/upgrades/AssetRegistryV2.sol b/contracts/plugins/mocks/upgrades/AssetRegistryV2.sol index 652498ae3f..4e92e6b64e 100644 --- a/contracts/plugins/mocks/upgrades/AssetRegistryV2.sol +++ b/contracts/plugins/mocks/upgrades/AssetRegistryV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/AssetRegistry.sol"; diff --git a/contracts/plugins/mocks/upgrades/BackingManagerV2.sol b/contracts/plugins/mocks/upgrades/BackingManagerV2.sol index 9724bf541f..c90b29d564 100644 --- a/contracts/plugins/mocks/upgrades/BackingManagerV2.sol +++ b/contracts/plugins/mocks/upgrades/BackingManagerV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/BackingManager.sol"; diff --git a/contracts/plugins/mocks/upgrades/BasketHandlerV2.sol b/contracts/plugins/mocks/upgrades/BasketHandlerV2.sol index 905eaab0df..07a29f9ae1 100644 --- a/contracts/plugins/mocks/upgrades/BasketHandlerV2.sol +++ b/contracts/plugins/mocks/upgrades/BasketHandlerV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/BasketHandler.sol"; diff --git a/contracts/plugins/mocks/upgrades/BrokerV2.sol b/contracts/plugins/mocks/upgrades/BrokerV2.sol index fa6c043135..d2bb966b6a 100644 --- a/contracts/plugins/mocks/upgrades/BrokerV2.sol +++ b/contracts/plugins/mocks/upgrades/BrokerV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/Broker.sol"; diff --git a/contracts/plugins/mocks/upgrades/DeployerV2.sol b/contracts/plugins/mocks/upgrades/DeployerV2.sol index 4d6881bab2..1d61c65c1f 100644 --- a/contracts/plugins/mocks/upgrades/DeployerV2.sol +++ b/contracts/plugins/mocks/upgrades/DeployerV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/Deployer.sol"; diff --git a/contracts/plugins/mocks/upgrades/DistributorV2.sol b/contracts/plugins/mocks/upgrades/DistributorV2.sol index e6bcdd7fb2..282c20b574 100644 --- a/contracts/plugins/mocks/upgrades/DistributorV2.sol +++ b/contracts/plugins/mocks/upgrades/DistributorV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/Distributor.sol"; diff --git a/contracts/plugins/mocks/upgrades/FacadeMonitorV2.sol b/contracts/plugins/mocks/upgrades/FacadeMonitorV2.sol index ebbfc6b1c2..d08c49b441 100644 --- a/contracts/plugins/mocks/upgrades/FacadeMonitorV2.sol +++ b/contracts/plugins/mocks/upgrades/FacadeMonitorV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../facade/FacadeMonitor.sol"; diff --git a/contracts/plugins/mocks/upgrades/FurnaceV2.sol b/contracts/plugins/mocks/upgrades/FurnaceV2.sol index 145d0b4a28..9090db73f7 100644 --- a/contracts/plugins/mocks/upgrades/FurnaceV2.sol +++ b/contracts/plugins/mocks/upgrades/FurnaceV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/Furnace.sol"; diff --git a/contracts/plugins/mocks/upgrades/MainV2.sol b/contracts/plugins/mocks/upgrades/MainV2.sol index afdcd1ff80..9282d3bade 100644 --- a/contracts/plugins/mocks/upgrades/MainV2.sol +++ b/contracts/plugins/mocks/upgrades/MainV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/Main.sol"; diff --git a/contracts/plugins/mocks/upgrades/RTokenV2.sol b/contracts/plugins/mocks/upgrades/RTokenV2.sol index 0e6bae3e16..e1858b1501 100644 --- a/contracts/plugins/mocks/upgrades/RTokenV2.sol +++ b/contracts/plugins/mocks/upgrades/RTokenV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/RToken.sol"; diff --git a/contracts/plugins/mocks/upgrades/RevenueTraderV2.sol b/contracts/plugins/mocks/upgrades/RevenueTraderV2.sol index f7c62d8280..6da3d979fd 100644 --- a/contracts/plugins/mocks/upgrades/RevenueTraderV2.sol +++ b/contracts/plugins/mocks/upgrades/RevenueTraderV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/RevenueTrader.sol"; diff --git a/contracts/plugins/mocks/upgrades/StRSRV2.sol b/contracts/plugins/mocks/upgrades/StRSRV2.sol index e8209f68e6..d991545d5a 100644 --- a/contracts/plugins/mocks/upgrades/StRSRV2.sol +++ b/contracts/plugins/mocks/upgrades/StRSRV2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../../../p1/StRSRVotes.sol"; diff --git a/contracts/plugins/trading/DutchTrade.sol b/contracts/plugins/trading/DutchTrade.sol index a677b2c340..473ba957bd 100644 --- a/contracts/plugins/trading/DutchTrade.sol +++ b/contracts/plugins/trading/DutchTrade.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; diff --git a/contracts/plugins/trading/GnosisTrade.sol b/contracts/plugins/trading/GnosisTrade.sol index 95d7006c71..ffbdff874a 100644 --- a/contracts/plugins/trading/GnosisTrade.sol +++ b/contracts/plugins/trading/GnosisTrade.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/contracts/registry/AssetPluginRegistry.sol b/contracts/registry/AssetPluginRegistry.sol index 6967e17dd6..75814794ca 100644 --- a/contracts/registry/AssetPluginRegistry.sol +++ b/contracts/registry/AssetPluginRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { VersionRegistry } from "./VersionRegistry.sol"; diff --git a/contracts/registry/DAOFeeRegistry.sol b/contracts/registry/DAOFeeRegistry.sol index 8e7b9adeb9..df5899b7cd 100644 --- a/contracts/registry/DAOFeeRegistry.sol +++ b/contracts/registry/DAOFeeRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { RoleRegistry } from "./RoleRegistry.sol"; diff --git a/contracts/registry/RoleRegistry.sol b/contracts/registry/RoleRegistry.sol index 305eae49c0..7d65bc3a52 100644 --- a/contracts/registry/RoleRegistry.sol +++ b/contracts/registry/RoleRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; // solhint-disable-next-line max-line-length import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; diff --git a/contracts/registry/VersionRegistry.sol b/contracts/registry/VersionRegistry.sol index dad73d302b..693af7465d 100644 --- a/contracts/registry/VersionRegistry.sol +++ b/contracts/registry/VersionRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { IDeployer, Implementations } from "../interfaces/IDeployer.sol"; import { RoleRegistry } from "./RoleRegistry.sol"; @@ -7,7 +7,7 @@ import { RoleRegistry } from "./RoleRegistry.sol"; /** * @title VersionRegistry * @notice A tiny contract for tracking deployment versions - * All versions registered are expected to include veRSR, so effectively 4.0.0+. + * All versions registered are expected to be >=4.0.0 */ contract VersionRegistry { mapping(bytes32 => IDeployer) public deployments; diff --git a/contracts/spells/3_4_0.sol b/contracts/spells/3_4_0.sol index 8e28cb3da5..90f021b044 100644 --- a/contracts/spells/3_4_0.sol +++ b/contracts/spells/3_4_0.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/governance/IGovernor.sol"; @@ -13,6 +13,13 @@ interface ICachedComponent { function cacheComponents() external; } +// backwards compatibility: deployRTokenAsset was removed in 4.0.0 +interface IDeployer3_4_0 is IDeployer { + function deployRTokenAsset(IRToken rToken, uint192 maxTradeVolume) + external + returns (IAsset rTokenAsset); +} + /** * The upgrade contract for the 3.4.0 release. Each spell function can only be cast once per RToken. * @@ -415,7 +422,7 @@ contract Upgrade3_4_0 { // RTokenAsset proxy.assetRegistry.swapRegistered( - deployer.deployRTokenAsset( + IDeployer3_4_0(address(deployer)).deployRTokenAsset( rToken, proxy.assetRegistry.toAsset(IERC20(address(rToken))).maxTradeVolume() ) diff --git a/contracts/spells/4_2_0.sol b/contracts/spells/4_2_0.sol new file mode 100644 index 0000000000..f2f803b564 --- /dev/null +++ b/contracts/spells/4_2_0.sol @@ -0,0 +1,461 @@ +// SPDX-License-Identifier: BlueOak-1.0.0 +pragma solidity 0.8.28; + +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "@openzeppelin/contracts/governance/TimelockController.sol"; +import "../interfaces/IDeployer.sol"; +import "../interfaces/IDistributor.sol"; +import "../mixins/Versioned.sol"; +import "../facade/lib/FacadeWriteLib.sol"; +import "../plugins/assets/Asset.sol"; +import "../plugins/assets/RTokenAsset.sol"; +import "../plugins/governance/Governance.sol"; +import "../p1/BasketHandler.sol"; +import "../p1/Main.sol"; + +bytes32 constant MAIN_OWNER_ROLE = bytes32("OWNER"); +bytes32 constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE"); +bytes32 constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE"); +bytes32 constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE"); +bytes32 constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE"); + +/** + * The upgrade spell for the 4.2.0 release. Upgrading RToken must be on 3.4.0. + * + * RTokenes supported: + * Mainnet: + * - eUSD + * - ETH+ + * - USD3 + * - dgnETH + * Base: + * - hyUSD + * - bsdETH + * + * The spell can only be cast once per RToken. + * + * Before casting the spell this contract must have MAIN_OWNER_ROLE of Main. + * + * MAIN_OWNER_ROLE is automatically revoked after casting. + * + * The spell() function should be called by the timelock owning Main. + * + */ +contract Upgrade4_2_0 is Versioned { + using EnumerableSet for EnumerableSet.Bytes32Set; + + error TestError(); + + event NewGovernanceDeployed( + IRToken indexed rToken, + address indexed newGovernor, + address indexed newTimelock + ); + + bytes32 public constant PRIOR_VERSION_HASH = keccak256(abi.encodePacked("3.4.0")); + bytes32 public constant NEW_VERSION_HASH = keccak256(abi.encodePacked("4.2.0")); + + // ====================================================================================== + + // 4.2.0 Assets (mainnet) + Asset[56] MAINNET_ASSETS = [ + Asset(0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3), // RSR + Asset(0xFb56B651f882f8f90d35DD7ca181A7F4D889ECac), // stkAAVE + Asset(0x70C8611F5e34266c09c896f3547D1f7Fccf44D54), // COMP + Asset(0x1942270ac94E6C6041C7F7c87562Ba8dDB1bDFFc), // CRV + Asset(0x2362A9B237e4f06491B7E3827eE179b77f2B22c6), // CVX + Asset(0xb90FE39CB47c4401A941528769f107dEe8e49488), // DAI + Asset(0x3A078799a9823cBda084a79c7cAF47f499c6EA09), // USDC + Asset(0xD8A1b8e73DC025C527493436057f0d8Fc01E1973), // USDT + Asset(0x3A395c1bC233D43d126a971b15D8c2b6eB803ca6), // aDAI + Asset(0xD1A2a985a18ddf30299cF2bDd0592B29e0AA3e84), // aUSDC + Asset(0x723e269D178E887E1691f3cEe71c840B5C5b9F76), // aUSDT + Asset(0x8487278d9262B9Dcca4beC85B125A45608d0067A), // cDAI + Asset(0x9A84c6F204209957ddA0064EaeAAf6138fDb8cea), // cUSDC + Asset(0xf35FbE1576E9D52c20B7ef8626477DcFb939d9Ef), // cUSDT + Asset(0x3484EFB04a54bF376da091f4364F4961F7a01B74), // cWBTC + Asset(0xe3dA655331649B86BfE3356beD99258083599543), // cETH + Asset(0xcC07EF5FDafa6298b276f14A6F4198317D0d20c3), // WBTC + Asset(0x868dbBD8B7d1AED1fEc4c13cc4a15f50965E2FB9), // WETH + Asset(0xc915f28D1Cd97703cF0940ABB192EE50dD882f8c), // wstETH + Asset(0x02D960943E1dD3B2c4d621dD8b72489FA4d7cE49), // rETH + Asset(0x8CfB48b594D54C5BC122f3c4374E16Fcf1050a43), // fUSDC + Asset(0x097b09fd6932cEC8cf47d5Ec0b0b7DeFb0C97b02), // fUSDT + Asset(0x0c82eFbbd9B0f47fDa04b83226dbFBC04EC728b8), // fDAI + Asset(0xCC0c0c376cebd701D9126228510f31F9096b836a), // fFRAX + Asset(0x8E24283eF5F6FE85fed48AC3A3d4248B5ba29668), // cUSDCv3 + Asset(0x4aDf4c9b985A743D9fEF14ae4b3e79661F73C78b), // cUSDTv3 + Asset(0xA9f37b188d71b66C3e1ea876F61e00377174508a), // cvx3Pool + Asset(0x7e80B2f7b6abb98028cC8A66aE6f7ea5302fA904), // cvxPayPool + Asset(0x1E98A442F917aA8e0e1f6e18687e58D954b8FfC2), // cvxCrvUSDUSDC + Asset(0x738C191F95C053602e272AfAF67A638519fA4B2F), // cvxCrvUSDUSDT + Asset(0x875af0Bab943b7416c6D2142546cAb61F1Ad964a), // cvxeUSDFRAXBP + Asset(0xfa025df685BA0A09B2C767f4Cc1a1972F140d421), // cvxETHPlusETH + Asset(0x2fe50f96Cd61a3056D497FE88CEA8441244D5d5E), // sDAI + Asset(0xdCEe056a2fEB893EB1a1C3e3F103Ac8AB098CE2e), // cbETH + Asset(0x3ca3359006c55164753Ae475D995163adAB5432d), // maUSDT + Asset(0x30789B6A26735c83774cD49e22C6f68dD4533A73), // maUSDC + Asset(0x14CEF4f11bD1f2A9E6416b812F7D45481c9dD896), // maDAI + Asset(0x65fF9Cf2fE6A28F5fd7fAF5Fd0E54EF9B85DF4E8), // maWBTC + Asset(0x3Cb9DD76AEf20d97C0314ad5Cae6D3d54D87f6eE), // maWETH + Asset(0xc8F9C28880797cF241D4241395f9Bf14c9E7135C), // maStETH + Asset(0xFB80E9A48493ac5C3c401Aa713146825d3bB9CA6), // saEthUSDC + Asset(0x3E2D5CF862c959F5A4046558Bec90C02dD5472eD), // saEthUSDT + Asset(0x8B13ac47E0bF142630eAc3e838A0c0AcE8E81c35), // saEthPyUSD + Asset(0x3B8bb1153C6b4331AC5eE50d59437A244Ed8Cf57), // yvCurveUSDCcrvUSD + Asset(0x661335963a4e84A5e3Fb58a9110f635bbf116201), // sFRAX + Asset(0xa514214E14d64822EE70dfF2d5E15f9a2772aD20), // sfrxETH + Asset(0xd9Da5527B077d81b0289eae2745EaF48f0bC433f), // steakUSDC + Asset(0x46eE78397ab4E334A85Bbc7B7C3A2935f175D4d9), // steakPYUSD + Asset(0xC2b73b106cCb4D2Cf937bFfCD629f3e636773567), // bbUSDT + Asset(0x2E22d688CF3846e5303f6E4eaD0a7455801813E2), // Re7WETH + Asset(0x1c0a14A44C4a6834FE23632dA2f493cC4cf87DbA), // ETHx + Asset(0x6F7eDae52dD7e45f470C327788249a2812A259d8), // apxETH + Asset(0x4f30165072351923A1A4BC3926050986318f9B34), // sUSDe + Asset(0xe0941A6e0DFC823CF44e95664a5B151041C13D42), // pyUSD + Asset(0x8a1a3B46749b81Cf91d56dF6042E12CE50E1b08A), // sUSDS + Asset(0xa4D38731434e875d7E30e13d8b65BEfEd7d47Ac2) // wOETH + ]; + + // 4.2.0 Assets (base) + Asset[21] BASE_ASSETS = [ + Asset(0x22018D85BFdA9e2673FB4101e957562a1e952Cdf), // RSR + Asset(0xf535Cab96457558eE3eeAF1402fCA6441E832f08), // COMP + Asset(0x0e8439a17bA5cBb2D9823c03a02566B9dd5d96Ac), // STG + Asset(0xf7d1C6eE4C0D84C6B530D53A897daa1E9eB56833), // AERO + Asset(0xBe70970a10C186185b1bc1bE980eA09BD68fD97A), // DAI + Asset(0xeaCaF85eA2df99e56053FD0250330C148D582547), // USDC + Asset(0x39e19d88F3D5C25B5A684e8A500dBEC2E2c46327), // USDbC + Asset(0x98f292e6Bb4722664fEffb81448cCFB5B7211469), // WETH + Asset(0xA87e9DAe6E9EA5B2Be858686CC6c21B953BfE0B8), // cbETH + Asset(0xF5366f67FF66A3CefcB18809a762D5b5931FebF8), // cUSDCv3 + Asset(0x773cf50adCF1730964D4A9b664BaEd4b9FFC2450), // saBasUSDC + Asset(0x5ccca36CbB66a4E4033B08b4F6D7bAc96bA55cDc), // wstETH + Asset(0x1cCa3FBB11C4b734183f997679d52DeFA74b613A), // aeroUSDCeUSD + Asset(0xC98eaFc9F249D90e3E35E729e3679DD75A899c10), // aeroWETHAERO + Asset(0x339c1509b980D80A0b50858518531eDbe2940dA1), // aeroMOGWETH + Asset(0x1BD20253c49515D348dad1Af70ff2c0473FEa358), // aeroUSDzUSDC + Asset(0xDAacEE75C863a79f07699b094DB07793D3A52D6D), // aeroWETHcbBTC + Asset(0x6647c880Eb8F57948AF50aB45fca8FE86C154D24), // aeroWETHWELL + Asset(0xCFA67f42A0fDe4F0Fb612ea5e66170B0465B84c1), // aeroWETHDEGEN + Asset(0x45B950AF443281c5F67c2c7A1d9bBc325ECb8eEA), // meUSD + Asset(0x4024c00bBD0C420E719527D88781bc1543e63dd5) // wsuperOETHb + ]; + + // ====================================================================================== + + IDeployer.Registries public registries; + + IDeployer public deployer; + + struct NewGovernance { + IGovernor anastasius; + TimelockController timelock; + } + + // RToken => [IGovernor, TimelockController] + mapping(IRToken => NewGovernance) public newGovs; + + // ERC20 => 4.2.0 Asset + mapping(IERC20 => Asset) public assets; + + // RToken => bool + mapping(IRToken => bool) public cast; + + bool public mainnet; // !mainnet | base + + // ======================================================================================= + + constructor(bool _mainnet) { + // we have to pass-in `_mainnet` because chainid is not reliable during testing + require( + block.chainid == 1 || block.chainid == 31337 || block.chainid == 8453, + "unsupported chain" + ); + mainnet = _mainnet; + + if (_mainnet) { + // 4.2.0 deployer (mainnet) + deployer = IDeployer(0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526); + + // DAO registries (mainnet) + registries = IDeployer.Registries( + VersionRegistry(0xBA8CD83f793aA046Fe5Ab7bA01f855742F2D6a30), + AssetPluginRegistry(0x6cf05Ea2A94a101CE6A44Ec2a2995b43F1b0958f), + DAOFeeRegistry(0xec716deD4eABa060937D1a915F166E237039342B), + ITrustedFillerRegistry(0x279ccF56441fC74f1aAC39E7faC165Dec5A88B3A) + ); + + // Setup `assets` + for (uint256 i = 0; i < MAINNET_ASSETS.length; i++) { + require( + keccak256(abi.encodePacked(MAINNET_ASSETS[i].version())) == NEW_VERSION_HASH, + "invalid asset" + ); + + IERC20 erc20 = MAINNET_ASSETS[i].erc20(); + require(address(assets[erc20]) == address(0), "duplicate asset"); + assets[erc20] = MAINNET_ASSETS[i]; + } + } else { + // 4.2.0 deployer (base) + deployer = IDeployer(0x9E50605e02483c273F7B5A5826f363F3a46DCA79); + + // DAO registries (base) + registries = IDeployer.Registries( + VersionRegistry(0x3BECE5EC596331033726E5C6C188c313Ff4E3fE5), + AssetPluginRegistry(0x87A959e0377C68A50b08a91ae5ab3aFA7F41ACA4), + DAOFeeRegistry(0x3513D2c7D2F51c678889CeC083E7D7Ae27b219aD), + ITrustedFillerRegistry(0x72DB5f49D0599C314E2f2FEDf6Fe33E1bA6C7A18) + ); + + // Setup `assets` + for (uint256 i = 0; i < BASE_ASSETS.length; i++) { + require( + keccak256(abi.encodePacked(BASE_ASSETS[i].version())) == NEW_VERSION_HASH, + "invalid asset" + ); + + IERC20 erc20 = BASE_ASSETS[i].erc20(); + require(address(assets[erc20]) == address(0), "duplicate asset"); + assets[erc20] = BASE_ASSETS[i]; + } + } + } + + // Cast once-per-rToken. Caller MUST be the timelock owning Main. + /// @dev Requirement: this contract has admin of RToken via MAIN_OWNER_ROLE + /// @param rToken The RToken to upgrade + /// @param oldGovernor The old governor contract in charge of the timelock + /// @param guardians Guardians to use for the new governance, MUST be a subset of old guardians + function castSpell( + IRToken rToken, + Governance oldGovernor, + address[] calldata guardians + ) external returns (address newGovernor, address newTimelock) { + require(keccak256(abi.encodePacked(rToken.version())) == PRIOR_VERSION_HASH, "US: 1"); + + // Can only be cast once per RToken + require(!cast[rToken], "repeat cast"); + cast[rToken] = true; + + MainP1 main = MainP1(address(rToken.main())); + require(main.hasRole(MAIN_OWNER_ROLE, msg.sender), "US: 2"); // security crux + require(main.hasRole(MAIN_OWNER_ROLE, address(this)), "US: 3"); + + Components memory proxy; + proxy.assetRegistry = main.assetRegistry(); + proxy.basketHandler = main.basketHandler(); + proxy.backingManager = main.backingManager(); + proxy.broker = main.broker(); + proxy.distributor = main.distributor(); + proxy.furnace = main.furnace(); + proxy.rToken = rToken; + proxy.rTokenTrader = main.rTokenTrader(); + proxy.rsrTrader = main.rsrTrader(); + proxy.stRSR = main.stRSR(); + + // Main + Component upgrades + { + Implementations memory impls = deployer.implementations(); + + // Upgrade Main + main.upgradeTo(address(impls.main)); + require(keccak256(abi.encodePacked(main.version())) == NEW_VERSION_HASH, "US: 4"); + + // Set registries + // reverts on zero address + main.setVersionRegistry(VersionRegistry(registries.versionRegistry)); + main.setAssetPluginRegistry(AssetPluginRegistry(registries.assetPluginRegistry)); + main.setDAOFeeRegistry(DAOFeeRegistry(registries.daoFeeRegistry)); + + // Grant OWNER to Main -- needed to upgrade components + main.grantRole(MAIN_OWNER_ROLE, address(main)); + + // Upgrade components + main.upgradeRTokenTo(NEW_VERSION_HASH, false, false); + main.cacheComponents(); + require(keccak256(abi.encodePacked(rToken.version())) == NEW_VERSION_HASH, "US: 5"); + + // Verify all components are upgraded + require( + keccak256(abi.encodePacked(proxy.assetRegistry.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.basketHandler.version())) == + NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.backingManager.version())) == + NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.broker.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.distributor.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.furnace.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.rToken.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.rTokenTrader.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.rsrTrader.version())) == NEW_VERSION_HASH && + keccak256(abi.encodePacked(proxy.stRSR.version())) == NEW_VERSION_HASH, + "US: 6" + ); + + // Revoke OWNER from Main + main.revokeRole(MAIN_OWNER_ROLE, address(main)); + require(!main.hasRole(MAIN_OWNER_ROLE, address(main)), "US: 7"); + + // Turn on trusted fills + TestIBroker(address(proxy.broker)).setTrustedFillerRegistry( + address(registries.trustedFillerRegistry), + true + ); + + // Keep issuance premium off, should be off by default + require( + !TestIBasketHandler(address(proxy.basketHandler)).enableIssuancePremium(), + "US: 8" + ); + + // Verify trading plugins are updated + require( + address(TestIBroker(address(proxy.broker)).dutchTradeImplementation()) == + address(impls.trading.dutchTrade) && + address(TestIBroker(address(proxy.broker)).batchTradeImplementation()) == + address(impls.trading.gnosisTrade), + "US: 9" + ); + } + + // Make distributor table sum to 10000, adding 1 to StRSR destination if necessary + // Context: frontend rounded down during early deployments and tables sum to 9,999 sometimes + { + RevenueTotals memory revTotals = proxy.distributor.totals(); + require(revTotals.rTokenTotal + revTotals.rsrTotal >= MAX_DISTRIBUTION - 1, "US: 10"); + + // add 1 to StRSR destination if necessary + if (revTotals.rTokenTotal + revTotals.rsrTotal < MAX_DISTRIBUTION) { + TestIDistributor distributor = TestIDistributor(address(proxy.distributor)); + + (uint16 rTokenDist, uint16 rsrDist) = distributor.distribution(address(2)); + // address(2) is the special-cased key for StRSR + + assert(rsrDist > 0); // sanity check; all RTokens direct _some_ RSR to StRSR + + distributor.setDistribution(address(2), RevenueShare(rTokenDist, rsrDist + 1)); + + revTotals = proxy.distributor.totals(); + } + + // Distributor invariant: table must sum to >=10000 + require(revTotals.rTokenTotal + revTotals.rsrTotal >= MAX_DISTRIBUTION, "US: 11"); + } + + // Rotate assets, erc20s should not change + { + IERC20[] memory erc20s = proxy.assetRegistry.erc20s(); + + for (uint256 i = 0; i < erc20s.length; i++) { + IERC20 erc20 = erc20s[i]; + + if (assets[erc20] != Asset(address(0)) && address(erc20) != address(rToken)) { + // if we have a new asset with that erc20, swapRegistered() + proxy.assetRegistry.swapRegistered(assets[erc20]); + } + } + + // Rotate RTokenAsset + require( + proxy.assetRegistry.registerNewRTokenAsset( + proxy.assetRegistry.toAsset(IERC20(address(rToken))).maxTradeVolume() + ), + "US: 13" + ); + + // Validate all assets + proxy.assetRegistry.validateCurrentAssets(); + + // Refresh basket + proxy.basketHandler.refreshBasket(); + require(proxy.basketHandler.status() == CollateralStatus.SOUND, "US: 14"); + } + + // Deploy new governance, preserving all values + { + uint256 minDelay = TimelockController(payable(msg.sender)).getMinDelay(); + require(minDelay != 0, "US: 15"); + + // Deploy new timelock + newTimelock = address( + new TimelockController(minDelay, new address[](0), new address[](0), address(this)) + ); + + // Deploy new governor + newGovernor = FacadeWriteLib.deployGovernance( + IStRSRVotes(address(oldGovernor.token())), + TimelockController(payable(newTimelock)), + oldGovernor.votingDelay(), + oldGovernor.votingPeriod(), + 1e4, // all previous governors are set to 0.01% + oldGovernor.quorumNumerator() + ); + require(Governance(payable(newGovernor)).timelock() == newTimelock, "US: 16"); + + TimelockController _newTimelock = TimelockController(payable(newTimelock)); + + // timelock roles + _newTimelock.grantRole(CANCELLER_ROLE, newGovernor); // Gov can cancel + _newTimelock.grantRole(PROPOSER_ROLE, newGovernor); // Gov only proposer + _newTimelock.grantRole(EXECUTOR_ROLE, newGovernor); // Gov only executor + + for (uint256 i = 0; i < guardians.length; i++) { + _newTimelock.grantRole(CANCELLER_ROLE, guardians[i]); // Guardian can cancel + } + _newTimelock.revokeRole(TIMELOCK_ADMIN_ROLE, address(this)); // Revoke admin role + + // post validation + require( + _newTimelock.hasRole(PROPOSER_ROLE, newGovernor) && + _newTimelock.hasRole(EXECUTOR_ROLE, newGovernor) && + _newTimelock.hasRole(CANCELLER_ROLE, newGovernor), + "US: 17" + ); + + require( + !_newTimelock.hasRole(PROPOSER_ROLE, address(oldGovernor)) && + !_newTimelock.hasRole(EXECUTOR_ROLE, address(oldGovernor)) && + !_newTimelock.hasRole(CANCELLER_ROLE, address(oldGovernor)), + "US: 18" + ); + + require( + !_newTimelock.hasRole(PROPOSER_ROLE, address(0)) && + !_newTimelock.hasRole(EXECUTOR_ROLE, address(0)) && + !_newTimelock.hasRole(CANCELLER_ROLE, address(0)), + "US: 19" + ); + + // setup `newGovs` for rToken, only used in testing but useful for onchain record + newGovs[rToken] = NewGovernance( + IGovernor(payable(newGovernor)), + TimelockController(payable(newTimelock)) + ); + emit NewGovernanceDeployed(rToken, newGovernor, newTimelock); + } + + // Renounce adminships and validate final state + { + assert(oldGovernor.timelock() == msg.sender); + + main.grantRole(MAIN_OWNER_ROLE, newTimelock); + main.revokeRole(MAIN_OWNER_ROLE, msg.sender); + main.renounceRole(MAIN_OWNER_ROLE, address(this)); + + require( + main.hasRole(MAIN_OWNER_ROLE, newTimelock) && + !main.hasRole(MAIN_OWNER_ROLE, msg.sender) && + !main.hasRole(MAIN_OWNER_ROLE, address(this)), + "US: 20" + ); + + require( + !main.hasRole(MAIN_OWNER_ROLE, address(oldGovernor)) && + !main.hasRole(MAIN_OWNER_ROLE, newGovernor), + "US: 21" + ); + } + } +} diff --git a/contracts/spells/SpellBasketNormalizer.sol b/contracts/spells/SpellBasketNormalizer.sol index 4502b0b50a..7711da1c5f 100644 --- a/contracts/spells/SpellBasketNormalizer.sol +++ b/contracts/spells/SpellBasketNormalizer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "../p1/mixins/BasketLib.sol"; import "../p1/BasketHandler.sol"; diff --git a/contracts/vendor/ERC20PermitUpgradeable.sol b/contracts/vendor/ERC20PermitUpgradeable.sol index b31022a77d..53f7fef3ef 100644 --- a/contracts/vendor/ERC20PermitUpgradeable.sol +++ b/contracts/vendor/ERC20PermitUpgradeable.sol @@ -3,7 +3,7 @@ // The only modification that has been made is in the body of the `permit` function at line 83, /// where we failover to SignatureChecker in order to handle approvals for smart contracts. -pragma solidity 0.8.19; +pragma solidity 0.8.28; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol"; diff --git a/docs/dev-env.md b/docs/dev-env.md index edd3e822e0..4e2cf1a01c 100644 --- a/docs/dev-env.md +++ b/docs/dev-env.md @@ -66,9 +66,9 @@ pip3 install solc-select slither-analyzer # Include slitherin detectors within slither pip3 install slitherin -# Install and use solc version 0.8.19 -solc-select install 0.8.19 -solc-select use 0.8.19 +# Install and use solc version 0.8.28 +solc-select install 0.8.28 +solc-select use 0.8.28 # Double-check that your slither version is at least 0.8.3! hash -r && slither --version diff --git a/docs/solidity-style.md b/docs/solidity-style.md index e5721251d4..377fc72af8 100644 --- a/docs/solidity-style.md +++ b/docs/solidity-style.md @@ -48,7 +48,7 @@ We're using 192 bits instead of the full 256 bits because it makes typical multi Initial versions of this code were written using the custom type `Fix` everywhere, and `Fixed` contained the line `type Fix is int192`. We found later that: - We had essentially no need for negative `Fix` values, so spending a storage bit on sign, and juggling the possibility of negative values, cost extra gas and harmed the clarity of our code. -- While `solc 0.8.19` allows custom types without any issue, practically all of the other tools we want to use on our Solidity source -- `slither`, `slitherin`, `prettier`, `solhint` -- would fail when encountering substantial code using a custom type. +- While `solc 0.8.28` allows custom types without any issue, practically all of the other tools we want to use on our Solidity source -- `slither`, `slitherin`, `prettier`, `solhint` -- would fail when encountering substantial code using a custom type. Reintroducing this custom type should be mostly mechanicanizable, but now that P1 contains a handful of hotspot optimizations that do raw arithmetic internally to eliminate Fixlib calls, it won't be trivial to do so. Still, if and when those tools achieve adequate support for custom types, we will probably do this conversion ourselves, if only to ensure that conversions between the Fix and integer interpretations of uints are carefully type-checked. diff --git a/hardhat.config.ts b/hardhat.config.ts index 4bc49a8f6d..f954b3b26a 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -49,6 +49,14 @@ const config: HardhatUserConfig = { return forking })() : undefined, + // chainId: 8453, // for Base fork testing + chains: { + 8453: { + hardforkHistory: { + cancun: 11188936, // Base Cancun activation block + }, + }, + }, gas: 0x1ffffffff, blockGasLimit: 0x1fffffffffffff, allowUnlimitedContractSize: true, @@ -132,10 +140,6 @@ const config: HardhatUserConfig = { }, solidity: { compilers: [ - { - version: '0.8.19', - settings, - }, { version: '0.8.28', settings: { diff --git a/scripts/addresses/1-tmp-assets-collateral.json b/scripts/addresses/1-tmp-assets-collateral.json index 55fc514a49..64b8890ce6 100644 --- a/scripts/addresses/1-tmp-assets-collateral.json +++ b/scripts/addresses/1-tmp-assets-collateral.json @@ -1,72 +1,62 @@ { "assets": { - "stkAAVE": "0xF4493581D52671a9E04d693a68ccc61853bceEaE", - "COMP": "0x63eDdF26Bc65eDa1D1c0147ce8E23c09BE963596", - "CRV": "0xc18bF46F178F7e90b9CD8b7A8b00Af026D5ce3D3", - "CVX": "0x7ef93b20C10E6662931b32Dd9D4b85861eB2E4b8" + "stkAAVE": "0xFb56B651f882f8f90d35DD7ca181A7F4D889ECac", + "COMP": "0x70C8611F5e34266c09c896f3547D1f7Fccf44D54", + "CRV": "0x1942270ac94E6C6041C7F7c87562Ba8dDB1bDFFc", + "CVX": "0x2362A9B237e4f06491B7E3827eE179b77f2B22c6" }, "collateral": { - "DAI": "0xEc375F2984D21D5ddb0D82767FD8a9C4CE8Eec2F", - "USDC": "0x442f8fc98e3cc6B3d49a66f9858Ac9B6e70Dad3e", - "USDT": "0xe7Dcd101A027Ec34860ECb634a2797d0D2dc4d8b", - "USDP": "0x4C0B21Acb267f1fAE4aeFA977A26c4a63C9B35e6", - "BUSD": "0x97bb4a995b98b1BfF99046b3c518276f78fA5250", - "aDAI": "0x9ca9A9cdcE9E943608c945E7001dC89EB163991E", - "aUSDC": "0xc4240D22FFa144E2712aACF3E2cC302af0339ED0", - "aUSDT": "0x8d753659D4E4e4b4601c7F01Dc1c920cA538E333", - "aBUSD": "0x01F9A6bf339cff820cA503A56FD3705AE35c27F7", - "aUSDP": "0xda5cc207CCefD116fF167a8ABEBBd52bD67C958E", - "cDAI": "0x337E418b880bDA5860e05D632CF039B7751B907B", - "cUSDC": "0x043be931D9C4422e1cFeA528e19818dcDfdE9Ebc", - "cUSDT": "0x5ceadb6606C5D82FcCd3f9b312C018fE1f8aa6dA", - "cUSDP": "0xa0c02De8FfBb9759b9beBA5e29C82112688A0Ff4", - "cWBTC": "0xC0f89AFcb6F1c4E943aA61FFcdFc41fDcB7D84DD", - "cETH": "0x4d3A8507a8eb9036895efdD1a462210CE58DE4ad", - "WBTC": "0x832D65735E541c0404a58B741bEF5652c2B7D0Db", - "WETH": "0xADDca344c92Be84A053C5CBE8e067460767FB816", - "wstETH": "0xb7049ee9F533D32C9434101f0645E6Ea5DFe2cdb", - "rETH": "0x987f5e0f845D46262893e680b652D8aAF1B5bCc0", - "fUSDC": "0xB58D95003Af73CF76Ce349103726a51D4Ec8af17", - "fUSDT": "0xD5254b740FbEF6AAcD674936ea7Fb9f4053781aF", - "fDAI": "0xA0a620B94446a7DC8952ECf252FcC495eeC65873", - "fFRAX": "0xFd9c32198D3cf3ad3b165918FD78De3654cb22eA", - "cUSDCv3": "0x33Ba1BC07b0fafb4BBC1520B330081b91ca6bdf0", - "cvx3Pool": "0x8E5ADdC553962DAcdF48106B6218AC93DA9617b2", - "cvxPayPool": "0x5315Fbe0CEB299F53aE375f65fd9376767C8224c", - "cvxeUSDFRAXBP": "0x994455cE66Fd984e2A0A0aca453e637810a8f032", - "cvxMIM3Pool": "0x3d21f841C0Fb125176C1DBDF0DE196b071323A75", - "cvxETHPlusETH": "0xcB275C9D871f21Be67a4E4a25dc2781BfFD627c4", - "crveUSDFRAXBP": "0xCDC5f5E041b49Cad373E94930E2b3bE30be70535", - "crvMIM3Pool": "0x692cf8CE08d03eF1f8C3dCa82F67935fa9417B62", - "crv3Pool": "0xf59a7987EDd5380cbAb30c37D1c808686f9b67B9", - "sDAI": "0x62a9DDC6FF6077E823690118eCc935d16A8de47e", - "cbETH": "0xC8b80813cad9139D0eeFe38C711a11b20147aA54", - "maUSDT": "0x2F8F8Ac64ECbAC38f212b05115836120784a29F7", - "maUSDC": "0xC5d03FB7A38E6025D9A32C7444cfbBfa18B7D656", - "maDAI": "0x7be70371e7ECd9af5A5b49015EC8F8C336B52D81", - "maWBTC": "0x75B6921925e8BD632380706e722035752ffF175d", - "maWETH": "0xA402078f0A2e077Ea2b1Fb3b6ab74F0cBA10E508", - "maStETH": "0x4a139215D9E696c0e7618a441eD3CFd12bbD8CD6", - "yvCurveUSDCcrvUSD": "0x1573416df7095F698e37A954D9e951868E526650", - "yvCurveUSDPcrvUSD": "0xb3A3552Cc52411dFF6D520C6F725E6F9e11001EF", - "sFRAX": "0x0b7DcCBceA6f985301506D575E2661bf858CdEcC", - "saEthUSDC": "0x00F820794Bda3fb01E5f159ee1fF7c8409fca5AB", - "saEthPyUSD": "0x58a41c87f8C65cf21f961b570540b176e408Cf2E", - "bbUSDT": "0x01355C7439982c57cF89CA9785d211806f866224", - "steakUSDC": "0x565CBc99EE04667581c7f3459561fCaf1CF68602", - "steakPYUSD": "0x23f06D5Fe858B18CD064A5D95054e8ae8536094a", - "Re7WETH": "0xa0a6C06e45437d4Ae1D778AaeB4605AC2B62A870", - "cvxCrvUSDUSDC": "0x9Fc0F31e2D26C437461a9eEBfe858d17e2611Ea5", - "cvxCrvUSDUSDT": "0x69c6597690B8Df61D15F201519C03725bdec40c1", - "sfrxETH": "0x4c891fCa6319d492866672E3D2AfdAAA5bDcfF67", - "ETHx": "0x73a36258E6A48D0095D1997Fec7F51e191B4Ec81", - "apxETH": "0x05ffDaAA2aF48e1De1CE34d633db018a28e3B3F5", - "sUSDe": "0x35081Ca24319835e5f759163F7e75eaB753e0b7E", - "pyUSD": "0xa5cde4fB1132daF8f4a0D3140859271208d944E9", - "cUSDTv3": "0x1B2256a88Bb9F2E54cC8D355D3161a2F069a320B", - "sUSDS": "0xaFf578165bEA370D16d8AC61A4C8c6D435785d58", - "saEthUSDT": "0x18A8D9088433aE749cE6c33070b2Fe95e8a263d9", - "wOETH": "0xD9Ee6fEb2a277E5948B6Fd6B93d125B3225339aA" + "DAI": "0xb90FE39CB47c4401A941528769f107dEe8e49488", + "USDC": "0x3A078799a9823cBda084a79c7cAF47f499c6EA09", + "USDT": "0xD8A1b8e73DC025C527493436057f0d8Fc01E1973", + "aDAI": "0x3A395c1bC233D43d126a971b15D8c2b6eB803ca6", + "aUSDC": "0xD1A2a985a18ddf30299cF2bDd0592B29e0AA3e84", + "aUSDT": "0x723e269D178E887E1691f3cEe71c840B5C5b9F76", + "cDAI": "0x8487278d9262B9Dcca4beC85B125A45608d0067A", + "cUSDC": "0x9A84c6F204209957ddA0064EaeAAf6138fDb8cea", + "cUSDT": "0xf35FbE1576E9D52c20B7ef8626477DcFb939d9Ef", + "cWBTC": "0x3484EFB04a54bF376da091f4364F4961F7a01B74", + "cETH": "0xe3dA655331649B86BfE3356beD99258083599543", + "WBTC": "0xcC07EF5FDafa6298b276f14A6F4198317D0d20c3", + "WETH": "0x868dbBD8B7d1AED1fEc4c13cc4a15f50965E2FB9", + "wstETH": "0xc915f28D1Cd97703cF0940ABB192EE50dD882f8c", + "rETH": "0x02D960943E1dD3B2c4d621dD8b72489FA4d7cE49", + "fUSDC": "0x8CfB48b594D54C5BC122f3c4374E16Fcf1050a43", + "fUSDT": "0x097b09fd6932cEC8cf47d5Ec0b0b7DeFb0C97b02", + "fDAI": "0x0c82eFbbd9B0f47fDa04b83226dbFBC04EC728b8", + "fFRAX": "0xCC0c0c376cebd701D9126228510f31F9096b836a", + "cUSDCv3": "0x8E24283eF5F6FE85fed48AC3A3d4248B5ba29668", + "cUSDTv3": "0x4aDf4c9b985A743D9fEF14ae4b3e79661F73C78b", + "cvx3Pool": "0xA9f37b188d71b66C3e1ea876F61e00377174508a", + "cvxPayPool": "0x7e80B2f7b6abb98028cC8A66aE6f7ea5302fA904", + "cvxCrvUSDUSDC": "0x1E98A442F917aA8e0e1f6e18687e58D954b8FfC2", + "cvxCrvUSDUSDT": "0x738C191F95C053602e272AfAF67A638519fA4B2F", + "cvxeUSDFRAXBP": "0x875af0Bab943b7416c6D2142546cAb61F1Ad964a", + "cvxETHPlusETH": "0xfa025df685BA0A09B2C767f4Cc1a1972F140d421", + "sDAI": "0x2fe50f96Cd61a3056D497FE88CEA8441244D5d5E", + "cbETH": "0xdCEe056a2fEB893EB1a1C3e3F103Ac8AB098CE2e", + "maUSDT": "0x3ca3359006c55164753Ae475D995163adAB5432d", + "maUSDC": "0x30789B6A26735c83774cD49e22C6f68dD4533A73", + "maDAI": "0x14CEF4f11bD1f2A9E6416b812F7D45481c9dD896", + "maWBTC": "0x65fF9Cf2fE6A28F5fd7fAF5Fd0E54EF9B85DF4E8", + "maWETH": "0x3Cb9DD76AEf20d97C0314ad5Cae6D3d54D87f6eE", + "maStETH": "0xc8F9C28880797cF241D4241395f9Bf14c9E7135C", + "saEthUSDC": "0xFB80E9A48493ac5C3c401Aa713146825d3bB9CA6", + "saEthUSDT": "0x3E2D5CF862c959F5A4046558Bec90C02dD5472eD", + "saEthPyUSD": "0x8B13ac47E0bF142630eAc3e838A0c0AcE8E81c35", + "yvCurveUSDCcrvUSD": "0x3B8bb1153C6b4331AC5eE50d59437A244Ed8Cf57", + "sFRAX": "0x661335963a4e84A5e3Fb58a9110f635bbf116201", + "sfrxETH": "0xa514214E14d64822EE70dfF2d5E15f9a2772aD20", + "steakUSDC": "0xd9Da5527B077d81b0289eae2745EaF48f0bC433f", + "steakPYUSD": "0x46eE78397ab4E334A85Bbc7B7C3A2935f175D4d9", + "bbUSDT": "0xC2b73b106cCb4D2Cf937bFfCD629f3e636773567", + "Re7WETH": "0x2E22d688CF3846e5303f6E4eaD0a7455801813E2", + "ETHx": "0x1c0a14A44C4a6834FE23632dA2f493cC4cf87DbA", + "apxETH": "0x6F7eDae52dD7e45f470C327788249a2812A259d8", + "sUSDe": "0x4f30165072351923A1A4BC3926050986318f9B34", + "pyUSD": "0xe0941A6e0DFC823CF44e95664a5B151041C13D42", + "sUSDS": "0x8a1a3B46749b81Cf91d56dF6042E12CE50E1b08A", + "wOETH": "0xa4D38731434e875d7E30e13d8b65BEfEd7d47Ac2" }, "erc20s": { "stkAAVE": "0x4da27a545c0c5B758a6BA100e3a049001de870f5", @@ -74,17 +64,14 @@ "DAI": "0x6B175474E89094C44Da98b954EedeAC495271d0F", "USDC": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "USDT": "0xdAC17F958D2ee523a2206206994597C13D831ec7", - "USDP": "0x8E870D67F660D95d5be530380D0eC0bd388289E1", "BUSD": "0x4Fabb145d64652a948d72533023f6E7A623C7C53", "aDAI": "0x717AC7A53C6a6a5529175dff7fCc76858436f8c0", "aUSDC": "0xa8157BF67Fd7BcDCC139CB9Bf1bd7Eb921A779D3", "aUSDT": "0x684AA4faf9b07d5091B88c6e0a8160aCa5e6d17b", "aBUSD": "0xf3840c4B214699F94fBB69ad3922f44176c93658", - "aUSDP": "0x5Ad7CeD3c64847980082e106390DeC3765A5f1C4", "cDAI": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", "cUSDC": "0x39AA39c021dfbaE8faC545936693aC917d5E7563", "cUSDT": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9", - "cUSDP": "0x041171993284df560249B57358F931D9eB7b925D", "cWBTC": "0xccF4429DB6322D5C611ee964527D42E5d685DD6a", "cETH": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", "WBTC": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", @@ -96,14 +83,13 @@ "fDAI": "0xe2bA8693cE7474900A045757fe0efCa900F6530b", "fFRAX": "0x1C9A2d6b33B4826757273D47ebEe0e2DddcD978B", "cUSDCv3": "0x27F2f159Fe990Ba83D57f39Fd69661764BEbf37a", + "cUSDTv3": "0xEB74EC1d4C1DAB412D5d6674F6833FD19d3118Ce", "cvx3Pool": "0x24CDc6b4Edd3E496b7283D94D93119983A61056a", "cvxPayPool": "0x511daB8150966aFfE15F0a5bFfBa7F4d2b62DEd4", + "cvxCrvUSDUSDC": "0x6ad24C0B8fD4B594C6009A7F7F48450d9F56c6b8", + "cvxCrvUSDUSDT": "0x5d1B749bA7f689ef9f260EDC54326C48919cA88b", "cvxeUSDFRAXBP": "0x81697e25DFf8564d9E0bC6D27edb40006b34ea2A", - "cvxMIM3Pool": "0x3e8f7EDc03E0133b95EcB4dD2f72B5027E695413", - "cvxETHPlusETH": "0x767F8655cb8e81064954C65e126028C4a733dCd8", - "crv3Pool": "0x8A6029C6D921dCa4fAbf6F5b2F6D14606F8Fd0aB", - "crveUSDFRAXBP": "0x3D07B9b2Aa60843470e6dAb09a0c3a31DE42E7Ea", - "crvMIM3Pool": "0xB1d0076d156D83B117De3bc63E7CE8031AB117fD", + "cvxETHPlusETH": "0xDbC0cE2321B76D3956412B36e9c0FA9B0fD176E7", "sDAI": "0x83f20f44975d03b1b09e64809b757c47f942beea", "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", "maUSDT": "0x9FD7165AEf369913258F4C8B19c9C350C2dE63cC", @@ -112,27 +98,23 @@ "maWBTC": "0x1F423dC943738b9c31cB3d96c2A744dd7502593d", "maWETH": "0xB7c4c4a2B7453E10d7e4e23Fa8E8D2335d09afab", "maStETH": "0xAdc10669354aAd42A581E6F6cC8990B540AA5689", - "yvCurveUSDCcrvUSD": "0x7cA00559B978CFde81297849be6151d3ccB408A9", - "yvCurveUSDPcrvUSD": "0xF56fB6cc29F0666BDD1662FEaAE2A3C935ee3469", - "sFRAX": "0xA663B02CF0a4b149d2aD41910CB81e23e1c41c32", "saEthUSDC": "0x0aDc69041a2B086f8772aCcE2A754f410F211bed", + "saEthUSDT": "0x7133EbCb1a23e3d8Be7Ff09362b02b2A2e4c3dA4", "saEthPyUSD": "0x1576B2d7ef15a2ebE9C22C8765DD9c1EfeA8797b", - "bbUSDT": "0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1", + "yvCurveUSDCcrvUSD": "0x7cA00559B978CFde81297849be6151d3ccB408A9", + "sFRAX": "0xA663B02CF0a4b149d2aD41910CB81e23e1c41c32", + "sfrxETH": "0xac3E018457B222d93114458476f3E3416Abbe38F", "steakUSDC": "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB", "steakPYUSD": "0xbEEF02e5E13584ab96848af90261f0C8Ee04722a", + "bbUSDT": "0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1", "Re7WETH": "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", - "cvxCrvUSDUSDC": "0x6ad24C0B8fD4B594C6009A7F7F48450d9F56c6b8", - "cvxCrvUSDUSDT": "0x5d1B749bA7f689ef9f260EDC54326C48919cA88b", - "sfrxETH": "0xac3E018457B222d93114458476f3E3416Abbe38F", - "CRV": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "CVX": "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", "ETHx": "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b", "apxETH": "0x9Ba021B0a9b958B5E75cE9f6dff97C7eE52cb3E6", "sUSDe": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", + "CRV": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "CVX": "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", "pyUSD": "0x6c3ea9036406852006290770bedfcaba0e23a0e8", - "cUSDTv3": "0xEB74EC1d4C1DAB412D5d6674F6833FD19d3118Ce", "sUSDS": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD", - "saEthUSDT": "0x7133EbCb1a23e3d8Be7Ff09362b02b2A2e4c3dA4", "wOETH": "0xDcEe70654261AF21C44c093C300eD3Bb97b78192" } -} \ No newline at end of file +} diff --git a/scripts/addresses/1-tmp-deployments.json b/scripts/addresses/1-tmp-deployments.json index d9af73dce0..a1cdedff19 100644 --- a/scripts/addresses/1-tmp-deployments.json +++ b/scripts/addresses/1-tmp-deployments.json @@ -1,40 +1,40 @@ { "prerequisites": { "RSR": "0x320623b8E4fF03373931769A31Fc52A4E78B5d70", - "RSR_FEED": "0x759bBC1be8F90eE6457C44abc7d443842a976d02", - "GNOSIS_EASY_AUCTION": "0x0b7fFc1f4AD541A4Ed16b40D8c37f0929158D101" + "RSR_FEED": "0x759bBC1be8F90eE6457C44abc7d443842a976d02" }, - "tradingLib": "0xa54544C6C36C0d776cc4F04EBB847e0BB3A11ea2", + "tradingLib": "0xD595456AC36aab96CF9d10d1ADF8C3b4576C7937", "facade": "0x9d49b363d492725412bf8350bBb525B7a80a7470", "facets": { "actFacet": "0xCa60954E8819827B0C56e1ec313175fE68712d98", "readFacet": "0x823110a13eB26cB09c4Bb118DBfE4ff5f96D5526", "maxIssuableFacet": "0x5771d976696AA180Fed276FB6571fE2f41D0b849", "backingBufferFacet": "0xB555921a031D321687aE8B0569dA7B6da8BCB209", - "revenueFacet": "0x69c21f4828c57D3BB5Eb5fEEa6C5c1432e193510" + "revenueFacet": "0x69c21f4828c57D3BB5Eb5fEEa6C5c1432e193510", + "tradeHelperFacet": "0x9c09e506e00ac87E2413b7501702fAcA690201Fb" }, - "facadeWriteLib": "0xDf73Cd789422040182b0C24a8b2C97bbCbba3263", - "basketLib": "0xf383dC60D29A5B9ba461F40A0606870d80d1EA88", - "facadeWrite": "0x1D94290F82D0B417B088d9F5dB316B11C9cf220C", - "deployer": "0x2204EC97D31E2C9eE62eaD9e6E2d5F7712D3f1bF", - "rsrAsset": "0x591529f039Ba48C3bEAc5090e30ceDDcb41D0EaA", + "facadeWriteLib": "0x7a993aff39Ab3047Ef2777cfeDD89F7DFD6d4f9A", + "basketLib": "0x2fdD94F363644FEDE5106B22b1706E45D4dD9bea", + "facadeWrite": "0xe4227Ed382A6E5E3001201635De76b7120B13295", + "deployer": "0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526", + "rsrAsset": "0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3", "implementations": { - "main": "0x24a4B37F9c40fB0E80ec436Df2e9989FBAFa8bB7", + "main": "0xc5bf686CfB85786fcFfF557297D4afF8F4e15e44", "trading": { - "gnosisTrade": "0x030c9B66Ac089cB01aA2058FC8f7d9baddC9ae75", - "dutchTrade": "0x971c890ACb9EeB084f292996Be667bB9A2889AE9" + "gnosisTrade": "0xda1631D6DBE9C20CD748F4043f01aeFa7163e227", + "dutchTrade": "0xCC3Cb888dEA5948bbEB7747Aed31128b71b7689D" }, "components": { - "assetRegistry": "0xbF1C0206de440b2cF76Ea4405e1DbF2fC227a463", - "backingManager": "0x20C801869e578E71F2298649870765Aa81f7DC69", - "basketHandler": "0xeE7FC703f84AE2CE30475333c57E56d3A7D3AdBC", - "broker": "0x62BD44b05542bfF1E59A01Bf7151F533e1c9C12c", - "distributor": "0x44a42A0F14128E81a21c5fc4322a9f91fF83b4Ee", - "furnace": "0x845B8b0a1c6DB8318414d708Da25fA28d4a0dc81", - "rsrTrader": "0xc60a7Cd6fce24d0c3637A1dCBC8B0f9A9BFF6a7c", - "rTokenTrader": "0xc60a7Cd6fce24d0c3637A1dCBC8B0f9A9BFF6a7c", - "rToken": "0x784955641292b0014BC9eF82321300f0b6C7E36d", - "stRSR": "0xE433673648c94FEC0706E5AC95d4f4097f58B5fb" + "assetRegistry": "0xcB7e10000De0DAcE5A79c620191Cab2517693637", + "backingManager": "0xc501c9074CE15A4B00dd0B51B3c372518e6D3BA2", + "basketHandler": "0x54A8fa5217970e2040590DDD7c16f72B1fb57a3C", + "broker": "0x63c61086418406eBB062c5C6dF80F46c6d052d4c", + "distributor": "0x5593F9d1141E2dcae50a5315fa9Ee0Ad64d88F32", + "furnace": "0x518fcA5e31eEea484276A68Ad5F7E5838F74F03F", + "rsrTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rTokenTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rToken": "0xB20909FD35c548069d1Cc0Ff38337e6b362CA8a0", + "stRSR": "0x8E594FFb702C48a9fF8ae56FAeC795D83A69B387" } } } \ No newline at end of file diff --git a/scripts/addresses/8453-tmp-assets-collateral.json b/scripts/addresses/8453-tmp-assets-collateral.json index 0f5c1e1153..0c22c16159 100644 --- a/scripts/addresses/8453-tmp-assets-collateral.json +++ b/scripts/addresses/8453-tmp-assets-collateral.json @@ -1,27 +1,27 @@ { "assets": { - "COMP": "0xB8794Fb1CCd62bFe631293163F4A3fC2d22e37e0", - "STG": "0xEE527CC63122732532d0f1ad33Ec035D30f3050f", - "AERO": "0x5D09F98B6fA59456E608bD20Ca806140884C3790" + "COMP": "0xf535Cab96457558eE3eeAF1402fCA6441E832f08", + "STG": "0x0e8439a17bA5cBb2D9823c03a02566B9dd5d96Ac", + "AERO": "0xf7d1C6eE4C0D84C6B530D53A897daa1E9eB56833" }, "collateral": { - "DAI": "0x3E40840d0282C9F9cC7d17094b5239f87fcf18e5", - "USDC": "0xaa85216187F92a781D8F9Bcb40825E356ee2635a", - "USDbC": "0xD126741474B0348D9B0F4911573d8f543c01C2c4", - "WETH": "0x073BD162BBD05Cd2CF631B90D44239B8a367276e", - "cbETH": "0x851B461a9744f4c9E996C03072cAB6f44Fa04d0D", - "saBasUSDC": "0xC19f5d60e2Aca1174f3D5Fe189f0A69afaB76f50", - "cUSDCv3": "0xf7a9D27c3B60c78c6F6e2c2d6ED6E8B94b352461", - "wstETH": "0x8b4374005291B8FCD14C4E947604b2FB3C660A73", - "aeroUSDCeUSD": "0x9216CD5cA133aBBd23cc6F873bB4a95A78032db0", - "aeroWETHAERO": "0xaC23df4289e2FeaFb2851e63958C2AAF41DB4833", - "aeroMOGWETH": "0xfAa0cfc986041a3aF69207C6fCF35316D58fEA6a", - "meUSD": "0x0f1e10871e6a2D3A5Aa696b85b39d61a22A9e8C3", - "aeroUSDzUSDC": "0x8AAdfbea33146e28170F99D031B7747EAa87DDD4", - "aeroWETHcbBTC": "0x5ABe1A8b04A2428589bAeF9486d12688d482D061", - "aeroWETHWELL": "0x7df3541FFeDAA956aE6136E64253f3749b055Be6", - "aeroWETHDEGEN": "0xc8E72288f717Da55b7231365daE17AcD91b59705", - "wsuperOETHb": "0xC6b12e2cED3520c228704d256da1CBce04365605" + "DAI": "0xBe70970a10C186185b1bc1bE980eA09BD68fD97A", + "USDC": "0xeaCaF85eA2df99e56053FD0250330C148D582547", + "USDbC": "0x39e19d88F3D5C25B5A684e8A500dBEC2E2c46327", + "WETH": "0x98f292e6Bb4722664fEffb81448cCFB5B7211469", + "cbETH": "0xA87e9DAe6E9EA5B2Be858686CC6c21B953BfE0B8", + "cUSDCv3": "0xF5366f67FF66A3CefcB18809a762D5b5931FebF8", + "saBasUSDC": "0x773cf50adCF1730964D4A9b664BaEd4b9FFC2450", + "wstETH": "0x5ccca36CbB66a4E4033B08b4F6D7bAc96bA55cDc", + "aeroUSDCeUSD": "0x1cCa3FBB11C4b734183f997679d52DeFA74b613A", + "aeroWETHAERO": "0xC98eaFc9F249D90e3E35E729e3679DD75A899c10", + "aeroMOGWETH": "0x339c1509b980D80A0b50858518531eDbe2940dA1", + "aeroUSDzUSDC": "0x1BD20253c49515D348dad1Af70ff2c0473FEa358", + "aeroWETHcbBTC": "0xDAacEE75C863a79f07699b094DB07793D3A52D6D", + "aeroWETHWELL": "0x6647c880Eb8F57948AF50aB45fca8FE86C154D24", + "aeroWETHDEGEN": "0xCFA67f42A0fDe4F0Fb612ea5e66170B0465B84c1", + "meUSD": "0x45B950AF443281c5F67c2c7A1d9bBc325ECb8eEA", + "wsuperOETHb": "0x4024c00bBD0C420E719527D88781bc1543e63dd5" }, "erc20s": { "COMP": "0x9e1028F5F1D5eDE59748FFceE5532509976840E0", @@ -30,19 +30,19 @@ "USDbC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", "WETH": "0x4200000000000000000000000000000000000006", "cbETH": "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22", - "saBasUSDC": "0x6F6f81e5E66f503184f2202D83a79650c3285759", - "STG": "0xE3B53AF74a4BF62Ae5511055290838050bf764Df", "cUSDCv3": "0x53f1Df4E5591Ae35Bf738742981669c3767241FA", + "saBasUSDC": "0x6F6f81e5E66f503184f2202D83a79650c3285759", "wstETH": "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", + "STG": "0xE3B53AF74a4BF62Ae5511055290838050bf764Df", "aeroUSDCeUSD": "0xDB5b8cead52f77De0f6B5255f73F348AAf2CBb8D", "aeroWETHAERO": "0x65f2c1b253a3E45670aDD259C9688Edf1A3b814d", "aeroMOGWETH": "0xfaAC26b279338dF8cF56B11A572617f674A2F69C", - "meUSD": "0xbb819D845b573B5D7C538F5b85057160cfb5f313", - "AERO": "0x940181a94A35A4569E4529A3CDfB74e38FD98631", "aeroUSDzUSDC": "0x246Df11B856E9fD6120494F168475e1b41321c61", "aeroWETHcbBTC": "0x4BD08a771CdAbA5333CAc6F20322eD7d72b6cBfA", "aeroWETHWELL": "0x1F599F8657CAA38Ee825e4E2d64F695749E2a161", "aeroWETHDEGEN": "0xA762F790a31654D9AeF7DE550A473A0F5621E4F1", - "wsuperOETHb": "0x7FcD174E80f264448ebeE8c88a7C4476AAF58Ea6" + "meUSD": "0xbb819D845b573B5D7C538F5b85057160cfb5f313", + "wsuperOETHb": "0x7FcD174E80f264448ebeE8c88a7C4476AAF58Ea6", + "AERO": "0x940181a94A35A4569E4529A3CDfB74e38FD98631" } } \ No newline at end of file diff --git a/scripts/addresses/8453-tmp-deployments.json b/scripts/addresses/8453-tmp-deployments.json index 5b6bbe8ef0..a1e2c0e352 100644 --- a/scripts/addresses/8453-tmp-deployments.json +++ b/scripts/addresses/8453-tmp-deployments.json @@ -1,40 +1,40 @@ { "prerequisites": { "RSR": "0xaB36452DbAC151bE02b16Ca17d8919826072f64a", - "RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1", - "GNOSIS_EASY_AUCTION": "0xb1875Feaeea32Bbb02DE83D81772e07E37A40f02" + "RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1" }, - "tradingLib": "0x6419fe6cf428150e2d8ed38a3316b1bb468f79a7", + "tradingLib": "0x0E6D6cBdA4629Fb2D82b4b4Af0D5c887f21F3BC7", "facade": "0xE41416d8dC94ac1F6d12282d6D46B714F39a87d9", "facets": { "actFacet": "0x72Be467048a4D9CbcC599251243f3eD9F46a42f5", "readFacet": "0x5Af543D6F95a98200Dd770f39A902Fe793BAeB27", "maxIssuableFacet": "0x63FDcB1E8Ee5C4B64A5c4ce0FB97597917920cb6", "backingBufferFacet": "0x38c7e9427960E427f6c84b3A096021f47a9Afb82", - "revenueFacet": "0x4c2FCA94163355a5B81F4D924Bce8cCbACc15406" + "revenueFacet": "0x4c2FCA94163355a5B81F4D924Bce8cCbACc15406", + "tradeHelperFacet": "0xC1E16AD7844Da1AEFFa6c3932AD02b823DE12d3F" }, - "facadeWriteLib": "0x186d05580E6B7195323b5dC8c3ee9179Ad086d4C", - "basketLib": "0x182e86ad4a6139ced4f9fa4ed3f1cd9e4f7449e7", - "facadeWrite": "0x43E205A805c4be5A62C71d49de68dF60200548A0", - "deployer": "0xFD18bA9B2f9241Ce40CDE14079c1cDA1502A8D0A", - "rsrAsset": "0x02062c16c28A169D1f2F5EfA7eEDc42c3311ec23", + "facadeWriteLib": "0x62C394620f674e85768a7618a6C202baE7fB8Dd1", + "basketLib": "0x3700b22C742980be9D22740933d4a041A64f7314", + "facadeWrite": "0x3C8cD9FCa9925780598eB097D9718dF3da482C2F", + "deployer": "0x9E50605e02483c273F7B5A5826f363F3a46DCA79", + "rsrAsset": "0x22018D85BFdA9e2673FB4101e957562a1e952Cdf", "implementations": { - "main": "0x2a2A842Dda2Da2170a531dfF4bD4A821321e4485", + "main": "0x6D05CB2CB647B58189FA16f81784C05B4bcd4fe9", "trading": { - "gnosisTrade": "0x93de153Ba104D15785c8d8af01AE9425960de49e", - "dutchTrade": "0x270284ecb6aF0dc521D2c8f9D77b03EEd2aace90" + "gnosisTrade": "0x1FFA5955D64Ee32cB1BF7104167b81bb085b0c8d", + "dutchTrade": "0x8A9F74d40c5323E73B63a80c4282658fD43F3AA2" }, "components": { - "assetRegistry": "0x3DDe17cfd36e740CB7452cb2F59FC925eACb91aB", - "backingManager": "0xb5bDFF1FB47635383ABf13b78a79C8a21aA1b23E", - "basketHandler": "0xA4f1Fc88eFF9a72bCc278a2D3B79cafCc1551fb5", - "broker": "0x1cddc45cb390C3b4a739861155E8ee95b7321eD6", - "distributor": "0xba748FAF1a94B5C8De5C8Ca8D87A0906C5B0300c", - "furnace": "0xE0B810bD674132b553770064Fc90440c5A5f518d", - "rsrTrader": "0x3c2460ACa70bedf096f71Cf91fFBc0789F08503f", - "rTokenTrader": "0x3c2460ACa70bedf096f71Cf91fFBc0789F08503f", - "rToken": "0x02Ab5B6dF2c17d060EE3e95D08225Ff3A42504a5", - "stRSR": "0x4Cf200D7fA568611DD8B4BD85053ba9419982C7D" + "assetRegistry": "0xaBd7E7a5C846eD497681a590feBED99e7157B6a3", + "backingManager": "0xF73EB45d83AC86f8a6F75a6252ca1a59a9A3aED3", + "basketHandler": "0x5c83CA710E72D130E3B74aEC5b739676ef5737c2", + "broker": "0x714341800AD1913B5FCCBFd5d136553Ad1C314d6", + "distributor": "0xE1fcCf8e23713Ed0497ED1a0E6Ae2b19ED443eCd", + "furnace": "0x280Eb3B16A95a2F3CEDc2bDC4E6F91b43a3c396d", + "rsrTrader": "0x55590a1Bf90fbf7352A46c4af652A231AA5CbF13", + "rTokenTrader": "0x55590a1Bf90fbf7352A46c4af652A231AA5CbF13", + "rToken": "0x8b06c065b4b44B310442d4ee98777BF7a1EBC6E3", + "stRSR": "0xb3dCcEf35647A8821C76f796bE8B5426Cc953412" } } -} +} \ No newline at end of file diff --git a/scripts/addresses/base-4.2.0/8453-tmp-assets-collateral.json b/scripts/addresses/base-4.2.0/8453-tmp-assets-collateral.json new file mode 100644 index 0000000000..0c22c16159 --- /dev/null +++ b/scripts/addresses/base-4.2.0/8453-tmp-assets-collateral.json @@ -0,0 +1,48 @@ +{ + "assets": { + "COMP": "0xf535Cab96457558eE3eeAF1402fCA6441E832f08", + "STG": "0x0e8439a17bA5cBb2D9823c03a02566B9dd5d96Ac", + "AERO": "0xf7d1C6eE4C0D84C6B530D53A897daa1E9eB56833" + }, + "collateral": { + "DAI": "0xBe70970a10C186185b1bc1bE980eA09BD68fD97A", + "USDC": "0xeaCaF85eA2df99e56053FD0250330C148D582547", + "USDbC": "0x39e19d88F3D5C25B5A684e8A500dBEC2E2c46327", + "WETH": "0x98f292e6Bb4722664fEffb81448cCFB5B7211469", + "cbETH": "0xA87e9DAe6E9EA5B2Be858686CC6c21B953BfE0B8", + "cUSDCv3": "0xF5366f67FF66A3CefcB18809a762D5b5931FebF8", + "saBasUSDC": "0x773cf50adCF1730964D4A9b664BaEd4b9FFC2450", + "wstETH": "0x5ccca36CbB66a4E4033B08b4F6D7bAc96bA55cDc", + "aeroUSDCeUSD": "0x1cCa3FBB11C4b734183f997679d52DeFA74b613A", + "aeroWETHAERO": "0xC98eaFc9F249D90e3E35E729e3679DD75A899c10", + "aeroMOGWETH": "0x339c1509b980D80A0b50858518531eDbe2940dA1", + "aeroUSDzUSDC": "0x1BD20253c49515D348dad1Af70ff2c0473FEa358", + "aeroWETHcbBTC": "0xDAacEE75C863a79f07699b094DB07793D3A52D6D", + "aeroWETHWELL": "0x6647c880Eb8F57948AF50aB45fca8FE86C154D24", + "aeroWETHDEGEN": "0xCFA67f42A0fDe4F0Fb612ea5e66170B0465B84c1", + "meUSD": "0x45B950AF443281c5F67c2c7A1d9bBc325ECb8eEA", + "wsuperOETHb": "0x4024c00bBD0C420E719527D88781bc1543e63dd5" + }, + "erc20s": { + "COMP": "0x9e1028F5F1D5eDE59748FFceE5532509976840E0", + "DAI": "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", + "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "USDbC": "0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA", + "WETH": "0x4200000000000000000000000000000000000006", + "cbETH": "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22", + "cUSDCv3": "0x53f1Df4E5591Ae35Bf738742981669c3767241FA", + "saBasUSDC": "0x6F6f81e5E66f503184f2202D83a79650c3285759", + "wstETH": "0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452", + "STG": "0xE3B53AF74a4BF62Ae5511055290838050bf764Df", + "aeroUSDCeUSD": "0xDB5b8cead52f77De0f6B5255f73F348AAf2CBb8D", + "aeroWETHAERO": "0x65f2c1b253a3E45670aDD259C9688Edf1A3b814d", + "aeroMOGWETH": "0xfaAC26b279338dF8cF56B11A572617f674A2F69C", + "aeroUSDzUSDC": "0x246Df11B856E9fD6120494F168475e1b41321c61", + "aeroWETHcbBTC": "0x4BD08a771CdAbA5333CAc6F20322eD7d72b6cBfA", + "aeroWETHWELL": "0x1F599F8657CAA38Ee825e4E2d64F695749E2a161", + "aeroWETHDEGEN": "0xA762F790a31654D9AeF7DE550A473A0F5621E4F1", + "meUSD": "0xbb819D845b573B5D7C538F5b85057160cfb5f313", + "wsuperOETHb": "0x7FcD174E80f264448ebeE8c88a7C4476AAF58Ea6", + "AERO": "0x940181a94A35A4569E4529A3CDfB74e38FD98631" + } +} \ No newline at end of file diff --git a/scripts/addresses/base-4.2.0/8453-tmp-deployments.json b/scripts/addresses/base-4.2.0/8453-tmp-deployments.json new file mode 100644 index 0000000000..2a1a9ae308 --- /dev/null +++ b/scripts/addresses/base-4.2.0/8453-tmp-deployments.json @@ -0,0 +1,40 @@ +{ + "prerequisites": { + "RSR": "0xaB36452DbAC151bE02b16Ca17d8919826072f64a", + "RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1" + }, + "tradingLib": "0x0E6D6cBdA4629Fb2D82b4b4Af0D5c887f21F3BC7", + "facade": "0xE41416d8dC94ac1F6d12282d6D46B714F39a87d9", + "facets": { + "actFacet": "0x72Be467048a4D9CbcC599251243f3eD9F46a42f5", + "readFacet": "0x5Af543D6F95a98200Dd770f39A902Fe793BAeB27", + "maxIssuableFacet": "0x63FDcB1E8Ee5C4B64A5c4ce0FB97597917920cb6", + "backingBufferFacet": "0x38c7e9427960E427f6c84b3A096021f47a9Afb82", + "revenueFacet": "0x4c2FCA94163355a5B81F4D924Bce8cCbACc15406", + "tradeHelperFacet": "0xC1E16AD7844Da1AEFFa6c3932AD02b823DE12d3F" + }, + "facadeWriteLib": "0x62C394620f674e85768a7618a6C202baE7fB8Dd1", + "basketLib": "0x3700b22C742980be9D22740933d4a041A64f7314", + "facadeWrite": "0x3C8cD9FCa9925780598eB097D9718dF3da482C2F", + "deployer": "0x9E50605e02483c273F7B5A5826f363F3a46DCA79", + "rsrAsset": "0x22018D85BFdA9e2673FB4101e957562a1e952Cdf", + "implementations": { + "main": "0x6D05CB2CB647B58189FA16f81784C05B4bcd4fe9", + "trading": { + "gnosisTrade": "0x1FFA5955D64Ee32cB1BF7104167b81bb085b0c8d", + "dutchTrade": "0x8A9F74d40c5323E73B63a80c4282658fD43F3AA2" + }, + "components": { + "assetRegistry": "0xaBd7E7a5C846eD497681a590feBED99e7157B6a3", + "backingManager": "0xF73EB45d83AC86f8a6F75a6252ca1a59a9A3aED3", + "basketHandler": "0x5c83CA710E72D130E3B74aEC5b739676ef5737c2", + "broker": "0x714341800AD1913B5FCCBFd5d136553Ad1C314d6", + "distributor": "0xE1fcCf8e23713Ed0497ED1a0E6Ae2b19ED443eCd", + "furnace": "0x280Eb3B16A95a2F3CEDc2bDC4E6F91b43a3c396d", + "rsrTrader": "0x55590a1Bf90fbf7352A46c4af652A231AA5CbF13", + "rTokenTrader": "0x55590a1Bf90fbf7352A46c4af652A231AA5CbF13", + "rToken": "0x8b06c065b4b44B310442d4ee98777BF7a1EBC6E3", + "stRSR": "0xb3dCcEf35647A8821C76f796bE8B5426Cc953412" + } + } +} diff --git a/scripts/addresses/mainnet-4.2.0/1-tmp-assets-collateral.json b/scripts/addresses/mainnet-4.2.0/1-tmp-assets-collateral.json new file mode 100644 index 0000000000..ae697a0ad9 --- /dev/null +++ b/scripts/addresses/mainnet-4.2.0/1-tmp-assets-collateral.json @@ -0,0 +1,118 @@ +{ + "assets": { + "stkAAVE": "0xFb56B651f882f8f90d35DD7ca181A7F4D889ECac", + "COMP": "0x70C8611F5e34266c09c896f3547D1f7Fccf44D54", + "CRV": "0x1942270ac94E6C6041C7F7c87562Ba8dDB1bDFFc", + "CVX": "0x2362A9B237e4f06491B7E3827eE179b77f2B22c6" + }, + "collateral": { + "DAI": "0xb90FE39CB47c4401A941528769f107dEe8e49488", + "USDC": "0x3A078799a9823cBda084a79c7cAF47f499c6EA09", + "USDT": "0xD8A1b8e73DC025C527493436057f0d8Fc01E1973", + "aDAI": "0x3A395c1bC233D43d126a971b15D8c2b6eB803ca6", + "aUSDC": "0xD1A2a985a18ddf30299cF2bDd0592B29e0AA3e84", + "aUSDT": "0x723e269D178E887E1691f3cEe71c840B5C5b9F76", + "cDAI": "0x8487278d9262B9Dcca4beC85B125A45608d0067A", + "cUSDC": "0x9A84c6F204209957ddA0064EaeAAf6138fDb8cea", + "cUSDT": "0xf35FbE1576E9D52c20B7ef8626477DcFb939d9Ef", + "cWBTC": "0x3484EFB04a54bF376da091f4364F4961F7a01B74", + "cETH": "0xe3dA655331649B86BfE3356beD99258083599543", + "WBTC": "0xcC07EF5FDafa6298b276f14A6F4198317D0d20c3", + "WETH": "0x868dbBD8B7d1AED1fEc4c13cc4a15f50965E2FB9", + "wstETH": "0xc915f28D1Cd97703cF0940ABB192EE50dD882f8c", + "rETH": "0x02D960943E1dD3B2c4d621dD8b72489FA4d7cE49", + "fUSDC": "0x8CfB48b594D54C5BC122f3c4374E16Fcf1050a43", + "fUSDT": "0x097b09fd6932cEC8cf47d5Ec0b0b7DeFb0C97b02", + "fDAI": "0x0c82eFbbd9B0f47fDa04b83226dbFBC04EC728b8", + "fFRAX": "0xCC0c0c376cebd701D9126228510f31F9096b836a", + "cUSDCv3": "0x8E24283eF5F6FE85fed48AC3A3d4248B5ba29668", + "cUSDTv3": "0x4aDf4c9b985A743D9fEF14ae4b3e79661F73C78b", + "cvx3Pool": "0xA9f37b188d71b66C3e1ea876F61e00377174508a", + "cvxPayPool": "0x7e80B2f7b6abb98028cC8A66aE6f7ea5302fA904", + "cvxCrvUSDUSDC": "0x1E98A442F917aA8e0e1f6e18687e58D954b8FfC2", + "cvxCrvUSDUSDT": "0x738C191F95C053602e272AfAF67A638519fA4B2F", + "cvxeUSDFRAXBP": "0x875af0Bab943b7416c6D2142546cAb61F1Ad964a", + "cvxETHPlusETH": "0xfa025df685BA0A09B2C767f4Cc1a1972F140d421", + "sDAI": "0x2fe50f96Cd61a3056D497FE88CEA8441244D5d5E", + "cbETH": "0xdCEe056a2fEB893EB1a1C3e3F103Ac8AB098CE2e", + "maUSDT": "0x3ca3359006c55164753Ae475D995163adAB5432d", + "maUSDC": "0x30789B6A26735c83774cD49e22C6f68dD4533A73", + "maDAI": "0x14CEF4f11bD1f2A9E6416b812F7D45481c9dD896", + "maWBTC": "0x65fF9Cf2fE6A28F5fd7fAF5Fd0E54EF9B85DF4E8", + "maWETH": "0x3Cb9DD76AEf20d97C0314ad5Cae6D3d54D87f6eE", + "maStETH": "0xc8F9C28880797cF241D4241395f9Bf14c9E7135C", + "saEthUSDC": "0xFB80E9A48493ac5C3c401Aa713146825d3bB9CA6", + "saEthUSDT": "0x3E2D5CF862c959F5A4046558Bec90C02dD5472eD", + "saEthPyUSD": "0x8B13ac47E0bF142630eAc3e838A0c0AcE8E81c35", + "yvCurveUSDCcrvUSD": "0x3B8bb1153C6b4331AC5eE50d59437A244Ed8Cf57", + "sFRAX": "0x661335963a4e84A5e3Fb58a9110f635bbf116201", + "sfrxETH": "0xa514214E14d64822EE70dfF2d5E15f9a2772aD20", + "steakUSDC": "0xd9Da5527B077d81b0289eae2745EaF48f0bC433f", + "steakPYUSD": "0x46eE78397ab4E334A85Bbc7B7C3A2935f175D4d9", + "bbUSDT": "0xC2b73b106cCb4D2Cf937bFfCD629f3e636773567", + "Re7WETH": "0x2E22d688CF3846e5303f6E4eaD0a7455801813E2", + "ETHx": "0x1c0a14A44C4a6834FE23632dA2f493cC4cf87DbA", + "apxETH": "0x6F7eDae52dD7e45f470C327788249a2812A259d8", + "sUSDe": "0x4f30165072351923A1A4BC3926050986318f9B34", + "pyUSD": "0xe0941A6e0DFC823CF44e95664a5B151041C13D42", + "sUSDS": "0x8a1a3B46749b81Cf91d56dF6042E12CE50E1b08A", + "wOETH": "0xa4D38731434e875d7E30e13d8b65BEfEd7d47Ac2" + }, + "erc20s": { + "stkAAVE": "0x4da27a545c0c5B758a6BA100e3a049001de870f5", + "COMP": "0xc00e94Cb662C3520282E6f5717214004A7f26888", + "DAI": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "USDC": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "USDT": "0xdAC17F958D2ee523a2206206994597C13D831ec7", + "aDAI": "0x717AC7A53C6a6a5529175dff7fCc76858436f8c0", + "aUSDC": "0xa8157BF67Fd7BcDCC139CB9Bf1bd7Eb921A779D3", + "aUSDT": "0x684AA4faf9b07d5091B88c6e0a8160aCa5e6d17b", + "cDAI": "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643", + "cUSDC": "0x39AA39c021dfbaE8faC545936693aC917d5E7563", + "cUSDT": "0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9", + "cWBTC": "0xccF4429DB6322D5C611ee964527D42E5d685DD6a", + "cETH": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", + "WBTC": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + "WETH": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "wstETH": "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0", + "rETH": "0xae78736Cd615f374D3085123A210448E74Fc6393", + "fUSDC": "0x465a5a630482f3abD6d3b84B39B29b07214d19e5", + "fUSDT": "0x81994b9607e06ab3d5cF3AffF9a67374f05F27d7", + "fDAI": "0xe2bA8693cE7474900A045757fe0efCa900F6530b", + "fFRAX": "0x1C9A2d6b33B4826757273D47ebEe0e2DddcD978B", + "cUSDCv3": "0x27F2f159Fe990Ba83D57f39Fd69661764BEbf37a", + "cUSDTv3": "0xEB74EC1d4C1DAB412D5d6674F6833FD19d3118Ce", + "cvx3Pool": "0x24CDc6b4Edd3E496b7283D94D93119983A61056a", + "cvxPayPool": "0x511daB8150966aFfE15F0a5bFfBa7F4d2b62DEd4", + "cvxCrvUSDUSDC": "0x6ad24C0B8fD4B594C6009A7F7F48450d9F56c6b8", + "cvxCrvUSDUSDT": "0x5d1B749bA7f689ef9f260EDC54326C48919cA88b", + "cvxeUSDFRAXBP": "0x81697e25DFf8564d9E0bC6D27edb40006b34ea2A", + "cvxETHPlusETH": "0xDbC0cE2321B76D3956412B36e9c0FA9B0fD176E7", + "sDAI": "0x83f20f44975d03b1b09e64809b757c47f942beea", + "cbETH": "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704", + "maUSDT": "0x9FD7165AEf369913258F4C8B19c9C350C2dE63cC", + "maUSDC": "0x6Bf3356923E6D611b8352B4895135e1Edfcf217B", + "maDAI": "0x9E5EC103944c19D7E7aBfb2947a865d51bc6947C", + "maWBTC": "0x1F423dC943738b9c31cB3d96c2A744dd7502593d", + "maWETH": "0xB7c4c4a2B7453E10d7e4e23Fa8E8D2335d09afab", + "maStETH": "0xAdc10669354aAd42A581E6F6cC8990B540AA5689", + "saEthUSDC": "0x0aDc69041a2B086f8772aCcE2A754f410F211bed", + "saEthUSDT": "0x7133EbCb1a23e3d8Be7Ff09362b02b2A2e4c3dA4", + "saEthPyUSD": "0x1576B2d7ef15a2ebE9C22C8765DD9c1EfeA8797b", + "yvCurveUSDCcrvUSD": "0x7cA00559B978CFde81297849be6151d3ccB408A9", + "sFRAX": "0xA663B02CF0a4b149d2aD41910CB81e23e1c41c32", + "sfrxETH": "0xac3E018457B222d93114458476f3E3416Abbe38F", + "steakUSDC": "0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB", + "steakPYUSD": "0xbEEF02e5E13584ab96848af90261f0C8Ee04722a", + "bbUSDT": "0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1", + "Re7WETH": "0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0", + "ETHx": "0xA35b1B31Ce002FBF2058D22F30f95D405200A15b", + "apxETH": "0x9Ba021B0a9b958B5E75cE9f6dff97C7eE52cb3E6", + "sUSDe": "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", + "CRV": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "CVX": "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B", + "pyUSD": "0x6c3ea9036406852006290770bedfcaba0e23a0e8", + "sUSDS": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD", + "wOETH": "0xDcEe70654261AF21C44c093C300eD3Bb97b78192" + } +} diff --git a/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json b/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json new file mode 100644 index 0000000000..39600e70dc --- /dev/null +++ b/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json @@ -0,0 +1,40 @@ +{ + "prerequisites": { + "RSR": "0x320623b8E4fF03373931769A31Fc52A4E78B5d70", + "RSR_FEED": "0x759bBC1be8F90eE6457C44abc7d443842a976d02" + }, + "tradingLib": "0xD595456AC36aab96CF9d10d1ADF8C3b4576C7937", + "facade": "0x9d49b363d492725412bf8350bBb525B7a80a7470", + "facets": { + "actFacet": "0xCa60954E8819827B0C56e1ec313175fE68712d98", + "readFacet": "0x823110a13eB26cB09c4Bb118DBfE4ff5f96D5526", + "maxIssuableFacet": "0x5771d976696AA180Fed276FB6571fE2f41D0b849", + "backingBufferFacet": "0xB555921a031D321687aE8B0569dA7B6da8BCB209", + "revenueFacet": "0x69c21f4828c57D3BB5Eb5fEEa6C5c1432e193510", + "tradeHelperFacet": "0x9c09e506e00ac87E2413b7501702fAcA690201Fb" + }, + "facadeWriteLib": "0x7a993aff39Ab3047Ef2777cfeDD89F7DFD6d4f9A", + "basketLib": "0x2fdD94F363644FEDE5106B22b1706E45D4dD9bea", + "facadeWrite": "0xe4227Ed382A6E5E3001201635De76b7120B13295", + "deployer": "0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526", + "rsrAsset": "0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3", + "implementations": { + "main": "0xc5bf686CfB85786fcFfF557297D4afF8F4e15e44", + "trading": { + "gnosisTrade": "0xda1631D6DBE9C20CD748F4043f01aeFa7163e227", + "dutchTrade": "0xCC3Cb888dEA5948bbEB7747Aed31128b71b7689D" + }, + "components": { + "assetRegistry": "0xcB7e10000De0DAcE5A79c620191Cab2517693637", + "backingManager": "0xc501c9074CE15A4B00dd0B51B3c372518e6D3BA2", + "basketHandler": "0x54A8fa5217970e2040590DDD7c16f72B1fb57a3C", + "broker": "0x63c61086418406eBB062c5C6dF80F46c6d052d4c", + "distributor": "0x5593F9d1141E2dcae50a5315fa9Ee0Ad64d88F32", + "furnace": "0x518fcA5e31eEea484276A68Ad5F7E5838F74F03F", + "rsrTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rTokenTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rToken": "0xB20909FD35c548069d1Cc0Ff38337e6b362CA8a0", + "stRSR": "0x8E594FFb702C48a9fF8ae56FAeC795D83A69B387" + } + } +} diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 6d1fd0fd68..0e2a507a5e 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -72,12 +72,7 @@ async function main() { 'phase2-assets/collaterals/deploy_convex_crvusd_usdc_collateral.ts', 'phase2-assets/collaterals/deploy_convex_crvusd_usdt_collateral.ts', 'phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts', - 'phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts', 'phase2-assets/collaterals/deploy_convex_ethplus_eth.ts', - 'phase2-assets/collaterals/deploy_stakedao_usdc_usdcplus.ts', - 'phase2-assets/collaterals/deploy_curve_stable_plugin.ts', - 'phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts', - 'phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts', 'phase2-assets/collaterals/deploy_dsr_sdai.ts', 'phase2-assets/collaterals/deploy_cbeth_collateral.ts', 'phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts', @@ -85,7 +80,6 @@ async function main() { 'phase2-assets/collaterals/deploy_aave_v3_usdt.ts', 'phase2-assets/collaterals/deploy_aave_v3_pyusd.ts', 'phase2-assets/collaterals/deploy_yearn_v2_curve_usdc.ts', - 'phase2-assets/collaterals/deploy_yearn_v2_curve_usdp.ts', 'phase2-assets/collaterals/deploy_sfrax.ts', 'phase2-assets/collaterals/deploy_sfrax_eth.ts', 'phase2-assets/collaterals/deploy_steakusdc.ts', @@ -97,7 +91,6 @@ async function main() { 'phase2-assets/collaterals/deploy_USDe.ts', 'phase2-assets/assets/deploy_crv.ts', 'phase2-assets/assets/deploy_cvx.ts', - 'phase2-assets/collaterals/deploy_pyusd.ts', 'phase2-assets/collaterals/deploy_sky_susds.ts', 'phase2-assets/collaterals/deploy_origin_oeth.ts' ) @@ -111,7 +104,7 @@ async function main() { 'phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts', 'phase2-assets/collaterals/deploy_aave_v3_usdc.ts', 'phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts', - 'phase2-assets/collaterals/deploy_cbeth_collateral.ts', + 'phase2-assets/assets/deploy_aero.ts', 'phase2-assets/assets/deploy_stg.ts', 'phase2-assets/collaterals/deploy_aerodrome_usdc_eusd.ts', 'phase2-assets/collaterals/deploy_aerodrome_weth_aero.ts', diff --git a/scripts/deployment/phase0-dao/0_setup_registries.ts b/scripts/deployment/phase0-dao/0_setup_registries.ts index 372e65f97d..ec991e966c 100644 --- a/scripts/deployment/phase0-dao/0_setup_registries.ts +++ b/scripts/deployment/phase0-dao/0_setup_registries.ts @@ -56,6 +56,7 @@ async function main() { await versionRegistry.deployed() rConfig.registries.versionRegistry = versionRegistry.address + console.log('Version Registry deployed to:', versionRegistry.address) } if (rConfig.registries.assetPluginRegistry == '') { @@ -69,6 +70,7 @@ async function main() { await assetPluginRegistry.deployed() rConfig.registries.assetPluginRegistry = assetPluginRegistry.address + console.log('Asset Plugin Registry deployed to:', assetPluginRegistry.address) } if (rConfig.registries.daoFeeRegistry == '') { @@ -83,6 +85,7 @@ async function main() { await daoFeeRegistry.deployed() rConfig.registries.daoFeeRegistry = daoFeeRegistry.address + console.log('DAO Fee Registry deployed to:', daoFeeRegistry.address) } console.log('!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!') diff --git a/scripts/deployment/phase1-core/0_setup_deployments.ts b/scripts/deployment/phase1-core/0_setup_deployments.ts index f34073097e..1bcdbd8474 100644 --- a/scripts/deployment/phase1-core/0_setup_deployments.ts +++ b/scripts/deployment/phase1-core/0_setup_deployments.ts @@ -53,6 +53,7 @@ async function main() { maxIssuableFacet: '', backingBufferFacet: '', revenueFacet: '', + tradeHelperFacet: '', }, facadeWriteLib: '', basketLib: '', diff --git a/scripts/deployment/phase2-assets/1_deploy_assets.ts b/scripts/deployment/phase2-assets/1_deploy_assets.ts index c7ec54639d..03c17e45c1 100644 --- a/scripts/deployment/phase2-assets/1_deploy_assets.ts +++ b/scripts/deployment/phase2-assets/1_deploy_assets.ts @@ -46,6 +46,7 @@ async function main() { maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: '3600', // 1 hr }) + console.log('task finished') await (await ethers.getContractAt('Asset', stkAAVEAsset)).refresh() assetCollDeployments.assets.stkAAVE = stkAAVEAsset diff --git a/scripts/deployment/phase2-assets/2_deploy_collateral.ts b/scripts/deployment/phase2-assets/2_deploy_collateral.ts index 7bb8c2d7f3..adff3e192d 100644 --- a/scripts/deployment/phase2-assets/2_deploy_collateral.ts +++ b/scripts/deployment/phase2-assets/2_deploy_collateral.ts @@ -67,7 +67,7 @@ async function main() { delayUntilDefault: bn('86400').toString(), // 24h }) collateral = await ethers.getContractAt('ICollateral', daiCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.DAI = daiCollateral @@ -94,7 +94,7 @@ async function main() { delayUntilDefault: bn('86400').toString(), // 24h }) collateral = await ethers.getContractAt('ICollateral', usdcCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.USDC = usdcCollateral @@ -121,7 +121,7 @@ async function main() { delayUntilDefault: bn('86400').toString(), // 24h }) collateral = await ethers.getContractAt('ICollateral', usdtCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.USDT = usdtCollateral @@ -131,55 +131,6 @@ async function main() { fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) } - /******** Deploy Fiat Collateral - USDP **************************/ - - if (networkConfig[chainId].tokens.USDP && networkConfig[chainId].chainlinkFeeds.USDP) { - const { collateral: usdpCollateral } = await hre.run('deploy-fiat-collateral', { - priceTimeout: priceTimeout.toString(), - priceFeed: networkConfig[chainId].chainlinkFeeds.USDP, - oracleError: fp('0.01').toString(), // 1% - tokenAddress: networkConfig[chainId].tokens.USDP, - maxTradeVolume: fp('1e6').toString(), // $1m, - oracleTimeout: '86400', // 24 hr - targetName: hre.ethers.utils.formatBytes32String('USD'), - defaultThreshold: fp('0.02').toString(), // 2% - delayUntilDefault: bn('86400').toString(), // 24h - }) - collateral = await ethers.getContractAt('ICollateral', usdpCollateral) - await (await collateral.refresh()).wait() - expect(await collateral.status()).to.equal(CollateralStatus.SOUND) - - assetCollDeployments.collateral.USDP = usdpCollateral - assetCollDeployments.erc20s.USDP = networkConfig[chainId].tokens.USDP - deployedCollateral.push(usdpCollateral.toString()) - - fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - } - - /******** Deploy Fiat Collateral - BUSD **************************/ - if (networkConfig[chainId].tokens.BUSD && networkConfig[chainId].chainlinkFeeds.BUSD) { - const { collateral: busdCollateral } = await hre.run('deploy-fiat-collateral', { - priceTimeout: priceTimeout.toString(), - priceFeed: networkConfig[chainId].chainlinkFeeds.BUSD, - oracleError: fp('0.005').toString(), // 0.5% - tokenAddress: networkConfig[chainId].tokens.BUSD, - maxTradeVolume: fp('1e6').toString(), // $1m, - oracleTimeout: '86400', // 24 hr - targetName: hre.ethers.utils.formatBytes32String('USD'), - defaultThreshold: fp('0.015').toString(), // 1.5% - delayUntilDefault: bn('86400').toString(), // 24h - }) - collateral = await ethers.getContractAt('ICollateral', busdCollateral) - await (await collateral.refresh()).wait() - expect(await collateral.status()).to.equal(CollateralStatus.SOUND) - - assetCollDeployments.collateral.BUSD = busdCollateral - assetCollDeployments.erc20s.BUSD = networkConfig[chainId].tokens.BUSD - deployedCollateral.push(busdCollateral.toString()) - - fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - } - /******** Base L2 - Deploy Fiat Collateral - USDbC **************************/ if (networkConfig[chainId].tokens.USDbC && networkConfig[chainId].chainlinkFeeds.USDC) { const { collateral: usdcCollateral } = await hre.run('deploy-fiat-collateral', { @@ -194,7 +145,7 @@ async function main() { delayUntilDefault: bn('86400').toString(), // 24h }) collateral = await ethers.getContractAt('ICollateral', usdcCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.USDbC = usdcCollateral @@ -204,35 +155,41 @@ async function main() { fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) } + const StaticATokenFactory = await ethers.getContractFactory('StaticATokenLM') + /*** AAVE V2 not available in Base or Arbitrum L2s */ if (!baseL2Chains.includes(hre.network.name) && !arbitrumL2Chains.includes(hre.network.name)) { /******** Deploy AToken Fiat Collateral - aDAI **************************/ - // Get AToken to retrieve name and symbol - let aToken: ATokenMock = ( - await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aDAI as string) - ) + let erc20 = networkConfig[chainId].tokens.saDAI - // Wrap in StaticAToken - const StaticATokenFactory = await ethers.getContractFactory('StaticATokenLM') - const adaiStaticToken: StaticATokenLM = ( - await StaticATokenFactory.connect(burner).deploy( - networkConfig[chainId].AAVE_LENDING_POOL as string, - aToken.address, - 'Static ' + (await aToken.name()), - 's' + (await aToken.symbol()) + if (!erc20) { + // Get AToken to retrieve name and symbol + const aToken: ATokenMock = ( + await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aDAI as string) ) - ) - await adaiStaticToken.deployed() - console.log( - `Deployed StaticAToken for aDAI on ${hre.network.name} (${chainId}): ${adaiStaticToken.address} ` - ) + + // Wrap in StaticAToken + const adaiStaticToken: StaticATokenLM = ( + await StaticATokenFactory.connect(burner).deploy( + networkConfig[chainId].AAVE_LENDING_POOL as string, + aToken.address, + 'Static ' + (await aToken.name()), + 's' + (await aToken.symbol()) + ) + ) + await adaiStaticToken.deployed() + console.log( + `Deployed StaticAToken for aDAI on ${hre.network.name} (${chainId}): ${adaiStaticToken.address} ` + ) + erc20 = adaiStaticToken.address + } const { collateral: aDaiCollateral } = await hre.run('deploy-atoken-fiat-collateral', { priceTimeout: priceTimeout.toString(), priceFeed: networkConfig[chainId].chainlinkFeeds.DAI, oracleError: fp('0.0025').toString(), // 0.25% - staticAToken: adaiStaticToken.address, + staticAToken: erc20, maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: '3600', // 1 hr targetName: hre.ethers.utils.formatBytes32String('USD'), @@ -241,42 +198,47 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', aDaiCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.aDAI = aDaiCollateral - assetCollDeployments.erc20s.aDAI = adaiStaticToken.address + assetCollDeployments.erc20s.aDAI = erc20 deployedCollateral.push(aDaiCollateral.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) /******** Deploy AToken Fiat Collateral - aUSDC **************************/ - // Get AToken to retrieve name and symbol - aToken = ( - await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aUSDC as string) - ) + erc20 = networkConfig[chainId].tokens.saUSDC - // Wrap in StaticAToken - const ausdcStaticToken: StaticATokenLM = ( - await StaticATokenFactory.connect(burner).deploy( - networkConfig[chainId].AAVE_LENDING_POOL as string, - aToken.address, - 'Static ' + (await aToken.name()), - 's' + (await aToken.symbol()) + if (!erc20) { + // Get AToken to retrieve name and symbol + const aToken = ( + await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aUSDC as string) ) - ) - await ausdcStaticToken.deployed() - console.log( - `Deployed StaticAToken for aUSDC on ${hre.network.name} (${chainId}): ${ausdcStaticToken.address} ` - ) + // Wrap in StaticAToken + const ausdcStaticToken: StaticATokenLM = ( + await StaticATokenFactory.connect(burner).deploy( + networkConfig[chainId].AAVE_LENDING_POOL as string, + aToken.address, + 'Static ' + (await aToken.name()), + 's' + (await aToken.symbol()) + ) + ) + await ausdcStaticToken.deployed() + + console.log( + `Deployed StaticAToken for aUSDC on ${hre.network.name} (${chainId}): ${ausdcStaticToken.address} ` + ) + erc20 = ausdcStaticToken.address + } const { collateral: aUsdcCollateral } = await hre.run('deploy-atoken-fiat-collateral', { priceTimeout: priceTimeout.toString(), priceFeed: networkConfig[chainId].chainlinkFeeds.USDC, oracleError: fp('0.0025').toString(), // 0.25% - staticAToken: ausdcStaticToken.address, + staticAToken: erc20, maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: '86400', // 24 hr targetName: hre.ethers.utils.formatBytes32String('USD'), @@ -285,42 +247,47 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', aUsdcCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.aUSDC = aUsdcCollateral - assetCollDeployments.erc20s.aUSDC = ausdcStaticToken.address + assetCollDeployments.erc20s.aUSDC = erc20 deployedCollateral.push(aUsdcCollateral.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) /******** Deploy AToken Fiat Collateral - aUSDT **************************/ - // Get AToken to retrieve name and symbol - aToken = ( - await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aUSDT as string) - ) + erc20 = networkConfig[chainId].tokens.saUSDT - // Wrap in StaticAToken - const ausdtStaticToken: StaticATokenLM = ( - await StaticATokenFactory.connect(burner).deploy( - networkConfig[chainId].AAVE_LENDING_POOL as string, - aToken.address, - 'Static ' + (await aToken.name()), - 's' + (await aToken.symbol()) + if (!erc20) { + // Get AToken to retrieve name and symbol + const aToken = ( + await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aUSDT as string) ) - ) - await ausdtStaticToken.deployed() - console.log( - `Deployed StaticAToken for aUSDT on ${hre.network.name} (${chainId}): ${ausdtStaticToken.address} ` - ) + // Wrap in StaticAToken + const ausdtStaticToken: StaticATokenLM = ( + await StaticATokenFactory.connect(burner).deploy( + networkConfig[chainId].AAVE_LENDING_POOL as string, + aToken.address, + 'Static ' + (await aToken.name()), + 's' + (await aToken.symbol()) + ) + ) + await ausdtStaticToken.deployed() + + console.log( + `Deployed StaticAToken for aUSDT on ${hre.network.name} (${chainId}): ${ausdtStaticToken.address} ` + ) + erc20 = ausdtStaticToken.address + } const { collateral: aUsdtCollateral } = await hre.run('deploy-atoken-fiat-collateral', { priceTimeout: priceTimeout.toString(), priceFeed: networkConfig[chainId].chainlinkFeeds.USDT, oracleError: fp('0.0025').toString(), // 0.25% - staticAToken: ausdtStaticToken.address, + staticAToken: erc20, maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: '86400', // 24 hr targetName: hre.ethers.utils.formatBytes32String('USD'), @@ -329,101 +296,14 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', aUsdtCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.aUSDT = aUsdtCollateral - assetCollDeployments.erc20s.aUSDT = ausdtStaticToken.address + assetCollDeployments.erc20s.aUSDT = erc20 deployedCollateral.push(aUsdtCollateral.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - - /******** Deploy AToken Fiat Collateral - aBUSD **************************/ - - // Get AToken to retrieve name and symbol - aToken = ( - await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aBUSD as string) - ) - - const abusdStaticToken: StaticATokenLM = ( - await StaticATokenFactory.connect(burner).deploy( - networkConfig[chainId].AAVE_LENDING_POOL as string, - aToken.address, - 'Static ' + (await aToken.name()), - 's' + (await aToken.symbol()) - ) - ) - await abusdStaticToken.deployed() - - console.log( - `Deployed StaticAToken for aBUSD on ${hre.network.name} (${chainId}): ${abusdStaticToken.address} ` - ) - - const { collateral: aBusdCollateral } = await hre.run('deploy-atoken-fiat-collateral', { - priceTimeout: priceTimeout.toString(), - priceFeed: networkConfig[chainId].chainlinkFeeds.BUSD, - oracleError: fp('0.005').toString(), // 0.5% - staticAToken: abusdStaticToken.address, - maxTradeVolume: fp('1e6').toString(), // $1m, - oracleTimeout: '86400', // 24 hr - targetName: hre.ethers.utils.formatBytes32String('USD'), - defaultThreshold: fp('0.015').toString(), // 1.5% - delayUntilDefault: bn('86400').toString(), // 24h - revenueHiding: revenueHiding.toString(), - }) - collateral = await ethers.getContractAt('ICollateral', aBusdCollateral) - await (await collateral.refresh()).wait() - expect(await collateral.status()).to.equal(CollateralStatus.SOUND) - - assetCollDeployments.collateral.aBUSD = aBusdCollateral - assetCollDeployments.erc20s.aBUSD = abusdStaticToken.address - deployedCollateral.push(aBusdCollateral.toString()) - - fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - - /******** Deploy AToken Fiat Collateral - aUSDP **************************/ - - // Get AToken to retrieve name and symbol - aToken = ( - await ethers.getContractAt('ATokenMock', networkConfig[chainId].tokens.aUSDP as string) - ) - - // Wrap in StaticAToken - const ausdpStaticToken: StaticATokenLM = ( - await StaticATokenFactory.connect(burner).deploy( - networkConfig[chainId].AAVE_LENDING_POOL as string, - aToken.address, - 'Static ' + (await aToken.name()), - 's' + (await aToken.symbol()) - ) - ) - await ausdpStaticToken.deployed() - - console.log( - `Deployed StaticAToken for aUSDP on ${hre.network.name} (${chainId}): ${ausdpStaticToken.address} ` - ) - - const { collateral: aUsdpCollateral } = await hre.run('deploy-atoken-fiat-collateral', { - priceTimeout: priceTimeout.toString(), - priceFeed: networkConfig[chainId].chainlinkFeeds.USDP, - oracleError: fp('0.01').toString(), // 1% - staticAToken: ausdpStaticToken.address, - maxTradeVolume: fp('1e6').toString(), // $1m, - oracleTimeout: '86400', // 24 hr - targetName: hre.ethers.utils.formatBytes32String('USD'), - defaultThreshold: fp('0.02').toString(), // 2% - delayUntilDefault: bn('86400').toString(), // 24h - revenueHiding: revenueHiding.toString(), - }) - collateral = await ethers.getContractAt('ICollateral', aUsdpCollateral) - await (await collateral.refresh()).wait() - expect(await collateral.status()).to.equal(CollateralStatus.SOUND) - - assetCollDeployments.collateral.aUSDP = aUsdpCollateral - assetCollDeployments.erc20s.aUSDP = ausdpStaticToken.address - deployedCollateral.push(aUsdpCollateral.toString()) - - fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) } const wbtcOracleError = fp('0.02') // 2% @@ -446,7 +326,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', cDaiCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.cDAI = cDaiCollateral @@ -469,7 +349,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', cUsdcCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.cUSDC = cUsdcCollateral @@ -492,7 +372,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', cUsdtCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.cUSDT = cUsdtCollateral @@ -501,29 +381,6 @@ async function main() { fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - /******** Deploy CToken Fiat Collateral - cUSDP **************************/ - const { collateral: cUsdpCollateral } = await hre.run('deploy-ctoken-fiat-collateral', { - priceTimeout: priceTimeout.toString(), - priceFeed: networkConfig[chainId].chainlinkFeeds.USDP, - oracleError: fp('0.01').toString(), // 1% - cToken: networkConfig[chainId].tokens.cUSDP, - maxTradeVolume: fp('1e6').toString(), // $1m, - oracleTimeout: '86400', // 24 hr - targetName: hre.ethers.utils.formatBytes32String('USD'), - defaultThreshold: fp('0.02').toString(), // 2% - delayUntilDefault: bn('86400').toString(), // 24h - revenueHiding: revenueHiding.toString(), - }) - collateral = await ethers.getContractAt('ICollateral', cUsdpCollateral) - await (await collateral.refresh()).wait() - expect(await collateral.status()).to.equal(CollateralStatus.SOUND) - - assetCollDeployments.collateral.cUSDP = cUsdpCollateral - assetCollDeployments.erc20s.cUSDP = networkConfig[chainId].tokens.cUSDP - deployedCollateral.push(cUsdpCollateral.toString()) - - fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - /******** Deploy CToken Non-Fiat Collateral - cWBTC **************************/ const { collateral: cWBTCCollateral } = await hre.run('deploy-ctoken-nonfiat-collateral', { priceTimeout: priceTimeout.toString(), @@ -540,7 +397,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', cWBTCCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.cWBTC = cWBTCCollateral @@ -565,7 +422,7 @@ async function main() { } ) collateral = await ethers.getContractAt('ICollateral', cETHCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.cETH = cETHCollateral @@ -595,7 +452,7 @@ async function main() { delayUntilDefault: bn('86400').toString(), // 24h }) collateral = await ethers.getContractAt('ICollateral', wBTCCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.WBTC = wBTCCollateral @@ -620,7 +477,7 @@ async function main() { targetName: hre.ethers.utils.formatBytes32String('ETH'), }) collateral = await ethers.getContractAt('ICollateral', wETHCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.WETH = wETHCollateral diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_USDe.ts b/scripts/deployment/phase2-assets/collaterals/deploy_USDe.ts index 1c84bf726a..2598519a51 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_USDe.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_USDe.ts @@ -46,13 +46,11 @@ async function main() { const deployedCollateral: string[] = [] /******** Deploy USDe Collateral - sUSDe **************************/ - let collateral: USDeFiatCollateral - const USDeFiatCollateralFactory: ContractFactory = await hre.ethers.getContractFactory( 'USDeFiatCollateral' ) - collateral = await USDeFiatCollateralFactory.connect(deployer).deploy( + const collateral = await USDeFiatCollateralFactory.connect(deployer).deploy( { priceTimeout: PRICE_TIMEOUT.toString(), chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDe, @@ -72,7 +70,7 @@ async function main() { console.log( `Deployed USDe (sUSDe) Collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.sUSDe = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_pyusd.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_pyusd.ts index 188d86e0e1..7b6436162e 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_pyusd.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_pyusd.ts @@ -57,18 +57,23 @@ async function main() { /******** Deploy Aave V3 pyUSD ERC20 **************************/ - const erc20 = await StaticATokenFactory.deploy( - networkConfig[chainId].AAVE_V3_POOL!, - networkConfig[chainId].AAVE_V3_INCENTIVES_CONTROLLER! - ) - await erc20.deployed() - await ( - await erc20.initialize( - networkConfig[chainId].tokens.aEthPyUSD!, - 'Static Aave Ethereum pyUSD', - 'saEthPyUSD' + let saEthPyUSD = networkConfig[chainId].tokens.saEthPyUSD! + + if (!saEthPyUSD) { + const erc20 = await StaticATokenFactory.deploy( + networkConfig[chainId].AAVE_V3_POOL!, + networkConfig[chainId].AAVE_V3_INCENTIVES_CONTROLLER! ) - ).wait() + await erc20.deployed() + await ( + await erc20.initialize( + networkConfig[chainId].tokens.aEthPyUSD!, + 'Static Aave Ethereum pyUSD', + 'saEthPyUSD' + ) + ).wait() + saEthPyUSD = erc20.address + } /******** Deploy Aave V3 pyUSD collateral plugin **************************/ @@ -77,7 +82,7 @@ async function main() { priceTimeout: priceTimeout, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.pyUSD!, oracleError: PYUSD_ORACLE_ERROR, - erc20: erc20.address, + erc20: saEthPyUSD, maxTradeVolume: PYUSD_MAX_TRADE_VOLUME, oracleTimeout: PYUSD_ORACLE_TIMEOUT, targetName: ethers.utils.formatBytes32String('USD'), @@ -87,14 +92,14 @@ async function main() { revenueHiding ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( `Deployed Aave V3 pyUSD collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - assetCollDeployments.erc20s.saEthPyUSD = erc20.address + assetCollDeployments.erc20s.saEthPyUSD = saEthPyUSD assetCollDeployments.collateral.saEthPyUSD = collateral.address deployedCollateral.push(collateral.address.toString()) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdc.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdc.ts index a208a607cb..28df7c53fd 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdc.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdc.ts @@ -56,6 +56,7 @@ async function main() { /******** Deploy Aave V3 USDC collateral plugin **************************/ const CollateralFactory = await ethers.getContractFactory('AaveV3FiatCollateral') + const StaticATokenFactory = await hre.ethers.getContractFactory('StaticATokenV3LM') const erc20 = await StaticATokenFactory.deploy( networkConfig[chainId].AAVE_V3_POOL!, @@ -95,7 +96,7 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -108,24 +109,29 @@ async function main() { } else if (baseL2Chains.includes(hre.network.name)) { // === Base === - await ( - await erc20.initialize( - networkConfig[chainId].tokens.aBasUSDC!, - 'Static Aave Base USDC', - 'saBasUSDC' - ) - ).wait() + let saBasUSDC = networkConfig[chainId].tokens.saBasUSDC! - console.log( - `Deployed wrapper for Aave V3 USDC on ${hre.network.name} (${chainId}): ${erc20.address} ` - ) + if (!saBasUSDC) { + await ( + await erc20.initialize( + networkConfig[chainId].tokens.aBasUSDC!, + 'Static Aave Base USDC', + 'saBasUSDC' + ) + ).wait() + + console.log( + `Deployed wrapper for Aave V3 USDC on ${hre.network.name} (${chainId}): ${erc20.address} ` + ) + saBasUSDC = erc20.address + } const collateral = await CollateralFactory.connect(deployer).deploy( { priceTimeout: priceTimeout, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDC!, oracleError: USDC_BASE_ORACLE_ERROR.toString(), - erc20: erc20.address, + erc20: saBasUSDC, maxTradeVolume: USDC_BASE_MAX_TRADE_VOLUME.toString(), oracleTimeout: USDC_BASE_ORACLE_TIMEOUT.toString(), targetName: ethers.utils.formatBytes32String('USD'), @@ -135,37 +141,42 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( `Deployed Aave V3 USDC collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - assetCollDeployments.erc20s.saBasUSDC = erc20.address + assetCollDeployments.erc20s.saBasUSDC = saBasUSDC assetCollDeployments.collateral.saBasUSDC = collateral.address deployedCollateral.push(collateral.address.toString()) } else { // === Mainnet === - await ( - await erc20.initialize( - networkConfig[chainId].tokens.aEthUSDC!, - 'Static Aave Ethereum USDC', - 'saEthUSDC' - ) - ).wait() + let saEthUSDC = networkConfig[chainId].tokens.saEthUSDC! - console.log( - `Deployed wrapper for Aave V3 USDC on ${hre.network.name} (${chainId}): ${erc20.address} ` - ) + if (!saEthUSDC) { + await ( + await erc20.initialize( + networkConfig[chainId].tokens.aEthUSDC!, + 'Static Aave Ethereum USDC', + 'saEthUSDC' + ) + ).wait() + + console.log( + `Deployed wrapper for Aave V3 USDC on ${hre.network.name} (${chainId}): ${erc20.address} ` + ) + saEthUSDC = erc20.address + } const collateral = await CollateralFactory.connect(deployer).deploy( { priceTimeout: priceTimeout, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDC!, oracleError: USDC_MAINNET_ORACLE_ERROR.toString(), - erc20: erc20.address, + erc20: saEthUSDC, maxTradeVolume: USDC_MAINNET_MAX_TRADE_VOLUME.toString(), oracleTimeout: USDC_MAINNET_ORACLE_TIMEOUT.toString(), targetName: ethers.utils.formatBytes32String('USD'), @@ -175,14 +186,14 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( `Deployed Aave V3 USDC collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - assetCollDeployments.erc20s.saEthUSDC = erc20.address + assetCollDeployments.erc20s.saEthUSDC = saEthUSDC assetCollDeployments.collateral.saEthUSDC = collateral.address deployedCollateral.push(collateral.address.toString()) } diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdt.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdt.ts index 4d9f00d475..d30ecf7d78 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdt.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aave_v3_usdt.ts @@ -92,7 +92,7 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -107,24 +107,30 @@ async function main() { throw new Error('No Aave V3 USDT on Base') } else { // === Mainnet === - await ( - await erc20.initialize( - networkConfig[chainId].tokens.aEthUSDT!, - 'Static Aave Ethereum USDT', - 'saEthUSDT' - ) - ).wait() - console.log( - `Deployed wrapper for Aave V3 USDT on ${hre.network.name} (${chainId}): ${erc20.address} ` - ) + let saEthUSDT = networkConfig[chainId].tokens.saEthUSDT! + + if (!saEthUSDT) { + await ( + await erc20.initialize( + networkConfig[chainId].tokens.aEthUSDT!, + 'Static Aave Ethereum USDT', + 'saEthUSDT' + ) + ).wait() + + console.log( + `Deployed wrapper for Aave V3 USDT on ${hre.network.name} (${chainId}): ${erc20.address} ` + ) + saEthUSDT = erc20.address + } const collateral = await CollateralFactory.connect(deployer).deploy( { priceTimeout: priceTimeout, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDT!, oracleError: USDT_MAINNET_ORACLE_ERROR.toString(), - erc20: erc20.address, + erc20: saEthUSDT, maxTradeVolume: USDT_MAINNET_MAX_TRADE_VOLUME.toString(), oracleTimeout: USDT_MAINNET_ORACLE_TIMEOUT.toString(), targetName: ethers.utils.formatBytes32String('USD'), @@ -134,14 +140,14 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( `Deployed Aave V3 USDT collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - assetCollDeployments.erc20s.saEthUSDT = erc20.address + assetCollDeployments.erc20s.saEthUSDT = saEthUSDT assetCollDeployments.collateral.saEthUSDT = collateral.address deployedCollateral.push(collateral.address.toString()) } diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_mog_weth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_mog_weth.ts index bafaccd842..01c54fc44b 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_mog_weth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_mog_weth.ts @@ -61,31 +61,35 @@ async function main() { /******** Deploy Aerodrome Volatile Pool for MOG-WETH **************************/ let collateral: AerodromeVolatileCollateral - let wMogWeth: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroMOGWETH // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeVolatileCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeVolatileCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_MOG_WETH_POOL) - wMogWeth = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_MOG_WETH_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_MOG_WETH_POOL) + const wMogWeth = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_MOG_WETH_GAUGE + ) ) - ) - await wMogWeth.deployed() + await wMogWeth.deployed() - console.log( - `Deployed wrapper for Aerodrome Volatile MOG-WETH pool on ${hre.network.name} (${chainId}): ${wMogWeth.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Volatile MOG-WETH pool on ${hre.network.name} (${chainId}): ${wMogWeth.address} ` + ) + erc20 = wMogWeth.address + } const oracleError = combinedError(MOG_ORACLE_ERROR, ETH_ORACLE_ERROR) // 0.5% & 0.15% @@ -93,7 +97,7 @@ async function main() { deployer ).deploy( { - erc20: wMogWeth.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('MOG_ETH_AERODROME_cpAMM'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -116,7 +120,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -124,7 +128,7 @@ async function main() { ) assetCollDeployments.collateral.aeroMOGWETH = collateral.address - assetCollDeployments.erc20s.aeroMOGWETH = wMogWeth.address + assetCollDeployments.erc20s.aeroMOGWETH = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdc_eusd.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdc_eusd.ts index 31b39c8107..fe1cc06ddd 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdc_eusd.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdc_eusd.ts @@ -59,31 +59,35 @@ async function main() { /******** Deploy Aerodrome Stable Pool for USDC-eUSD **************************/ let collateral: AerodromeStableCollateral - let wusdceusd: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroUSDCeUSD // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeStableCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeStableCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_USDC_eUSD_POOL) - wusdceusd = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_USDC_eUSD_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_USDC_eUSD_POOL) + const wusdceusd = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_USDC_eUSD_GAUGE + ) ) - ) - await wusdceusd.deployed() + await wusdceusd.deployed() - console.log( - `Deployed wrapper for Aerodrome Stable USDC-eUSD pool on ${hre.network.name} (${chainId}): ${wusdceusd.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Stable USDC-eUSD pool on ${hre.network.name} (${chainId}): ${wusdceusd.address} ` + ) + erc20 = wusdceusd.address + } const oracleError = combinedError(USDC_ORACLE_ERROR, eUSD_ORACLE_ERROR) // 0.3% & 0.5% @@ -91,7 +95,7 @@ async function main() { deployer ).deploy( { - erc20: wusdceusd.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -114,7 +118,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -122,7 +126,7 @@ async function main() { ) assetCollDeployments.collateral.aeroUSDCeUSD = collateral.address - assetCollDeployments.erc20s.aeroUSDCeUSD = wusdceusd.address + assetCollDeployments.erc20s.aeroUSDCeUSD = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdz_usdc.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdz_usdc.ts index e6166cbb38..91129ad827 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdz_usdc.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_usdz_usdc.ts @@ -59,31 +59,35 @@ async function main() { /******** Deploy Aerodrome Stable Pool for USDz-USDC **************************/ let collateral: AerodromeStableCollateral - let wusdzusdc: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroUSDzUSDC // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeStableCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeStableCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_USDz_USDC_POOL) - wusdzusdc = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_USDz_USDC_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_USDz_USDC_POOL) + const wusdzusdc = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_USDz_USDC_GAUGE + ) ) - ) - await wusdzusdc.deployed() + await wusdzusdc.deployed() - console.log( - `Deployed wrapper for Aerodrome Stable USDz-USDC pool on ${hre.network.name} (${chainId}): ${wusdzusdc.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Stable USDz-USDC pool on ${hre.network.name} (${chainId}): ${wusdzusdc.address} ` + ) + erc20 = wusdzusdc.address + } const oracleError = combinedError(USDC_ORACLE_ERROR, USDz_ORACLE_ERROR) // 0.3% & 0.5% @@ -91,7 +95,7 @@ async function main() { deployer ).deploy( { - erc20: wusdzusdc.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -114,7 +118,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -122,7 +126,7 @@ async function main() { ) assetCollDeployments.collateral.aeroUSDzUSDC = collateral.address - assetCollDeployments.erc20s.aeroUSDzUSDC = wusdzusdc.address + assetCollDeployments.erc20s.aeroUSDzUSDC = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_aero.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_aero.ts index 010446fc96..b9e13ec8d0 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_aero.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_aero.ts @@ -61,31 +61,35 @@ async function main() { /******** Deploy Aerodrome Volatile Pool for WETH-AERO **************************/ let collateral: AerodromeVolatileCollateral - let wWethAero: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroWETHAERO // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeVolatileCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeVolatileCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_AERO_POOL) - wWethAero = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_WETH_AERO_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_AERO_POOL) + const wWethAero = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_WETH_AERO_GAUGE + ) ) - ) - await wWethAero.deployed() + await wWethAero.deployed() - console.log( - `Deployed wrapper for Aerodrome Volatile WETH-AERO pool on ${hre.network.name} (${chainId}): ${wWethAero.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Volatile WETH-AERO pool on ${hre.network.name} (${chainId}): ${wWethAero.address} ` + ) + erc20 = wWethAero.address + } const oracleError = combinedError(AERO_ORACLE_ERROR, ETH_ORACLE_ERROR) // 0.5% & 0.15% @@ -93,7 +97,7 @@ async function main() { deployer ).deploy( { - erc20: wWethAero.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('ETH_AERO_AERODROME_cpAMM'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -116,7 +120,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -124,7 +128,7 @@ async function main() { ) assetCollDeployments.collateral.aeroWETHAERO = collateral.address - assetCollDeployments.erc20s.aeroWETHAERO = wWethAero.address + assetCollDeployments.erc20s.aeroWETHAERO = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_cbbtc.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_cbbtc.ts index e55b105627..a356f29f6c 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_cbbtc.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_cbbtc.ts @@ -61,31 +61,35 @@ async function main() { /******** Deploy Aerodrome Volatile Pool for WETH-cbBTC **************************/ let collateral: AerodromeVolatileCollateral - let wWethcbBTC: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroWETHcbBTC // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeVolatileCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeVolatileCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_cbBTC_POOL) - wWethcbBTC = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_WETH_cbBTC_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_cbBTC_POOL) + const wWethcbBTC = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_WETH_cbBTC_GAUGE + ) ) - ) - await wWethcbBTC.deployed() + await wWethcbBTC.deployed() - console.log( - `Deployed wrapper for Aerodrome Volatile WETH-cbBTC pool on ${hre.network.name} (${chainId}): ${wWethcbBTC.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Volatile WETH-cbBTC pool on ${hre.network.name} (${chainId}): ${wWethcbBTC.address} ` + ) + erc20 = wWethcbBTC.address + } const oracleError = combinedError(cbBTC_ORACLE_ERROR, ETH_ORACLE_ERROR) // 0.3% & 0.15% @@ -93,7 +97,7 @@ async function main() { deployer ).deploy( { - erc20: wWethcbBTC.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('ETH_BTC_AERODROME_cpAMM'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -116,7 +120,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -124,7 +128,7 @@ async function main() { ) assetCollDeployments.collateral.aeroWETHcbBTC = collateral.address - assetCollDeployments.erc20s.aeroWETHcbBTC = wWethcbBTC.address + assetCollDeployments.erc20s.aeroWETHcbBTC = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_degen.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_degen.ts index cb48b58aeb..d0c5eef8ca 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_degen.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_degen.ts @@ -61,31 +61,35 @@ async function main() { /******** Deploy Aerodrome Volatile Pool for WETH-DEGEN **************************/ let collateral: AerodromeVolatileCollateral - let wWethDEGEN: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroWETHDEGEN // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeVolatileCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeVolatileCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_DEGEN_POOL) - wWethDEGEN = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_WETH_DEGEN_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_DEGEN_POOL) + const wWethDEGEN = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_WETH_DEGEN_GAUGE + ) ) - ) - await wWethDEGEN.deployed() + await wWethDEGEN.deployed() - console.log( - `Deployed wrapper for Aerodrome Volatile WETH-DEGEN pool on ${hre.network.name} (${chainId}): ${wWethDEGEN.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Volatile WETH-DEGEN pool on ${hre.network.name} (${chainId}): ${wWethDEGEN.address} ` + ) + erc20 = wWethDEGEN.address + } const oracleError = combinedError(DEGEN_ORACLE_ERROR, ETH_ORACLE_ERROR) // 0.5% & 0.15% @@ -93,7 +97,7 @@ async function main() { deployer ).deploy( { - erc20: wWethDEGEN.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('ETH_DEGEN_AERODROME_cpAMM'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -116,7 +120,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -124,7 +128,7 @@ async function main() { ) assetCollDeployments.collateral.aeroWETHDEGEN = collateral.address - assetCollDeployments.erc20s.aeroWETHDEGEN = wWethDEGEN.address + assetCollDeployments.erc20s.aeroWETHDEGEN = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_well.ts b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_well.ts index 624b0961f0..6277a570c7 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_well.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_aerodrome_weth_well.ts @@ -61,31 +61,35 @@ async function main() { /******** Deploy Aerodrome Volatile Pool for WETH-WELL **************************/ let collateral: AerodromeVolatileCollateral - let wWethWELL: AerodromeGaugeWrapper + let erc20 = networkConfig[chainId].tokens.waeroWETHWELL // Only for Base if (baseL2Chains.includes(hre.network.name)) { const AerodromeVolatileCollateralFactory = await hre.ethers.getContractFactory( 'AerodromeVolatileCollateral' ) - const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') - - // Deploy gauge wrapper - const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_WELL_POOL) - wWethWELL = ( - await AerodromeGaugeWrapperFactory.deploy( - pool.address, - 'w' + (await pool.name()), - 'w' + (await pool.symbol()), - AERO, - AERO_WETH_WELL_GAUGE + + if (!erc20) { + const AerodromeGaugeWrapperFactory = await ethers.getContractFactory('AerodromeGaugeWrapper') + + // Deploy gauge wrapper + const pool = await ethers.getContractAt('IAeroPool', AERO_WETH_WELL_POOL) + const wWethWELL = ( + await AerodromeGaugeWrapperFactory.deploy( + pool.address, + 'w' + (await pool.name()), + 'w' + (await pool.symbol()), + AERO, + AERO_WETH_WELL_GAUGE + ) ) - ) - await wWethWELL.deployed() + await wWethWELL.deployed() - console.log( - `Deployed wrapper for Aerodrome Volatile WETH-WELL pool on ${hre.network.name} (${chainId}): ${wWethWELL.address} ` - ) + console.log( + `Deployed wrapper for Aerodrome Volatile WETH-WELL pool on ${hre.network.name} (${chainId}): ${wWethWELL.address} ` + ) + erc20 = wWethWELL.address + } const oracleError = combinedError(WELL_ORACLE_ERROR, ETH_ORACLE_ERROR) // 0.5% & 0.15% @@ -93,7 +97,7 @@ async function main() { deployer ).deploy( { - erc20: wWethWELL.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('ETH_WELL_AERODROME_cpAMM'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -116,7 +120,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -124,7 +128,7 @@ async function main() { ) assetCollDeployments.collateral.aeroWETHWELL = collateral.address - assetCollDeployments.erc20s.aeroWETHWELL = wWethWELL.address + assetCollDeployments.erc20s.aeroWETHWELL = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_apxeth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_apxeth.ts index 22df12b046..846092c9b0 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_apxeth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_apxeth.ts @@ -65,7 +65,7 @@ async function main() { maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: ETH_ORACLE_TIMEOUT.toString(), // 1 hr, targetName: hre.ethers.utils.formatBytes32String('ETH'), - defaultThreshold: fp('0.02').add(APXETH_ORACLE_ERROR).toString(), // 3% + defaultThreshold: fp('0.02').add(APXETH_ORACLE_ERROR).toString(), // 3% delayUntilDefault: DELAY_UNTIL_DEFAULT.toString(), // 72h }, fp('1e-4').toString(), // revenueHiding = 0.01% @@ -73,7 +73,7 @@ async function main() { APXETH_ORACLE_TIMEOUT.toString() // targetPerTokChainlinkTimeout - 24h ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed ApxETH to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_bbusdt.ts b/scripts/deployment/phase2-assets/collaterals/deploy_bbusdt.ts index 8da827002e..3226e5e845 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_bbusdt.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_bbusdt.ts @@ -71,7 +71,7 @@ async function main() { await collateral.deployed() console.log(`Deployed bbUSDT to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.bbUSDT = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_cbeth_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_cbeth_collateral.ts index 20137da51a..e5e4dfa03f 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_cbeth_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_cbeth_collateral.ts @@ -73,7 +73,7 @@ async function main() { '86400' // refPerTokChainlinkTimeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) } else if (chainId == '8453' || chainId == '84531') { // Base L2 chains @@ -103,7 +103,7 @@ async function main() { '86400' // exchangeRateChainlinkTimeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) } else { throw new Error(`Unsupported chainId: ${chainId}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_3pool_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_3pool_collateral.ts index 77fd4035b0..7270234b02 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_3pool_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_3pool_collateral.ts @@ -63,21 +63,27 @@ async function main() { /******** Deploy Convex Stable Pool for 3pool **************************/ const CurveStableCollateralFactory = await hre.ethers.getContractFactory('CurveStableCollateral') - const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - const w3Pool = await ConvexStakingWrapperFactory.deploy() - await w3Pool.deployed() - await (await w3Pool.initialize(THREE_POOL_CVX_POOL_ID)).wait() + let erc20 = networkConfig[chainId].tokens.wcvx3Pool - console.log( - `Deployed wrapper for Convex Stable 3Pool on ${hre.network.name} (${chainId}): ${w3Pool.address} ` - ) + if (!erc20) { + const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') + + const w3Pool = await ConvexStakingWrapperFactory.deploy() + await w3Pool.deployed() + await (await w3Pool.initialize(THREE_POOL_CVX_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex Stable 3Pool on ${hre.network.name} (${chainId}): ${w3Pool.address} ` + ) + erc20 = w3Pool.address + } const collateral = await CurveStableCollateralFactory.connect( deployer ).deploy( { - erc20: w3Pool.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -99,7 +105,7 @@ async function main() { } ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -107,7 +113,7 @@ async function main() { ) assetCollDeployments.collateral.cvx3Pool = collateral.address - assetCollDeployments.erc20s.cvx3Pool = w3Pool.address + assetCollDeployments.erc20s.cvx3Pool = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdc_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdc_collateral.ts index 5c743c4184..e2cda661da 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdc_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdc_collateral.ts @@ -74,23 +74,29 @@ async function main() { let collateral: CurveStableCollateral | L2ConvexStableCollateral let crvUsdUSDCPool: ConvexStakingWrapper | IConvexRewardPool // no wrapper needed for L2s + let erc20 = networkConfig[chainId].tokens.wcvxCrvUSDUSDC + if (!arbitrumL2Chains.includes(hre.network.name)) { const CurveStableCollateralFactory = await hre.ethers.getContractFactory( 'CurveStableCollateral' ) - const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - crvUsdUSDCPool = await ConvexStakingWrapperFactory.deploy() - await crvUsdUSDCPool.deployed() - await (await crvUsdUSDCPool.initialize(crvUSD_USDC_POOL_ID)).wait() + if (!erc20) { + const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - console.log( - `Deployed wrapper for Convex Stable crvUSD-USDC pool on ${hre.network.name} (${chainId}): ${crvUsdUSDCPool.address} ` - ) + crvUsdUSDCPool = await ConvexStakingWrapperFactory.deploy() + await crvUsdUSDCPool.deployed() + await (await crvUsdUSDCPool.initialize(crvUSD_USDC_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex Stable crvUSD-USDC pool on ${hre.network.name} (${chainId}): ${crvUsdUSDCPool.address} ` + ) + erc20 = crvUsdUSDCPool.address + } collateral = await CurveStableCollateralFactory.connect(deployer).deploy( { - erc20: crvUsdUSDCPool.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -118,6 +124,8 @@ async function main() { crvUsdUSDCPool = ( await ethers.getContractAt('IConvexRewardPool', ARB_Convex_crvUSD_USDC) ) + erc20 = crvUsdUSDCPool.address + collateral = await L2ConvexStableCollateralFactory.connect( deployer ).deploy( @@ -150,7 +158,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -158,7 +166,7 @@ async function main() { ) assetCollDeployments.collateral.cvxCrvUSDUSDC = collateral.address - assetCollDeployments.erc20s.cvxCrvUSDUSDC = crvUsdUSDCPool.address + assetCollDeployments.erc20s.cvxCrvUSDUSDC = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdt_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdt_collateral.ts index 0b848757c2..f43d04f810 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdt_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_crvusd_usdt_collateral.ts @@ -74,23 +74,29 @@ async function main() { let collateral: CurveStableCollateral | L2ConvexStableCollateral let crvUsdUSDTPool: ConvexStakingWrapper | IConvexRewardPool // no wrapper needed for L2s + let erc20 = networkConfig[chainId].tokens.wcvxCrvUSDUSDT + if (!arbitrumL2Chains.includes(hre.network.name)) { const CurveStableCollateralFactory = await hre.ethers.getContractFactory( 'CurveStableCollateral' ) - const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - crvUsdUSDTPool = await ConvexStakingWrapperFactory.deploy() - await crvUsdUSDTPool.deployed() - await (await crvUsdUSDTPool.initialize(crvUSD_USDT_POOL_ID)).wait() + if (!erc20) { + const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - console.log( - `Deployed wrapper for Convex Stable crvUSD-USDT pool on ${hre.network.name} (${chainId}): ${crvUsdUSDTPool.address} ` - ) + crvUsdUSDTPool = await ConvexStakingWrapperFactory.deploy() + await crvUsdUSDTPool.deployed() + await (await crvUsdUSDTPool.initialize(crvUSD_USDT_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex Stable crvUSD-USDT pool on ${hre.network.name} (${chainId}): ${crvUsdUSDTPool.address} ` + ) + erc20 = crvUsdUSDTPool.address + } collateral = await CurveStableCollateralFactory.connect(deployer).deploy( { - erc20: crvUsdUSDTPool.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -118,6 +124,8 @@ async function main() { crvUsdUSDTPool = ( await ethers.getContractAt('IConvexRewardPool', ARB_Convex_crvUSD_USDT) ) + erc20 = crvUsdUSDTPool.address + collateral = await L2ConvexStableCollateralFactory.connect( deployer ).deploy( @@ -150,7 +158,7 @@ async function main() { } await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -158,7 +166,7 @@ async function main() { ) assetCollDeployments.collateral.cvxCrvUSDUSDT = collateral.address - assetCollDeployments.erc20s.cvxCrvUSDUSDT = crvUsdUSDTPool.address + assetCollDeployments.erc20s.cvxCrvUSDUSDT = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_ethplus_eth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_ethplus_eth.ts index 199a38d120..833ece0dce 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_ethplus_eth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_ethplus_eth.ts @@ -56,23 +56,28 @@ async function main() { /******** Deploy Convex Appreciating RToken Collateral for ETH+/ETH **************************/ - const ConvexStakingWrapperFactory = await hre.ethers.getContractFactory('ConvexStakingWrapper') - const CurveAppreciatingRTokenSelfReferentialCollateralFactory = await hre.ethers.getContractFactory('CurveAppreciatingRTokenSelfReferentialCollateral') - const wPool = await ConvexStakingWrapperFactory.deploy() - await wPool.deployed() - await (await wPool.initialize(ETHPLUS_BP_POOL_ID)).wait() + let erc20 = networkConfig[chainId].tokens.wcvxETHPlusETH - console.log( - `Deployed wrapper for Convex Stable ETH+/ETH on ${hre.network.name} (${chainId}): ${wPool.address} ` - ) + if (!erc20) { + const ConvexStakingWrapperFactory = await hre.ethers.getContractFactory('ConvexStakingWrapper') + + const wPool = await ConvexStakingWrapperFactory.deploy() + await wPool.deployed() + await (await wPool.initialize(ETHPLUS_BP_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex Stable ETH+/ETH on ${hre.network.name} (${chainId}): ${wPool.address} ` + ) + erc20 = wPool.address + } const collateral = ( await CurveAppreciatingRTokenSelfReferentialCollateralFactory.connect(deployer).deploy( { - erc20: wPool.address, + erc20: erc20, targetName: hre.ethers.utils.formatBytes32String('ETH'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, @@ -96,7 +101,7 @@ async function main() { ) ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -104,7 +109,7 @@ async function main() { ) assetCollDeployments.collateral.cvxETHPlusETH = collateral.address - assetCollDeployments.erc20s.cvxETHPlusETH = wPool.address + assetCollDeployments.erc20s.cvxETHPlusETH = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_paypool_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_paypool_collateral.ts index 4b62b240db..1f0902d87b 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_paypool_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_paypool_collateral.ts @@ -59,21 +59,27 @@ async function main() { /******** Deploy Convex Stable Pool for 3pool **************************/ const CurveStableCollateralFactory = await hre.ethers.getContractFactory('CurveStableCollateral') - const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - const payPool = await ConvexStakingWrapperFactory.deploy() - await payPool.deployed() - await (await payPool.initialize(PayPool_POOL_ID)).wait() + let erc20 = networkConfig[chainId].tokens.wcvxPayPool - console.log( - `Deployed wrapper for Convex Stable PayPool on ${hre.network.name} (${chainId}): ${payPool.address} ` - ) + if (!erc20) { + const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') + + const payPool = await ConvexStakingWrapperFactory.deploy() + await payPool.deployed() + await (await payPool.initialize(PayPool_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex Stable PayPool on ${hre.network.name} (${chainId}): ${payPool.address} ` + ) + erc20 = payPool.address + } const collateral = await CurveStableCollateralFactory.connect( deployer ).deploy( { - erc20: payPool.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -95,7 +101,7 @@ async function main() { } ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -103,7 +109,7 @@ async function main() { ) assetCollDeployments.collateral.cvxPayPool = collateral.address - assetCollDeployments.erc20s.cvxPayPool = payPool.address + assetCollDeployments.erc20s.cvxPayPool = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts index 2356c4dfea..e9fc511b49 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_rToken_metapool_plugin.ts @@ -64,20 +64,26 @@ async function main() { const CurveStableCollateralFactory = await hre.ethers.getContractFactory( 'CurveStableRTokenMetapoolCollateral' ) - const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') - const wPool = await ConvexStakingWrapperFactory.deploy() - await wPool.deployed() - await (await wPool.initialize(eUSD_FRAX_BP_POOL_ID)).wait() + let erc20 = networkConfig[chainId].tokens.wcvxeUSDFRAXBP - console.log( - `Deployed wrapper for Convex eUSD/FRAX Metapool on ${hre.network.name} (${chainId}): ${wPool.address} ` - ) + if (!erc20) { + const ConvexStakingWrapperFactory = await ethers.getContractFactory('ConvexStakingWrapper') + + const wPool = await ConvexStakingWrapperFactory.deploy() + await wPool.deployed() + await (await wPool.initialize(eUSD_FRAX_BP_POOL_ID)).wait() + + console.log( + `Deployed wrapper for Convex eUSD/FRAX Metapool on ${hre.network.name} (${chainId}): ${wPool.address} ` + ) + erc20 = wPool.address + } const collateral = ( await CurveStableCollateralFactory.connect(deployer).deploy( { - erc20: wPool.address, + erc20: erc20, targetName: ethers.utils.formatBytes32String('USD'), priceTimeout: PRICE_TIMEOUT, chainlinkFeed: ONE_ADDRESS, // unused but cannot be zero @@ -102,7 +108,7 @@ async function main() { ) ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( @@ -110,7 +116,7 @@ async function main() { ) assetCollDeployments.collateral.cvxeUSDFRAXBP = collateral.address - assetCollDeployments.erc20s.cvxeUSDFRAXBP = wPool.address + assetCollDeployments.erc20s.cvxeUSDFRAXBP = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts index de99d2885b..e6ed255388 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_convex_stable_metapool_plugin.ts @@ -108,7 +108,7 @@ async function main() { MIM_DEFAULT_THRESHOLD ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdbc_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdbc_collateral.ts index 8fbacbf108..a23e94ba51 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdbc_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdbc_collateral.ts @@ -82,7 +82,7 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts index dbc84cf50a..0126367a24 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdc_collateral.ts @@ -42,18 +42,25 @@ async function main() { /******** Deploy CompoundV3 USDC - cUSDCv3 **************************/ - const WrapperFactory: ContractFactory = await hre.ethers.getContractFactory('CFiatV3Wrapper') - const erc20 = await WrapperFactory.deploy( - networkConfig[chainId].tokens.cUSDCv3, - networkConfig[chainId].COMET_REWARDS, - networkConfig[chainId].tokens.COMP, - 'Wrapped cUSDCv3', - 'wcUSDCv3', - fp(1).toString() - ) - await erc20.deployed() - - console.log(`Deployed wrapper for cUSDCv3 on ${hre.network.name} (${chainId}): ${erc20.address} `) + let erc20 = networkConfig[chainId].tokens.wcUSDCv3 + + if (!erc20) { + const WrapperFactory: ContractFactory = await hre.ethers.getContractFactory('CFiatV3Wrapper') + const wrapper = await WrapperFactory.deploy( + networkConfig[chainId].tokens.cUSDCv3, + networkConfig[chainId].COMET_REWARDS, + networkConfig[chainId].tokens.COMP, + 'Wrapped cUSDCv3', + 'wcUSDCv3', + fp(1).toString() + ) + await wrapper.deployed() + + console.log( + `Deployed wrapper for cUSDCv3 on ${hre.network.name} (${chainId}): ${wrapper.address} ` + ) + erc20 = wrapper.address + } const CTokenV3Factory: ContractFactory = await hre.ethers.getContractFactory('CTokenV3Collateral') @@ -65,7 +72,7 @@ async function main() { priceTimeout: priceTimeout.toString(), chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDC, oracleError: usdcOracleError.toString(), - erc20: erc20.address, + erc20: erc20, maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: usdcOracleTimeout, // 24h hr, targetName: hre.ethers.utils.formatBytes32String('USD'), @@ -75,13 +82,13 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed CompoundV3 USDC to ${hre.network.name} (${chainId}): ${collateral.address}`) assetCollDeployments.collateral.cUSDCv3 = collateral.address - assetCollDeployments.erc20s.cUSDCv3 = erc20.address + assetCollDeployments.erc20s.cUSDCv3 = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdt_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdt_collateral.ts index b3425a8484..69f5657423 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdt_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_ctokenv3_usdt_collateral.ts @@ -47,18 +47,25 @@ async function main() { /******** Deploy CompoundV3 USDT - cUSDTv3 **************************/ - const WrapperFactory: ContractFactory = await hre.ethers.getContractFactory('CFiatV3Wrapper') - const erc20 = await WrapperFactory.deploy( - networkConfig[chainId].tokens.cUSDTv3, - networkConfig[chainId].COMET_REWARDS, - networkConfig[chainId].tokens.COMP, - 'Wrapped cUSDTv3', - 'wcUSDTv3', - fp(1).toString() - ) - await erc20.deployed() - - console.log(`Deployed wrapper for cUSDTv3 on ${hre.network.name} (${chainId}): ${erc20.address} `) + let erc20 = networkConfig[chainId].tokens.wcUSDTv3 + + if (!erc20) { + const WrapperFactory: ContractFactory = await hre.ethers.getContractFactory('CFiatV3Wrapper') + const wrapper = await WrapperFactory.deploy( + networkConfig[chainId].tokens.cUSDTv3, + networkConfig[chainId].COMET_REWARDS, + networkConfig[chainId].tokens.COMP, + 'Wrapped cUSDTv3', + 'wcUSDTv3', + fp(1).toString() + ) + await wrapper.deployed() + + console.log( + `Deployed wrapper for cUSDTv3 on ${hre.network.name} (${chainId}): ${wrapper.address} ` + ) + erc20 = wrapper.address + } const CTokenV3Factory: ContractFactory = await hre.ethers.getContractFactory('CTokenV3Collateral') @@ -70,7 +77,7 @@ async function main() { priceTimeout: priceTimeout.toString(), chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDT, oracleError: usdtOracleError.toString(), - erc20: erc20.address, + erc20: erc20, maxTradeVolume: fp('1e6').toString(), // $1m, oracleTimeout: usdtOracleTimeout, // 24h hr, targetName: hre.ethers.utils.formatBytes32String('USD'), @@ -80,13 +87,13 @@ async function main() { fp('1e-5').toString() // results from backtester, 1e-6 defaulted ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed CompoundV3 USDT to ${hre.network.name} (${chainId}): ${collateral.address}`) assetCollDeployments.collateral.cUSDTv3 = collateral.address - assetCollDeployments.erc20s.cUSDTv3 = erc20.address + assetCollDeployments.erc20s.cUSDTv3 = erc20 deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts index c2d760a2f9..17f50650e9 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_curve_rToken_metapool_plugin.ts @@ -108,7 +108,7 @@ async function main() { ) ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts index e62840d7e1..c5cd1825b5 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_metapool_plugin.ts @@ -113,7 +113,7 @@ async function main() { MIM_DEFAULT_THRESHOLD ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_plugin.ts index 15b55e069a..ed9f782d91 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_curve_stable_plugin.ts @@ -111,7 +111,7 @@ async function main() { `Deployed Curve Stable Collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.crv3Pool = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_dsr_sdai.ts b/scripts/deployment/phase2-assets/collaterals/deploy_dsr_sdai.ts index aa6e840436..ebcb4fbf0d 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_dsr_sdai.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_dsr_sdai.ts @@ -67,7 +67,7 @@ async function main() { console.log( `Deployed DSR-wrapping sDAI to ${hre.network.name} (${chainId}): ${collateral.address}` ) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.sDAI = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_ethx_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_ethx_collateral.ts index 3648b7d7a8..f47b2710ab 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_ethx_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_ethx_collateral.ts @@ -71,7 +71,7 @@ async function main() { ETHX_ORACLE_TIMEOUT.toString() // targetPerTokChainlinkTimeout - 24h ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed Stader ETHx to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_flux_finance_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_flux_finance_collateral.ts index 6acbcccf8f..64206f55d4 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_flux_finance_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_flux_finance_collateral.ts @@ -56,7 +56,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) let collateral = await ethers.getContractAt('ICollateral', fUsdcCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.fUSDC = fUsdcCollateral @@ -81,7 +81,7 @@ async function main() { revenueHiding: revenueHiding.toString(), }) collateral = await ethers.getContractAt('ICollateral', fUsdtCollateral) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.fUSDT = fUsdtCollateral diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts index 2a5aa04de0..f4d412bb70 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_lido_wsteth_collateral.ts @@ -50,7 +50,7 @@ async function main() { /******** Deploy Mock Oracle (if needed) **************************/ let stethUsdOracleAddress: string = networkConfig[chainId].chainlinkFeeds.stETHUSD! let stethEthOracleAddress: string = networkConfig[chainId].chainlinkFeeds.stETHETH! - if (chainId == 5) { + if (chainId == '5') { const MockOracleFactory = await hre.ethers.getContractFactory('MockV3Aggregator') const mockStethUsdOracle = await MockOracleFactory.connect(deployer).deploy(8, bn(2000e8)) await mockStethUsdOracle.deployed() @@ -96,7 +96,7 @@ async function main() { '86400' // targetPerRefChainlinkTimeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) } else if (chainId == '8453' || chainId == '84531') { const L2LidoStakedEthCollateralFactory: ContractFactory = await hre.ethers.getContractFactory( @@ -126,7 +126,7 @@ async function main() { BASE_FEEDS_TIMEOUT.wstETH_stETH ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) } else { throw new Error(`Unsupported chainId: ${chainId}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts b/scripts/deployment/phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts index a6b19f088f..a5b7f27dc9 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_morpho_aavev2_plugin.ts @@ -41,72 +41,79 @@ async function main() { /******** Deploy Morpho - AaveV2 **************************/ /******** Morpho token vaults **************************/ - console.log(`Deploying morpho token vaults to network ${hre.network.name} (${chainId}) - with burner account: ${deployer.address}`) - const MorphoTokenisedDepositFactory = await ethers.getContractFactory( - 'MorphoAaveV2TokenisedDeposit' - ) - const maUSDT = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.USDT!, - poolToken: networkConfig[chainId].tokens.aUSDT!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // console.log(`Deploying morpho token vaults to network ${hre.network.name} (${chainId}) + // with burner account: ${deployer.address}`) + // const MorphoTokenisedDepositFactory = await ethers.getContractFactory( + // 'MorphoAaveV2TokenisedDeposit' + // ) + // const maUSDT = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.USDT!, + // poolToken: networkConfig[chainId].tokens.aUSDT!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) + + // const maUSDC = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.USDC!, + // poolToken: networkConfig[chainId].tokens.aUSDC!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) - const maUSDC = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.USDC!, - poolToken: networkConfig[chainId].tokens.aUSDC!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // const maDAI = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.DAI!, + // poolToken: networkConfig[chainId].tokens.aDAI!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) - const maDAI = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.DAI!, - poolToken: networkConfig[chainId].tokens.aDAI!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // const maWBTC = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.WBTC!, + // poolToken: networkConfig[chainId].tokens.aWBTC!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) - const maWBTC = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.WBTC!, - poolToken: networkConfig[chainId].tokens.aWBTC!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // const maWETH = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.WETH!, + // poolToken: networkConfig[chainId].tokens.aWETH!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) - const maWETH = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.WETH!, - poolToken: networkConfig[chainId].tokens.aWETH!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // const maStETH = await MorphoTokenisedDepositFactory.deploy({ + // morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, + // morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, + // underlyingERC20: networkConfig[chainId].tokens.stETH!, + // poolToken: networkConfig[chainId].tokens.astETH!, + // rewardToken: networkConfig[chainId].tokens.MORPHO!, + // }) - const maStETH = await MorphoTokenisedDepositFactory.deploy({ - morphoController: networkConfig[chainId].MORPHO_AAVE_CONTROLLER!, - morphoLens: networkConfig[chainId].MORPHO_AAVE_LENS!, - underlyingERC20: networkConfig[chainId].tokens.stETH!, - poolToken: networkConfig[chainId].tokens.astETH!, - rewardToken: networkConfig[chainId].tokens.MORPHO!, - }) + // await maUSDT.deployed() + // await maUSDC.deployed() + // await maDAI.deployed() + // await maWBTC.deployed() + // await maWETH.deployed() + // await maStETH.deployed() - await maUSDT.deployed() - await maUSDC.deployed() - await maDAI.deployed() - await maWBTC.deployed() - await maWETH.deployed() - await maStETH.deployed() + const maUSDT = networkConfig[chainId].tokens.maUSDT! + const maUSDC = networkConfig[chainId].tokens.maUSDC! + const maDAI = networkConfig[chainId].tokens.maDAI! + const maWBTC = networkConfig[chainId].tokens.maWBTC! + const maWETH = networkConfig[chainId].tokens.maWETH! + const maStETH = networkConfig[chainId].tokens.maStETH! - assetCollDeployments.erc20s.maUSDT = maUSDT.address - assetCollDeployments.erc20s.maUSDC = maUSDC.address - assetCollDeployments.erc20s.maDAI = maDAI.address - assetCollDeployments.erc20s.maWBTC = maWBTC.address - assetCollDeployments.erc20s.maWETH = maWETH.address - assetCollDeployments.erc20s.maStETH = maStETH.address + assetCollDeployments.erc20s.maUSDT = maUSDT + assetCollDeployments.erc20s.maUSDC = maUSDC + assetCollDeployments.erc20s.maDAI = maDAI + assetCollDeployments.erc20s.maWBTC = maWBTC + assetCollDeployments.erc20s.maWETH = maWETH + assetCollDeployments.erc20s.maStETH = maStETH /******** Morpho collateral **************************/ const FiatCollateralFactory = await hre.ethers.getContractFactory('MorphoFiatCollateral') @@ -131,28 +138,28 @@ async function main() { { ...baseStableConfig, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDT!, - erc20: maUSDT.address, + erc20: maUSDT, }, revenueHiding ) assetCollDeployments.collateral.maUSDT = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } { const collateral = await FiatCollateralFactory.connect(deployer).deploy( { ...baseStableConfig, chainlinkFeed: networkConfig[chainId].chainlinkFeeds.USDC!, - erc20: maUSDC.address, + erc20: maUSDC, }, revenueHiding ) assetCollDeployments.collateral.maUSDC = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } { const collateral = await FiatCollateralFactory.connect(deployer).deploy( @@ -160,14 +167,14 @@ async function main() { ...baseStableConfig, oracleTimeout: '3600', // 1 hr chainlinkFeed: networkConfig[chainId].chainlinkFeeds.DAI!, - erc20: maDAI.address, + erc20: maDAI, }, revenueHiding ) assetCollDeployments.collateral.maDAI = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } { @@ -184,7 +191,7 @@ async function main() { defaultThreshold: fp('0.01').add(wbtcOracleError), // 3% delayUntilDefault: bn('86400'), // 24h chainlinkFeed: networkConfig[chainId].chainlinkFeeds.WBTC!, // {target/ref} - erc20: maWBTC.address, + erc20: maWBTC, }, revenueHiding, networkConfig[chainId].chainlinkFeeds.BTC!, // {UoA/target} @@ -193,7 +200,7 @@ async function main() { assetCollDeployments.collateral.maWBTC = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } { @@ -207,14 +214,14 @@ async function main() { defaultThreshold: fp('0'), // 0% -- no soft default for self-referential collateral delayUntilDefault: bn('86400'), // 24h chainlinkFeed: networkConfig[chainId].chainlinkFeeds.ETH!, - erc20: maWETH.address, + erc20: maWETH, }, revenueHiding ) assetCollDeployments.collateral.maWETH = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } { @@ -236,7 +243,7 @@ async function main() { defaultThreshold: fp('0.01').add(ethStEthOracleError), // 1.5% delayUntilDefault: bn('86400'), // 24h chainlinkFeed: networkConfig[chainId].chainlinkFeeds.stETHETH!, // {target/ref} - erc20: maStETH.address, + erc20: maStETH, }, revenueHiding, networkConfig[chainId].chainlinkFeeds.ETH!, // {UoA/target} @@ -245,7 +252,7 @@ async function main() { assetCollDeployments.collateral.maStETH = collateral.address deployedCollateral.push(collateral.address.toString()) fs.writeFileSync(assetCollDeploymentFilename, JSON.stringify(assetCollDeployments, null, 2)) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() } console.log(`Deployed collateral to ${hre.network.name} (${chainId}) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_morphoeUSD.ts b/scripts/deployment/phase2-assets/collaterals/deploy_morphoeUSD.ts index b32e989573..94388ddb41 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_morphoeUSD.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_morphoeUSD.ts @@ -15,7 +15,6 @@ import { import { eUSD_ORACLE_TIMEOUT, eUSD_ORACLE_ERROR, - eUSD_USD_FEED, PRICE_TIMEOUT, DELAY_UNTIL_DEFAULT, } from '../../../../test/plugins/individual-collateral/meta-morpho/constants' @@ -59,7 +58,7 @@ async function main() { ).deploy( { priceTimeout: PRICE_TIMEOUT.toString(), - chainlinkFeed: eUSD_USD_FEED, + chainlinkFeed: networkConfig[chainId].chainlinkFeeds.eUSD, oracleError: eUSD_ORACLE_ERROR.toString(), erc20: networkConfig[chainId].tokens.meUSD, maxTradeVolume: fp('1e6').toString(), // 17m vault @@ -73,7 +72,7 @@ async function main() { await collateral.deployed() console.log(`Deployed meUSD to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.meUSD = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_origin_eth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_origin_eth.ts index bf177a15be..5a5bd4e34c 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_origin_eth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_origin_eth.ts @@ -75,7 +75,7 @@ async function main() { BASE_FEEDS_TIMEOUT.ETH_USD // uoaPerTarget timeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed Origin ETH to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_origin_oeth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_origin_oeth.ts index 2e2b479f74..fd8e213324 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_origin_oeth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_origin_oeth.ts @@ -70,7 +70,7 @@ async function main() { ORACLE_TIMEOUT // uoaPerTarget timeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed Origin ETH to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_pyusd.ts b/scripts/deployment/phase2-assets/collaterals/deploy_pyusd.ts index d4de0c91fd..7d4418b3a2 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_pyusd.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_pyusd.ts @@ -11,7 +11,7 @@ import { fileExists, } from '../../../deployment/common' import { priceTimeout } from '../../../deployment/utils' -import { Asset, ICollateral } from '../../../../typechain' +import { ICollateral } from '../../../../typechain' import { PYUSD_MAX_TRADE_VOLUME, PYUSD_ORACLE_ERROR, @@ -48,8 +48,6 @@ async function main() { const deployedCollateral: string[] = [] - let collateral: ICollateral - /******** Deploy pyUSD asset **************************/ const { collateral: pyUsdCollateral } = await hre.run('deploy-fiat-collateral', { priceTimeout: priceTimeout.toString(), @@ -62,8 +60,8 @@ async function main() { defaultThreshold: fp('0.01').add(PYUSD_ORACLE_ERROR).toString(), delayUntilDefault: bn('86400').toString(), // 24h }) - collateral = await ethers.getContractAt('ICollateral', pyUsdCollateral) - await (await collateral.refresh()).wait() + const collateral = await ethers.getContractAt('ICollateral', pyUsdCollateral) + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.pyUSD = pyUsdCollateral diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_re7weth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_re7weth.ts index efe39efbc9..8e12a1ce18 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_re7weth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_re7weth.ts @@ -71,7 +71,7 @@ async function main() { await collateral.deployed() console.log(`Deployed Re7WETH to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.Re7WETH = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts index f51555ad7b..6e00d6e249 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_rocket_pool_reth_collateral.ts @@ -44,7 +44,7 @@ async function main() { /******** Deploy Mock Oracle (if needed) **************************/ let rethOracleAddress: string = networkConfig[chainId].chainlinkFeeds.rETH! - if (chainId == 5) { + if (chainId == '5') { const MockOracleFactory = await hre.ethers.getContractFactory('MockV3Aggregator') const mockOracle = await MockOracleFactory.connect(deployer).deploy(8, fp(2000)) await mockOracle.deployed() @@ -81,7 +81,7 @@ async function main() { '86400' // refPerTokChainlinkTimeout ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed Rocketpool rETH to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_sfrax.ts b/scripts/deployment/phase2-assets/collaterals/deploy_sfrax.ts index 600505d84e..b22f4749ea 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_sfrax.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_sfrax.ts @@ -63,7 +63,7 @@ async function main() { await collateral.deployed() console.log(`Deployed sFRAX to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.sFRAX = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_sfrax_eth.ts b/scripts/deployment/phase2-assets/collaterals/deploy_sfrax_eth.ts index 02f0fdd560..313f7edb66 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_sfrax_eth.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_sfrax_eth.ts @@ -67,7 +67,7 @@ async function main() { await collateral.deployed() console.log(`Deployed sFraxETH to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.sfrxETH = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_sky_susds.ts b/scripts/deployment/phase2-assets/collaterals/deploy_sky_susds.ts index 0e2699ecc8..c29e208f53 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_sky_susds.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_sky_susds.ts @@ -65,7 +65,7 @@ async function main() { console.log(`Deployed sUSDS to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.sUSDS = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_stakedao_usdc_usdcplus.ts b/scripts/deployment/phase2-assets/collaterals/deploy_stakedao_usdc_usdcplus.ts index 5ad2551f6d..a89b4cf865 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_stakedao_usdc_usdcplus.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_stakedao_usdc_usdcplus.ts @@ -82,7 +82,7 @@ async function main() { } ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdc_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdc_collateral.ts index 301e15b2ab..55941c18b3 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdc_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdc_collateral.ts @@ -99,7 +99,7 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdt_collateral.ts b/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdt_collateral.ts index 72239c83c7..d3d633671d 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdt_collateral.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_stargate_usdt_collateral.ts @@ -87,7 +87,7 @@ async function main() { revenueHiding.toString() ) await collateral.deployed() - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log(`Deployed Stargate USDT to ${hre.network.name} (${chainId}): ${collateral.address}`) diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_steakpyusd.ts b/scripts/deployment/phase2-assets/collaterals/deploy_steakpyusd.ts index 6100f1012d..6fc06630cb 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_steakpyusd.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_steakpyusd.ts @@ -71,7 +71,7 @@ async function main() { await collateral.deployed() console.log(`Deployed steakPYUSD to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.steakPYUSD = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_steakusdc.ts b/scripts/deployment/phase2-assets/collaterals/deploy_steakusdc.ts index 53f46681e2..55f23dc822 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_steakusdc.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_steakusdc.ts @@ -71,7 +71,7 @@ async function main() { await collateral.deployed() console.log(`Deployed steakUSDC to ${hre.network.name} (${chainId}): ${collateral.address}`) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.steakUSDC = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_usdm.ts b/scripts/deployment/phase2-assets/collaterals/deploy_usdm.ts index a485083117..15cec07675 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_usdm.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_usdm.ts @@ -78,7 +78,7 @@ async function main() { console.log( `Deployed USDM (wUSDM) Collateral to ${hre.network.name} (${chainId}): ${collateral.address}` ) - // await (await collateral.refresh()).wait() + // await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() // expect(await collateral.status()).to.equal(CollateralStatus.SOUND) console.log( diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdc.ts b/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdc.ts index e8f9f1f154..03405a77dd 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdc.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdc.ts @@ -84,7 +84,7 @@ async function main() { console.log( `Deployed Yearn Curve yvUSDCcrvUSD to ${hre.network.name} (${chainId}): ${collateral.address}` ) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.yvCurveUSDCcrvUSD = collateral.address diff --git a/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdp.ts b/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdp.ts index c8abd75604..416da31fc1 100644 --- a/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdp.ts +++ b/scripts/deployment/phase2-assets/collaterals/deploy_yearn_v2_curve_usdp.ts @@ -84,7 +84,7 @@ async function main() { console.log( `Deployed Yearn Curve yvUSDPcrvUSD to ${hre.network.name} (${chainId}): ${collateral.address}` ) - await (await collateral.refresh()).wait() + await (await collateral.refresh({ gasLimit: 3_000_000 })).wait() expect(await collateral.status()).to.equal(CollateralStatus.SOUND) assetCollDeployments.collateral.yvCurveUSDPcrvUSD = collateral.address diff --git a/scripts/verification/1_verify_implementations.ts b/scripts/verification/1_verify_implementations.ts index c135a644c4..13322cb558 100644 --- a/scripts/verification/1_verify_implementations.ts +++ b/scripts/verification/1_verify_implementations.ts @@ -32,7 +32,7 @@ async function main() { await verifyContract( chainId, deployments.implementations.trading.gnosisTrade, - [], + [networkConfig[chainId].GNOSIS_EASY_AUCTION!], 'contracts/plugins/trading/GnosisTrade.sol:GnosisTrade' ) diff --git a/scripts/verification/3_verify_deployer.ts b/scripts/verification/3_verify_deployer.ts index 0132579724..e73ddd66fd 100644 --- a/scripts/verification/3_verify_deployer.ts +++ b/scripts/verification/3_verify_deployer.ts @@ -24,12 +24,7 @@ async function main() { await verifyContract( chainId, deployments.deployer, - [ - deployments.prerequisites.RSR, - deployments.prerequisites.GNOSIS_EASY_AUCTION, - deployments.rsrAsset, - deployments.implementations, - ], + [deployments.prerequisites.RSR, deployments.rsrAsset, deployments.implementations], 'contracts/p1/Deployer.sol:DeployerP1' ) } diff --git a/scripts/verification/collateral-plugins/verify_morphoeUSD.ts b/scripts/verification/collateral-plugins/verify_morphoeUSD.ts index aa24d45d8e..d90874ed67 100644 --- a/scripts/verification/collateral-plugins/verify_morphoeUSD.ts +++ b/scripts/verification/collateral-plugins/verify_morphoeUSD.ts @@ -39,7 +39,7 @@ async function main() { [ { priceTimeout: PRICE_TIMEOUT.toString(), - chainlinkFeed: eUSD_USD_FEED, + chainlinkFeed: networkConfig[chainId].chainlinkFeeds.eUSD, oracleError: eUSD_ORACLE_ERROR.toString(), erc20: networkConfig[chainId].tokens.meUSD, maxTradeVolume: fp('1e6').toString(), diff --git a/scripts/verify_etherscan.ts b/scripts/verify_etherscan.ts index c0e966e95c..783fc55897 100644 --- a/scripts/verify_etherscan.ts +++ b/scripts/verify_etherscan.ts @@ -57,14 +57,8 @@ async function main() { 'collateral-plugins/verify_convex_crvusd_usdc.ts', 'collateral-plugins/verify_convex_crvusd_usdt.ts', 'collateral-plugins/verify_convex_3pool.ts', - 'collateral-plugins/verify_convex_paypool.ts', - 'collateral-plugins/verify_convex_stable_metapool.ts', 'collateral-plugins/verify_convex_stable_rtoken_metapool.ts', 'collateral-plugins/verify_convex_ethplus_eth.ts', - 'collateral-plugins/verify_curve_stable.ts', - 'collateral-plugins/verify_curve_stable_metapool.ts', - 'collateral-plugins/verify_curve_stable_rtoken_metapool.ts', - 'collateral-plugins/verify_stakedao_usdc_usdcplus.ts', 'collateral-plugins/verify_cusdcv3.ts', 'collateral-plugins/verify_cusdtv3.ts', 'collateral-plugins/verify_reth.ts', @@ -75,7 +69,6 @@ async function main() { 'collateral-plugins/verify_aave_v3_usdc.ts', 'collateral-plugins/verify_aave_v3_usdt.ts', 'collateral-plugins/verify_yearn_v2_curve_usdc.ts', - 'collateral-plugins/verify_yearn_v2_curve_usdp.ts', 'collateral-plugins/verify_sfrax.ts', 'collateral-plugins/verify_sfrax_eth.ts', 'collateral-plugins/verify_steakusdc.ts', @@ -83,7 +76,6 @@ async function main() { 'collateral-plugins/verify_ethx.ts', 'collateral-plugins/verify_apxeth.ts', 'collateral-plugins/verify_USDe.ts', - 'collateral-plugins/verify_pyusd.ts', 'collateral-plugins/verify_susds.ts', 'collateral-plugins/verify_oeth.ts' ) diff --git a/tasks/deployment/deploy-spell.ts b/tasks/deployment/deploy-spell.ts index 52aa7084e1..4e2f541953 100644 --- a/tasks/deployment/deploy-spell.ts +++ b/tasks/deployment/deploy-spell.ts @@ -3,6 +3,7 @@ import { task, types } from 'hardhat/config' import { Contract } from 'ethers' let spell: Contract +let facadeWriteLib: Contract task('deploy-spell', 'Deploys a spell by name') // version is unusable as a param name @@ -24,8 +25,21 @@ task('deploy-spell', 'Deploys a spell by name') } // Deploy Spell - const SpellFactory = await hre.ethers.getContractFactory(spellName) - spell = await SpellFactory.deploy(isMainnet) + if (spellName === 'Upgrade4_2_0') { + const FacadeWriteLibFactory = await hre.ethers.getContractFactory('FacadeWriteLib') + facadeWriteLib = await FacadeWriteLibFactory.deploy() + await facadeWriteLib.deployed() + + const SpellFactory = await hre.ethers.getContractFactory('Upgrade4_2_0', { + libraries: { + FacadeWriteLib: facadeWriteLib.address, + }, + }) + spell = await SpellFactory.deploy(isMainnet) + } else { + const SpellFactory = await hre.ethers.getContractFactory(spellName) + spell = await SpellFactory.deploy(isMainnet) + } if (!params.noOutput) { console.log( @@ -35,11 +49,11 @@ task('deploy-spell', 'Deploys a spell by name') // Uncomment to verify if (!params.noOutput) { - console.log('sleeping 15s') + console.log('sleeping 30s') } // Sleep to ensure API is in sync with chain - await new Promise((r) => setTimeout(r, 15000)) // 15s + await new Promise((r) => setTimeout(r, 30000)) // 30s /** ******************** Verify Spell ****************************************/ console.time('Verifying Spell Implementation') @@ -50,6 +64,16 @@ task('deploy-spell', 'Deploys a spell by name') }) console.timeEnd('Verifying Spell Implementation') + if (spellName === 'Upgrade4_2_0') { + console.time('Verifying FacadeWriteLib') + await hre.run('verify:verify', { + address: facadeWriteLib!.address, + constructorArguments: [], + contract: `contracts/facade/lib/FacadeWriteLib.sol:FacadeWriteLib`, + }) + console.timeEnd('Verifying FacadeWriteLib') + } + if (!params.noOutput) { console.log('verified') } diff --git a/tasks/index.ts b/tasks/index.ts index e6ef8f700e..6f18535612 100644 --- a/tasks/index.ts +++ b/tasks/index.ts @@ -30,3 +30,4 @@ import './upgrades/validate-upgrade' import './validation/mint-tokens' import './validation/proposal-validator' import './validation/spells/3.4.0' +import './validation/spells/4.2.0' diff --git a/tasks/validation/mint-tokens.ts b/tasks/validation/mint-tokens.ts index ee91484937..82a56e53aa 100644 --- a/tasks/validation/mint-tokens.ts +++ b/tasks/validation/mint-tokens.ts @@ -1,6 +1,5 @@ import { task, types } from 'hardhat/config' import { networkConfig } from '../../common/configuration' -import { getChainId } from '../../common/blockchain-utils' import { getDeploymentFile, getAssetCollDeploymentFilename, @@ -8,6 +7,7 @@ import { } from '../../scripts/deployment/common' import { whileImpersonating } from '#/utils/impersonation' import { fp } from '#/common/numbers' +import { useEnv } from '#/utils/env' task('mint-tokens', 'Mints all the tokens to an address') .addParam('address', 'Ethereum address to receive the tokens') @@ -15,12 +15,8 @@ task('mint-tokens', 'Mints all the tokens to an address') .setAction(async (params, hre) => { const [deployer] = await hre.ethers.getSigners() - const chainId = await getChainId(hre) - - // ********** Read config ********** - if (!networkConfig[chainId]) { - throw new Error(`Missing network configuration for ${hre.network.name}`) - } + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' if (!params.noOutput) { console.log( @@ -101,18 +97,15 @@ task('give-rsr', 'Mints RSR to an address') .addParam('address', 'Ethereum address to receive the tokens') .addOptionalParam('amount', 'Amount of RSR to mint', fp('1e9').toString(), types.string) .setAction(async (params, hre) => { - const chainId = await getChainId(hre) - - // ********** Read config ********** - if (!networkConfig[chainId]) { - throw new Error(`Missing network configuration for ${hre.network.name}`) - } + const network = useEnv('FORK_NETWORK').toLowerCase() - const rsr = await hre.ethers.getContractAt('ERC20Mock', networkConfig[chainId].tokens.RSR!) const rsrWhale = - chainId == '8453' + network === 'base' ? '0x95F04B5594e2a944CA91d56933D119841eeF9a99' : '0x6bab6EB87Aa5a1e4A8310C73bDAAA8A5dAAd81C1' + const chainId = network === 'base' ? '8453' : '1' + + const rsr = await hre.ethers.getContractAt('ERC20Mock', networkConfig[chainId].tokens.RSR!) await whileImpersonating(hre, rsrWhale, async (signer) => { await rsr.connect(signer).transfer(params.address, params.amount) }) diff --git a/tasks/validation/proposal-validator.ts b/tasks/validation/proposal-validator.ts index 329c60a6ae..21e9102bea 100644 --- a/tasks/validation/proposal-validator.ts +++ b/tasks/validation/proposal-validator.ts @@ -50,15 +50,6 @@ interface Params { task('proposal-validator', 'Runs a proposal and confirms can fully rebalance + redeem + mint') .addParam('proposalid', 'the ID of the governance proposal', undefined) .setAction(async (params: Params, hre) => { - // await resetFork(hre, Number(process.env.FORK_BLOCK)) - - const chainId = await getChainId(hre) - - // make sure config exists - if (!networkConfig[chainId]) { - throw new Error(`Missing network configuration for ${hre.network.name}`) - } - // only run locally if (hre.network.name != 'localhost' && hre.network.name != 'hardhat') { throw new Error('Only run this on a local fork') @@ -260,7 +251,9 @@ task('run-validations', 'Runs all validations') ) const stRSR = await hre.ethers.getContractAt('StRSRP1Votes', await main.stRSR()) - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' + const whales: Whales = getWhalesFile(chainId).tokens /* @@ -303,7 +296,8 @@ const runCheck_stakeUnstake = async ( stRSR: StRSRP1Votes, main: IMain ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales = getWhalesFile(chainId).tokens // get RSR const stakeAmount = fp('3e6') diff --git a/tasks/validation/proposals/4_2_0.ts b/tasks/validation/proposals/4_2_0.ts new file mode 100644 index 0000000000..38dd1a736d --- /dev/null +++ b/tasks/validation/proposals/4_2_0.ts @@ -0,0 +1,50 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types' +import { buildProposal } from '../utils/governance' +import { Proposal } from '#/utils/subgraph' + +export const MAIN_OWNER_ROLE = '0x4f574e4552000000000000000000000000000000000000000000000000000000' +export const TIMELOCK_ADMIN_ROLE = + '0x5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5' +export const EXECUTOR_ROLE = '0xd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63' +export const PROPOSER_ROLE = '0xb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1' +export const CANCELLER_ROLE = '0xfd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783' + +export const proposal_4_2_0 = async ( + hre: HardhatRuntimeEnvironment, + rTokenAddress: string, + governorAddress: string, + timelockAddress: string, + spellAddress: string +): Promise => { + // Confirm old governor is Anastasius + const anastasius = await hre.ethers.getContractAt('Governance', governorAddress) + const name = await anastasius.name() + console.log('name', name) + + if (name !== 'Governor Anastasius') { + throw new Error('Governor Anastasius only') + } + + // Validate timelock is controlled by governance + if (!timelockAddress) throw new Error('missing timelockAddress') + const timelock = await hre.ethers.getContractAt('TimelockController', timelockAddress) + if (!(await timelock.hasRole(EXECUTOR_ROLE, governorAddress))) + throw new Error('missing EXECUTOR_ROLE') + if (!(await timelock.hasRole(PROPOSER_ROLE, governorAddress))) + throw new Error('missing PROPOSER_ROLE') + // it might be missing CANCELLER_ROLE, that's ok + + const rToken = await hre.ethers.getContractAt('RTokenP1', rTokenAddress) + const main = await hre.ethers.getContractAt('MainP1', await rToken.main()) + const spell = await hre.ethers.getContractAt('Upgrade4_2_0', spellAddress) + + // Build proposal + const txs = [ + await main.populateTransaction.grantRole(MAIN_OWNER_ROLE, spell.address), + await spell.populateTransaction.castSpell(rTokenAddress, anastasius.address, []), + ] + + const description = '4.2.0 Upgrade - Core Contracts + Plugins' + + return buildProposal(txs, description) +} diff --git a/tasks/validation/spells/4.2.0.ts b/tasks/validation/spells/4.2.0.ts new file mode 100644 index 0000000000..291c558f50 --- /dev/null +++ b/tasks/validation/spells/4.2.0.ts @@ -0,0 +1,110 @@ +import fs from 'fs' +import { task } from 'hardhat/config' +import { BigNumber } from 'ethers' +import { useEnv } from '#/utils/env' +import { BASE_DEPLOYMENTS, MAINNET_DEPLOYMENTS } from '../utils/constants' +import { resetFork } from '#/utils/chain' +import { + proposal_4_2_0, + EXECUTOR_ROLE, + PROPOSER_ROLE, + CANCELLER_ROLE, + MAIN_OWNER_ROLE, +} from '../proposals/4_2_0' +import { Upgrade4_2_0 } from '#/typechain' + +// Use this once to serialize a proposal +task('4.2.0', 'Upgrade to 4.2.0').setAction(async (_, hre) => { + const network = useEnv('FORK_NETWORK').toLowerCase() + const block = useEnv('FORK_BLOCK') + + const deployments = network === 'base' ? BASE_DEPLOYMENTS : MAINNET_DEPLOYMENTS + for (const deployment of deployments) { + // reset fork + await resetFork(hre, Number(block)) + + const rToken = await hre.ethers.getContractAt('RTokenP1', deployment.rToken) + console.log( + '\n', + `/***** 4.2.0 Upgrade - RToken: ${await rToken.symbol()} - Address: ${rToken.address} ****/` + ) + + // TODO remove and replace with canonical spell address after deployment + let spell: Upgrade4_2_0 + { + const FacadeWriteLibFactory = await hre.ethers.getContractFactory('FacadeWriteLib') + const facadeWriteLib = await FacadeWriteLibFactory.deploy() + await facadeWriteLib.deployed() + + const UpgradeFactory = await hre.ethers.getContractFactory('Upgrade4_2_0', { + libraries: { + FacadeWriteLib: facadeWriteLib.address, + }, + }) + spell = await UpgradeFactory.deploy(network !== 'base') + await spell.deployed() + } + + const anastasius = await hre.ethers.getContractAt('Governance', deployment.governor) + const result = await proposal_4_2_0( + hre, + deployment.rToken, + anastasius.address, + deployment.timelock, + spell.address + ) + result.rtoken = deployment.rToken + result.governor = anastasius.address + result.timelock = deployment.timelock + + const descHash = hre.ethers.utils.keccak256(hre.ethers.utils.toUtf8Bytes(result.description)) + result.proposalId = BigNumber.from( + await anastasius.hashProposal(result.targets, result.values, result.calldatas, descHash) + ).toString() + + fs.writeFileSync( + `./tasks/validation/proposals/proposal-${result.proposalId}.json`, + JSON.stringify(result, null, 4) + ) + + await hre.run('proposal-validator', { + proposalid: result.proposalId, + }) + + const [newAnastasiusAddr, newTimelockAddr] = await spell.newGovs(deployment.rToken) + console.log(`New governor: ${newAnastasiusAddr}, new timelock: ${newTimelockAddr}`) + + const newTimelock = await hre.ethers.getContractAt('TimelockController', newTimelockAddr) + + if ( + (await newTimelock.hasRole(PROPOSER_ROLE, anastasius.address)) || + (await newTimelock.hasRole(EXECUTOR_ROLE, anastasius.address)) || + (await newTimelock.hasRole(CANCELLER_ROLE, anastasius.address)) + ) { + throw new Error('governor rekt') + } + + const main = await hre.ethers.getContractAt('IMain', await rToken.main()) + if ( + (await main.hasRole(MAIN_OWNER_ROLE, spell.address)) || + (await main.hasRole(MAIN_OWNER_ROLE, deployment.timelock)) || + !(await main.hasRole(MAIN_OWNER_ROLE, newTimelock.address)) + ) { + throw new Error('RToken rekt') + } + if ((await rToken.version()) != '4.2.0') throw new Error('Failed to upgrade to 4.2.0') + + // All registered collateral should be SOUND + const assetRegistry = await hre.ethers.getContractAt( + 'AssetRegistryP1', + await main.assetRegistry() + ) + const [, assets] = await assetRegistry.getRegistry() + for (const asset of assets) { + const coll = await hre.ethers.getContractAt('ICollateral', asset) + if ((await coll.isCollateral()) && (await coll.status()) != 0) { + throw new Error(`coll ${coll.address} is not SOUND: ${await coll.status()}`) + } + } + } +}) diff --git a/tasks/validation/utils/constants.ts b/tasks/validation/utils/constants.ts index d641965d2a..703d436076 100644 --- a/tasks/validation/utils/constants.ts +++ b/tasks/validation/utils/constants.ts @@ -54,60 +54,40 @@ export interface RTokenDeployment { export const MAINNET_DEPLOYMENTS: RTokenDeployment[] = [ { rToken: '0xA0d69E286B938e21CBf7E51D71F6A4c8918f482F', // eUSD - governor: '0x7e880d8bD9c9612D6A9759F96aCD23df4A4650E6', - timelock: '0xc8Ee187A5e5c9dC9b42414Ddf861FFc615446a2c', + governor: '0xf4A9288D5dEb0EaE987e5926795094BF6f4662F8', + timelock: '0x7BEa807798313fE8F557780dBD6b829c1E3aD560', }, { rToken: '0xE72B141DF173b999AE7c1aDcbF60Cc9833Ce56a8', // ETH+ - governor: '0x239cDcBE174B4728c870A24F77540dAB3dC5F981', - timelock: '0x5f4A10aE2fF68bE3cdA7d7FB432b10C6BFA6457B', + governor: '0x868Fe81C276d730A1995Dc84b642E795dFb8F753', + timelock: '0x5d8A7DC9405F08F14541BA918c1Bf7eb2dACE556', }, - { + /*{ rToken: '0xaCdf0DBA4B9839b96221a8487e9ca660a48212be', // hyUSD (mainnet) - governor: '0x22d7937438b4bBf02f6cA55E3831ABB94Bd0b6f1', - timelock: '0x624f9f076ED42ba3B37C3011dC5a1761C2209E1C', - }, - { - rToken: '0xFc0B1EEf20e4c68B3DCF36c4537Cfa7Ce46CA70b', // USDC+ - governor: '0xc837C557071D604bCb1058c8c4891ddBe8FDD630', - timelock: '0x6C957417cB6DF6e821eec8555DEE8b116C291999', - }, + governor: '0x3F26EF1460D21A99425569Ef3148Ca6059a7eEAe', + timelock: '0x788Fd297B4d497e44e4BF25d642fbecA3018B5d2', + },*/ { rToken: '0x0d86883FAf4FfD7aEb116390af37746F45b6f378', // USD3 - governor: '0x020CB71181008369C388CaAEE98b0E69f8F4C471', - timelock: '0xE0289984F709fc7150E646B672bfaDC879a15f14', + governor: '0x441808e20E625e0094b01B40F84af89436229279', + timelock: '0x12e4F043c6464984A45173E0444105058b6C3c7B', }, { - rToken: '0x78da5799CF427Fee11e9996982F4150eCe7a99A7', // rgUSD - governor: '0x409bAc94c4207C6627EA5f4E4FFB7128e8F654Fc', - timelock: '0x9aD9E73e38c8506a664A3A37e8A9CE910B6FBeb4', + rToken: '0x005f893ecd7bf9667195642f7649da8163e23658', // dgnETH + governor: '0xb7cB3880564A1F8698018ECDc78972F93b2615e6', + timelock: '0x05623fcEe6FB48b7C8058022C48A72dbce09878e', }, ] export const BASE_DEPLOYMENTS: RTokenDeployment[] = [ { rToken: '0xCc7FF230365bD730eE4B352cC2492CEdAC49383e', // hyUSD (base) - governor: '0xc8e63d3501A246fa1ddBAbe4ad0B50e9d32aA8bb', - timelock: '0xf093d7f00f3dCe6d415Be564f41Cb4bc032fb367', + governor: '0xffef97179f58a582dEf73e6d2e4BcD2BDC8ca128', + timelock: '0x4284D76a03F9B398FF7aEc58C9dEc94b289070CF', }, { rToken: '0xCb327b99fF831bF8223cCEd12B1338FF3aA322Ff', // bsdETH - governor: '0xB05C6a7242595f2E23CC6a0aB20699d63D0939Fd', - timelock: '0x321f7493B8B675dFfE2570Bd0F164237D445b9E8', - }, - { - rToken: '0xfE0D6D83033e313691E96909d2188C150b834285', // iUSDC - Assets skipped (USDbC) - governor: '0xfe637F7D5B848392c19052631d68F8AC859F71cF', - timelock: '0xd18ED37CA912bbf1EDE93d27459d03DC4343dea1', - }, - { - rToken: '0xC9a3e2B3064c1c0546D3D0edc0A748E9f93Cf18d', // Vaya - Assets skipped (USDbC) - governor: '0xEb583EA06501f92E994C353aD2741A35582987aA', - timelock: '0xeE3eC997A37e661a42673D7A489Fbf0E5ed0C223', - }, - { - rToken: '0x641B0453487C9D14c5df96d45a481ef1dc84e31f', // MAAT - governor: '0x0f7f1442dA7F687BB877Fbee0539FA8D6e4d1a02', - timelock: '0xE67cEb03EfdF9B3fb5C3FeBF3103e2efd3a76A1b', + governor: '0x21fBa52dA03e1F964fa521532f8B8951fC212055', + timelock: '0xe664d294824C2A8C952A10c4034e1105d2907F46', }, ] diff --git a/tasks/validation/utils/oracles.ts b/tasks/validation/utils/oracles.ts index 993b6441d7..c4bd3dfdc9 100644 --- a/tasks/validation/utils/oracles.ts +++ b/tasks/validation/utils/oracles.ts @@ -1,6 +1,7 @@ /* eslint-disable no-empty */ import { networkConfig } from '../../../common/configuration' import { EACAggregatorProxyMock } from '@typechain/EACAggregatorProxyMock' +import { GenericOracleMock } from '@typechain/GenericOracleMock' import { HardhatRuntimeEnvironment } from 'hardhat/types' import { BigNumber } from 'ethers' import { AggregatorV3Interface } from '@typechain/index' @@ -27,6 +28,28 @@ export const overrideOracle = async ( return hre.ethers.getContractAt('EACAggregatorProxyMock', oracleAddress) } +export const overrideGenericOracle = async ( + hre: HardhatRuntimeEnvironment, + oracleAddress: string +): Promise => { + const oracle = await hre.ethers.getContractAt('AggregatorV3Interface', oracleAddress) + const decimals = await oracle.decimals() + const initPrice = await oracle.latestRoundData() + const mockOracleFactory = await hre.ethers.getContractFactory('GenericOracleMock') + const mockOracle = await mockOracleFactory.deploy(decimals, initPrice.answer) + const bytecode = await hre.network.provider.send('eth_getCode', [mockOracle.address, 'latest']) + await hre.network.provider.request({ + method: 'hardhat_setCode', + params: [oracleAddress, bytecode], + }) + + // Initialize mock oracle + const genericOracle = await hre.ethers.getContractAt('GenericOracleMock', oracleAddress) + await genericOracle.initialize(decimals, initPrice.answer) + + return genericOracle +} + export const pushOraclesForward = async ( hre: HardhatRuntimeEnvironment, rTokenAddress: string, @@ -59,10 +82,20 @@ export const pushOracleForward = async ( // Need to handle all oracle cases, ie targetUnitChainlinkFeed, PoolTokens, etc const updateAnswer = async (chainlinkFeed: AggregatorV3Interface) => { if (addresses.indexOf(chainlinkFeed.address) != -1) return + const initPrice = await chainlinkFeed.latestRoundData() - const oracle = await overrideOracle(hre, chainlinkFeed.address) - await oracle.updateAnswer(initPrice.answer) + let oracle: EACAggregatorProxyMock | GenericOracleMock + + try { + // Try Chainlink (EACAggregatorProxy) first + oracle = await overrideOracle(hre, chainlinkFeed.address) + } catch (e) { + // If Chainlink fails, try Generic oracle (works for Redstone) + console.log(`⚠️ Chainlink mock failed for ${chainlinkFeed.address}, trying generic...`) + oracle = await overrideGenericOracle(hre, chainlinkFeed.address) + } + await oracle.updateAnswer(initPrice.answer) addresses.push(chainlinkFeed.address) console.log('✅ Feed Updated:', chainlinkFeed.address) } @@ -149,7 +182,8 @@ export const pushOracleForward = async ( if ( asset == '0x890FAa00C16EAD6AA76F18A1A7fe9C40838F9122' || asset == '0x5cD176b58a6FdBAa1aEFD0921935a730C62f03Ac' || - asset == '0x994455cE66Fd984e2A0A0aca453e637810a8f032' + asset == '0x994455cE66Fd984e2A0A0aca453e637810a8f032' || + asset == '0x875af0Bab943b7416c6D2142546cAb61F1Ad964a' ) { const feed = await hre.ethers.getContractAt( 'AggregatorV3Interface', @@ -167,7 +201,10 @@ export const pushOracleForward = async ( } // Convex ETH+/ETH (Nested RToken) - if (asset == '0x05F164E71C46a8f8FB2ba71550a00eeC9FCd85cd') { + if ( + asset == '0x05F164E71C46a8f8FB2ba71550a00eeC9FCd85cd' || + asset == '0xfa025df685BA0A09B2C767f4Cc1a1972F140d421' + ) { const feed = await hre.ethers.getContractAt( 'AggregatorV3Interface', networkConfig['1'].chainlinkFeeds.ETH! @@ -183,6 +220,29 @@ export const pushOracleForward = async ( } } + // Aerodrome Pools (Base) + if ( + asset == '0x9216CD5cA133aBBd23cc6F873bB4a95A78032db0' || + asset == '0x1cCa3FBB11C4b734183f997679d52DeFA74b613A' + ) { + const aeroPoolTokens = await hre.ethers.getContractAt('AerodromePoolTokens', asset) + const feed0 = await hre.ethers.getContractAt( + 'AggregatorV3Interface', + ( + await aeroPoolTokens.tokenFeeds(0) + )[0] + ) + await updateAnswer(feed0) + + const feed1 = await hre.ethers.getContractAt( + 'AggregatorV3Interface', + ( + await aeroPoolTokens.tokenFeeds(1) + )[0] + ) + await updateAnswer(feed1) + } + return addresses } @@ -196,6 +256,15 @@ export const setOraclePrice = async ( 'AggregatorV3Interface', await assetContract.chainlinkFeed() ) - const oracle = await overrideOracle(hre, realChainlinkFeed.address) + + let oracle: EACAggregatorProxyMock | GenericOracleMock + try { + // Try Chainlink (EACAggregatorProxy) first + oracle = await overrideOracle(hre, realChainlinkFeed.address) + } catch (e) { + // If Chainlink fails, try generic oracle (compatible with Redstone) + oracle = await overrideGenericOracle(hre, realChainlinkFeed.address) + } + await oracle.updateAnswer(value) } diff --git a/tasks/validation/utils/trades.ts b/tasks/validation/utils/trades.ts index af0a49aa69..de963171a9 100644 --- a/tasks/validation/utils/trades.ts +++ b/tasks/validation/utils/trades.ts @@ -10,8 +10,8 @@ import { BigNumber, ContractTransaction } from 'ethers' import { LogDescription } from 'ethers/lib/utils' import { HardhatRuntimeEnvironment } from 'hardhat/types' import { logToken } from './logs' -import { getChainId } from '#/common/blockchain-utils' import { Whales, getWhalesFile } from '#/scripts/whalesConfig' +import { useEnv } from '#/utils/env' export const runBatchTrade = async ( hre: HardhatRuntimeEnvironment, @@ -22,7 +22,8 @@ export const runBatchTrade = async ( // NOTE: // buy & sell are from the perspective of the auction-starter // placeSellOrders() flips it to be from the perspective of the trader - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const tradeAddr = await trader.trades(tradeToken) @@ -38,14 +39,17 @@ export const runBatchTrade = async ( `Running batch trade: sell ${logToken(tradeToken)} for ${logToken(buyTokenAddress)}...` ) const endTime = await trade.endTime() - const worstPrice = await trade.worstCasePrice() // trade.buy() per trade.sell(), qTok + const worstCasePrice = await trade.worstCasePrice() // D27{qBuyTok/qSellTok} const auctionId = await trade.auctionId() const sellAmount = await trade.initBal() const sellToken = await hre.ethers.getContractAt('ERC20Mock', await trade.sell()) const sellDecimals = await sellToken.decimals() - const buytoken = await hre.ethers.getContractAt('ERC20Mock', await buyTokenAddress) + const buytoken = await hre.ethers.getContractAt('ERC20Mock', buyTokenAddress) const buyDecimals = await buytoken.decimals() + + // GnosisTrade stores worstCasePrice in D27 format (27 decimals), convert to D18 + const worstPrice = worstCasePrice.div(bn('1e9')) let buyAmount = bidExact ? sellAmount : sellAmount @@ -97,7 +101,8 @@ export const runDutchTrade = async ( // NOTE: // buy & sell are from the perspective of the auction-starter // bid() flips it to be from the perspective of the trader - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens let tradesRemain = false @@ -255,7 +260,8 @@ const getCvxVault = async ( amount: BigNumber, recipient: string ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const cvxWrapper = await hre.ethers.getContractAt('ConvexStakingWrapper', tokenAddress) @@ -281,7 +287,8 @@ const getCTokenVault = async ( amount: BigNumber, recipient: string ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const collateral = await hre.ethers.getContractAt('CTokenWrapper', tokenAddress) @@ -304,7 +311,8 @@ const getStaticAToken = async ( amount: BigNumber, recipient: string ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const collateral = await hre.ethers.getContractAt('StaticATokenLM', tokenAddress) @@ -332,7 +340,8 @@ const getStaticATokenV3 = async ( amount: BigNumber, recipient: string ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const collateral = await hre.ethers.getContractAt('StaticATokenV3LM', tokenAddress) @@ -366,13 +375,14 @@ const getERC20Tokens = async ( amount: BigNumber, recipient: string ) => { - const chainId = await getChainId(hre) + const network = useEnv('FORK_NETWORK').toLowerCase() + const chainId = network === 'base' ? '8453' : '1' const whales: Whales = getWhalesFile(chainId).tokens const token = await hre.ethers.getContractAt('ERC20Mock', tokenAddress) // special-cases for wrappers with 0 supply - if (chainId == '1' || chainId == '31337') { + if (chainId == '1') { const wcUSDCv3Address = networkConfig[chainId].tokens.wcUSDCv3!.toLowerCase() const wcUSDCv3AddressOld = '0xfBD1a538f5707C0D67a16ca4e3Fc711B80BD931A'.toLowerCase() const aUSDCv3Address = networkConfig[chainId].tokens.saEthUSDC!.toLowerCase() diff --git a/tasks/validation/whales/whales_1.json b/tasks/validation/whales/whales_1.json index c079e44811..6414bfbdb3 100644 --- a/tasks/validation/whales/whales_1.json +++ b/tasks/validation/whales/whales_1.json @@ -32,7 +32,7 @@ "0xe2ba8693ce7474900a045757fe0efca900f6530b": "0x7Fbe0de6ffA86f4B9528AA27029595429B0c74A9", "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9": "0x4da27a545c0c5B758a6BA100e3a049001de870f5", "0x4da27a545c0c5b758a6ba100e3a049001de870f5": "0xb56333581B852e61E1413A2A7A66BF679D8ACf81", - "0xc00e94cb662c3520282e6f5717214004a7f26888": "0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B", + "0xc00e94cb662c3520282e6f5717214004a7f26888": "0x3d9819210A31b496b30EF54bE2aeD79B9c9Cd3B", "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": "0xF04a5cC80B1E94C69B48f5ee68a08CD2F09A7c3E", "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656": "0x7D2620Bc8ad1749F98F1c269E73527f88A74cF00", "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1": "0xB5587A54fF7022AC218438720BDCD840a32f0481", @@ -63,9 +63,9 @@ "0x6c3ea9036406852006290770bedfcaba0e23a0e8": "0xE25a329d385f77df5D4eD56265babe2b99A5436e", "0x0c0d01abf3e6adfca0989ebba9d6e85dd58eab1e": "0x7E4B4DC22111B84594d9b7707A8DCFFd793D477A", "0xe72b141df173b999ae7c1adcbf60cc9833ce56a8": "0x778aC5d0EE062502fADaa2d300a51dE0869f7995", - "0xacdf0dba4b9839b96221a8487e9ca660a48212be": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", + "0xacdf0dba4b9839b96221a8487e9ca660a48212be": "0xB912549A2b525cC35F8Ba14813112C81cf79F624", "0xfc0b1eef20e4c68b3dcf36c4537cfa7ce46ca70b": "0xF2B25362a03f6EACCa8De8d5350A9f37944c1e59", - "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", + "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0xB5a47e677206Bc81dF3CA2ed1812AA437aad8F0b", "0x78da5799cf427fee11e9996982f4150ece7a99a7": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35", "0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f": "0x0C30476f66034E11782938DF8e4384970B6c9e8a", "0x48c3399719b582dd63eb5aadf12a40b4c3f52fa2": "0xF0d99D5d1D5E06CdAd4766503Cb82213B5E1d1bE", diff --git a/tasks/validation/whales/whales_31337.json b/tasks/validation/whales/whales_31337.json index 026e75eb95..bea0fe8221 100644 --- a/tasks/validation/whales/whales_31337.json +++ b/tasks/validation/whales/whales_31337.json @@ -62,10 +62,10 @@ "0x7ca00559b978cfde81297849be6151d3ccb408a9": "0xa931b486F661540c6D709aE6DfC8BcEF347ea437", "0x6c3ea9036406852006290770bedfcaba0e23a0e8": "0xE25a329d385f77df5D4eD56265babe2b99A5436e", "0x0c0d01abf3e6adfca0989ebba9d6e85dd58eab1e": "0x01820D92f8F86947CA0454789172AD60e05817fA", - "0xe72b141df173b999ae7c1adcbf60cc9833ce56a8": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", - "0xacdf0dba4b9839b96221a8487e9ca660a48212be": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", + "0xe72b141df173b999ae7c1adcbf60cc9833ce56a8": "0x778aC5d0EE062502fADaa2d300a51dE0869f7995", + "0xacdf0dba4b9839b96221a8487e9ca660a48212be": "0xB912549A2b525cC35F8Ba14813112C81cf79F624", "0xfc0b1eef20e4c68b3dcf36c4537cfa7ce46ca70b": "0xF2B25362a03f6EACCa8De8d5350A9f37944c1e59", - "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", + "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0xB5a47e677206Bc81dF3CA2ed1812AA437aad8F0b", "0x78da5799cf427fee11e9996982f4150ece7a99a7": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35", "0x78fc2c2ed1a4cdb5402365934ae5648adad094d0": "0xa6B1C84133479e41d8d085005476DD007A50Be66", "0xe8a5677171c87fcb65b76957f2852515b404c7b1": "0x298bf7b80a6343214634aF16EB41Bb5B9fC6A1F1", diff --git a/tasks/validation/whales/whales_8453.json b/tasks/validation/whales/whales_8453.json index 38de1058bd..f8189ed1ef 100644 --- a/tasks/validation/whales/whales_8453.json +++ b/tasks/validation/whales/whales_8453.json @@ -3,7 +3,7 @@ "0x50c5725949a6f0c72e6c4a641f24049a917db0cb": "0x73b06d8d18de422e269645eace15400de7462417", "0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca": "0x0b25c51637c43decd6cc1c1e3da4518d54ddb528", "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913": "0x7c41fdced2ea646ed85665d1a9b28e6632b61c41", - "0xab36452dbac151be02b16ca17d8919826072f64a": "0x95f04b5594e2a944ca91d56933d119841eef9a99", + "0xab36452dbac151be02b16ca17d8919826072f64a": "0xD552F527217f4Fcf381e5c2a472951ffb0fA3BE1", "0x9e1028f5f1d5ede59748ffcee5532509976840e0": "0x123964802e6ababbe1bc9547d72ef1b69b00a6b1", "0x4200000000000000000000000000000000000006": "0xcdac0d6c6c59727a65f871236188350531885c43", "0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22": "0x3bf93770f2d4a794c3d9ebefbaebae2a8f09a5e5", diff --git a/test/Deployer.test.ts b/test/Deployer.test.ts index 3dbee9f810..9d48d3aab2 100644 --- a/test/Deployer.test.ts +++ b/test/Deployer.test.ts @@ -330,8 +330,8 @@ describe(`DeployerP${IMPLEMENTATION} contract #fast`, () => { // Check assets/collateral const erc20s = await assetRegistry.erc20s() - expect(await assetRegistry.toAsset(erc20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(erc20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(erc20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(erc20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(erc20s[2])).to.equal(aaveAsset.address) expect(await assetRegistry.toAsset(erc20s[3])).to.equal(compAsset.address) expect(erc20s.length).to.eql((await facade.basketTokens(rToken.address)).length + 4) @@ -393,15 +393,17 @@ describe(`DeployerP${IMPLEMENTATION} contract #fast`, () => { describe('deployRTokenAsset', () => { it('Should deploy new RTokenAsset', async () => { expect(await rTokenAsset.maxTradeVolume()).to.equal(bn('1e24')) // fp('1e6') - const newRTokenAssetAddr = await deployer.callStatic.deployRTokenAsset( - rToken.address, - bn('1e27') - ) - await expect(deployer.deployRTokenAsset(rToken.address, bn('1e27'))) - .to.emit(deployer, 'RTokenAssetCreated') - .withArgs(rToken.address, newRTokenAssetAddr) // fp('1e9') + const oldRTokenAssetAddr = await assetRegistry.toAsset(rToken.address) + + await expect(assetRegistry.registerNewRTokenAsset(bn('1e27'))) + .to.emit(assetRegistry, 'AssetUnregistered') + .withArgs(rToken.address, oldRTokenAssetAddr) + + const newRTokenAssetAddr = await assetRegistry.toAsset(rToken.address) + expect(newRTokenAssetAddr).to.not.equal(oldRTokenAssetAddr) + const newRTokenAsset = await ethers.getContractAt('RTokenAsset', newRTokenAssetAddr) - expect(await newRTokenAsset.maxTradeVolume()).to.equal(bn('1e27')) // fp('1e9') + expect(await newRTokenAsset.maxTradeVolume()).to.equal(bn('1e27')) }) }) }) diff --git a/test/FacadeWrite.test.ts b/test/FacadeWrite.test.ts index bad43a1419..bf1181eb0f 100644 --- a/test/FacadeWrite.test.ts +++ b/test/FacadeWrite.test.ts @@ -485,14 +485,14 @@ describe('FacadeWrite contract', () => { // Check assets/collateral const ERC20s = await assetRegistry.erc20s() - expect(ERC20s[0]).to.equal(rToken.address) - expect(ERC20s[1]).to.equal(rsr.address) + expect(ERC20s[0]).to.equal(rsr.address) + expect(ERC20s[1]).to.equal(rToken.address) expect(ERC20s[2]).to.equal(compToken.address) // Assets const erc20s = await assetRegistry.erc20s() - expect(await assetRegistry.toAsset(erc20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(erc20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(erc20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(erc20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(erc20s[2])).to.equal(compAsset.address) expect(await assetRegistry.toAsset(erc20s[3])).to.equal(tokenAsset.address) expect(await assetRegistry.toAsset(erc20s[4])).to.equal(usdcAsset.address) diff --git a/test/Main.test.ts b/test/Main.test.ts index 7ffc4211e3..ab6b903aa7 100644 --- a/test/Main.test.ts +++ b/test/Main.test.ts @@ -301,8 +301,8 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { // Check assets/collateral const ERC20s = await assetRegistry.erc20s() - expect(ERC20s[0]).to.equal(rToken.address) - expect(ERC20s[1]).to.equal(rsr.address) + expect(ERC20s[0]).to.equal(rsr.address) + expect(ERC20s[1]).to.equal(rToken.address) expect(ERC20s[2]).to.equal(aaveToken.address) expect(ERC20s[3]).to.equal(compToken.address) @@ -315,8 +315,8 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { expect(ERC20s.length).to.eql((await facade.basketTokens(rToken.address)).length + 4) // Assets - expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(ERC20s[2])).to.equal(aaveAsset.address) expect(await assetRegistry.toAsset(ERC20s[3])).to.equal(compAsset.address) expect(await assetRegistry.toAsset(ERC20s[4])).to.equal(collateral0.address) @@ -1229,7 +1229,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { it('Should be able to disableBasket during deregistration with basket size of 128', async () => { // Set up backup config - await basketHandler.setBackupConfig(await ethers.utils.formatBytes32String('USD'), 1, [ + await basketHandler.setBackupConfig(ethers.utils.formatBytes32String('USD'), 1, [ token1.address, ]) @@ -1252,7 +1252,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { erc20: newToken.address, maxTradeVolume: config.rTokenMaxTradeVolume, oracleTimeout: ORACLE_TIMEOUT, - targetName: await ethers.utils.formatBytes32String('USD'), + targetName: ethers.utils.formatBytes32String('USD'), defaultThreshold: DEFAULT_THRESHOLD, delayUntilDefault: await collateral0.delayUntilDefault(), }) @@ -1274,7 +1274,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { erc20: newToken.address, maxTradeVolume: config.rTokenMaxTradeVolume, oracleTimeout: ORACLE_TIMEOUT, - targetName: await ethers.utils.formatBytes32String('USD'), + targetName: ethers.utils.formatBytes32String('USD'), defaultThreshold: DEFAULT_THRESHOLD, delayUntilDefault: await collateral0.delayUntilDefault(), }) @@ -1300,7 +1300,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { erc20: await gasGuzzlingColl.erc20(), maxTradeVolume: config.rTokenMaxTradeVolume, oracleTimeout: ORACLE_TIMEOUT, - targetName: await ethers.utils.formatBytes32String('USD'), + targetName: ethers.utils.formatBytes32String('USD'), defaultThreshold: DEFAULT_THRESHOLD, delayUntilDefault: await collateral0.delayUntilDefault(), }) @@ -1681,6 +1681,24 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { expect(allERC20s.length).to.equal(previousLength) }) + it('Should not allow to register RToken', async () => { + await expect(assetRegistry.connect(owner).register(rTokenAsset.address)).to.be.revertedWith( + 'cannot register RToken' + ) + }) + + it('Should not allow to swap RToken', async () => { + await expect( + assetRegistry.connect(owner).swapRegistered(rTokenAsset.address) + ).to.be.revertedWith('cannot swap RToken') + }) + + it('Should not allow to unregister RToken', async () => { + await expect(assetRegistry.connect(owner).unregister(rTokenAsset.address)).to.be.revertedWith( + 'cannot unregister RToken' + ) + }) + context('With quantity reverting', function () { let InvalidRefPerTokFiatCollFactory: ContractFactory let revertCollateral: InvalidRefPerTokCollateralMock @@ -2670,7 +2688,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { // Unregister everything except token0 const erc20s = await assetRegistry.erc20s() for (const erc20 of erc20s) { - if (erc20 != token0.address) { + if (erc20 != token0.address && erc20 != rToken.address) { await assetRegistry.connect(owner).unregister(await assetRegistry.toAsset(erc20)) } } @@ -3620,7 +3638,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { erc20: token0.address, maxTradeVolume: config.rTokenMaxTradeVolume, oracleTimeout: ORACLE_TIMEOUT, - targetName: await ethers.utils.formatBytes32String('NEW TARGET'), + targetName: ethers.utils.formatBytes32String('NEW TARGET'), defaultThreshold: DEFAULT_THRESHOLD, delayUntilDefault: await collateral0.delayUntilDefault(), }) @@ -3734,7 +3752,7 @@ describe(`MainP${IMPLEMENTATION} contract`, () => { erc20: reentrantToken.address, maxTradeVolume: config.rTokenMaxTradeVolume, oracleTimeout: ORACLE_TIMEOUT, - targetName: await ethers.utils.formatBytes32String('USD'), + targetName: ethers.utils.formatBytes32String('USD'), defaultThreshold: DEFAULT_THRESHOLD, delayUntilDefault: await collateral0.delayUntilDefault(), }) diff --git a/test/RToken.test.ts b/test/RToken.test.ts index 188b403dbb..4e3a814a65 100644 --- a/test/RToken.test.ts +++ b/test/RToken.test.ts @@ -1925,7 +1925,7 @@ describe(`RTokenP${IMPLEMENTATION} contract`, () => { // Unregister everything except token0 const erc20s = await assetRegistry.erc20s() for (const erc20 of erc20s) { - if (erc20 != token0.address) { + if (erc20 != token0.address && erc20 != rToken.address) { await assetRegistry.connect(owner).unregister(await assetRegistry.toAsset(erc20)) } } diff --git a/test/ZTradingExtremes.test.ts b/test/ZTradingExtremes.test.ts index 0fd752c1db..2655e449a7 100644 --- a/test/ZTradingExtremes.test.ts +++ b/test/ZTradingExtremes.test.ts @@ -292,9 +292,7 @@ describeExtreme(`Trading Extreme Values (${SLOW ? 'slow mode' : 'fast mode'})`, await setOraclePrice(compAsset.address, bn('1e8')) // Replace RSR and RToken assets with larger maxTradeVolume settings - const RTokenAssetFactory: ContractFactory = await ethers.getContractFactory('RTokenAsset') const RSRAssetFactory: ContractFactory = await ethers.getContractFactory('Asset') - const newRTokenAsset: Asset = await RTokenAssetFactory.deploy(rToken.address, MAX_UOA) const newRSRAsset: Asset = ( await RSRAssetFactory.deploy( PRICE_TIMEOUT, @@ -305,7 +303,7 @@ describeExtreme(`Trading Extreme Values (${SLOW ? 'slow mode' : 'fast mode'})`, MAX_ORACLE_TIMEOUT ) ) - await assetRegistry.connect(owner).swapRegistered(newRTokenAsset.address) + await assetRegistry.connect(owner).registerNewRTokenAsset(MAX_UOA) await assetRegistry.connect(owner).swapRegistered(newRSRAsset.address) } diff --git a/test/integration/AssetPlugins.test.ts b/test/integration/AssetPlugins.test.ts index b35cf5f5e6..97c267401f 100644 --- a/test/integration/AssetPlugins.test.ts +++ b/test/integration/AssetPlugins.test.ts @@ -1735,8 +1735,8 @@ describeFork(`Asset Plugins - Integration - Mainnet Forking P${IMPLEMENTATION}`, it('Should register ERC20s and Assets/Collateral correctly', async () => { // Check assets/collateral const ERC20s = await assetRegistry.erc20s() - expect(ERC20s[0]).to.equal(rToken.address) - expect(ERC20s[1]).to.equal(rsr.address) + expect(ERC20s[0]).to.equal(rsr.address) + expect(ERC20s[1]).to.equal(rToken.address) expect(ERC20s[2]).to.equal(aaveToken.address) expect(ERC20s[3]).to.equal(compToken.address) @@ -1749,8 +1749,8 @@ describeFork(`Asset Plugins - Integration - Mainnet Forking P${IMPLEMENTATION}`, expect(ERC20s.length).to.eql((await facade.basketTokens(rToken.address)).length + 4) // Assets - expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(ERC20s[2])).to.equal(aaveAsset.address) expect(await assetRegistry.toAsset(ERC20s[3])).to.equal(compAsset.address) expect(await assetRegistry.toAsset(ERC20s[4])).to.equal(daiCollateral.address) diff --git a/test/integration/UpgradeToR4WithRegistries.test.ts b/test/integration/UpgradeToR4WithRegistries.test.ts index d3464a7c8f..b2ca9756d5 100644 --- a/test/integration/UpgradeToR4WithRegistries.test.ts +++ b/test/integration/UpgradeToR4WithRegistries.test.ts @@ -247,7 +247,12 @@ describe('Upgrade from 4.2.0 to New Version with all Registries Enabled', () => } const currentAssetRegistry = await RTokenAssetRegistry.getRegistry() - const currentAssetPlugins = currentAssetRegistry.assets + const currentAssetPlugins = currentAssetRegistry.assets.filter( + async (assetAddr: string) => { + const asset = await ethers.getContractAt('IAsset', assetAddr) + return (await asset.erc20()) !== (await RTokenMain.rToken()) + } + ) // We don't have all the assets in the registry, so this should fail await expect(RTokenAssetRegistry.validateCurrentAssets()).to.be.revertedWith( diff --git a/test/integration/fork-block-numbers.ts b/test/integration/fork-block-numbers.ts index dd4922860d..2295093eb7 100644 --- a/test/integration/fork-block-numbers.ts +++ b/test/integration/fork-block-numbers.ts @@ -11,7 +11,7 @@ const forkBlockNumber = { 'mainnet-3.4.0': 20328530, // Ethereum // TODO add all the block numbers we fork from to benefit from caching - default: 23027023, // Ethereum + default: 23724258, // Ethereum } export default forkBlockNumber diff --git a/test/plugins/individual-collateral/aave/ATokenFiatCollateral.test.ts b/test/plugins/individual-collateral/aave/ATokenFiatCollateral.test.ts index 1b82ce5d37..979efc89e8 100644 --- a/test/plugins/individual-collateral/aave/ATokenFiatCollateral.test.ts +++ b/test/plugins/individual-collateral/aave/ATokenFiatCollateral.test.ts @@ -391,15 +391,15 @@ describeFork(`ATokenFiatCollateral - Mainnet Forking P${IMPLEMENTATION}`, functi it('Should register ERC20s and Assets/Collateral correctly', async () => { // Check assets/collateral const ERC20s = await assetRegistry.erc20s() - expect(ERC20s[0]).to.equal(rToken.address) - expect(ERC20s[1]).to.equal(rsr.address) + expect(ERC20s[0]).to.equal(rsr.address) + expect(ERC20s[1]).to.equal(rToken.address) expect(ERC20s[2]).to.equal(stkAave.address) expect(ERC20s[3]).to.equal(staticAToken.address) expect(ERC20s.length).to.eql(4) // Assets - expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(ERC20s[2])).to.equal(stkAaveAsset.address) expect(await assetRegistry.toAsset(ERC20s[3])).to.equal(aDaiCollateral.address) diff --git a/test/plugins/individual-collateral/compoundv2/CTokenFiatCollateral.test.ts b/test/plugins/individual-collateral/compoundv2/CTokenFiatCollateral.test.ts index a3bf93c724..c13a35eb5b 100644 --- a/test/plugins/individual-collateral/compoundv2/CTokenFiatCollateral.test.ts +++ b/test/plugins/individual-collateral/compoundv2/CTokenFiatCollateral.test.ts @@ -361,15 +361,15 @@ describeFork(`CTokenFiatCollateral - Mainnet Forking P${IMPLEMENTATION}`, functi it('Should register ERC20s and Assets/Collateral correctly', async () => { // Check assets/collateral const ERC20s = await assetRegistry.erc20s() - expect(ERC20s[0]).to.equal(rToken.address) - expect(ERC20s[1]).to.equal(rsr.address) + expect(ERC20s[0]).to.equal(rsr.address) + expect(ERC20s[1]).to.equal(rToken.address) expect(ERC20s[2]).to.equal(compToken.address) expect(ERC20s[3]).to.equal(cDai.address) expect(ERC20s.length).to.eql(4) // Assets - expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rTokenAsset.address) - expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[0])).to.equal(rsrAsset.address) + expect(await assetRegistry.toAsset(ERC20s[1])).to.equal(rTokenAsset.address) expect(await assetRegistry.toAsset(ERC20s[2])).to.equal(compAsset.address) expect(await assetRegistry.toAsset(ERC20s[3])).to.equal(cDaiCollateral.address) diff --git a/test/scenario/RevenueHiding.test.ts b/test/scenario/RevenueHiding.test.ts index fb04851245..fd4d43d773 100644 --- a/test/scenario/RevenueHiding.test.ts +++ b/test/scenario/RevenueHiding.test.ts @@ -130,7 +130,7 @@ describe(`RevenueHiding basket collateral (/w CTokenFiatCollateral) - P${IMPLEME await basketHandler.setPrimeBasket([cDAI.address, dai.address], [fp('1'), fp('1')]) await basketHandler .connect(owner) - .setBackupConfig(await ethers.utils.formatBytes32String('USD'), 1, [dai.address]) + .setBackupConfig(ethers.utils.formatBytes32String('USD'), 1, [dai.address]) await basketHandler.refreshBasket() // Advance time post warmup period - SOUND just regained