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 cb84924d96..2d13a3bac0 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -13481,6 +13481,3531 @@ } } } + }, + "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 368451ad5a..178628243c 100644 --- a/common/configuration.ts +++ b/common/configuration.ts @@ -723,7 +723,6 @@ export interface IConfig { warmupPeriod: BigNumber reweightable: boolean enableIssuancePremium: boolean - enablePermissionlessRefresh: boolean tradingDelay: BigNumber batchAuctionLength: BigNumber dutchAuctionLength: BigNumber diff --git a/common/registries.ts b/common/registries.ts index c09c240818..7d340f2a1a 100644 --- a/common/registries.ts +++ b/common/registries.ts @@ -24,7 +24,7 @@ export const registryConfig: Record = { }, registries: { roleRegistry: '0xE1eC57C8EE970280f237863910B606059e9641C9', - versionRegistry: '0x37c8646139Cf69863cA8C6F09BE09300d4Dc10bf', + versionRegistry: '0xBA8CD83f793aA046Fe5Ab7bA01f855742F2D6a30', assetPluginRegistry: '0x6cf05Ea2A94a101CE6A44Ec2a2995b43F1b0958f', daoFeeRegistry: '0xec716deD4eABa060937D1a915F166E237039342B', trustedFillerRegistry: '0x279ccF56441fC74f1aAC39E7faC165Dec5A88B3A', @@ -37,7 +37,7 @@ export const registryConfig: Record = { }, registries: { roleRegistry: '0xE1eC57C8EE970280f237863910B606059e9641C9', - versionRegistry: '0x35E6756B92daf6aE2CF2156d479e8a806898971B', + 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 index c119d1a8b7..ad6fa23d1d 100644 --- a/contracts/plugins/mocks/GenericOracleMock.sol +++ b/contracts/plugins/mocks/GenericOracleMock.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BlueOak-1.0.0 -pragma solidity 0.8.19; +pragma solidity 0.8.28; import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; 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 index 5f5a3c7af3..f2f803b564 100644 --- a/contracts/spells/4_2_0.sol +++ b/contracts/spells/4_2_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/TimelockController.sol"; @@ -26,7 +26,6 @@ bytes32 constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE"); * Mainnet: * - eUSD * - ETH+ - * - hyUSD * - USD3 * - dgnETH * Base: @@ -47,18 +46,19 @@ contract Upgrade4_2_0 is Versioned { 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[61] MAINNET_ASSETS = [ - Asset(0xB144Fd52f344DdC208c3C365b8C722B4deF2A643), // eUSD - Asset(0xB94012FDD0D0d231b125E2B203F5A545c9037Eed), // ETH+ - Asset(0xC12344945f4eB753Ce07c2f555182cc2Cf6Fffda), // USD3 - Asset(0xb41753364C994aF593982B45D1Ba73Fd80d18dcc), // dgnETH - Asset(0x79496a58Bd73d9447C26675b86f84abeaCfE6C9c), // hyUSD + Asset[56] MAINNET_ASSETS = [ Asset(0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3), // RSR Asset(0xFb56B651f882f8f90d35DD7ca181A7F4D889ECac), // stkAAVE Asset(0x70C8611F5e34266c09c896f3547D1f7Fccf44D54), // COMP @@ -118,9 +118,7 @@ contract Upgrade4_2_0 is Versioned { ]; // 4.2.0 Assets (base) - Asset[23] BASE_ASSETS = [ - Asset(0x966bB0C5f8c155AD5D09b7Eda19E3352c0a7F9F2), // bsdETH - Asset(0xF710545C853fD4d2aCa6FEF09b4fD22c49740D91), // hyUSD + Asset[21] BASE_ASSETS = [ Asset(0x22018D85BFdA9e2673FB4101e957562a1e952Cdf), // RSR Asset(0xf535Cab96457558eE3eeAF1402fCA6441E832f08), // COMP Asset(0x0e8439a17bA5cBb2D9823c03a02566B9dd5d96Ac), // STG @@ -178,11 +176,11 @@ contract Upgrade4_2_0 is Versioned { if (_mainnet) { // 4.2.0 deployer (mainnet) - deployer = IDeployer(0xd01D00c99A750329412909c02CD9C9e45ffe34ee); + deployer = IDeployer(0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526); // DAO registries (mainnet) registries = IDeployer.Registries( - VersionRegistry(0x37c8646139Cf69863cA8C6F09BE09300d4Dc10bf), + VersionRegistry(0xBA8CD83f793aA046Fe5Ab7bA01f855742F2D6a30), AssetPluginRegistry(0x6cf05Ea2A94a101CE6A44Ec2a2995b43F1b0958f), DAOFeeRegistry(0xec716deD4eABa060937D1a915F166E237039342B), ITrustedFillerRegistry(0x279ccF56441fC74f1aAC39E7faC165Dec5A88B3A) @@ -201,11 +199,11 @@ contract Upgrade4_2_0 is Versioned { } } else { // 4.2.0 deployer (base) - deployer = IDeployer(0x1142Ad5E5A082077A7d79d211726c1bd39b0D5FA); + deployer = IDeployer(0x9E50605e02483c273F7B5A5826f363F3a46DCA79); // DAO registries (base) registries = IDeployer.Registries( - VersionRegistry(0x35E6756B92daf6aE2CF2156d479e8a806898971B), + VersionRegistry(0x3BECE5EC596331033726E5C6C188c313Ff4E3fE5), AssetPluginRegistry(0x87A959e0377C68A50b08a91ae5ab3aFA7F41ACA4), DAOFeeRegistry(0x3513D2c7D2F51c678889CeC083E7D7Ae27b219aD), ITrustedFillerRegistry(0x72DB5f49D0599C314E2f2FEDf6Fe33E1bA6C7A18) @@ -349,35 +347,36 @@ contract Upgrade4_2_0 is Versioned { // 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))) { + + 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]); } - - // assets for old ERC20s will be skipped and left in baskets - // TODO do a manual pass over all non-updated assets so we know what these are } - // Refresh basket - proxy.basketHandler.refreshBasket(); - require(proxy.basketHandler.status() == CollateralStatus.SOUND, "basket not sound"); - - // Make sure RTokenAsset was updated - RTokenAsset rTokenAsset = RTokenAsset( - address(proxy.assetRegistry.toAsset(IERC20(address(rToken)))) - ); + // Rotate RTokenAsset require( - keccak256(abi.encodePacked(rTokenAsset.version())) == NEW_VERSION_HASH, - "US: 12" + 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: 13"); + require(minDelay != 0, "US: 15"); // Deploy new timelock newTimelock = address( @@ -393,7 +392,7 @@ contract Upgrade4_2_0 is Versioned { 1e4, // all previous governors are set to 0.01% oldGovernor.quorumNumerator() ); - require(Governance(payable(newGovernor)).timelock() == newTimelock, "US: 14"); + require(Governance(payable(newGovernor)).timelock() == newTimelock, "US: 16"); TimelockController _newTimelock = TimelockController(payable(newTimelock)); @@ -412,7 +411,7 @@ contract Upgrade4_2_0 is Versioned { _newTimelock.hasRole(PROPOSER_ROLE, newGovernor) && _newTimelock.hasRole(EXECUTOR_ROLE, newGovernor) && _newTimelock.hasRole(CANCELLER_ROLE, newGovernor), - "US: 15" + "US: 17" ); require( @@ -426,14 +425,15 @@ contract Upgrade4_2_0 is Versioned { !_newTimelock.hasRole(PROPOSER_ROLE, address(0)) && !_newTimelock.hasRole(EXECUTOR_ROLE, address(0)) && !_newTimelock.hasRole(CANCELLER_ROLE, address(0)), - "US: 21" + "US: 19" ); - // setup `newGovs` for rToken + // 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 @@ -448,13 +448,13 @@ contract Upgrade4_2_0 is Versioned { main.hasRole(MAIN_OWNER_ROLE, newTimelock) && !main.hasRole(MAIN_OWNER_ROLE, msg.sender) && !main.hasRole(MAIN_OWNER_ROLE, address(this)), - "US: 24" + "US: 20" ); require( !main.hasRole(MAIN_OWNER_ROLE, address(oldGovernor)) && !main.hasRole(MAIN_OWNER_ROLE, newGovernor), - "US: 27" + "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 89e5dace01..f954b3b26a 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -140,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-deployments.json b/scripts/addresses/1-tmp-deployments.json index b0b9a626e1..a1cdedff19 100644 --- a/scripts/addresses/1-tmp-deployments.json +++ b/scripts/addresses/1-tmp-deployments.json @@ -3,7 +3,7 @@ "RSR": "0x320623b8E4fF03373931769A31Fc52A4E78B5d70", "RSR_FEED": "0x759bBC1be8F90eE6457C44abc7d443842a976d02" }, - "tradingLib": "0xe84C5963Da12a46dB929b6Cb44F5663526610478", + "tradingLib": "0xD595456AC36aab96CF9d10d1ADF8C3b4576C7937", "facade": "0x9d49b363d492725412bf8350bBb525B7a80a7470", "facets": { "actFacet": "0xCa60954E8819827B0C56e1ec313175fE68712d98", @@ -13,28 +13,28 @@ "revenueFacet": "0x69c21f4828c57D3BB5Eb5fEEa6C5c1432e193510", "tradeHelperFacet": "0x9c09e506e00ac87E2413b7501702fAcA690201Fb" }, - "facadeWriteLib": "0x9081a2c18dABde9BE178D50ED310Cd027a82368a", - "basketLib": "0x61B4F7bb71088Db6A1601cF9b02098581d77C1BC", - "facadeWrite": "0x2536025a5c6f41879D07DBFE7f4C07c1ab9575C9", - "deployer": "0xd01D00c99A750329412909c02CD9C9e45ffe34ee", + "facadeWriteLib": "0x7a993aff39Ab3047Ef2777cfeDD89F7DFD6d4f9A", + "basketLib": "0x2fdD94F363644FEDE5106B22b1706E45D4dD9bea", + "facadeWrite": "0xe4227Ed382A6E5E3001201635De76b7120B13295", + "deployer": "0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526", "rsrAsset": "0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3", "implementations": { - "main": "0x090e88BC794cCe2d622738cAFb5b8BA0cAe37661", + "main": "0xc5bf686CfB85786fcFfF557297D4afF8F4e15e44", "trading": { - "gnosisTrade": "0x7e7d81D54B5478D4d707bE1f2b6875b7955fF8c7", - "dutchTrade": "0x4b15dD87dAc24DD94633ecc1889D180809fBE4Ae" + "gnosisTrade": "0xda1631D6DBE9C20CD748F4043f01aeFa7163e227", + "dutchTrade": "0xCC3Cb888dEA5948bbEB7747Aed31128b71b7689D" }, "components": { - "assetRegistry": "0x43FEb1Ff2dA2539AEC1B45DB293b2a4FE3e3497c", - "backingManager": "0x3e6Cd7C1Ae9e575552A1AAd774017A6a6345AD21", - "basketHandler": "0x2B3C7516564261fFF2190f5496C53C1155790857", - "broker": "0x9cE1E9c0595796E897d4596cBeaC4046bBC7E095", - "distributor": "0xe569926D0FAAFe00bA6Ee696b8c61EF3E9201151", - "furnace": "0xA8Da82f29581250c5613fA8c2857191EFC65A6e9", - "rsrTrader": "0xE5FEe6464F90E38e54c68C63AaDF7120b534Aa6c", - "rTokenTrader": "0xE5FEe6464F90E38e54c68C63AaDF7120b534Aa6c", - "rToken": "0xd1e0A59953AE2Ae13ac31748dFd6fFfaD774AE04", - "stRSR": "0xd6D40df79C7BC1E3DC5c0d957d6da74a4860960b" + "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-deployments.json b/scripts/addresses/8453-tmp-deployments.json index 1b64083add..a1e2c0e352 100644 --- a/scripts/addresses/8453-tmp-deployments.json +++ b/scripts/addresses/8453-tmp-deployments.json @@ -3,7 +3,7 @@ "RSR": "0xaB36452DbAC151bE02b16Ca17d8919826072f64a", "RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1" }, - "tradingLib": "0x50a9d529EA175CdE72525Eaa809f5C3c47dAA1bB", + "tradingLib": "0x0E6D6cBdA4629Fb2D82b4b4Af0D5c887f21F3BC7", "facade": "0xE41416d8dC94ac1F6d12282d6D46B714F39a87d9", "facets": { "actFacet": "0x72Be467048a4D9CbcC599251243f3eD9F46a42f5", @@ -13,28 +13,28 @@ "revenueFacet": "0x4c2FCA94163355a5B81F4D924Bce8cCbACc15406", "tradeHelperFacet": "0xC1E16AD7844Da1AEFFa6c3932AD02b823DE12d3F" }, - "facadeWriteLib": "0xbF6E8F64547Bdec55bc3FBb0664722465FCC2F0F", - "basketLib": "0xfa21CD6EEde080Fdb1C79c1bdBC0C593c8CD08A5", - "facadeWrite": "0x357d4dB0c2179886334cC33B8528048F7E1D3Fe3", - "deployer": "0x1142Ad5E5A082077A7d79d211726c1bd39b0D5FA", + "facadeWriteLib": "0x62C394620f674e85768a7618a6C202baE7fB8Dd1", + "basketLib": "0x3700b22C742980be9D22740933d4a041A64f7314", + "facadeWrite": "0x3C8cD9FCa9925780598eB097D9718dF3da482C2F", + "deployer": "0x9E50605e02483c273F7B5A5826f363F3a46DCA79", "rsrAsset": "0x22018D85BFdA9e2673FB4101e957562a1e952Cdf", "implementations": { - "main": "0x7A14687999335289240a15CA714237ebB85EF18E", + "main": "0x6D05CB2CB647B58189FA16f81784C05B4bcd4fe9", "trading": { - "gnosisTrade": "0x4Be33630F92661afD646081BC29079A38b879aA0", - "dutchTrade": "0x5757fF814da66a2B4f9D11d48570d742e246CfD9" + "gnosisTrade": "0x1FFA5955D64Ee32cB1BF7104167b81bb085b0c8d", + "dutchTrade": "0x8A9F74d40c5323E73B63a80c4282658fD43F3AA2" }, "components": { - "assetRegistry": "0x159Af360D99b3dd6c4a47Cd08b730Ff7C9d113CC", - "backingManager": "0x6446189FD250D96517C119DD9929c24bF825fb4e", - "basketHandler": "0xF69c995129CC16d0F577C303091a400cC1879fFa", - "broker": "0x07cDEA861B2A231e249E220A553D9A38ba7383D6", - "distributor": "0x504e15CA74Ffe0791a7fc2c069dDa486d9F1805F", - "furnace": "0x2cAF7BB8C9651377cc7DBd8dc297b58F67D8A816", - "rsrTrader": "0x2377F1817461b2994C7dfD7596fD3CBFdCE4435d", - "rTokenTrader": "0x2377F1817461b2994C7dfD7596fD3CBFdCE4435d", - "rToken": "0xE19ae8D1f3FFf987aaEaa65248BAB3A0d1FDC809", - "stRSR": "0x05FA0c857dd8AA7716801fC59EB6c6d5653C774e" + "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-deployments.json b/scripts/addresses/base-4.2.0/8453-tmp-deployments.json index 1b64083add..2a1a9ae308 100644 --- a/scripts/addresses/base-4.2.0/8453-tmp-deployments.json +++ b/scripts/addresses/base-4.2.0/8453-tmp-deployments.json @@ -3,7 +3,7 @@ "RSR": "0xaB36452DbAC151bE02b16Ca17d8919826072f64a", "RSR_FEED": "0xAa98aE504658766Dfe11F31c5D95a0bdcABDe0b1" }, - "tradingLib": "0x50a9d529EA175CdE72525Eaa809f5C3c47dAA1bB", + "tradingLib": "0x0E6D6cBdA4629Fb2D82b4b4Af0D5c887f21F3BC7", "facade": "0xE41416d8dC94ac1F6d12282d6D46B714F39a87d9", "facets": { "actFacet": "0x72Be467048a4D9CbcC599251243f3eD9F46a42f5", @@ -13,28 +13,28 @@ "revenueFacet": "0x4c2FCA94163355a5B81F4D924Bce8cCbACc15406", "tradeHelperFacet": "0xC1E16AD7844Da1AEFFa6c3932AD02b823DE12d3F" }, - "facadeWriteLib": "0xbF6E8F64547Bdec55bc3FBb0664722465FCC2F0F", - "basketLib": "0xfa21CD6EEde080Fdb1C79c1bdBC0C593c8CD08A5", - "facadeWrite": "0x357d4dB0c2179886334cC33B8528048F7E1D3Fe3", - "deployer": "0x1142Ad5E5A082077A7d79d211726c1bd39b0D5FA", + "facadeWriteLib": "0x62C394620f674e85768a7618a6C202baE7fB8Dd1", + "basketLib": "0x3700b22C742980be9D22740933d4a041A64f7314", + "facadeWrite": "0x3C8cD9FCa9925780598eB097D9718dF3da482C2F", + "deployer": "0x9E50605e02483c273F7B5A5826f363F3a46DCA79", "rsrAsset": "0x22018D85BFdA9e2673FB4101e957562a1e952Cdf", "implementations": { - "main": "0x7A14687999335289240a15CA714237ebB85EF18E", + "main": "0x6D05CB2CB647B58189FA16f81784C05B4bcd4fe9", "trading": { - "gnosisTrade": "0x4Be33630F92661afD646081BC29079A38b879aA0", - "dutchTrade": "0x5757fF814da66a2B4f9D11d48570d742e246CfD9" + "gnosisTrade": "0x1FFA5955D64Ee32cB1BF7104167b81bb085b0c8d", + "dutchTrade": "0x8A9F74d40c5323E73B63a80c4282658fD43F3AA2" }, "components": { - "assetRegistry": "0x159Af360D99b3dd6c4a47Cd08b730Ff7C9d113CC", - "backingManager": "0x6446189FD250D96517C119DD9929c24bF825fb4e", - "basketHandler": "0xF69c995129CC16d0F577C303091a400cC1879fFa", - "broker": "0x07cDEA861B2A231e249E220A553D9A38ba7383D6", - "distributor": "0x504e15CA74Ffe0791a7fc2c069dDa486d9F1805F", - "furnace": "0x2cAF7BB8C9651377cc7DBd8dc297b58F67D8A816", - "rsrTrader": "0x2377F1817461b2994C7dfD7596fD3CBFdCE4435d", - "rTokenTrader": "0x2377F1817461b2994C7dfD7596fD3CBFdCE4435d", - "rToken": "0xE19ae8D1f3FFf987aaEaa65248BAB3A0d1FDC809", - "stRSR": "0x05FA0c857dd8AA7716801fC59EB6c6d5653C774e" + "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-deployments.json b/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json index b0b9a626e1..39600e70dc 100644 --- a/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json +++ b/scripts/addresses/mainnet-4.2.0/1-tmp-deployments.json @@ -3,7 +3,7 @@ "RSR": "0x320623b8E4fF03373931769A31Fc52A4E78B5d70", "RSR_FEED": "0x759bBC1be8F90eE6457C44abc7d443842a976d02" }, - "tradingLib": "0xe84C5963Da12a46dB929b6Cb44F5663526610478", + "tradingLib": "0xD595456AC36aab96CF9d10d1ADF8C3b4576C7937", "facade": "0x9d49b363d492725412bf8350bBb525B7a80a7470", "facets": { "actFacet": "0xCa60954E8819827B0C56e1ec313175fE68712d98", @@ -13,28 +13,28 @@ "revenueFacet": "0x69c21f4828c57D3BB5Eb5fEEa6C5c1432e193510", "tradeHelperFacet": "0x9c09e506e00ac87E2413b7501702fAcA690201Fb" }, - "facadeWriteLib": "0x9081a2c18dABde9BE178D50ED310Cd027a82368a", - "basketLib": "0x61B4F7bb71088Db6A1601cF9b02098581d77C1BC", - "facadeWrite": "0x2536025a5c6f41879D07DBFE7f4C07c1ab9575C9", - "deployer": "0xd01D00c99A750329412909c02CD9C9e45ffe34ee", + "facadeWriteLib": "0x7a993aff39Ab3047Ef2777cfeDD89F7DFD6d4f9A", + "basketLib": "0x2fdD94F363644FEDE5106B22b1706E45D4dD9bea", + "facadeWrite": "0xe4227Ed382A6E5E3001201635De76b7120B13295", + "deployer": "0x087Ac594713DcF03a85A0d3CA10ACe81F47d4526", "rsrAsset": "0xbCb71eE9c3372f3444cBBe3E1b263204967EdBE3", "implementations": { - "main": "0x090e88BC794cCe2d622738cAFb5b8BA0cAe37661", + "main": "0xc5bf686CfB85786fcFfF557297D4afF8F4e15e44", "trading": { - "gnosisTrade": "0x7e7d81D54B5478D4d707bE1f2b6875b7955fF8c7", - "dutchTrade": "0x4b15dD87dAc24DD94633ecc1889D180809fBE4Ae" + "gnosisTrade": "0xda1631D6DBE9C20CD748F4043f01aeFa7163e227", + "dutchTrade": "0xCC3Cb888dEA5948bbEB7747Aed31128b71b7689D" }, "components": { - "assetRegistry": "0x43FEb1Ff2dA2539AEC1B45DB293b2a4FE3e3497c", - "backingManager": "0x3e6Cd7C1Ae9e575552A1AAd774017A6a6345AD21", - "basketHandler": "0x2B3C7516564261fFF2190f5496C53C1155790857", - "broker": "0x9cE1E9c0595796E897d4596cBeaC4046bBC7E095", - "distributor": "0xe569926D0FAAFe00bA6Ee696b8c61EF3E9201151", - "furnace": "0xA8Da82f29581250c5613fA8c2857191EFC65A6e9", - "rsrTrader": "0xE5FEe6464F90E38e54c68C63AaDF7120b534Aa6c", - "rTokenTrader": "0xE5FEe6464F90E38e54c68C63AaDF7120b534Aa6c", - "rToken": "0xd1e0A59953AE2Ae13ac31748dFd6fFfaD774AE04", - "stRSR": "0xd6D40df79C7BC1E3DC5c0d957d6da74a4860960b" + "assetRegistry": "0xcB7e10000De0DAcE5A79c620191Cab2517693637", + "backingManager": "0xc501c9074CE15A4B00dd0B51B3c372518e6D3BA2", + "basketHandler": "0x54A8fa5217970e2040590DDD7c16f72B1fb57a3C", + "broker": "0x63c61086418406eBB062c5C6dF80F46c6d052d4c", + "distributor": "0x5593F9d1141E2dcae50a5315fa9Ee0Ad64d88F32", + "furnace": "0x518fcA5e31eEea484276A68Ad5F7E5838F74F03F", + "rsrTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rTokenTrader": "0x9E240cb60627b49088c2E6152c4447F7181dC0eB", + "rToken": "0xB20909FD35c548069d1Cc0Ff38337e6b362CA8a0", + "stRSR": "0x8E594FFb702C48a9fF8ae56FAeC795D83A69B387" } } } 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/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/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/utils/trades.ts b/tasks/validation/utils/trades.ts index abecd07e35..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) @@ -44,7 +45,7 @@ export const runBatchTrade = async ( 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 @@ -100,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 @@ -258,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) @@ -284,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) @@ -307,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) @@ -335,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) @@ -369,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 8f6c91544e..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", @@ -65,7 +65,7 @@ "0xe72b141df173b999ae7c1adcbf60cc9833ce56a8": "0x778aC5d0EE062502fADaa2d300a51dE0869f7995", "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 d150021546..bea0fe8221 100644 --- a/tasks/validation/whales/whales_31337.json +++ b/tasks/validation/whales/whales_31337.json @@ -65,7 +65,7 @@ "0xe72b141df173b999ae7c1adcbf60cc9833ce56a8": "0x778aC5d0EE062502fADaa2d300a51dE0869f7995", "0xacdf0dba4b9839b96221a8487e9ca660a48212be": "0xB912549A2b525cC35F8Ba14813112C81cf79F624", "0xfc0b1eef20e4c68b3dcf36c4537cfa7ce46ca70b": "0xF2B25362a03f6EACCa8De8d5350A9f37944c1e59", - "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0x7cc1bfAB73bE4E02BB53814d1059A98cF7e49644", + "0x0d86883faf4ffd7aeb116390af37746f45b6f378": "0xB5a47e677206Bc81dF3CA2ed1812AA437aad8F0b", "0x78da5799cf427fee11e9996982f4150ece7a99a7": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35", "0x78fc2c2ed1a4cdb5402365934ae5648adad094d0": "0xa6B1C84133479e41d8d085005476DD007A50Be66", "0xe8a5677171c87fcb65b76957f2852515b404c7b1": "0x298bf7b80a6343214634aF16EB41Bb5B9fC6A1F1", 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 bc32ab3de3..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: 23529562, // 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