diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index adc4a1d7..f17b61ea 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -1,9 +1,6 @@ name: CI on: [push] -env: - FOUNDRY_PROFILE: ci - jobs: ci: name: Lint & Test @@ -11,20 +8,13 @@ jobs: steps: - name: Checkout the repo - uses: actions/checkout@v3 - with: - submodules: recursive + uses: actions/checkout@v2 - - uses: actions/cache@v3 + - uses: actions/cache@v2 with: path: "**/node_modules" key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - with: - version: nightly - - name: Install Yarn dependencies run: yarn install @@ -41,6 +31,4 @@ jobs: run: yarn compile - name: Run tests - run: | - yarn test - forge test --no-match-test testFork -vvv + run: yarn test diff --git a/.gitignore b/.gitignore index 851b5fc5..2fdbfc9e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,3 @@ deployments/localhost.json .envrc forge-cache/ .vscode -out -cache_forge -test/foundry/simulation -.openzeppelin/unknown-1337.json \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 888d42dc..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "lib/forge-std"] - path = lib/forge-std - url = https://github.com/foundry-rs/forge-std diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index 20b49025..ac9e4af9 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -119,11 +119,6 @@ { "address": "0xAEF186611EC96427d161107fFE14bba8aA1C2284", "kind": "uups" - }, - { - "address": "0xAc12290b097f6893322F5430627e472131fBC1B5", - "txHash": "0xc6872c8c1121511a8eff4730bf0c3419c9461e231170b6b74d8cba8778af6fcd", - "kind": "uups" } ], "impls": { @@ -7038,1867 +7033,6 @@ } } } - }, - "acce808cba3a7357ea0d818564fbcf2a52070cda2ff4f2322c98cc97b8b50733": { - "address": "0x63B26ebd8586c18ed7e0dDBA8df2FF690D803B5b", - "txHash": "0x1e7e5b629e534ba30b1634bcdebf5ca9929952c86be2378cb847c1775954ac39", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)3794", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:20" - }, - { - "label": "vaultController", - "offset": 0, - "slot": "202", - "type": "t_address", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:21" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)20007", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:22" - }, - { - "label": "rewardsController", - "offset": 0, - "slot": "204", - "type": "t_contract(IStakingRewards)20020", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:23" - }, - { - "label": "__gap", - "offset": 0, - "slot": "205", - "type": "t_array(t_uint256)9_storage", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:25" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)3794": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IStaking)20007": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingRewards)20020": { - "label": "contract IStakingRewards", - "numberOfBytes": "20" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "4a8b13d0b93f96af336a89d60e5e14bbc64081f941c19ae97c8571af3f926c3a": { - "address": "0x11721f9e0152b2ABDA99B8B86e77d7820Ef4f864", - "txHash": "0xc6b99c33758936008c3df92a8253b4d75fa0078186817e41bd7652e018eac655", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)3794", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:17" - }, - { - "label": "stakingPool", - "offset": 0, - "slot": "202", - "type": "t_contract(IStakingPool)12795", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:18" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)20007", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:26" - }, - { - "label": "fees", - "offset": 0, - "slot": "204", - "type": "t_array(t_struct(Fee)18893_storage)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:27" - }, - { - "label": "vaultImplementation", - "offset": 0, - "slot": "205", - "type": "t_address", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:29" - }, - { - "label": "vaults", - "offset": 0, - "slot": "206", - "type": "t_array(t_contract(IVault)20060)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:31" - }, - { - "label": "totalDeposits", - "offset": 0, - "slot": "207", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:32" - }, - { - "label": "totalPrincipalDeposits", - "offset": 0, - "slot": "208", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:33" - }, - { - "label": "indexOfLastFullVault", - "offset": 0, - "slot": "209", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:34" - }, - { - "label": "maxDepositSizeBP", - "offset": 0, - "slot": "210", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "211", - "type": "t_array(t_uint256)9_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:38" - }, - { - "label": "vaultDeploymentThreshold", - "offset": 0, - "slot": "220", - "type": "t_uint128", - "contract": "CommunityVCS", - "src": "contracts/linkStaking/CommunityVCS.sol:12" - }, - { - "label": "vaultDeploymentAmount", - "offset": 16, - "slot": "220", - "type": "t_uint128", - "contract": "CommunityVCS", - "src": "contracts/linkStaking/CommunityVCS.sol:13" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_contract(IVault)20060)dyn_storage": { - "label": "contract IVault[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Fee)18893_storage)dyn_storage": { - "label": "struct VaultControllerStrategy.Fee[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)3794": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IStaking)20007": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingPool)12795": { - "label": "contract IStakingPool", - "numberOfBytes": "20" - }, - "t_contract(IVault)20060": { - "label": "contract IVault", - "numberOfBytes": "20" - }, - "t_struct(Fee)18893_storage": { - "label": "struct VaultControllerStrategy.Fee", - "members": [ - { - "label": "receiver", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "basisPoints", - "type": "t_uint256", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint128": { - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "5864ffebb3d88b5f8a1ce7ec87f09e1d4c6a192d97c8a6c7ac36bb17941fa816": { - "address": "0xb074Db74dc7f0f7D96C552331e59AE0A6B1ae088", - "txHash": "0xfa41ba6bb837ce2d9d066a7f8956ae559e352dd39683275ea96b5df1f5c694ca", - "layout": { - "solcVersion": "0.8.15", - "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:36" - }, - { - "label": "_balances", - "offset": 0, - "slot": "51", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ERC20Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" - }, - { - "label": "_allowances", - "offset": 0, - "slot": "52", - "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": "53", - "type": "t_uint256", - "contract": "ERC20Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" - }, - { - "label": "_name", - "offset": 0, - "slot": "54", - "type": "t_string_storage", - "contract": "ERC20Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" - }, - { - "label": "_symbol", - "offset": 0, - "slot": "55", - "type": "t_string_storage", - "contract": "ERC20Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" - }, - { - "label": "__gap", - "offset": 0, - "slot": "56", - "type": "t_array(t_uint256)45_storage", - "contract": "ERC20Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "151", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "_owner", - "offset": 0, - "slot": "201", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "202", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "251", - "type": "t_contract(IERC20Upgradeable)3794", - "contract": "StakingRewardsPool", - "src": "contracts/core/base/StakingRewardsPool.sol:15" - }, - { - "label": "shares", - "offset": 0, - "slot": "252", - "type": "t_mapping(t_address,t_uint256)", - "contract": "StakingRewardsPool", - "src": "contracts/core/base/StakingRewardsPool.sol:17" - }, - { - "label": "totalShares", - "offset": 0, - "slot": "253", - "type": "t_uint256", - "contract": "StakingRewardsPool", - "src": "contracts/core/base/StakingRewardsPool.sol:18" - }, - { - "label": "strategies", - "offset": 0, - "slot": "254", - "type": "t_array(t_address)dyn_storage", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:22" - }, - { - "label": "totalStaked", - "offset": 0, - "slot": "255", - "type": "t_uint256", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:23" - }, - { - "label": "liquidityBuffer", - "offset": 0, - "slot": "256", - "type": "t_uint256", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:24" - }, - { - "label": "fees", - "offset": 0, - "slot": "257", - "type": "t_array(t_struct(Fee)9849_storage)dyn_storage", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:26" - }, - { - "label": "priorityPool", - "offset": 0, - "slot": "258", - "type": "t_address", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:28" - }, - { - "label": "delegatorPool", - "offset": 0, - "slot": "259", - "type": "t_address", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:29" - }, - { - "label": "poolIndex", - "offset": 20, - "slot": "259", - "type": "t_uint16", - "contract": "StakingPool", - "src": "contracts/core/StakingPool.sol:30" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Fee)9849_storage)dyn_storage": { - "label": "struct StakingPool.Fee[]", - "numberOfBytes": "32" - }, - "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(IERC20Upgradeable)3794": { - "label": "contract IERC20Upgradeable", - "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_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(Fee)9849_storage": { - "label": "struct StakingPool.Fee", - "members": [ - { - "label": "receiver", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "basisPoints", - "type": "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" - } - } - } - }, - "df1ffc35bd7bcfcfbedb5b11b34df75a72c97cfaedd33fddc2daa97b67b9cf24": { - "address": "0x80FaEA283474E9fD26FFD168829350ac766E7b8d", - "txHash": "0x753ae7cc280294afbbd90da2cae64c536af6ec3e2efad14aaf014efd63df29c2", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "_paused", - "offset": 0, - "slot": "201", - "type": "t_bool", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" - }, - { - "label": "__gap", - "offset": 0, - "slot": "202", - "type": "t_array(t_uint256)49_storage", - "contract": "PausableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" - }, - { - "label": "token", - "offset": 0, - "slot": "251", - "type": "t_contract(IERC20Upgradeable)3794", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:29" - }, - { - "label": "stakingPool", - "offset": 0, - "slot": "252", - "type": "t_contract(IStakingPool)12795", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:30" - }, - { - "label": "sdlPool", - "offset": 0, - "slot": "253", - "type": "t_contract(ISDLPool)12689", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:31" - }, - { - "label": "distributionOracle", - "offset": 0, - "slot": "254", - "type": "t_address", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:32" - }, - { - "label": "queueDepositMin", - "offset": 0, - "slot": "255", - "type": "t_uint128", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:34" - }, - { - "label": "queueDepositMax", - "offset": 16, - "slot": "255", - "type": "t_uint128", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:35" - }, - { - "label": "poolStatus", - "offset": 0, - "slot": "256", - "type": "t_enum(PoolStatus)13561", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:36" - }, - { - "label": "merkleRoot", - "offset": 0, - "slot": "257", - "type": "t_bytes32", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:38" - }, - { - "label": "ipfsHash", - "offset": 0, - "slot": "258", - "type": "t_bytes32", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:39" - }, - { - "label": "merkleTreeSize", - "offset": 0, - "slot": "259", - "type": "t_uint256", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:40" - }, - { - "label": "totalQueued", - "offset": 0, - "slot": "260", - "type": "t_uint256", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:42" - }, - { - "label": "depositsSinceLastUpdate", - "offset": 0, - "slot": "261", - "type": "t_uint256", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:43" - }, - { - "label": "sharesSinceLastUpdate", - "offset": 0, - "slot": "262", - "type": "t_uint256", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:44" - }, - { - "label": "accounts", - "offset": 0, - "slot": "263", - "type": "t_array(t_address)dyn_storage", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:46" - }, - { - "label": "accountIndexes", - "offset": 0, - "slot": "264", - "type": "t_mapping(t_address,t_uint256)", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:47" - }, - { - "label": "accountQueuedTokens", - "offset": 0, - "slot": "265", - "type": "t_mapping(t_address,t_uint256)", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:48" - }, - { - "label": "accountClaimed", - "offset": 0, - "slot": "266", - "type": "t_mapping(t_address,t_uint256)", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:49" - }, - { - "label": "accountSharesClaimed", - "offset": 0, - "slot": "267", - "type": "t_mapping(t_address,t_uint256)", - "contract": "PriorityPool", - "src": "contracts/core/priorityPool/PriorityPool.sol:50" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "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(IERC20Upgradeable)3794": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(ISDLPool)12689": { - "label": "contract ISDLPool", - "numberOfBytes": "20" - }, - "t_contract(IStakingPool)12795": { - "label": "contract IStakingPool", - "numberOfBytes": "20" - }, - "t_enum(PoolStatus)13561": { - "label": "enum PriorityPool.PoolStatus", - "members": [ - "OPEN", - "DRAINING", - "CLOSED" - ], - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_uint128": { - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "fa7aa3f5e3b6df6aa4432778fd3e84629dda73d53240297bcfe02c9cf35d487a": { - "address": "0x6059CEC7604f72eEE7Cb836A9f42661b603FE286", - "txHash": "0x4cfaa9fc7e80ed58afed1a42e05af9a88dbca82abae163820006983d9579a4a0", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)879", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:17" - }, - { - "label": "stakingPool", - "offset": 0, - "slot": "202", - "type": "t_contract(IStakingPool)3777", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:18" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)5818", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:26" - }, - { - "label": "fees", - "offset": 0, - "slot": "204", - "type": "t_array(t_struct(Fee)4755_storage)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:27" - }, - { - "label": "vaultImplementation", - "offset": 0, - "slot": "205", - "type": "t_address", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:29" - }, - { - "label": "vaults", - "offset": 0, - "slot": "206", - "type": "t_array(t_contract(IVault)5858)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:31" - }, - { - "label": "totalDeposits", - "offset": 0, - "slot": "207", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:32" - }, - { - "label": "totalPrincipalDeposits", - "offset": 0, - "slot": "208", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:33" - }, - { - "label": "indexOfLastFullVault", - "offset": 0, - "slot": "209", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:34" - }, - { - "label": "maxDepositSizeBP", - "offset": 0, - "slot": "210", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "211", - "type": "t_array(t_uint256)9_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:38" - }, - { - "label": "operatorRewardPercentage", - "offset": 0, - "slot": "220", - "type": "t_uint256", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:14" - }, - { - "label": "unclaimedOperatorRewards", - "offset": 0, - "slot": "221", - "type": "t_uint256", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:15" - }, - { - "label": "vaultMapping", - "offset": 0, - "slot": "222", - "type": "t_mapping(t_address,t_bool)", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:17" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_contract(IVault)5858)dyn_storage": { - "label": "contract IVault[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Fee)4755_storage)dyn_storage": { - "label": "struct VaultControllerStrategy.Fee[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)879": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IStaking)5818": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingPool)3777": { - "label": "contract IStakingPool", - "numberOfBytes": "20" - }, - "t_contract(IVault)5858": { - "label": "contract IVault", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_struct(Fee)4755_storage": { - "label": "struct VaultControllerStrategy.Fee", - "members": [ - { - "label": "receiver", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "basisPoints", - "type": "t_uint256", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "932db7b7045873ed8a920623be7aecbcf26a7907e8ece2072f4e1a42c3e374f6": { - "address": "0xaC1D9c2b888Fb20F7C20dc3c9313805A8dC165eE", - "txHash": "0x6f79caf3364dfeeea5573e785a1953e189a99fdf04e7c795630156c921565e04", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)3794", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:20" - }, - { - "label": "vaultController", - "offset": 0, - "slot": "202", - "type": "t_address", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:21" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)20007", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:22" - }, - { - "label": "rewardsController", - "offset": 0, - "slot": "204", - "type": "t_contract(IStakingRewards)20020", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:23" - }, - { - "label": "__gap", - "offset": 0, - "slot": "205", - "type": "t_array(t_uint256)9_storage", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:25" - }, - { - "label": "operator", - "offset": 0, - "slot": "214", - "type": "t_address", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:19" - }, - { - "label": "rewardsReceiver", - "offset": 0, - "slot": "215", - "type": "t_address", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:20" - }, - { - "label": "pfAlertsController", - "offset": 0, - "slot": "216", - "type": "t_contract(IPFAlertsController)19960", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:21" - }, - { - "label": "trackedTotalDeposits", - "offset": 0, - "slot": "217", - "type": "t_uint128", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:23" - }, - { - "label": "unclaimedRewards", - "offset": 16, - "slot": "217", - "type": "t_uint128", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:24" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)3794": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IPFAlertsController)19960": { - "label": "contract IPFAlertsController", - "numberOfBytes": "20" - }, - "t_contract(IStaking)20007": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingRewards)20020": { - "label": "contract IStakingRewards", - "numberOfBytes": "20" - }, - "t_uint128": { - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "ed9de923a10d6ff4f3a7353fc062efb43aac88f2de94fd4af55454ab356baa1e": { - "address": "0x73CF930Cf4f86117C308907Ce18F8E8F16710387", - "txHash": "0xc878a2d3054f879e509e527a90f40cf2b2116bc9e57a5b2df53c3496c4322641", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)879", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:20" - }, - { - "label": "vaultController", - "offset": 0, - "slot": "202", - "type": "t_address", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:21" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)4634", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:22" - }, - { - "label": "rewardsController", - "offset": 0, - "slot": "204", - "type": "t_contract(IStakingRewards)4647", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:23" - }, - { - "label": "__gap", - "offset": 0, - "slot": "205", - "type": "t_array(t_uint256)9_storage", - "contract": "Vault", - "src": "contracts/linkStaking/base/Vault.sol:25" - }, - { - "label": "operator", - "offset": 0, - "slot": "214", - "type": "t_address", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:19" - }, - { - "label": "rewardsReceiver", - "offset": 0, - "slot": "215", - "type": "t_address", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:20" - }, - { - "label": "pfAlertsController", - "offset": 0, - "slot": "216", - "type": "t_contract(IPFAlertsController)4587", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:21" - }, - { - "label": "trackedTotalDeposits", - "offset": 0, - "slot": "217", - "type": "t_uint128", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:23" - }, - { - "label": "unclaimedRewards", - "offset": 16, - "slot": "217", - "type": "t_uint128", - "contract": "OperatorVault", - "src": "contracts/linkStaking/OperatorVault.sol:24" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)879": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IPFAlertsController)4587": { - "label": "contract IPFAlertsController", - "numberOfBytes": "20" - }, - "t_contract(IStaking)4634": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingRewards)4647": { - "label": "contract IStakingRewards", - "numberOfBytes": "20" - }, - "t_uint128": { - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - }, - "e9576f28d6b20b4ec2a361c973460617adb099807816298668fac74bfb785f2d": { - "address": "0x584338Dabae9e5429c334Fc1aD41c46AC007Bc29", - "txHash": "0xf029aba5a08a55f696948a29c0d890b2baaadcf67d2881732d72f6f2022cd6e1", - "layout": { - "solcVersion": "0.8.15", - "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": "ERC1967UpgradeUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "UUPSUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" - }, - { - "label": "__gap", - "offset": 0, - "slot": "101", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "151", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "token", - "offset": 0, - "slot": "201", - "type": "t_contract(IERC20Upgradeable)879", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:17" - }, - { - "label": "stakingPool", - "offset": 0, - "slot": "202", - "type": "t_contract(IStakingPool)3789", - "contract": "Strategy", - "src": "contracts/core/base/Strategy.sol:18" - }, - { - "label": "stakeController", - "offset": 0, - "slot": "203", - "type": "t_contract(IStaking)5845", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:26" - }, - { - "label": "fees", - "offset": 0, - "slot": "204", - "type": "t_array(t_struct(Fee)4782_storage)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:27" - }, - { - "label": "vaultImplementation", - "offset": 0, - "slot": "205", - "type": "t_address", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:29" - }, - { - "label": "vaults", - "offset": 0, - "slot": "206", - "type": "t_array(t_contract(IVault)5885)dyn_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:31" - }, - { - "label": "totalDeposits", - "offset": 0, - "slot": "207", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:32" - }, - { - "label": "totalPrincipalDeposits", - "offset": 0, - "slot": "208", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:33" - }, - { - "label": "indexOfLastFullVault", - "offset": 0, - "slot": "209", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:34" - }, - { - "label": "maxDepositSizeBP", - "offset": 0, - "slot": "210", - "type": "t_uint256", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "211", - "type": "t_array(t_uint256)9_storage", - "contract": "VaultControllerStrategy", - "src": "contracts/linkStaking/base/VaultControllerStrategy.sol:38" - }, - { - "label": "operatorRewardPercentage", - "offset": 0, - "slot": "220", - "type": "t_uint256", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:14" - }, - { - "label": "unclaimedOperatorRewards", - "offset": 0, - "slot": "221", - "type": "t_uint256", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:15" - }, - { - "label": "vaultMapping", - "offset": 0, - "slot": "222", - "type": "t_mapping(t_address,t_bool)", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:17" - }, - { - "label": "preRelease", - "offset": 0, - "slot": "223", - "type": "t_bool", - "contract": "OperatorVCS", - "src": "contracts/linkStaking/OperatorVCS.sol:19" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_contract(IVault)5885)dyn_storage": { - "label": "contract IVault[]", - "numberOfBytes": "32" - }, - "t_array(t_struct(Fee)4782_storage)dyn_storage": { - "label": "struct VaultControllerStrategy.Fee[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_array(t_uint256)9_storage": { - "label": "uint256[9]", - "numberOfBytes": "288" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IERC20Upgradeable)879": { - "label": "contract IERC20Upgradeable", - "numberOfBytes": "20" - }, - "t_contract(IStaking)5845": { - "label": "contract IStaking", - "numberOfBytes": "20" - }, - "t_contract(IStakingPool)3789": { - "label": "contract IStakingPool", - "numberOfBytes": "20" - }, - "t_contract(IVault)5885": { - "label": "contract IVault", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_struct(Fee)4782_storage": { - "label": "struct VaultControllerStrategy.Fee", - "members": [ - { - "label": "receiver", - "type": "t_address", - "offset": 0, - "slot": "0" - }, - { - "label": "basisPoints", - "type": "t_uint256", - "offset": 0, - "slot": "1" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } } } } diff --git a/.openzeppelin/unknown-1337.json b/.openzeppelin/unknown-1337.json new file mode 100644 index 00000000..86695a9c --- /dev/null +++ b/.openzeppelin/unknown-1337.json @@ -0,0 +1,4367 @@ +{ + "manifestVersion": "3.2", + "proxies": [ + { + "address": "0x8B7F4801e684488e058f865931647d283228F4B7", + "txHash": "0xf6114c58fab74ef74dbc444a4be8b16c49854a91ebef66f2b5df87e447540dd3", + "kind": "uups" + }, + { + "address": "0x50Fa507a91d86B002D3290CcAA367200d47aaD2B", + "txHash": "0x2edae38660096a8c457a29422afe1a575316b43f8d4c14dcbcbec89f349f2ef6", + "kind": "uups" + }, + { + "address": "0x390A79DbDFBA9ABD8c9d5945732e99b74a0eB2D8", + "txHash": "0x1df8c0e0e5ccc362b67bc9e68a6b67b9fc33f4738784ab4d8172d142b80329d8", + "kind": "uups" + }, + { + "address": "0xC62Db887e3B546831bdFE662b325F3E254C9f335", + "txHash": "0xa2329e166f0b15daeba71a5e09aa5abd1787808b19f2dea3ef172bcae4c9864f", + "kind": "uups" + }, + { + "address": "0xeB94f6f9A28DA605089d361cD0Abe580817C3516", + "txHash": "0xbb5d1e0cc0112119a8f3ed8240ad5034095478c7fddafb1d69ac68ae712ec42f", + "kind": "uups" + }, + { + "address": "0xE90240992c7E35a32Ba65803Ca47082C0fDd6108", + "txHash": "0x3d2f4d30a7db56dab363f835822bb2afd36bd523135890ddfa08be833868c3e7", + "kind": "uups" + }, + { + "address": "0x3aD797AeDE5004aBDDCBA18Ff973A74c766893Cc", + "txHash": "0x98b74bf8abe0d3d8580fbb32669230494561abb99047f3fe15f71fd11adccbe5", + "kind": "uups" + }, + { + "address": "0xBdf93A71Dc50120bc9Cf3524E5d077481746110b", + "txHash": "0x17728015f93aeb61357c565834b82742850db3ddb48c92e1f087b5ba2ec6c6e5", + "kind": "uups" + }, + { + "address": "0xF618880897189F96c5415fa3E64577b88889f0d4", + "txHash": "0xb699f94dba8b2b82357cca58a6d565902e34400465b81c0a2d6ac37b71256f32", + "kind": "uups" + }, + { + "address": "0x817D37e8dC972e8447db5d25A6867a0396d2cf6c", + "txHash": "0xcb540214cbcd7981a1dac7388ea6cf26ffdadde2eaa06e5c881e235c225ecdf9", + "kind": "uups" + }, + { + "address": "0xB7dAB37c7EED437dAfC4Ff6346E4Cc12878aC507", + "txHash": "0x106bb6c3fe519331ca0d2d9909eb1dbfbaed332c37460bf24b642e186b818be5", + "kind": "uups" + }, + { + "address": "0xB1Cda9E66735bCC470CCA886c4a584735F8d59e6", + "txHash": "0x1014d4e2e9bed9606e9a2acb2ec7c38a52168f6a6f25004260cbddc5b63fa4f6", + "kind": "uups" + }, + { + "address": "0x843F5C5536ddE7Ae2c6f29b069bB3Eb1287c4b27", + "txHash": "0xbd36f3f35d7a1725293f09275ec461c65e130e1cc2085dc4343ba0a6db3d2cdc", + "kind": "uups" + }, + { + "address": "0x162462933f3A218193E0f7A6C68c36683b185545", + "txHash": "0x68c3471e19c91fa3b44d50516cdaa8ba544600c896960a99d62105d795cfd9d6", + "kind": "uups" + }, + { + "address": "0xf54c2b57Ed7946E13ceE61c535B6efd5d769cE67", + "txHash": "0x7a35a861b2c66f48d025f06c6dc6c521977d3f97c1df850546a38dde666fdf80", + "kind": "uups" + }, + { + "address": "0x791E942F186785a1b20E809F5813ba6Ff09b45E3", + "txHash": "0x621dcaf6f29a30891208eaa6008d2b0eb309284bdc66d89cf428cceed8de37ed", + "kind": "uups" + }, + { + "address": "0x5bA1B6B6f3bAdE44D912808f4C94C4F35675b009", + "txHash": "0xb7c557d2f11f8c25ed0efcdd276efe610213b95f37168202bfa50e4073a6e36f", + "kind": "uups" + }, + { + "address": "0x8E6224DE150DCFeB5aDF5FF6ED6c49daCb1c4B56", + "txHash": "0x524a519786020e3426a64350af582cfa167113f67b051b6eac4c4361d0f0948a", + "kind": "uups" + }, + { + "address": "0x183ab45459959c24466e7878D9e19dfF6625aa72", + "txHash": "0xc762ddbc6ceebd6e0fb20219bc67560b31eb579630ad6a8c57a2bb92228403b6", + "kind": "uups" + }, + { + "address": "0xC23Ec50c193bB6116E9b879430B6683E725208F3", + "txHash": "0xfb737d9e9a014bc025653e4bca93e035cf3b7bd9bbf499119c46068381c3c96f", + "kind": "uups" + }, + { + "address": "0xeb5005a0eb3dAdF9Ef17A77475056a510261dE0e", + "txHash": "0x7cc6ba56b9e3968217072d9af48a53aba9d14b2f00bbfc8829e0277ea37b14ea", + "kind": "uups" + }, + { + "address": "0xEA3ABd99869EdF0B8B929aCb5148472e188e84e9", + "txHash": "0x36d1c5bbc294b5c56f6f201db12e6ac411d7cdbb3a3dbb6bc78d3eaa641f450f", + "kind": "uups" + }, + { + "address": "0x7eFcD4B32052d868611eEaB8E77b1d5fCec41880", + "txHash": "0x55f32a54f4547df410b14e63f632b560bb0320eaf7cc5e45e2a9d0b420a40c2b", + "kind": "uups" + }, + { + "address": "0xf189d68db38be09EEC9c6ab4bE36D72Ce49fab6a", + "txHash": "0xad055b78d8da613774eeab043164a60537962ae744f20ee7c4357a0e91442cf3", + "kind": "uups" + }, + { + "address": "0xe4415600d458AB82853aEB0FE4ac0d0a9285Cb1A", + "txHash": "0x5b3a31fe3b40361c3632e5ebec1391821576ab881c26dd0d536019982aa14175", + "kind": "uups" + } + ], + "impls": { + "8d2e05a69a71a70957168f36bc0a3963051fd5ea7a92418dd49c600d5ec20ec2": { + "address": "0x926DB25e69Fef78026358bD1A37D05CA8b780caC", + "txHash": "0x2f6178751d4e836aa6212e89b5068fd5a0dbf8f41c18b0ef4b26c4d0364fc649", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.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:37" + }, + { + "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:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "tokenPools", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_address,t_contract(IRewardsPool)20816)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:19" + }, + { + "label": "tokens", + "offset": 0, + "slot": "252", + "type": "t_array(t_address)dyn_storage", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:20" + }, + { + "label": "rewardRedirects", + "offset": 0, + "slot": "253", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:22" + }, + { + "label": "redirectedStakes", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:23" + }, + { + "label": "redirectApprovals", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:24" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "256", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:21" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "257", + "type": "t_contract(IPoolRouter)20793", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:22" + }, + { + "label": "feeCurve", + "offset": 0, + "slot": "258", + "type": "t_contract(IFeeCurve)20771", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:23" + }, + { + "label": "vestingSchedules", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_address,t_struct(VestingSchedule)14229_storage)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:25" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IFeeCurve)20771": { + "label": "contract IFeeCurve", + "numberOfBytes": "20" + }, + "t_contract(IPoolRouter)20793": { + "label": "contract IPoolRouter", + "numberOfBytes": "20" + }, + "t_contract(IRewardsPool)20816": { + "label": "contract IRewardsPool", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_contract(IRewardsPool)20816)": { + "label": "mapping(address => contract IRewardsPool)", + "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(VestingSchedule)14229_storage)": { + "label": "mapping(address => struct DelegatorPool.VestingSchedule)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(VestingSchedule)14229_storage": { + "label": "struct DelegatorPool.VestingSchedule", + "members": [ + { + "label": "totalAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "startTimestamp", + "type": "t_uint64", + "offset": 0, + "slot": "1" + }, + { + "label": "durationSeconds", + "type": "t_uint64", + "offset": 8, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "65079894002b5e00e973f421478ad953385fae98991f901ee6c6c023a5827f84": { + "address": "0x23fc4f91B452D845A07e65CF6331B9B4a9ca95Ec", + "txHash": "0x06348348adf8b66844684f1bc9ce7d380295765862d678cd29baf1b257fca9ed", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:35" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "202", + "type": "t_contract(IDelegatorPool)20732", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:36" + }, + { + "label": "pools", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_bytes32,t_struct(Pool)15503_storage)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:38" + }, + { + "label": "poolCountByToken", + "offset": 0, + "slot": "204", + "type": "t_mapping(t_address,t_uint16)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:39" + }, + { + "label": "poolCount", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:40" + }, + { + "label": "tokens", + "offset": 0, + "slot": "206", + "type": "t_array(t_address)dyn_storage", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:42" + }, + { + "label": "wrappedETH", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:43" + }, + { + "label": "reservedMultiplier", + "offset": 0, + "slot": "208", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:45" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IDelegatorPool)20732": { + "label": "contract IDelegatorPool", + "numberOfBytes": "20" + }, + "t_contract(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IStakingPool)20921": { + "label": "contract IStakingPool", + "numberOfBytes": "20" + }, + "t_enum(PoolStatus)15491": { + "label": "enum PoolRouter.PoolStatus", + "members": [ + "OPEN", + "DRAINING", + "CLOSED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(Pool)15503_storage)": { + "label": "mapping(bytes32 => struct PoolRouter.Pool)", + "numberOfBytes": "32" + }, + "t_struct(Pool)15503_storage": { + "label": "struct PoolRouter.Pool", + "members": [ + { + "label": "token", + "type": "t_contract(IERC20Upgradeable)3713", + "offset": 0, + "slot": "0" + }, + { + "label": "stakingPool", + "type": "t_contract(IStakingPool)20921", + "offset": 0, + "slot": "1" + }, + { + "label": "status", + "type": "t_enum(PoolStatus)15491", + "offset": 20, + "slot": "1" + }, + { + "label": "reservedModeActive", + "type": "t_bool", + "offset": 21, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "1863bb10c2ed4b989cb728844b3dca14a463c628b27ef75b1744c53dd425b447": { + "address": "0xD31B297aDDc6714859985824F132bdF84D99d6B1", + "txHash": "0xe9062d3bbeee6535f5f6775d8dfd5216c518a0aa0fa9796f3f451f661f061788", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "strategies", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:23" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:24" + }, + { + "label": "liquidityBuffer", + "offset": 0, + "slot": "256", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:25" + }, + { + "label": "fees", + "offset": 0, + "slot": "257", + "type": "t_array(t_struct(Fee)17621_storage)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:27" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:29" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "259", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:30" + }, + { + "label": "poolIndex", + "offset": 20, + "slot": "259", + "type": "t_uint16", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:31" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)17621_storage)dyn_storage": { + "label": "struct StakingPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)17621_storage": { + "label": "struct StakingPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "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" + } + } + } + }, + "44705745154c9c8feca628aafa6136b7077abdc5bd2838458444790567520b63": { + "address": "0x72427098DA873a0292602F673dbd9BB966647f18", + "txHash": "0xfa6a19cf74ac71888168f883d007a8cb052767261591d92a9c84c721855e7094", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "Strategy", + "src": "contracts/core/base/Strategy.sol:17" + }, + { + "label": "stakingPool", + "offset": 0, + "slot": "202", + "type": "t_contract(IStakingPool)20921", + "contract": "Strategy", + "src": "contracts/core/base/Strategy.sol:18" + }, + { + "label": "maxDeposits", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:17" + }, + { + "label": "minDeposits", + "offset": 0, + "slot": "204", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:18" + }, + { + "label": "totalDeposits", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:20" + }, + { + "label": "feeBasisPoints", + "offset": 0, + "slot": "206", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:21" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IStakingPool)20921": { + "label": "contract IStakingPool", + "numberOfBytes": "20" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "0991393c2c6540018505bcce1bfde6367181368da90979af4bd8ff3a0c019e6a": { + "address": "0xC9C3645EF2299e992827F2E88c3e68855efB5780", + "txHash": "0xc213a51c442d1944acda4ff534c67ea61fd608fe6271c5b47d6cefcf91238b3d", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.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:37" + }, + { + "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:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "tokenPools", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_address,t_contract(IRewardsPool)16252)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:19" + }, + { + "label": "tokens", + "offset": 0, + "slot": "252", + "type": "t_array(t_address)dyn_storage", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:20" + }, + { + "label": "rewardRedirects", + "offset": 0, + "slot": "253", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:22" + }, + { + "label": "redirectedStakes", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:23" + }, + { + "label": "redirectApprovals", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:24" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "256", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:20" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "257", + "type": "t_contract(IPoolRouter)16229", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:21" + }, + { + "label": "feeCurve", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:22" + }, + { + "label": "vestingSchedules", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_address,t_struct(VestingSchedule)9873_storage)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:24" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IPoolRouter)16229": { + "label": "contract IPoolRouter", + "numberOfBytes": "20" + }, + "t_contract(IRewardsPool)16252": { + "label": "contract IRewardsPool", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_contract(IRewardsPool)16252)": { + "label": "mapping(address => contract IRewardsPool)", + "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(VestingSchedule)9873_storage)": { + "label": "mapping(address => struct DelegatorPool.VestingSchedule)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(VestingSchedule)9873_storage": { + "label": "struct DelegatorPool.VestingSchedule", + "members": [ + { + "label": "totalAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "startTimestamp", + "type": "t_uint64", + "offset": 0, + "slot": "1" + }, + { + "label": "durationSeconds", + "type": "t_uint64", + "offset": 8, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "19fee87572ed46fc9052248a4bc195dbfb89808b7d1c23a57fa8f9586a1182dc": { + "address": "0x3B01ef0Cf9DADeBEa5071eBF2A0141c1C4F56F19", + "txHash": "0x2e89c401a994fa0cd421f68440619973890b7802123ca6fda9c71aaf1c35ea49", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:35" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "202", + "type": "t_contract(IDelegatorPool)16187", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:36" + }, + { + "label": "pools", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_bytes32,t_struct(Pool)11073_storage)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:38" + }, + { + "label": "poolCountByToken", + "offset": 0, + "slot": "204", + "type": "t_mapping(t_address,t_uint16)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:39" + }, + { + "label": "poolCount", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:40" + }, + { + "label": "tokens", + "offset": 0, + "slot": "206", + "type": "t_array(t_address)dyn_storage", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:42" + }, + { + "label": "wrappedETH", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:43" + }, + { + "label": "reservedMultiplier", + "offset": 0, + "slot": "208", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:45" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IDelegatorPool)16187": { + "label": "contract IDelegatorPool", + "numberOfBytes": "20" + }, + "t_contract(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IStakingPool)16362": { + "label": "contract IStakingPool", + "numberOfBytes": "20" + }, + "t_enum(PoolStatus)11061": { + "label": "enum PoolRouter.PoolStatus", + "members": [ + "OPEN", + "DRAINING", + "CLOSED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(Pool)11073_storage)": { + "label": "mapping(bytes32 => struct PoolRouter.Pool)", + "numberOfBytes": "32" + }, + "t_struct(Pool)11073_storage": { + "label": "struct PoolRouter.Pool", + "members": [ + { + "label": "token", + "type": "t_contract(IERC20Upgradeable)3713", + "offset": 0, + "slot": "0" + }, + { + "label": "stakingPool", + "type": "t_contract(IStakingPool)16362", + "offset": 0, + "slot": "1" + }, + { + "label": "status", + "type": "t_enum(PoolStatus)11061", + "offset": 20, + "slot": "1" + }, + { + "label": "reservedModeActive", + "type": "t_bool", + "offset": 21, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "9b703e7b2137141a6682d27e8d21460efe5a3fbba343781535a2aeb8abdff63c": { + "address": "0xDF706cfaaF517d62237FE1d1e815f3c0438786bA", + "txHash": "0x44e4b1b09eb1b549321b7127b34112fe29a51113e3d6ec0439bfe4015dbb1a2b", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "strategies", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:23" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:24" + }, + { + "label": "liquidityBuffer", + "offset": 0, + "slot": "256", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:25" + }, + { + "label": "fees", + "offset": 0, + "slot": "257", + "type": "t_array(t_struct(Fee)13175_storage)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:27" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:29" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "259", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:30" + }, + { + "label": "poolIndex", + "offset": 20, + "slot": "259", + "type": "t_uint16", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:31" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)13175_storage)dyn_storage": { + "label": "struct StakingPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)13175_storage": { + "label": "struct StakingPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "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" + } + } + } + }, + "1ec506091ae7f0cb7ddf7627315cb89ec114f43c7446b19aacd8aca416755f12": { + "address": "0xe8772b674704FA9fEaceffEf38d991964C5ac64d", + "txHash": "0x16eb1a4dc8fc96ade5a5461a955eb4d4fc7b6e8f76a1025c509672e6436e8f90", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)1537", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "lsdTokens", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:23" + }, + { + "label": "lsdAdapters", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_contract(ILiquidSDAdapter)14973)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:24" + }, + { + "label": "compositionTargets", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:26" + }, + { + "label": "compositionTolerance", + "offset": 0, + "slot": "257", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:27" + }, + { + "label": "compositionEnforcementThreshold", + "offset": 0, + "slot": "258", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:28" + }, + { + "label": "fees", + "offset": 0, + "slot": "259", + "type": "t_array(t_struct(Fee)13073_storage)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:30" + }, + { + "label": "withdrawalFee", + "offset": 0, + "slot": "260", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:31" + }, + { + "label": "totalDeposits", + "offset": 0, + "slot": "261", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:33" + }, + { + "label": "isPaused", + "offset": 0, + "slot": "262", + "type": "t_bool", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:35" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)13073_storage)dyn_storage": { + "label": "struct LiquidSDIndexPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)1537": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(ILiquidSDAdapter)14973": { + "label": "contract ILiquidSDAdapter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(ILiquidSDAdapter)14973)": { + "label": "mapping(address => contract ILiquidSDAdapter)", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)13073_storage": { + "label": "struct LiquidSDIndexPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "935fbc525f53ba504c53edf924784c3ed334b4da4ab0acf8ca137c83af2231ad": { + "address": "0xA3BE6464828cD5428beCd225EB12348cE7Cca840", + "txHash": "0x7d8e5e1f7861252139043435828fee4f6b09fed8d62eb5a2b81b23da94337d9f", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.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:37" + }, + { + "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:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "tokenPools", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_address,t_contract(IRewardsPool)15272)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:19" + }, + { + "label": "tokens", + "offset": 0, + "slot": "252", + "type": "t_array(t_address)dyn_storage", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:20" + }, + { + "label": "rewardRedirects", + "offset": 0, + "slot": "253", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:22" + }, + { + "label": "redirectedStakes", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:23" + }, + { + "label": "redirectApprovals", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:24" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "256", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:20" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "257", + "type": "t_contract(IPoolRouter)15249", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:21" + }, + { + "label": "feeCurve", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:22" + }, + { + "label": "vestingSchedules", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_address,t_struct(VestingSchedule)9873_storage)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:24" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IPoolRouter)15249": { + "label": "contract IPoolRouter", + "numberOfBytes": "20" + }, + "t_contract(IRewardsPool)15272": { + "label": "contract IRewardsPool", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_contract(IRewardsPool)15272)": { + "label": "mapping(address => contract IRewardsPool)", + "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(VestingSchedule)9873_storage)": { + "label": "mapping(address => struct DelegatorPool.VestingSchedule)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(VestingSchedule)9873_storage": { + "label": "struct DelegatorPool.VestingSchedule", + "members": [ + { + "label": "totalAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "startTimestamp", + "type": "t_uint64", + "offset": 0, + "slot": "1" + }, + { + "label": "durationSeconds", + "type": "t_uint64", + "offset": 8, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "0b4eda8393e5d0f47488f1296d8b0ae8b62b9f8c96b302c1ba1df30c49e8c2c8": { + "address": "0x8a6937a48DDBfd13F1D32800ADdd2F2f0A05F031", + "txHash": "0xd91a2c08f6c2b7740042812f8c31bc6d2e8f5eb9d8c7c0893ba2461809b48b4e", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:35" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "202", + "type": "t_contract(IDelegatorPool)15207", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:36" + }, + { + "label": "pools", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_bytes32,t_struct(Pool)10395_storage)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:38" + }, + { + "label": "poolCountByToken", + "offset": 0, + "slot": "204", + "type": "t_mapping(t_address,t_uint16)", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:39" + }, + { + "label": "poolCount", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:40" + }, + { + "label": "tokens", + "offset": 0, + "slot": "206", + "type": "t_array(t_address)dyn_storage", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:42" + }, + { + "label": "wrappedETH", + "offset": 0, + "slot": "207", + "type": "t_address", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:43" + }, + { + "label": "reservedMultiplier", + "offset": 0, + "slot": "208", + "type": "t_uint256", + "contract": "PoolRouter", + "src": "contracts/core/PoolRouter.sol:45" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IDelegatorPool)15207": { + "label": "contract IDelegatorPool", + "numberOfBytes": "20" + }, + "t_contract(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IStakingPool)15387": { + "label": "contract IStakingPool", + "numberOfBytes": "20" + }, + "t_enum(PoolStatus)10383": { + "label": "enum PoolRouter.PoolStatus", + "members": [ + "OPEN", + "DRAINING", + "CLOSED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(Pool)10395_storage)": { + "label": "mapping(bytes32 => struct PoolRouter.Pool)", + "numberOfBytes": "32" + }, + "t_struct(Pool)10395_storage": { + "label": "struct PoolRouter.Pool", + "members": [ + { + "label": "token", + "type": "t_contract(IERC20Upgradeable)3713", + "offset": 0, + "slot": "0" + }, + { + "label": "stakingPool", + "type": "t_contract(IStakingPool)15387", + "offset": 0, + "slot": "1" + }, + { + "label": "status", + "type": "t_enum(PoolStatus)10383", + "offset": 20, + "slot": "1" + }, + { + "label": "reservedModeActive", + "type": "t_bool", + "offset": 21, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "b80755129051ddd95695af862b8d4d0df20c49e4e871b449e3a9ea36f6e4b799": { + "address": "0x8043bD4A4c9C616b12FF7E5a706Ee9EEC466156E", + "txHash": "0x795698083bc34bae75d806ec48a010f070a447677e847b69d75cb83d04c4c0fb", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "strategies", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:23" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:24" + }, + { + "label": "liquidityBuffer", + "offset": 0, + "slot": "256", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:25" + }, + { + "label": "fees", + "offset": 0, + "slot": "257", + "type": "t_array(t_struct(Fee)12492_storage)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:27" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:29" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "259", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:30" + }, + { + "label": "poolIndex", + "offset": 20, + "slot": "259", + "type": "t_uint16", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:31" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)12492_storage)dyn_storage": { + "label": "struct StakingPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)12492_storage": { + "label": "struct StakingPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "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" + } + } + } + }, + "885e9e6d490e0babfc435c688925f259e99dba6fbed5e883c326ca272547f809": { + "address": "0xd3830F47a6f8C79B510aE49731E8E436CDa827B7", + "txHash": "0x97fc97df7f46764a8f5e4532b23755a35faafd1a35fb5d44102f30d5cd2a882d", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "lsdTokens", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:25" + }, + { + "label": "lsdAdapters", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_contract(ILSDIndexAdapter)31361)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:26" + }, + { + "label": "compositionTargets", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:28" + }, + { + "label": "compositionTolerance", + "offset": 0, + "slot": "257", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:29" + }, + { + "label": "compositionEnforcementThreshold", + "offset": 0, + "slot": "258", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:30" + }, + { + "label": "fees", + "offset": 0, + "slot": "259", + "type": "t_array(t_struct(Fee)29381_storage)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:32" + }, + { + "label": "withdrawalFee", + "offset": 0, + "slot": "260", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:33" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "261", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:35" + }, + { + "label": "isPaused", + "offset": 0, + "slot": "262", + "type": "t_bool", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:37" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)29381_storage)dyn_storage": { + "label": "struct LiquidSDIndexPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(ILSDIndexAdapter)31361": { + "label": "contract ILSDIndexAdapter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(ILSDIndexAdapter)31361)": { + "label": "mapping(address => contract ILSDIndexAdapter)", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)29381_storage": { + "label": "struct LiquidSDIndexPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "f0798098844ef2fad6139c33676055ae36319070d06299afc4f449995a74be17": { + "address": "0x6Eb684F5Ee1643654a8048B2DD117bA8Df58596C", + "txHash": "0xb92e3ada734f21ec84b180993f75b4af05f62fab88854af8b490415e92ceb0f1", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.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:37" + }, + { + "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:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "204", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "205", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "206", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "tokenPools", + "offset": 0, + "slot": "251", + "type": "t_mapping(t_address,t_contract(IRewardsPool)15451)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:19" + }, + { + "label": "tokens", + "offset": 0, + "slot": "252", + "type": "t_array(t_address)dyn_storage", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:20" + }, + { + "label": "rewardRedirects", + "offset": 0, + "slot": "253", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:22" + }, + { + "label": "redirectedStakes", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_address,t_uint256)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:23" + }, + { + "label": "redirectApprovals", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_address)", + "contract": "RewardsPoolController", + "src": "contracts/core/base/RewardsPoolController.sol:24" + }, + { + "label": "allowanceToken", + "offset": 0, + "slot": "256", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:21" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "257", + "type": "t_contract(IPoolRouter)15428", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:22" + }, + { + "label": "feeCurve", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:23" + }, + { + "label": "vestingSchedules", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_address,t_struct(VestingSchedule)9920_storage)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:25" + }, + { + "label": "lockedBalances", + "offset": 0, + "slot": "260", + "type": "t_mapping(t_address,t_uint256)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:27" + }, + { + "label": "lockedApprovals", + "offset": 0, + "slot": "261", + "type": "t_mapping(t_address,t_uint256)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:28" + }, + { + "label": "communityPools", + "offset": 0, + "slot": "262", + "type": "t_mapping(t_address,t_bool)", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:29" + }, + { + "label": "totalLocked", + "offset": 0, + "slot": "263", + "type": "t_uint256", + "contract": "DelegatorPool", + "src": "contracts/core/DelegatorPool.sol:30" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IPoolRouter)15428": { + "label": "contract IPoolRouter", + "numberOfBytes": "20" + }, + "t_contract(IRewardsPool)15451": { + "label": "contract IRewardsPool", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_contract(IRewardsPool)15451)": { + "label": "mapping(address => contract IRewardsPool)", + "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(VestingSchedule)9920_storage)": { + "label": "mapping(address => struct DelegatorPool.VestingSchedule)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(VestingSchedule)9920_storage": { + "label": "struct DelegatorPool.VestingSchedule", + "members": [ + { + "label": "totalAmount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "startTimestamp", + "type": "t_uint64", + "offset": 0, + "slot": "1" + }, + { + "label": "durationSeconds", + "type": "t_uint64", + "offset": 8, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "7532eb01c07394bc1a149db218fc9861647e248f9aa1dc6fc021ced296ed2535": { + "address": "0x931976AD548E37C92aF6356016053902cc051A0b", + "txHash": "0x1075c6d0e3980c1a043af569005b97b414118cfc40f76ca01d4770ac47c13873", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "strategies", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:23" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "255", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:24" + }, + { + "label": "liquidityBuffer", + "offset": 0, + "slot": "256", + "type": "t_uint256", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:25" + }, + { + "label": "fees", + "offset": 0, + "slot": "257", + "type": "t_array(t_struct(Fee)12671_storage)dyn_storage", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:27" + }, + { + "label": "poolRouter", + "offset": 0, + "slot": "258", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:29" + }, + { + "label": "delegatorPool", + "offset": 0, + "slot": "259", + "type": "t_address", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:30" + }, + { + "label": "poolIndex", + "offset": 20, + "slot": "259", + "type": "t_uint16", + "contract": "StakingPool", + "src": "contracts/core/StakingPool.sol:31" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)12671_storage)dyn_storage": { + "label": "struct StakingPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)12671_storage": { + "label": "struct StakingPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "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" + } + } + } + }, + "95010ccdbc897eed0acfa8baa5da317965c794b12c27ba3c326a0b0725b56c5c": { + "address": "0x9C3E07971f4A18cd4f51EF0637e1212B0DaCD59A", + "txHash": "0x6db76a8aa319254e485392bb66b99eed84cdc097dc0ad6ccc2bef732d17504fe", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "_owner", + "offset": 0, + "slot": "201", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "251", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:15" + }, + { + "label": "shares", + "offset": 0, + "slot": "252", + "type": "t_mapping(t_address,t_uint256)", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:17" + }, + { + "label": "totalShares", + "offset": 0, + "slot": "253", + "type": "t_uint256", + "contract": "StakingRewardsPool", + "src": "contracts/core/base/StakingRewardsPool.sol:18" + }, + { + "label": "lsdTokens", + "offset": 0, + "slot": "254", + "type": "t_array(t_address)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:25" + }, + { + "label": "lsdAdapters", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_address,t_contract(ILSDIndexAdapter)32187)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:26" + }, + { + "label": "compositionTargets", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:28" + }, + { + "label": "compositionTolerance", + "offset": 0, + "slot": "257", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:29" + }, + { + "label": "compositionEnforcementThreshold", + "offset": 0, + "slot": "258", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:30" + }, + { + "label": "fees", + "offset": 0, + "slot": "259", + "type": "t_array(t_struct(Fee)30099_storage)dyn_storage", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:32" + }, + { + "label": "withdrawalFee", + "offset": 0, + "slot": "260", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:33" + }, + { + "label": "totalStaked", + "offset": 0, + "slot": "261", + "type": "t_uint256", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:35" + }, + { + "label": "isPaused", + "offset": 0, + "slot": "262", + "type": "t_bool", + "contract": "LiquidSDIndexPool", + "src": "contracts/liquidSDIndex/LiquidSDIndexPool.sol:37" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(Fee)30099_storage)dyn_storage": { + "label": "struct LiquidSDIndexPool.Fee[]", + "numberOfBytes": "32" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(ILSDIndexAdapter)32187": { + "label": "contract ILSDIndexAdapter", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(ILSDIndexAdapter)32187)": { + "label": "mapping(address => contract ILSDIndexAdapter)", + "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_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Fee)30099_storage": { + "label": "struct LiquidSDIndexPool.Fee", + "members": [ + { + "label": "receiver", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "basisPoints", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "91f8431923a1b503eb73a93c899405430ab7a8ea48b6110c03f44a65a1afd719": { + "address": "0xB3cA15183732A38EdDCF3b0a2bbaEac07108FbC9", + "txHash": "0x01578ede9ce79368b66ce847aafa33fbf5a2cf24b3551e5687e689231b918ad0", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "Strategy", + "src": "contracts/core/base/Strategy.sol:17" + }, + { + "label": "stakingPool", + "offset": 0, + "slot": "202", + "type": "t_contract(IStakingPool)15588", + "contract": "Strategy", + "src": "contracts/core/base/Strategy.sol:18" + }, + { + "label": "maxDeposits", + "offset": 0, + "slot": "203", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:17" + }, + { + "label": "minDeposits", + "offset": 0, + "slot": "204", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:18" + }, + { + "label": "totalDeposits", + "offset": 0, + "slot": "205", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:20" + }, + { + "label": "feeBasisPoints", + "offset": 0, + "slot": "206", + "type": "t_uint256", + "contract": "StrategyMock", + "src": "contracts/core/test/StrategyMock.sol:21" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IStakingPool)15588": { + "label": "contract IStakingPool", + "numberOfBytes": "20" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "8bdcf4076d05fd7cd698e6d7962d951649438e67a847bce158ec7ea0451d2d70": { + "address": "0xF30fEE4420e27539C62100B250db83b715b13052", + "txHash": "0x9ec18d598bd7f53e89997fef3df2edbae288a42d8adbd6a2e1b1e955298ad9e3", + "layout": { + "solcVersion": "0.8.15", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87" + }, + { + "label": "token", + "offset": 0, + "slot": "201", + "type": "t_contract(IERC20Upgradeable)3713", + "contract": "LSDIndexAdapter", + "src": "contracts/liquidSDIndex/base/LSDIndexAdapter.sol:17" + }, + { + "label": "indexPool", + "offset": 0, + "slot": "202", + "type": "t_address", + "contract": "LSDIndexAdapter", + "src": "contracts/liquidSDIndex/base/LSDIndexAdapter.sol:18" + }, + { + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)10_storage", + "contract": "LSDIndexAdapter", + "src": "contracts/liquidSDIndex/base/LSDIndexAdapter.sol:77" + }, + { + "label": "exchangeRate", + "offset": 0, + "slot": "213", + "type": "t_uint256", + "contract": "LSDIndexAdapterMock", + "src": "contracts/liquidSDIndex/test/LSDIndexAdapterMock.sol:11" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)10_storage": { + "label": "uint256[10]", + "numberOfBytes": "320" + }, + "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(IERC20Upgradeable)3713": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + } + } +} diff --git a/audits/Core&LINK-Staking-Report.pdf b/audits/Core&LINK-Staking-Report.pdf new file mode 100644 index 00000000..645d0191 Binary files /dev/null and b/audits/Core&LINK-Staking-Report.pdf differ diff --git a/audits/Sigma Prime - Core Staking Contracts Report.pdf b/audits/Core-Staking-Report.pdf similarity index 50% rename from audits/Sigma Prime - Core Staking Contracts Report.pdf rename to audits/Core-Staking-Report.pdf index d68ec351..48094e86 100644 Binary files a/audits/Sigma Prime - Core Staking Contracts Report.pdf and b/audits/Core-Staking-Report.pdf differ diff --git a/audits/Cyfrin - LSD Index Pool Report.pdf b/audits/LSD-Index-Pool-Report.pdf similarity index 100% rename from audits/Cyfrin - LSD Index Pool Report.pdf rename to audits/LSD-Index-Pool-Report.pdf diff --git a/audits/Trust Security - Priority Pool & LINK Staking v0.2 Report.pdf b/audits/Priority-Pool&LINK-Staking-0.2-Report.pdf similarity index 100% rename from audits/Trust Security - Priority Pool & LINK Staking v0.2 Report.pdf rename to audits/Priority-Pool&LINK-Staking-0.2-Report.pdf diff --git a/audits/Cyfrin - Priority Pool Report.pdf b/audits/Priority-Pool-Report.pdf similarity index 100% rename from audits/Cyfrin - Priority Pool Report.pdf rename to audits/Priority-Pool-Report.pdf diff --git a/audits/Trust Security - SDLPool Report.pdf b/audits/SDLPool-Report.pdf similarity index 100% rename from audits/Trust Security - SDLPool Report.pdf rename to audits/SDLPool-Report.pdf diff --git a/audits/Sigma Prime - Core & LINK Staking Report.pdf b/audits/Sigma Prime - Core & LINK Staking Report.pdf deleted file mode 100644 index 07bb1b74..00000000 Binary files a/audits/Sigma Prime - Core & LINK Staking Report.pdf and /dev/null differ diff --git a/contracts/core/StakingPool.sol b/contracts/core/StakingPool.sol index 4e0a7b1b..acfd47f9 100644 --- a/contracts/core/StakingPool.sol +++ b/contracts/core/StakingPool.sol @@ -77,14 +77,12 @@ contract StakingPool is StakingRewardsPool { **/ function deposit(address _account, uint256 _amount) external onlyPriorityPool { require(strategies.length > 0, "Must be > 0 strategies to stake"); - if (_amount > 0) { - token.safeTransferFrom(msg.sender, address(this), _amount); - depositLiquidity(); - _mint(_account, _amount); - totalStaked += _amount; - } else { - depositLiquidity(); - } + + token.safeTransferFrom(msg.sender, address(this), _amount); + depositLiquidity(); + + _mint(_account, _amount); + totalStaked += _amount; } /** diff --git a/contracts/core/priorityPool/DistributionOracle.sol b/contracts/core/priorityPool/DistributionOracle.sol index a61d3cd9..b2c5cb1f 100644 --- a/contracts/core/priorityPool/DistributionOracle.sol +++ b/contracts/core/priorityPool/DistributionOracle.sol @@ -21,14 +21,7 @@ contract DistributionOracle is ChainlinkClient, Ownable { uint128 requestInProgress; } - struct UpdateData { - bytes32 merkleRoot; - bytes32 ipfsHash; - uint256 amountDistributed; - uint256 sharesAmountDistributed; - } - - IPriorityPool public immutable priorityPool; + IPriorityPool public priorityPool; bytes32 public jobId; uint256 public fee; @@ -37,15 +30,7 @@ contract DistributionOracle is ChainlinkClient, Ownable { uint64 public minBlockConfirmations; uint128 public minDepositsSinceLastUpdate; - UpdateStatus public updateStatus; - - uint128 public manualVerificationRequired; - uint128 public awaitingManualVerification; - UpdateData public updateData; - - event SetUpdateParams(uint64 minTimeBetweenUpdates, uint128 minDepositsSinceLastUpdate, uint64 minBlockConfirmations); - event SetChainlinkParams(bytes32 jobId, uint256 fee); - event ToggleManualVerification(uint128 manualVerificationRequired); + UpdateStatus private updateStatus; error NotPaused(); error InsufficientBlockConfirmations(); @@ -53,8 +38,6 @@ contract DistributionOracle is ChainlinkClient, Ownable { error UpdateConditionsNotMet(); error InvalidUpkeepType(); error RequestInProgress(); - error NoVerificationPending(); - error AwaitingManualVerification(); /** * @notice Initialize the contract @@ -86,18 +69,17 @@ contract DistributionOracle is ChainlinkClient, Ownable { minDepositsSinceLastUpdate = _minDepositsSinceLastUpdate; minBlockConfirmations = _minBlockConfirmations; priorityPool = IPriorityPool(_priorityPool); - manualVerificationRequired = 1; } /** * @notice returns whether a call should be made to performUpkeep to pause or request an update + * into the staking pool * @dev used by chainlink keepers * @return upkeepNeeded whether or not to pause or request update * @return performData abi encoded upkeep type to perform */ function checkUpkeep(bytes calldata) external view returns (bool, bytes memory) { bool shouldPauseForUpdate = !priorityPool.paused() && - awaitingManualVerification == 0 && (block.timestamp >= updateStatus.timeOfLastUpdate + minTimeBetweenUpdates) && priorityPool.depositsSinceLastUpdate() >= minDepositsSinceLastUpdate; @@ -106,9 +88,8 @@ contract DistributionOracle is ChainlinkClient, Ownable { } bool shouldRequestUpdate = priorityPool.paused() && - awaitingManualVerification == 0 && - updateStatus.requestInProgress == 0 && - (block.number >= updateStatus.pausedAtBlockNumber + minBlockConfirmations); + (block.number >= updateStatus.pausedAtBlockNumber + minBlockConfirmations) && + updateStatus.requestInProgress == 0; if (shouldRequestUpdate) { return (true, abi.encode(UpkeepType.REQUEST)); @@ -126,7 +107,12 @@ contract DistributionOracle is ChainlinkClient, Ownable { UpkeepType upkeepType = abi.decode(_performData, (UpkeepType)); if (upkeepType == UpkeepType.PAUSE) { - if (priorityPool.depositsSinceLastUpdate() < minDepositsSinceLastUpdate) revert UpdateConditionsNotMet(); + if ( + (block.timestamp < updateStatus.timeOfLastUpdate + minTimeBetweenUpdates) || + (priorityPool.depositsSinceLastUpdate() < minDepositsSinceLastUpdate) + ) { + revert UpdateConditionsNotMet(); + } _pauseForUpdate(); } else if (upkeepType == UpkeepType.REQUEST) { _requestUpdate(); @@ -167,39 +153,10 @@ contract DistributionOracle is ChainlinkClient, Ownable { uint256 _amountDistributed, uint256 _sharesAmountDistributed ) public recordChainlinkFulfillment(_requestId) { - if (manualVerificationRequired == 1) { - updateData = UpdateData(_merkleRoot, _ipfsHash, _amountDistributed, _sharesAmountDistributed); - awaitingManualVerification = 1; - } else { - priorityPool.updateDistribution(_merkleRoot, _ipfsHash, _amountDistributed, _sharesAmountDistributed); - } + priorityPool.updateDistribution(_merkleRoot, _ipfsHash, _amountDistributed, _sharesAmountDistributed); updateStatus.requestInProgress = 0; } - /** - * @notice Executes a manual verification update request - * */ - function executeManualVerification() external onlyOwner { - if (awaitingManualVerification == 0) revert NoVerificationPending(); - awaitingManualVerification = 0; - - priorityPool.updateDistribution( - updateData.merkleRoot, - updateData.ipfsHash, - updateData.amountDistributed, - updateData.sharesAmountDistributed - ); - } - - /** - * @notice Rejects a manual verification update request and requests a new update - * */ - function rejectManualVerificationAndRetry() external onlyOwner { - if (awaitingManualVerification == 0) revert NoVerificationPending(); - awaitingManualVerification = 0; - _requestUpdate(); - } - /** * @notice Cancels a request if it has not been fulfilled * @param _requestId request ID @@ -214,7 +171,7 @@ contract DistributionOracle is ChainlinkClient, Ownable { * @notice Withdraws LINK tokens * @param _amount amount to withdraw */ - function withdrawLink(uint256 _amount) external onlyOwner { + function withdrawLink(uint256 _amount) public onlyOwner { LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress()); if (link.transfer(msg.sender, _amount) != true) revert InsufficientBalance(); } @@ -234,15 +191,6 @@ contract DistributionOracle is ChainlinkClient, Ownable { minTimeBetweenUpdates = _minTimeBetweenUpdates; minDepositsSinceLastUpdate = _minDepositsSinceLastUpdate; minBlockConfirmations = _minBlockConfirmations; - emit SetUpdateParams(_minTimeBetweenUpdates, _minDepositsSinceLastUpdate, _minBlockConfirmations); - } - - /** - * @notice Toggles whether manual verification is required for updates - * */ - function toggleManualVerification() external onlyOwner { - manualVerificationRequired = manualVerificationRequired == 1 ? 0 : 1; - emit ToggleManualVerification(manualVerificationRequired); } /** @@ -253,7 +201,6 @@ contract DistributionOracle is ChainlinkClient, Ownable { function setChainlinkParams(bytes32 _jobId, uint256 _fee) external onlyOwner { jobId = _jobId; fee = _fee; - emit SetChainlinkParams(_jobId, _fee); } /** @@ -261,10 +208,8 @@ contract DistributionOracle is ChainlinkClient, Ownable { * @dev must always be called before requestUpdate() */ function _pauseForUpdate() private { - if (block.timestamp < updateStatus.timeOfLastUpdate + minTimeBetweenUpdates) revert UpdateConditionsNotMet(); - if (awaitingManualVerification == 1) revert AwaitingManualVerification(); priorityPool.pauseForUpdate(); - updateStatus = UpdateStatus(uint64(block.timestamp), uint64(block.number), 0); + updateStatus = UpdateStatus(uint64(block.timestamp), uint64(block.number), 1); } /** @@ -278,9 +223,6 @@ contract DistributionOracle is ChainlinkClient, Ownable { if (!priorityPool.paused()) revert NotPaused(); if (block.number < status.pausedAtBlockNumber + minBlockConfirmations) revert InsufficientBlockConfirmations(); if (status.requestInProgress == 1) revert RequestInProgress(); - if (awaitingManualVerification == 1) revert AwaitingManualVerification(); - - updateStatus.requestInProgress = 1; Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfillRequest.selector); req.addUint("blockNumber", status.pausedAtBlockNumber); diff --git a/contracts/core/priorityPool/PriorityPool.sol b/contracts/core/priorityPool/PriorityPool.sol index e92559b0..c9f70ca8 100644 --- a/contracts/core/priorityPool/PriorityPool.sol +++ b/contracts/core/priorityPool/PriorityPool.sol @@ -61,7 +61,7 @@ contract PriorityPool is UUPSUpgradeable, OwnableUpgradeable, PausableUpgradeabl ); event SetPoolStatus(PoolStatus status); event SetQueueDepositParams(uint128 queueDepositMin, uint128 queueDepositMax); - event DepositTokens(uint256 unusedTokensAmount, uint256 queuedTokensAmount); + event DepositQueuedTokens(uint256 amount); error InvalidValue(); error UnauthorizedToken(); @@ -558,14 +558,12 @@ contract PriorityPool is UUPSUpgradeable, OwnableUpgradeable, PausableUpgradeabl _depositMax - toDepositFromStakingPool ); + totalQueued = _totalQueued - toDepositFromQueue; + depositsSinceLastUpdate += toDepositFromQueue; + sharesSinceLastUpdate += stakingPool.getSharesByStake(toDepositFromQueue); stakingPool.deposit(address(this), toDepositFromQueue); - if (toDepositFromQueue != 0) { - totalQueued = _totalQueued - toDepositFromQueue; - depositsSinceLastUpdate += toDepositFromQueue; - sharesSinceLastUpdate += stakingPool.getSharesByStake(toDepositFromQueue); - } - emit DepositTokens(toDepositFromStakingPool, toDepositFromQueue); + emit DepositQueuedTokens(toDepositFromQueue); } /** diff --git a/contracts/core/test/CLContractImports.sol b/contracts/core/test/CLContractImports.sol deleted file mode 100644 index ab39e0ed..00000000 --- a/contracts/core/test/CLContractImports.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.0; - -import "@chainlink/contracts/src/v0.7/Operator.sol"; diff --git a/contracts/core/test/PriorityPoolMock.sol b/contracts/core/test/PriorityPoolMock.sol deleted file mode 100644 index 2ba3a333..00000000 --- a/contracts/core/test/PriorityPoolMock.sol +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.15; - -import "@openzeppelin/contracts/security/Pausable.sol"; - -/** - * @title Priority Pool - * @notice Mocks contract for testing - */ -contract PriorityPoolMock is Pausable { - bytes32 public merkleRoot; - bytes32 public ipfsHash; - uint256 public amountDistributed; - uint256 public sharesAmountDistributed; - - uint256 public depositsSinceLastUpdate; - - constructor(uint256 _depositsSinceLastUpdate) { - depositsSinceLastUpdate = _depositsSinceLastUpdate; - } - - function updateDistribution( - bytes32 _merkleRoot, - bytes32 _ipfsHash, - uint256 _amountDistributed, - uint256 _sharesAmountDistributed - ) external { - _unpause(); - - amountDistributed = _amountDistributed; - sharesAmountDistributed = _sharesAmountDistributed; - merkleRoot = _merkleRoot; - ipfsHash = _ipfsHash; - } - - function pauseForUpdate() external { - _pause(); - } - - function setDepositsSinceLastUpdate(uint256 _depositsSinceLastUpdate) external { - depositsSinceLastUpdate = _depositsSinceLastUpdate; - } -} diff --git a/contracts/linkStaking/CommunityVCS.sol b/contracts/linkStaking/CommunityVCS.sol index d3f4ba05..18309d2f 100644 --- a/contracts/linkStaking/CommunityVCS.sol +++ b/contracts/linkStaking/CommunityVCS.sol @@ -32,8 +32,7 @@ contract CommunityVCS is VaultControllerStrategy { * that can be deposited at once * @param _vaultDeploymentThreshold the min number of non-full vaults before a new batch is deployed * @param _vaultDeploymentAmount amount of vaults to deploy when threshold is met - * - */ + **/ function initialize( address _token, address _stakingPool, @@ -59,41 +58,19 @@ contract CommunityVCS is VaultControllerStrategy { /** * @notice claims Chanlink staking rewards from vaults - * @param _vaults list if vault indexes to claim from + * @param _startIndex index of first vault to claim from + * @param _numVaults number of vaults to claim from starting at _startIndex * @param _minRewards min amount of rewards required to claim */ - function claimRewards(uint256[] calldata _vaults, uint256 _minRewards) external returns (uint256) { + function claimRewards( + uint256 _startIndex, + uint256 _numVaults, + uint256 _minRewards + ) external { address receiver = address(this); - uint256 balanceBefore = token.balanceOf(address(this)); - for (uint256 i = 0; i < _vaults.length; ++i) { - ICommunityVault(address(vaults[_vaults[i]])).claimRewards(_minRewards, receiver); - } - uint256 balanceAfter = token.balanceOf(address(this)); - return balanceAfter - balanceBefore; - } - - /** - * @notice returns the deposit change since deposits were last updated - * @dev deposit change could be positive or negative depending on reward rate and whether - * any slashing occurred - * @return deposit change - */ - function getDepositChange() public view override returns (int) { - uint256 totalBalance = token.balanceOf(address(this)); - for (uint256 i = 0; i < vaults.length; ++i) { - uint256 vaultDeposits = vaults[i].getTotalDeposits(); - if (vaultDeposits == 0) break; - totalBalance += vaultDeposits; + for (uint256 i = _startIndex; i < _startIndex + _numVaults; ++i) { + ICommunityVault(address(vaults[i])).claimRewards(_minRewards, receiver); } - return int(totalBalance) - int(totalDeposits); - } - - /** - * @notice returns the maximum that can be deposited into this strategy - * @return maximum deposits - */ - function getMaxDeposits() public view virtual override returns (uint256) { - return stakeController.getMerkleRoot() == bytes32(0) ? super.getMaxDeposits() : 0; } /** diff --git a/contracts/linkStaking/CommunityVaultAutomation.sol b/contracts/linkStaking/CommunityVaultAutomation.sol deleted file mode 100644 index 469f107b..00000000 --- a/contracts/linkStaking/CommunityVaultAutomation.sol +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.15; - -import {CommunityVCS} from "./CommunityVCS.sol"; -import {IVault} from "./interfaces/IVault.sol"; -import {AutomationCompatibleInterface} from "@chainlink/contracts/src/v0.8/interfaces/AutomationCompatibleInterface.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; - -contract CommunityVaultAutomation is AutomationCompatibleInterface, Ownable { - CommunityVCS internal communityVCS; - uint256 public minRewardsTotal; - uint256 public minRewardsPerVault; - - error RewardsMinimumNotMet(); - - constructor( - address _communityVCS, - uint256 _minRewardsTotal, - uint256 _minRewardsPerVault - ) { - communityVCS = CommunityVCS(_communityVCS); - minRewardsTotal = _minRewardsTotal; - minRewardsPerVault = _minRewardsPerVault; - } - - /** - * @notice returns whether or not rewards is equal to or greater than the minimum rewards set - * @return upkeepNeeded whether or not rewards should be claimed - * @return performData abi encoded list of vault indexes to claim from - * - */ - function checkUpkeep(bytes calldata) external returns (bool upkeepNeeded, bytes memory performData) { - (uint256 totalRewards, uint256[] memory vaultList) = checkRewards(); - if (totalRewards >= minRewardsTotal) { - return (true, abi.encode(vaultList)); - } - return (false, abi.encode(vaultList)); - } - - /** - * @notice Claims rewards from vaults - * @param performData abi encoded list of vault indexes to claim from - */ - function performUpkeep(bytes calldata performData) external { - uint256[] memory vaultList = abi.decode(performData, (uint256[])); - - uint256 claimedRewards = communityVCS.claimRewards(vaultList, minRewardsPerVault); - if (claimedRewards < minRewardsTotal) { - revert RewardsMinimumNotMet(); - } - } - - /** - * @notice Calculates total rewards from vaults and last index of vaults with rewards - * @dev The last index is used to avoid iterating over all vaults when claiming rewards to save gas - * @return (uint256, uint256[]) total rewards from vaults and list of vault indexes that meet the minimum rewards - */ - function checkRewards() public view returns (uint256, uint256[] memory) { - IVault[] memory vaults = communityVCS.getVaults(); - uint256 totalRewards = 0; - - uint256 maxVaults = vaults.length; - uint256[] memory vaultsToClaim = new uint256[](maxVaults); - uint256 count = 0; - - for (uint256 i = 0; i < vaults.length; i++) { - IVault vault = IVault(vaults[i]); - uint256 rewards = vault.getRewards(); - if (rewards >= minRewardsPerVault) { - totalRewards += rewards; - vaultsToClaim[count] = i; - count++; - } - } - uint256[] memory finalVaultsToClaim = new uint256[](count); - for (uint256 j = 0; j < count; j++) { - finalVaultsToClaim[j] = vaultsToClaim[j]; - } - - return (totalRewards, finalVaultsToClaim); - } - - function setCommunityVCS(address _communityVCS) external onlyOwner { - communityVCS = CommunityVCS(_communityVCS); - } - - function setMinRewardsTotal(uint256 _minRewards) external onlyOwner { - minRewardsTotal = _minRewards; - } - - function setMinRewardsPerVault(uint256 _minRewards) external onlyOwner { - minRewardsPerVault = _minRewards; - } -} diff --git a/contracts/linkStaking/OperatorVCS.sol b/contracts/linkStaking/OperatorVCS.sol index e30b4f95..324f6f26 100644 --- a/contracts/linkStaking/OperatorVCS.sol +++ b/contracts/linkStaking/OperatorVCS.sol @@ -16,8 +16,6 @@ contract OperatorVCS is VaultControllerStrategy { mapping(address => bool) private vaultMapping; - bool private preRelease; - event VaultAdded(address indexed operator); event WithdrawExtraRewards(address indexed receiver, uint256 amount); event SetOperatorRewardPercentage(uint256 rewardPercentage); @@ -51,7 +49,7 @@ contract OperatorVCS is VaultControllerStrategy { Fee[] memory _fees, uint256 _maxDepositSizeBP, uint256 _operatorRewardPercentage - ) public reinitializer(3) { + ) public reinitializer(2) { if (address(token) == address(0)) { __VaultControllerStrategy_init( _token, @@ -61,17 +59,16 @@ contract OperatorVCS is VaultControllerStrategy { _fees, _maxDepositSizeBP ); + } - if (_operatorRewardPercentage > 10000) revert InvalidPercentage(); - operatorRewardPercentage = _operatorRewardPercentage; - } else { - uint256 totalPrincipal; - uint256 numVaults = vaults.length; - for (uint256 i = 0; i < numVaults; ++i) { - totalPrincipal += vaults[i].getPrincipalDeposits(); - } - totalPrincipalDeposits = totalPrincipal; - preRelease = true; + // reassaign values to account for changed storage variables in upgrade + totalPrincipalDeposits = operatorRewardPercentage; + indexOfLastFullVault = 0; + + if (_operatorRewardPercentage > 10000) revert InvalidPercentage(); + operatorRewardPercentage = _operatorRewardPercentage; + for (uint256 i = 0; i < vaults.length; ++i) { + vaultMapping[address(vaults[i])] = true; } } @@ -133,17 +130,6 @@ contract OperatorVCS is VaultControllerStrategy { return totalFees; } - /** - * @notice returns the maximum that can be deposited into this strategy - * @return maximum deposits - */ - function getMaxDeposits() public view override returns (uint256) { - if (preRelease) { - return stakeController.isActive() ? 855000 ether : 0; - } - return super.getMaxDeposits(); - } - /** * @notice updates deposit accounting and calculates fees on newly earned rewards * @dev reverts if sender is not stakingPool @@ -280,14 +266,6 @@ contract OperatorVCS is VaultControllerStrategy { emit SetOperatorRewardPercentage(_operatorRewardPercentage); } - /** - * @notice sets pre-release mode - * @dev limits staking allocation when true - */ - function togglePreRelease() external onlyOwner { - preRelease = !preRelease; - } - /** * @notice updates rewards for all strategies controlled by the staking pool * @dev called before operatorRewardPercentage is changed to diff --git a/contracts/linkStaking/OperatorVault.sol b/contracts/linkStaking/OperatorVault.sol index ca0038f4..25d57f1b 100644 --- a/contracts/linkStaking/OperatorVault.sol +++ b/contracts/linkStaking/OperatorVault.sol @@ -56,19 +56,17 @@ contract OperatorVault is Vault { address _operator, address _rewardsReceiver ) public reinitializer(3) { - if (vaultController == address(0)) { + if (operator == address(0)) { __Vault_init(_token, _vaultController, _stakeController, _rewardsController); + setOperator(_operator); } else { stakeController.migrate(""); stakeController = IStaking(_stakeController); - rewardsController = IStakingRewards(_rewardsController); trackedTotalDeposits = SafeCast.toUint128(getTotalDeposits()); + rewardsController = IStakingRewards(_rewardsController); } pfAlertsController = IPFAlertsController(_pfAlertsController); rewardsReceiver = _rewardsReceiver; - if (operator == address(0) && _operator != address(0)) { - setOperator(_operator); - } } /** diff --git a/contracts/linkStaking/base/VaultControllerStrategy.sol b/contracts/linkStaking/base/VaultControllerStrategy.sol index c2284038..9873a532 100644 --- a/contracts/linkStaking/base/VaultControllerStrategy.sol +++ b/contracts/linkStaking/base/VaultControllerStrategy.sol @@ -122,7 +122,7 @@ abstract contract VaultControllerStrategy is Strategy { * any slashing occurred * @return deposit change */ - function getDepositChange() public view virtual returns (int) { + function getDepositChange() public view returns (int) { uint256 totalBalance = token.balanceOf(address(this)); for (uint256 i = 0; i < vaults.length; ++i) { totalBalance += vaults[i].getTotalDeposits(); diff --git a/contracts/linkStaking/interfaces/IStaking.sol b/contracts/linkStaking/interfaces/IStaking.sol index 77d6181c..c7962893 100644 --- a/contracts/linkStaking/interfaces/IStaking.sol +++ b/contracts/linkStaking/interfaces/IStaking.sol @@ -14,7 +14,5 @@ interface IStaking { function isActive() external view returns (bool); - function getMerkleRoot() external view returns (bytes32); - function migrate(bytes calldata data) external; } diff --git a/contracts/linkStaking/interfaces/IVault.sol b/contracts/linkStaking/interfaces/IVault.sol index 7c1b42ef..3978429b 100644 --- a/contracts/linkStaking/interfaces/IVault.sol +++ b/contracts/linkStaking/interfaces/IVault.sol @@ -10,8 +10,6 @@ interface IVault { function getPrincipalDeposits() external view returns (uint256); - function getRewards() external view returns (uint256); - function migrate(bytes calldata _data) external; function upgradeToAndCall(address _newImplementation, bytes memory _data) external; diff --git a/contracts/linkStaking/test/StakingMock.sol b/contracts/linkStaking/test/StakingMock.sol index b20a187b..023c9cbf 100644 --- a/contracts/linkStaking/test/StakingMock.sol +++ b/contracts/linkStaking/test/StakingMock.sol @@ -39,15 +39,10 @@ contract StakingMock is IERC677Receiver { function onTokenTransfer( address _sender, uint256 _value, - bytes calldata _data + bytes calldata ) external { require(msg.sender == address(token), "has to be token"); - if (_data.length != 0) { - address sender = abi.decode(_data, (address)); - principalBalances[sender] += _value; - } else { - principalBalances[_sender] += _value; - } + principalBalances[_sender] += _value; } function getStakerLimits() external view returns (uint256, uint256) { @@ -79,10 +74,6 @@ contract StakingMock is IERC677Receiver { removedPrincipal[_staker] += _amount; } - function getMerkleRoot() external view returns (bytes32) { - return bytes32(0); - } - function isActive() external view returns (bool) { return active; } @@ -94,9 +85,4 @@ contract StakingMock is IERC677Receiver { function setMaxPoolSize(uint256 _maxPoolSize) external { maxPoolSize = _maxPoolSize; } - - function setDepositLimits(uint256 _depositMin, uint256 _depositMax) external { - depositMin = _depositMin; - depositMax = _depositMax; - } } diff --git a/contracts/linkStaking/test/StakingMockV1.sol b/contracts/linkStaking/test/StakingMockV1.sol index 447cac15..3f9492e1 100644 --- a/contracts/linkStaking/test/StakingMockV1.sol +++ b/contracts/linkStaking/test/StakingMockV1.sol @@ -73,7 +73,7 @@ contract StakingMockV1 is IERC677Receiver { } function migrate(bytes calldata) external { - token.transferAndCall(migration, stakedBalances[msg.sender] + baseReward + delegationReward, abi.encode(msg.sender)); + token.transferAndCall(migration, stakedBalances[msg.sender], "0x0"); } function setBaseReward(uint256 _amount) external { diff --git a/deployments/mainnet.json b/deployments/mainnet.json index 1eceb501..55f4098b 100644 --- a/deployments/mainnet.json +++ b/deployments/mainnet.json @@ -162,13 +162,5 @@ "SDL_Vesting_LinkPool": { "address": "0x2861382Ef967E5B539b5BDF9fFCC52Fa4056eaE6", "artifact": "Vesting" - }, - "LINK_CommunityVCS": { - "address": "0xAc12290b097f6893322F5430627e472131fBC1B5", - "artifact": "CommunityVCS" - }, - "LINK_PP_DistributionOracle": { - "address": "0x2285AC429cCCAaE7cC1E27BfBe617bC626B443CF", - "artifact": "DistributionOracle" } } diff --git a/foundry.toml b/foundry.toml deleted file mode 100644 index 4f09860b..00000000 --- a/foundry.toml +++ /dev/null @@ -1,12 +0,0 @@ -[profile.default] -src = 'contracts' -out = 'out' -libs = ['node_modules', 'lib'] -test = 'test' -cache_path = 'cache_forge' -fs_permissions = [{ access = "read", path = "./" }] -optimizer = true -optimizer_runs = 2_000 - -[rpc_endpoints] -ethereum = "${ETHEREUM_RPC_URL}" diff --git a/get-value.sh b/get-value.sh deleted file mode 100755 index 5f53d359..00000000 --- a/get-value.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# Used to get the value from a JSON file for a given key. -# This is needed for retrieval of config vars in contracts. -if [ "$#" -ne 2 ]; then - echo "Usage: $0 json_file key" - exit 1 -fi - -JSON_FILE="$1" -KEY="$2" - -if [ ! -f "$JSON_FILE" ]; then - echo "Error: JSON file not found." - exit 1 -fi - -VALUE=$(jq -r ".${KEY}" "$JSON_FILE") - -if [ "$VALUE" == "null" ]; then - echo "Error: Key not found in JSON file." - exit 1 -fi - -echo $VALUE diff --git a/hardhat.config.ts b/hardhat.config.ts index 1d2128f9..6d3acc4d 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -4,7 +4,6 @@ import '@typechain/hardhat' import '@nomiclabs/hardhat-waffle' import '@openzeppelin/hardhat-upgrades' import '@nomiclabs/hardhat-etherscan' -import '@nomicfoundation/hardhat-foundry' const balance = '100000000000000000000000' const accounts = [ @@ -71,15 +70,6 @@ const config: HardhatUserConfig = { }, }, }, - { - version: '0.7.6', - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - }, - }, { version: '0.6.11', settings: { diff --git a/lib/forge-std b/lib/forge-std deleted file mode 160000 index 155d547c..00000000 --- a/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 155d547c449afa8715f538d69454b83944117811 diff --git a/package.json b/package.json index 3f394610..aaf486ba 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,6 @@ "solhint": "solhint contracts/**/*.sol" }, "devDependencies": { - "@nomicfoundation/hardhat-foundry": "^1.1.1", "@nomicfoundation/hardhat-network-helpers": "^1.0.6", "@nomiclabs/hardhat-ethers": "^2.2.1", "@nomiclabs/hardhat-etherscan": "^3.1.7", @@ -33,7 +32,6 @@ "@types/fs-extra": "^9.0.13", "@types/mocha": "^9.1.0", "@types/node": "^17.0.14", - "cbor": "^9.0.1", "chai": "^4.3.6", "commander": "^9.4.1", "ethereum-waffle": "^3.4.0", diff --git a/scripts/input/1/config.json b/scripts/input/1/config.json deleted file mode 100644 index f9142c01..00000000 --- a/scripts/input/1/config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "CommunityVCS": "0xAc12290b097f6893322F5430627e472131fBC1B5", - "MerkleDistributor": "0xe7Dd77d408920c000C40C35c4c111318Ba8B4767" -} diff --git a/scripts/prod/deploy-imp-contracts-2.ts b/scripts/prod/deploy-imp-contracts-2.ts deleted file mode 100644 index 743ff70a..00000000 --- a/scripts/prod/deploy-imp-contracts-2.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { ethers, upgrades, run } from 'hardhat' -import { getContract } from '../utils/deployment' -import { StakingPool, PriorityPool, CommunityVCS } from '../../typechain-types' - -async function main() { - const stakingPool = (await getContract('LINK_StakingPool')) as StakingPool - const priorityPool = (await getContract('LINK_PriorityPool')) as PriorityPool - const communityVCS = (await getContract('LINK_CommunityVCS')) as CommunityVCS - const communityVaultAutomationFactory = await ethers.getContractFactory( - 'CommunityVaultAutomation' - ) - - const communityVCSAddress = '0xAc12290b097f6893322F5430627e472131fBC1B5' - const minRewardsTotal = ethers.utils.parseUnits('650', 18) - const minRewardsPerVault = ethers.utils.parseUnits('65', 18) - - const communityVaultAutomation = await communityVaultAutomationFactory.deploy( - communityVCSAddress, - minRewardsTotal, - minRewardsPerVault - ) - await communityVaultAutomation.deployed() - await communityVaultAutomation.deployTransaction.wait(5) - console.log('CommunityVaultAutomation deployed at:', communityVaultAutomation.address) - await verifyContract(communityVaultAutomation.address, [ - communityVCSAddress, - minRewardsTotal, - minRewardsPerVault, - ]) - - const stakingPoolImp = (await upgrades.prepareUpgrade( - stakingPool.address, - await ethers.getContractFactory('StakingPool'), - { - kind: 'uups', - unsafeAllowRenames: false, - } - )) as string - console.log('StakingPool implementation deployed at: ', stakingPoolImp) - - await verifyContract(stakingPoolImp, []) - - const priorityPoolImp = (await upgrades.prepareUpgrade( - priorityPool.address, - await ethers.getContractFactory('PriorityPool'), - { - kind: 'uups', - unsafeAllowRenames: false, - } - )) as string - console.log('PriorityPool implementation deployed at: ', priorityPoolImp) - - await verifyContract(priorityPoolImp, []) - - const communityVCSImp = (await upgrades.prepareUpgrade( - communityVCS.address, - await ethers.getContractFactory('CommunityVCS'), - { - kind: 'uups', - unsafeAllowRenames: false, - } - )) as string - console.log('CommunityVCS implementation deployed at: ', communityVCSImp) - await verifyContract(communityVCSImp, []) -} - -async function verifyContract(contractAddress: string, constructorArguments: any[]) { - try { - await run('verify:verify', { - address: contractAddress, - constructorArguments: constructorArguments, - }) - console.log(`Contract verified: ${contractAddress}`) - } catch (error: any) { - console.error(`Verification failed for ${contractAddress}: ${error.message}`) - } -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/prod/link-staking-0.2/deploy-com-vaults.ts b/scripts/prod/link-staking-0.2/deploy-com-vaults.ts deleted file mode 100644 index 03c21c15..00000000 --- a/scripts/prod/link-staking-0.2/deploy-com-vaults.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { ethers } from 'hardhat' -import Safe, { EthersAdapter } from '@safe-global/protocol-kit' -import SafeApiKit from '@safe-global/api-kit' -import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' -import { CommunityVCS } from '../../../typechain-types' -import { getContract } from '../../utils/deployment' -import { getAccounts } from '../../utils/helpers' - -const multisigAddress = '0xB351EC0FEaF4B99FdFD36b484d9EC90D0422493D' - -const numVaultsToAdd = 57 // the number of new community vaults to deploy - -async function main() { - const { signers, accounts } = await getAccounts() - const ethAdapter = new EthersAdapter({ - ethers, - signerOrProvider: signers[0], - }) - const safeSdk = await Safe.create({ ethAdapter, safeAddress: multisigAddress }) - const safeService = new SafeApiKit({ - txServiceUrl: 'https://safe-transaction-mainnet.safe.global', - ethAdapter, - }) - - const communityVCS = (await getContract('LINK_CommunityVCS')) as CommunityVCS - - const safeTransactionData: MetaTransactionData[] = [ - { - to: communityVCS.address, - data: (await communityVCS.populateTransaction.addVaults(numVaultsToAdd)).data || '', - value: '0', - }, - ] - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) - const senderSignature = await safeSdk.signTransactionHash(safeTxHash) - - await safeService.proposeTransaction({ - safeAddress: multisigAddress, - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress: accounts[0], - senderSignature: senderSignature.data, - }) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/prod/link-staking-0.2/deploy-op-strategy.ts b/scripts/prod/link-staking-0.2/deploy-op-strategy.ts deleted file mode 100644 index e30f288d..00000000 --- a/scripts/prod/link-staking-0.2/deploy-op-strategy.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ethers, upgrades } from 'hardhat' -import { getContract } from '../../utils/deployment' - -async function main() { - const operatorVCS = await getContract('LINK_OperatorVCS') - - const operatorVCSImp = (await upgrades.prepareUpgrade( - operatorVCS.address, - await ethers.getContractFactory('OperatorVCS'), - { - kind: 'uups', - } - )) as string - console.log('OperatorVCS implementation deployed at: ', operatorVCSImp) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/prod/link-staking-0.2/upgrade-op-strategy.ts b/scripts/prod/link-staking-0.2/upgrade-op-strategy.ts deleted file mode 100644 index 0aecdf12..00000000 --- a/scripts/prod/link-staking-0.2/upgrade-op-strategy.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { ethers } from 'hardhat' -import Safe, { EthersAdapter } from '@safe-global/protocol-kit' -import SafeApiKit from '@safe-global/api-kit' -import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' -import { OperatorVCS } from '../../../typechain-types' -import { getContract } from '../../utils/deployment' -import { getAccounts } from '../../utils/helpers' - -const multisigAddress = '0xB351EC0FEaF4B99FdFD36b484d9EC90D0422493D' - -const operatorVCSImplementation = '0x584338Dabae9e5429c334Fc1aD41c46AC007Bc29' - -async function main() { - const { signers, accounts } = await getAccounts() - const ethAdapter = new EthersAdapter({ - ethers, - signerOrProvider: signers[0], - }) - const safeSdk = await Safe.create({ ethAdapter, safeAddress: multisigAddress }) - const safeService = new SafeApiKit({ - txServiceUrl: 'https://safe-transaction-mainnet.safe.global', - ethAdapter, - }) - - const operatorVCS = (await getContract('LINK_OperatorVCS')) as OperatorVCS - - const safeTransactionData: MetaTransactionData[] = [ - { - to: operatorVCS.address, - data: - ( - await operatorVCS.populateTransaction.upgradeToAndCall( - operatorVCSImplementation, - operatorVCS.interface.encodeFunctionData('initialize', [ - ethers.constants.AddressZero, - ethers.constants.AddressZero, - ethers.constants.AddressZero, - ethers.constants.AddressZero, - [], - 0, - 0, - ]) - ) - ).data || '', - value: '0', - }, - ] - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) - const senderSignature = await safeSdk.signTransactionHash(safeTxHash) - - await safeService.proposeTransaction({ - safeAddress: multisigAddress, - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress: accounts[0], - senderSignature: senderSignature.data, - }) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/prod/slurp-14/deprecate-sdl-mint.ts b/scripts/prod/slurp-14/deprecate-sdl-mint.ts deleted file mode 100644 index 530af6ea..00000000 --- a/scripts/prod/slurp-14/deprecate-sdl-mint.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { ethers } from 'hardhat' -import Safe, { EthersAdapter } from '@safe-global/protocol-kit' -import SafeApiKit from '@safe-global/api-kit' -import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' -import { OperatorVCS, StakingAllowance } from '../../../typechain-types' -import { getContract } from '../../utils/deployment' -import { getAccounts } from '../../utils/helpers' - -const multisigAddress = '0xB351EC0FEaF4B99FdFD36b484d9EC90D0422493D' - -const operatorRewardPercentage = 500 // basis points operator reward percentage - -async function main() { - const { signers, accounts } = await getAccounts() - const ethAdapter = new EthersAdapter({ - ethers, - signerOrProvider: signers[0], - }) - const safeSdk = await Safe.create({ ethAdapter, safeAddress: multisigAddress }) - const safeService = new SafeApiKit({ - txServiceUrl: 'https://safe-transaction-mainnet.safe.global', - ethAdapter, - }) - - const operatorVCS = (await getContract('LINK_OperatorVCS')) as OperatorVCS - const sdlToken = (await getContract('SDLToken')) as StakingAllowance - - const safeTransactionData: MetaTransactionData[] = [ - { - to: operatorVCS.address, - data: - ( - await operatorVCS.populateTransaction.setOperatorRewardPercentage( - operatorRewardPercentage - ) - ).data || '', - value: '0', - }, - { - to: sdlToken.address, - data: (await sdlToken.populateTransaction.renounceOwnership()).data || '', - value: '0', - }, - ] - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) - const senderSignature = await safeSdk.signTransactionHash(safeTxHash) - - await safeService.proposeTransaction({ - safeAddress: multisigAddress, - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress: accounts[0], - senderSignature: senderSignature.data, - }) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/scripts/prod/upgrade-contracts-2.ts b/scripts/prod/upgrade-contracts-2.ts deleted file mode 100644 index 4922c741..00000000 --- a/scripts/prod/upgrade-contracts-2.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { ethers } from 'hardhat' -import Safe, { EthersAdapter } from '@safe-global/protocol-kit' -import SafeApiKit from '@safe-global/api-kit' -import { MetaTransactionData } from '@safe-global/safe-core-sdk-types' -import { PriorityPool, StakingPool, CommunityVCS } from '../../typechain-types' -import { getContract } from '../utils/deployment' -import { getAccounts } from '../utils/helpers' - -const multisigAddress = '0xB351EC0FEaF4B99FdFD36b484d9EC90D0422493D' - -// New implementation addresses for the contracts -const priorityPoolNewImplementation = '0xYourNewPriorityPoolAddress' -const stakingPoolNewImplementation = '0xYourNewStakingPoolAddress' -const communityVCSNewImplementation = '0xYourNewCommunityVCSAddress' - -async function main() { - const { signers } = await getAccounts() - const ethAdapter = new EthersAdapter({ - ethers, - signerOrProvider: signers[0], - }) - const safeSdk = await Safe.create({ ethAdapter, safeAddress: multisigAddress }) - const safeService = new SafeApiKit({ - txServiceUrl: 'https://safe-transaction-mainnet.safe.global', - ethAdapter, - }) - - const priorityPool = (await getContract('PriorityPool')) as PriorityPool - const stakingPool = (await getContract('StakingPool')) as StakingPool - const communityVCS = (await getContract('CommunityVCS')) as CommunityVCS - - const safeTransactionData: MetaTransactionData[] = [ - { - to: priorityPool.address, - data: - (await priorityPool.populateTransaction.upgradeTo(priorityPoolNewImplementation)).data || - '', - value: '0', - }, - { - to: stakingPool.address, - data: - (await stakingPool.populateTransaction.upgradeTo(stakingPoolNewImplementation)).data || '', - value: '0', - }, - { - to: communityVCS.address, - data: - (await communityVCS.populateTransaction.upgradeTo(communityVCSNewImplementation)).data || - '', - value: '0', - }, - ] - - const safeTransaction = await safeSdk.createTransaction({ safeTransactionData }) - const safeTxHash = await safeSdk.getTransactionHash(safeTransaction) - const senderSignature = await safeSdk.signTransactionHash(safeTxHash) - - await safeService.proposeTransaction({ - safeAddress: multisigAddress, - safeTransactionData: safeTransaction.data, - safeTxHash, - senderAddress: signers[0].address, - senderSignature: senderSignature.data, - }) -} - -main() - .then(() => process.exit(0)) - .catch((error) => { - console.error(error) - process.exit(1) - }) diff --git a/test/core/priorityPool/priority-pool.test.ts b/test/core/priority-pool.test.ts similarity index 99% rename from test/core/priorityPool/priority-pool.test.ts rename to test/core/priority-pool.test.ts index 664e2802..c9ba8e31 100644 --- a/test/core/priorityPool/priority-pool.test.ts +++ b/test/core/priority-pool.test.ts @@ -6,14 +6,8 @@ import { deployUpgradeable, getAccounts, setupToken, -} from '../../utils/helpers' -import { - ERC677, - SDLPoolMock, - StakingPool, - PriorityPool, - StrategyMock, -} from '../../../typechain-types' +} from '../utils/helpers' +import { ERC677, SDLPoolMock, StakingPool, PriorityPool, StrategyMock } from '../../typechain-types' import { ethers } from 'hardhat' import { Signer } from 'ethers' import { StandardMerkleTree } from '@openzeppelin/merkle-tree' diff --git a/test/core/priorityPool/distribution-oracle.test.ts b/test/core/priorityPool/distribution-oracle.test.ts deleted file mode 100644 index 865a56f0..00000000 --- a/test/core/priorityPool/distribution-oracle.test.ts +++ /dev/null @@ -1,358 +0,0 @@ -import { toEther, deploy, fromEther, getAccounts } from '../../utils/helpers' -import { assert, expect } from 'chai' -import { ERC677, DistributionOracle, PriorityPoolMock, Operator } from '../../../typechain-types' -import { ethers } from 'hardhat' -import { mineUpTo, time } from '@nomicfoundation/hardhat-network-helpers' -import cbor from 'cbor' - -describe('DistributionOracle', () => { - let pp: PriorityPoolMock - let oracle: DistributionOracle - let opContract: Operator - let token: ERC677 - let accounts: string[] - - before(async () => { - ;({ accounts } = await getAccounts()) - }) - - beforeEach(async () => { - token = (await deploy('ERC677', ['Chainlink', 'LINK', 1000000000])) as ERC677 - pp = (await deploy('PriorityPoolMock', [toEther(1000)])) as PriorityPoolMock - opContract = (await deploy('Operator', [token.address, accounts[0]])) as Operator - oracle = (await deploy('DistributionOracle', [ - token.address, - opContract.address, - '0x' + Buffer.from('64797f2053684fef80138a5be83281b1').toString('hex'), - toEther(1), - 0, - toEther(100), - 10, - pp.address, - ])) as DistributionOracle - - await opContract.setAuthorizedSenders([accounts[0]]) - await token.transfer(oracle.address, toEther(100)) - await oracle.toggleManualVerification() - }) - - it('pauseForUpdate should work correctly', async () => { - await oracle.pauseForUpdate() - - let blockNumber = await ethers.provider.getBlockNumber() - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - - assert.deepEqual( - (await oracle.updateStatus()).map((v) => v.toNumber()), - [ts, blockNumber, 0] - ) - - await expect(oracle.pauseForUpdate()).to.be.revertedWith('Pausable: paused') - }) - - it('requestUpdate should work correctly', async () => { - await expect(oracle.requestUpdate()).to.be.revertedWith('NotPaused()') - - await oracle.pauseForUpdate() - let blockNumber = await ethers.provider.getBlockNumber() - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - - await expect(oracle.requestUpdate()).to.be.revertedWith('InsufficientBlockConfirmations()') - - await mineUpTo(blockNumber + 10) - await oracle.requestUpdate() - - assert.deepEqual( - (await oracle.updateStatus()).map((v) => v.toNumber()), - [ts, blockNumber, 1] - ) - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - assert.deepEqual(cbor.decodeAllSync(event[8].slice(2)), ['blockNumber', blockNumber]) - - await expect(oracle.requestUpdate()).to.be.revertedWith('RequestInProgress()') - }) - - it('fulfillRequest should work correctly', async () => { - await oracle.pauseForUpdate() - let blockNumber = await ethers.provider.getBlockNumber() - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - await mineUpTo(blockNumber + 10) - await oracle.requestUpdate() - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - await opContract.fulfillOracleRequest2( - event[2], - event[3], - event[4], - event[5], - event[6], - ethers.utils.defaultAbiCoder.encode( - ['bytes32', 'bytes32', 'bytes32', 'uint256', 'uint256'], - [ - event[2], - ethers.utils.formatBytes32String('merkle'), - ethers.utils.formatBytes32String('ipfs'), - toEther(1000), - toEther(500), - ] - ) - ) - - assert.deepEqual( - (await oracle.updateStatus()).map((v) => v.toNumber()), - [ts, blockNumber, 0] - ) - assert.equal(await pp.merkleRoot(), ethers.utils.formatBytes32String('merkle')) - assert.equal(await pp.ipfsHash(), ethers.utils.formatBytes32String('ipfs')) - assert.equal(fromEther(await pp.amountDistributed()), 1000) - assert.equal(fromEther(await pp.sharesAmountDistributed()), 500) - }) - - it('manual verification should work correctly', async () => { - await oracle.toggleManualVerification() - await oracle.pauseForUpdate() - let blockNumber = await ethers.provider.getBlockNumber() - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - await mineUpTo(blockNumber + 10) - await oracle.requestUpdate() - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - - await expect(oracle.executeManualVerification()).to.be.revertedWith('NoVerificationPending()') - - await opContract.fulfillOracleRequest2( - event[2], - event[3], - event[4], - event[5], - event[6], - ethers.utils.defaultAbiCoder.encode( - ['bytes32', 'bytes32', 'bytes32', 'uint256', 'uint256'], - [ - event[2], - ethers.utils.formatBytes32String('merkle'), - ethers.utils.formatBytes32String('ipfs'), - toEther(1000), - toEther(500), - ] - ) - ) - - await expect(oracle.requestUpdate()).to.be.revertedWith('AwaitingManualVerification()') - await expect(oracle.pauseForUpdate()).to.be.revertedWith('AwaitingManualVerification()') - - assert.deepEqual( - (await oracle.updateStatus()).map((v) => v.toNumber()), - [ts, blockNumber, 0] - ) - assert.equal((await oracle.awaitingManualVerification()).toNumber(), 1) - assert.deepEqual( - await oracle.updateData().then((d) => [d[0], d[1], fromEther(d[2]), fromEther(d[3])]), - [ - ethers.utils.formatBytes32String('merkle'), - ethers.utils.formatBytes32String('ipfs'), - 1000, - 500, - ] - ) - assert.equal(await pp.merkleRoot(), ethers.utils.formatBytes32String('')) - assert.equal(await pp.ipfsHash(), ethers.utils.formatBytes32String('')) - assert.equal(fromEther(await pp.amountDistributed()), 0) - assert.equal(fromEther(await pp.sharesAmountDistributed()), 0) - - await oracle.executeManualVerification() - - assert.equal((await oracle.awaitingManualVerification()).toNumber(), 0) - assert.equal(await pp.merkleRoot(), ethers.utils.formatBytes32String('merkle')) - assert.equal(await pp.ipfsHash(), ethers.utils.formatBytes32String('ipfs')) - assert.equal(fromEther(await pp.amountDistributed()), 1000) - assert.equal(fromEther(await pp.sharesAmountDistributed()), 500) - }) - - it('cancelRequest should work correctly', async () => { - await oracle.pauseForUpdate() - let blockNumber = await ethers.provider.getBlockNumber() - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - await mineUpTo(blockNumber + 10) - await oracle.requestUpdate() - await time.increaseTo(ts + 1000000) - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - await oracle.cancelRequest(event[2], event[6]) - - assert.deepEqual( - (await oracle.updateStatus()).map((v) => v.toNumber()), - [ts, blockNumber, 0] - ) - assert.equal(await pp.merkleRoot(), ethers.utils.formatBytes32String('')) - assert.equal(await pp.ipfsHash(), ethers.utils.formatBytes32String('')) - assert.equal(fromEther(await pp.amountDistributed()), 0) - assert.equal(fromEther(await pp.sharesAmountDistributed()), 0) - }) - - it('withdrawLink should work correctly', async () => { - await oracle.withdrawLink(toEther(20)) - assert.equal(fromEther(await token.balanceOf(oracle.address)), 80) - assert.equal(fromEther(await token.balanceOf(accounts[0])), 999999920) - }) - - it('checkUpkeep should work correctly', async () => { - let data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], true) - assert.equal(data[1], ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - - await oracle.pauseForUpdate() - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], false) - - let blockNumber = await ethers.provider.getBlockNumber() - await mineUpTo(blockNumber + 10) - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], true) - assert.equal(data[1], ethers.utils.defaultAbiCoder.encode(['uint256'], [1])) - - await oracle.requestUpdate() - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], false) - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - await opContract.fulfillOracleRequest2( - event[2], - event[3], - event[4], - event[5], - event[6], - ethers.utils.defaultAbiCoder.encode( - ['bytes32', 'bytes32', 'bytes32', 'uint256', 'uint256'], - [ - event[2], - ethers.utils.formatBytes32String('merkle'), - ethers.utils.formatBytes32String('ipfs'), - toEther(1000), - toEther(500), - ] - ) - ) - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], true) - assert.equal(data[1], ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - - await oracle.setUpdateParams(0, toEther(1001), 0) - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], false) - - await oracle.setUpdateParams(10000, toEther(1000), 0) - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], false) - - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - await time.increaseTo(ts + 1000000) - - data = await oracle.checkUpkeep('0x00') - assert.equal(data[0], true) - assert.equal(data[1], ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - }) - - it('performUpkeep should work correctly', async () => { - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [1])) - ).to.be.revertedWith('NotPaused()') - - await oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - ).to.be.revertedWith('Pausable: paused') - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [1])) - ).to.be.revertedWith('InsufficientBlockConfirmations()') - - let blockNumber = await ethers.provider.getBlockNumber() - await mineUpTo(blockNumber + 10) - - await oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [1])) - - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [1])) - ).to.be.revertedWith('RequestInProgress()') - - let event: any = ( - await opContract.queryFilter( - opContract.filters[ - 'OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)' - ]() - ) - )[0].args - await opContract.fulfillOracleRequest2( - event[2], - event[3], - event[4], - event[5], - event[6], - ethers.utils.defaultAbiCoder.encode( - ['bytes32', 'bytes32', 'bytes32', 'uint256', 'uint256'], - [ - event[2], - ethers.utils.formatBytes32String('merkle'), - ethers.utils.formatBytes32String('ipfs'), - toEther(1000), - toEther(500), - ] - ) - ) - - await oracle.setUpdateParams(0, toEther(1001), 0) - - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - ).to.be.revertedWith('UpdateConditionsNotMet()') - - await oracle.setUpdateParams(10000, toEther(1000), 0) - - await expect( - oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - ).to.be.revertedWith('UpdateConditionsNotMet') - - let ts = (await ethers.provider.getBlock(blockNumber)).timestamp - await time.increaseTo(ts + 1000000) - - await oracle.performUpkeep(ethers.utils.defaultAbiCoder.encode(['uint256'], [0])) - }) -}) diff --git a/test/core/sdlPool/sdl-pool.test.ts b/test/core/sdlPool/sdl-pool.test.ts index 01503ae0..2a083b83 100644 --- a/test/core/sdlPool/sdl-pool.test.ts +++ b/test/core/sdlPool/sdl-pool.test.ts @@ -1,4 +1,4 @@ -import { Signer } from 'ethers' +import { BigNumber, Signer } from 'ethers' import { assert, expect } from 'chai' import { toEther, @@ -840,13 +840,13 @@ describe('SDLPool', () => { await receiver.getData().then((d: any) => ({ operator: d[0].operator, from: d[0].from, - tokenId: d[0].tokenId.toNumber(), + tokenId: d[0].tokenId, data: d[0].data, })), { operator: accounts[2], from: accounts[2], - tokenId: 3, + tokenId: BigNumber.from(3), data: '0x', } ) @@ -947,13 +947,13 @@ describe('SDLPool', () => { await receiver.getData().then((d: any) => ({ operator: d[0].operator, from: d[0].from, - tokenId: d[0].tokenId.toNumber(), + tokenId: d[0].tokenId, data: d[0].data, })), { operator: accounts[2], from: accounts[2], - tokenId: 3, + tokenId: BigNumber.from(3), data: '0x01', } ) diff --git a/test/core/slashing-keeper.test.ts b/test/core/slashing-keeper.test.ts index eaaca828..f6760804 100644 --- a/test/core/slashing-keeper.test.ts +++ b/test/core/slashing-keeper.test.ts @@ -92,19 +92,15 @@ describe('SlashingKeeper', () => { data = await slashingKeeper.checkUpkeep('0x00') assert.equal(data[0], true, 'upkeepNeeded incorrect') - assert.deepEqual( - decode(data[1])[0].map((v: any) => v.toNumber()), - [2], - 'performData incorrect' - ) + assert.deepEqual(decode(data[1]), [[ethers.BigNumber.from(2)]], 'performData incorrect') await strategy1.simulateSlash(toEther(30)) data = await slashingKeeper.checkUpkeep('0x00') assert.equal(data[0], true, 'upkeepNeeded incorrect') assert.deepEqual( - decode(data[1])[0].map((v: any) => v.toNumber()), - [0, 2], + decode(data[1]), + [[ethers.BigNumber.from(0), ethers.BigNumber.from(2)]], 'performData incorrect' ) }) diff --git a/test/foundry/Base.t.sol b/test/foundry/Base.t.sol deleted file mode 100644 index 50bd3812..00000000 --- a/test/foundry/Base.t.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {Test, console2} from "forge-std/Test.sol"; -import {Users} from "./utils/Types.sol"; -import {Utils} from "./utils/Utils.sol"; -import {MerkleDistributor} from "../../contracts/airdrop/MerkleDistributor.sol"; - -abstract contract BaseTest is Test, Utils { - Users internal users; - uint256 internal network; - MerkleDistributor public merkleDistributor; - - function init(bool _fork) public { - if (_fork) { - network = vm.createSelectFork(vm.rpcUrl("ethereum")); - } else { - merkleDistributor = new MerkleDistributor(); - } - } -} diff --git a/test/foundry/fork/CommunityVaultAutomationFork.t.sol b/test/foundry/fork/CommunityVaultAutomationFork.t.sol deleted file mode 100644 index 0a71107a..00000000 --- a/test/foundry/fork/CommunityVaultAutomationFork.t.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {CommunityVaultAutomation} from "../../../contracts/linkStaking/CommunityVaultAutomation.sol"; -import {CommunityVCS} from "../../../contracts/linkStaking/CommunityVCS.sol"; -import {IVault} from "../../../contracts/linkStaking/CommunityVCS.sol"; -import {BaseTest} from "../Base.t.sol"; -import {ERC677} from "../../../contracts/core/tokens/base/ERC677.sol"; - -contract CommunityVaultAutomationForkTest is BaseTest { - bool internal _fork = true; - CommunityVaultAutomation internal communityVaultAutomation; - - function setUp() public { - BaseTest.init(_fork); - communityVaultAutomation = new CommunityVaultAutomation(getValue("CommunityVCS"), 0, 0); - } -} diff --git a/test/foundry/fork/MerkleDistributorFork.t.sol b/test/foundry/fork/MerkleDistributorFork.t.sol deleted file mode 100644 index 496d58ce..00000000 --- a/test/foundry/fork/MerkleDistributorFork.t.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {MerkleDistributor} from "../../../contracts/airdrop/MerkleDistributor.sol"; -import {BaseTest} from "../Base.t.sol"; -import {ERC677} from "../../../contracts/core/tokens/base/ERC677.sol"; - -contract MerkleDistributorForkTest is BaseTest { - bool internal _fork = true; - - function setUp() public { - BaseTest.init(_fork); - } -} diff --git a/test/foundry/invariant/handlers/Handler.sol b/test/foundry/invariant/handlers/Handler.sol deleted file mode 100644 index 54a6fb53..00000000 --- a/test/foundry/invariant/handlers/Handler.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {Test, console2} from "forge-std/Test.sol"; -import {AddressSet, LibAddressSet} from "../helpers/AddressSet.sol"; - -contract Handler is Test { - using LibAddressSet for AddressSet; - - AddressSet internal _actors; - address internal admin; - address internal currentActor; - - mapping(bytes32 => uint256) public calls; - - - modifier createActor() { - currentActor = msg.sender; - _actors.add(msg.sender); - _; - } - - modifier countCall(bytes32 key) { - calls[key]++; - _; - } - - constructor() { - } - - - - function callSummary() external view { - console2.log("Call summary:"); - console2.log("-------------------"); - - } -} diff --git a/test/foundry/invariant/helpers/AddressSet.sol b/test/foundry/invariant/helpers/AddressSet.sol deleted file mode 100644 index a073cbca..00000000 --- a/test/foundry/invariant/helpers/AddressSet.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -struct AddressSet { - address[] addrs; - mapping(address => bool) saved; - mapping(address => uint256) called; - mapping(address => bool) depositLink; -} - -library LibAddressSet { - function add(AddressSet storage s, address addr) internal { - if (!s.saved[addr]) { - s.addrs.push(addr); - s.saved[addr] = true; - s.called[addr]++; - } else { - s.called[addr]++; - } - } - - function contains(AddressSet storage s, address addr) internal view returns (bool) { - return s.saved[addr]; - } - - function count(AddressSet storage s) internal view returns (uint256) { - return s.addrs.length; - } - - function rand(AddressSet storage s, uint256 seed) internal view returns (address) { - if (s.addrs.length > 0) { - return s.addrs[seed % s.addrs.length]; - } else { - return address(0); - } - } - - function forEach(AddressSet storage s, function(address) external func) internal { - for (uint256 i; i < s.addrs.length; ++i) { - func(s.addrs[i]); - } - } - - function reduce(AddressSet storage s, uint256 acc, function(uint256,address) external returns (uint256) func) - internal - returns (uint256) - { - for (uint256 i; i < s.addrs.length; ++i) { - acc = func(acc, s.addrs[i]); - } - return acc; - } -} diff --git a/test/foundry/mock/CommunityVCSMock.sol b/test/foundry/mock/CommunityVCSMock.sol deleted file mode 100644 index 7b0acc31..00000000 --- a/test/foundry/mock/CommunityVCSMock.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.15; - -contract CommunityVCSMock { - VaultMock[] public vaults; - - constructor(uint256 _totalVaults) { - for (uint256 i = 0; i < _totalVaults; i++) { - uint256 _total = (i + 1) * 1 ether; - if (i == 4) { - (i + 1) * 1 ether; - } else { - if (i > 2) { - _total = 0; - } - } - - vaults.push(new VaultMock(_total)); - } - } - - function getVaults() external view returns (address[] memory) { - address[] memory _vaults = new address[](vaults.length); - for (uint256 i = 0; i < vaults.length; i++) { - _vaults[i] = address(vaults[i]); - } - - return _vaults; - } - - function claimRewards(uint256[] memory _vaults, uint256 _minRewards) external returns (uint256) { - uint256 _totalRewards = 0; - for (uint256 i = 0; i < _vaults.length; i++) { - uint256 _rewards = vaults[_vaults[i]].getRewards(); - _totalRewards += _rewards; - assert(_rewards >= _minRewards); - } - return _totalRewards; - } -} - -contract VaultMock { - uint256 public holdings; - - constructor(uint256 _holdings) { - holdings = _holdings; - } - - function getRewards() external view returns (uint256) { - return holdings; - } -} diff --git a/test/foundry/unit/CommunityVaultAutomation.t.sol b/test/foundry/unit/CommunityVaultAutomation.t.sol deleted file mode 100644 index ff833183..00000000 --- a/test/foundry/unit/CommunityVaultAutomation.t.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {CommunityVaultAutomation} from "../../../contracts/linkStaking/CommunityVaultAutomation.sol"; -import {CommunityVCS} from "../../../contracts/linkStaking/CommunityVCS.sol"; -import {IVault} from "../../../contracts/linkStaking/CommunityVCS.sol"; -import {BaseTest} from "../Base.t.sol"; -import {ERC677} from "../../../contracts/core/tokens/base/ERC677.sol"; -import {CommunityVCSMock} from "../mock/CommunityVCSMock.sol"; - -contract CommunityVaultAutomationTest is BaseTest { - bool internal _fork = false; - CommunityVaultAutomation internal communityVaultAutomation; - CommunityVCSMock internal communityVCSMock; - - function setUp() public { - BaseTest.init(_fork); - communityVCSMock = new CommunityVCSMock(5); - communityVaultAutomation = new CommunityVaultAutomation(address(communityVCSMock), 0, 1); - } - - function test_performUpkeep_success() public { - uint256[4] memory _vaultsReference = [uint256(0), 1, 2, 4]; - (bool upkeepNeeded, bytes memory performData) = communityVaultAutomation.checkUpkeep(""); - assertEq(upkeepNeeded, true); - uint256[] memory _vaults = abi.decode(performData, (uint256[])); - assertTrue(_vaults.length == 4); - for (uint256 i = 0; i < _vaultsReference.length; i++) { - assertTrue(_vaults[i] == _vaultsReference[i]); - } - communityVaultAutomation.performUpkeep(performData); - } -} diff --git a/test/foundry/unit/MerkleDistributor.t.sol b/test/foundry/unit/MerkleDistributor.t.sol deleted file mode 100644 index 4a9e15e6..00000000 --- a/test/foundry/unit/MerkleDistributor.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {MerkleDistributor} from "../../../contracts/airdrop/MerkleDistributor.sol"; -import {BaseTest} from "../Base.t.sol"; -import {ERC677} from "../../../contracts/core/tokens/base/ERC677.sol"; - -contract MerkleDistributorTest is BaseTest { - bool internal _fork = false; - - function setUp() public { - BaseTest.init(_fork); - } - - function test_claimDistribution_EmptyProof() public { - ERC677 _testToken = new ERC677("Token", "TKN", 1000000); - merkleDistributor.addDistribution(address(_testToken), bytes32(""), 0, 0); - bytes32[] memory _proof = new bytes32[](0); - vm.expectRevert("MerkleDistributor: Invalid proof."); - merkleDistributor.claimDistribution(address(_testToken), 0, users.user1, 10, _proof); - } -} diff --git a/test/foundry/utils/Types.sol b/test/foundry/utils/Types.sol deleted file mode 100644 index a4526419..00000000 --- a/test/foundry/utils/Types.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -struct Users { - address payable admin; - address payable user1; - address payable user2; -} diff --git a/test/foundry/utils/Utils.sol b/test/foundry/utils/Utils.sol deleted file mode 100644 index 4b37c4e8..00000000 --- a/test/foundry/utils/Utils.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.15; - -import {Script} from "forge-std/Script.sol"; - -contract Utils is Script { - function updateDeployment(address newAddress, string memory key) internal { - string memory inputDir = "scripts/input/"; - string memory chainDir = string.concat(vm.toString(block.chainid), "/config.json"); - string[] memory inputs = new string[](4); - inputs[0] = "./update-config.sh"; - inputs[1] = string.concat(inputDir, chainDir); - inputs[2] = key; - inputs[3] = vm.toString(newAddress); - - vm.ffi(inputs); - } - - function getValue(string memory key) internal returns (address) { - string memory inputDir = "scripts/input/"; - string memory chainDir = string.concat(vm.toString(block.chainid), "/config.json"); - string[] memory inputs = new string[](3); - inputs[0] = "./get-value.sh"; - inputs[1] = string.concat(inputDir, chainDir); - inputs[2] = key; - - bytes memory r = vm.ffi(inputs); - address addr; - assembly { - addr := mload(add(r, 20)) - } - return addr; - } - - function getStringValue(string memory key) internal returns (string memory) { - string memory inputDir = "script/input/"; - string memory chainDir = string.concat(vm.toString(block.chainid), "/config.json"); - string[] memory inputs = new string[](3); - inputs[0] = "./get-value.sh"; - inputs[1] = string.concat(inputDir, chainDir); - inputs[2] = key; - - bytes memory r = vm.ffi(inputs); - - return string(r); - } -} diff --git a/test/linkStaking/community-vcs.test.ts b/test/linkStaking/community-vcs.test.ts index e82cc3b5..dc79ed6f 100644 --- a/test/linkStaking/community-vcs.test.ts +++ b/test/linkStaking/community-vcs.test.ts @@ -96,23 +96,24 @@ describe('CommunityVCS', () => { await rewardsController.setReward(vaults[3], toEther(7)) await rewardsController.setReward(vaults[5], toEther(8)) - await strategy.claimRewards([1, 3, 5], toEther(10)) + await strategy.claimRewards(0, 10, toEther(10)) assert.equal(fromEther(await token.balanceOf(strategy.address)), 0) await rewardsController.setReward(vaults[6], toEther(10)) await rewardsController.setReward(vaults[7], toEther(7)) await rewardsController.setReward(vaults[8], toEther(15)) - await strategy.claimRewards([6, 7, 8], toEther(10)) + await strategy.claimRewards(0, 10, toEther(10)) assert.equal(fromEther(await token.balanceOf(strategy.address)), 25) + await rewardsController.setReward(vaults[8], toEther(15)) await rewardsController.setReward(vaults[9], toEther(15)) await rewardsController.setReward(vaults[10], toEther(15)) await rewardsController.setReward(vaults[11], toEther(15)) - await strategy.claimRewards([9, 10, 11], toEther(10)) - assert.equal(fromEther(await token.balanceOf(strategy.address)), 70) + await strategy.claimRewards(9, 2, toEther(10)) + assert.equal(fromEther(await token.balanceOf(strategy.address)), 55) - await expect(strategy.claimRewards([100], 0)).to.be.reverted + await expect(strategy.claimRewards(0, 30, 0)).to.be.reverted }) }) diff --git a/test/linkStaking/operator-vcs.test.ts b/test/linkStaking/operator-vcs.test.ts index 44892358..6e2d8d13 100644 --- a/test/linkStaking/operator-vcs.test.ts +++ b/test/linkStaking/operator-vcs.test.ts @@ -44,7 +44,7 @@ describe('OperatorVCS', () => { rewardsController.address, toEther(10), toEther(100), - toEther(10000000), + toEther(10000), ])) as StakingMock let vaultImplementation = await deployImplementation('OperatorVault') @@ -71,7 +71,7 @@ describe('OperatorVCS', () => { await stakingPool.addStrategy(strategy.address) await stakingPool.setPriorityPool(accounts[0]) - for (let i = 0; i < 15; i++) { + for (let i = 0; i < 10; i++) { await strategy.addVault(accounts[0], accounts[1], pfAlertsController.address) } @@ -84,8 +84,8 @@ describe('OperatorVCS', () => { it('should be able to add vault', async () => { await strategy.addVault(accounts[1], accounts[2], accounts[5]) - assert.equal((await strategy.getVaults()).length, 16) - let vault = await ethers.getContractAt('OperatorVault', (await strategy.getVaults())[15]) + assert.equal((await strategy.getVaults()).length, 11) + let vault = await ethers.getContractAt('OperatorVault', (await strategy.getVaults())[10]) assert.equal(await vault.token(), token.address) assert.equal(await vault.stakeController(), stakingController.address) assert.equal(await vault.vaultController(), strategy.address) @@ -121,24 +121,6 @@ describe('OperatorVCS', () => { assert.equal(fromEther(await strategy.getPendingFees()), 2.5) }) - it('getMaxDeposits should work correctly', async () => { - await stakingController.setDepositLimits(toEther(1000), toEther(75000)) - await stakingPool.deposit(accounts[0], toEther(750000)) - assert.equal(fromEther(await strategy.canDeposit()), 375000) - assert.equal(fromEther(await strategy.getMaxDeposits()), 1125000) - assert.equal(fromEther(await strategy.getTotalDeposits()), 750000) - - await strategy.togglePreRelease() - assert.equal(fromEther(await strategy.canDeposit()), 105000) - assert.equal(fromEther(await strategy.getMaxDeposits()), 855000) - assert.equal(fromEther(await strategy.getTotalDeposits()), 750000) - - await strategy.togglePreRelease() - assert.equal(fromEther(await strategy.canDeposit()), 375000) - assert.equal(fromEther(await strategy.getMaxDeposits()), 1125000) - assert.equal(fromEther(await strategy.getTotalDeposits()), 750000) - }) - it('updateDeposits should work correctly', async () => { await stakingPool.deposit(accounts[0], toEther(400)) @@ -276,8 +258,8 @@ describe('OperatorVCS', () => { ) await strategy.addVault(accounts[0], ethers.constants.AddressZero, accounts[3]) - await strategy.setRewardsReceiver(15, accounts[4]) - let vault = await ethers.getContractAt('OperatorVault', (await strategy.getVaults())[15]) + await strategy.setRewardsReceiver(10, accounts[4]) + let vault = await ethers.getContractAt('OperatorVault', (await strategy.getVaults())[10]) assert.equal(await vault.rewardsReceiver(), accounts[4]) }) }) diff --git a/update-config.sh b/update-config.sh deleted file mode 100755 index f2d170e4..00000000 --- a/update-config.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Used to update the value from a JSON file after a new deployment. -if [ "$#" -ne 3 ]; then - echo "Usage: $0 json_file key value" - exit 1 -fi - -JSON_FILE="$1" -KEY="$2" -VALUE="$3" - -if [ ! -f "$JSON_FILE" ]; then - echo "Error: JSON file not found." - exit 1 -fi - -jq ". + {\"$KEY\": \"$VALUE\"}" "$JSON_FILE" >"$JSON_FILE.tmp" && mv "$JSON_FILE.tmp" "$JSON_FILE" -echo "Added $KEY with value $VALUE to $JSON_FILE" diff --git a/yarn.lock b/yarn.lock index f0d6e28d..bd3450e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1506,13 +1506,6 @@ mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/hardhat-foundry@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.1.1.tgz#db72b1f33f9cfaecc27e67f69ad436f8710162d6" - integrity sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ== - dependencies: - chalk "^2.4.2" - "@nomicfoundation/hardhat-network-helpers@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz#5e2026ddde5ca539f70a2bf498528afd08bd0827" @@ -3649,13 +3642,6 @@ cbor@^8.0.0, cbor@^8.1.0: dependencies: nofilter "^3.1.0" -cbor@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.1.tgz#b16e393d4948d44758cd54ac6151379d443b37ae" - integrity sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ== - dependencies: - nofilter "^3.1.0" - chai@^4.3.4, chai@^4.3.6: version "4.3.6" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c"