From 486cbdbc843adf79f95dcb428dc3cbc88765c3da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=BA=C3=B1ez?= Date: Tue, 26 Aug 2025 16:20:52 +0200 Subject: [PATCH 1/5] OpenZeppelin manifest after TIP-100 upgrade in March 2025 --- .openzeppelin/mainnet.json | 357 +++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index 394fd655..74efadc1 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -9,6 +9,11 @@ "address": "0x01B67b1194C75264d06F808A921228a95C765dd7", "txHash": "0x72c9e245d04959716f24aea93308747960ba716f24a88846a5b2437b1146016c", "kind": "transparent" + }, + { + "address": "0x44FFe6b958A69c838ecEF2B850f0500e7EEeE2e6", + "txHash": "0x858ad7f28f8d6715584a2008c3e35b70e09ff27159cd170f07e7fd9cc4b856da", + "kind": "transparent" } ], "impls": { @@ -601,6 +606,358 @@ } } } + }, + "d7295b83f42c5fd72f269be391208c000ba8309466811313532ee703aa931c94": { + "address": "0x9F84fDAb30a46c541BD3F7E79276Ae476143cEDa", + "txHash": "0x28d757359b754fd6ecc0ea809e4fe2ae2de2f2ae0be8466c121a6604d53a613c", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:39" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:44" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_address)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_array(t_uint128)dyn_storage)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint128)dyn_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:51" + }, + { + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)47_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:61" + }, + { + "label": "governance", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "minTStakeAmount", + "offset": 20, + "slot": "51", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "authorizationCeiling", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:105" + }, + { + "label": "legacyStakeDiscrepancyPenalty", + "offset": 0, + "slot": "53", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:108" + }, + { + "label": "legacyStakeDiscrepancyRewardMultiplier", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:110" + }, + { + "label": "notifiersTreasury", + "offset": 0, + "slot": "55", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:111" + }, + { + "label": "legacyNotificationReward", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:114" + }, + { + "label": "stakingProviders", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_struct(StakingProviderInfo)12030_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:116" + }, + { + "label": "applicationInfo", + "offset": 0, + "slot": "58", + "type": "t_mapping(t_address,t_struct(ApplicationInfo)12041_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:118" + }, + { + "label": "applications", + "offset": 0, + "slot": "59", + "type": "t_array(t_address)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:121" + }, + { + "label": "legacySlashingQueue", + "offset": 0, + "slot": "60", + "type": "t_array(t_struct(SlashingEvent)12046_storage)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:123" + }, + { + "label": "legacySlashingQueueIndex", + "offset": 0, + "slot": "61", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:127" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(SlashingEvent)12046_storage)dyn_storage": { + "label": "struct TokenStaking.SlashingEvent[]", + "numberOfBytes": "32" + }, + "t_array(t_uint128)dyn_storage": { + "label": "uint128[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_enum(ApplicationStatus)12003": { + "label": "enum TokenStaking.ApplicationStatus", + "members": [ + "NOT_APPROVED", + "APPROVED", + "PAUSED", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint128)dyn_storage)": { + "label": "mapping(address => uint128[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AppAuthorization)12035_storage)": { + "label": "mapping(address => struct TokenStaking.AppAuthorization)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(ApplicationInfo)12041_storage)": { + "label": "mapping(address => struct TokenStaking.ApplicationInfo)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(StakingProviderInfo)12030_storage)": { + "label": "mapping(address => struct TokenStaking.StakingProviderInfo)", + "numberOfBytes": "32" + }, + "t_struct(AppAuthorization)12035_storage": { + "label": "struct TokenStaking.AppAuthorization", + "members": [ + { + "label": "authorized", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "deauthorizing", + "type": "t_uint96", + "offset": 12, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ApplicationInfo)12041_storage": { + "label": "struct TokenStaking.ApplicationInfo", + "members": [ + { + "label": "status", + "type": "t_enum(ApplicationStatus)12003", + "offset": 0, + "slot": "0" + }, + { + "label": "panicButton", + "type": "t_address", + "offset": 1, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(SlashingEvent)12046_storage": { + "label": "struct TokenStaking.SlashingEvent", + "members": [ + { + "label": "stakingProvider", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint96", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(StakingProviderInfo)12030_storage": { + "label": "struct TokenStaking.StakingProviderInfo", + "members": [ + { + "label": "nuInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "owner", + "type": "t_address", + "offset": 12, + "slot": "0" + }, + { + "label": "keepInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "1" + }, + { + "label": "beneficiary", + "type": "t_address_payable", + "offset": 12, + "slot": "1" + }, + { + "label": "tStake", + "type": "t_uint96", + "offset": 0, + "slot": "2" + }, + { + "label": "authorizer", + "type": "t_address", + "offset": 12, + "slot": "2" + }, + { + "label": "authorizations", + "type": "t_mapping(t_address,t_struct(AppAuthorization)12035_storage)", + "offset": 0, + "slot": "3" + }, + { + "label": "authorizedApplications", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "startStakingTimestamp", + "type": "t_uint256", + "offset": 0, + "slot": "5" + }, + { + "label": "autoIncrease", + "type": "t_bool", + "offset": 0, + "slot": "6" + }, + { + "label": "optOutAmount", + "type": "t_uint256", + "offset": 0, + "slot": "7" + } + ], + "numberOfBytes": "256" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "label": "uint96", + "numberOfBytes": "12" + } + }, + "namespaces": {} + } } } } From efae6b31c663ce87c03cd14be873970fa065635e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=BA=C3=B1ez?= Date: Tue, 26 Aug 2025 16:22:06 +0200 Subject: [PATCH 2/5] OpenZeppelin manifest after pending TIP-100 upgrade (August 2025) --- .openzeppelin/mainnet.json | 357 +++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index 74efadc1..dcc7148a 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -14,6 +14,11 @@ "address": "0x44FFe6b958A69c838ecEF2B850f0500e7EEeE2e6", "txHash": "0x858ad7f28f8d6715584a2008c3e35b70e09ff27159cd170f07e7fd9cc4b856da", "kind": "transparent" + }, + { + "address": "0xa90e3575f37f7052a261033C69FfF17BBB18c260", + "txHash": "0xe61950ace4051bb0a88fa0148baca3b16cd6641cb13b0d036115395bb1ef3005", + "kind": "transparent" } ], "impls": { @@ -958,6 +963,358 @@ }, "namespaces": {} } + }, + "d004dfa8c5f62de5e87b6fb4dd883ccd212d99cf159438dd420902b0fc2dc788": { + "address": "0xF5a2ccFEA213cB3ff0799E0C33ea2fA3da7CBB65", + "txHash": "0xcb5a33312146afd49fcdb9f81875cca2a92efd31212533481404fa5e68de2c6d", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:39" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:44" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_address)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_array(t_uint128)dyn_storage)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint128)dyn_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:51" + }, + { + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)47_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:61" + }, + { + "label": "governance", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "minTStakeAmount", + "offset": 20, + "slot": "51", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "authorizationCeiling", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:105" + }, + { + "label": "legacyStakeDiscrepancyPenalty", + "offset": 0, + "slot": "53", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:108" + }, + { + "label": "legacyStakeDiscrepancyRewardMultiplier", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:110" + }, + { + "label": "notifiersTreasury", + "offset": 0, + "slot": "55", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:111" + }, + { + "label": "legacyNotificationReward", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:114" + }, + { + "label": "stakingProviders", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_struct(StakingProviderInfo)4063_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:116" + }, + { + "label": "applicationInfo", + "offset": 0, + "slot": "58", + "type": "t_mapping(t_address,t_struct(ApplicationInfo)4074_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:118" + }, + { + "label": "applications", + "offset": 0, + "slot": "59", + "type": "t_array(t_address)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:121" + }, + { + "label": "legacySlashingQueue", + "offset": 0, + "slot": "60", + "type": "t_array(t_struct(SlashingEvent)4079_storage)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:123" + }, + { + "label": "legacySlashingQueueIndex", + "offset": 0, + "slot": "61", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:127" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(SlashingEvent)4079_storage)dyn_storage": { + "label": "struct TokenStaking.SlashingEvent[]", + "numberOfBytes": "32" + }, + "t_array(t_uint128)dyn_storage": { + "label": "uint128[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_enum(ApplicationStatus)4036": { + "label": "enum TokenStaking.ApplicationStatus", + "members": [ + "NOT_APPROVED", + "APPROVED", + "PAUSED", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint128)dyn_storage)": { + "label": "mapping(address => uint128[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AppAuthorization)4068_storage)": { + "label": "mapping(address => struct TokenStaking.AppAuthorization)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(ApplicationInfo)4074_storage)": { + "label": "mapping(address => struct TokenStaking.ApplicationInfo)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(StakingProviderInfo)4063_storage)": { + "label": "mapping(address => struct TokenStaking.StakingProviderInfo)", + "numberOfBytes": "32" + }, + "t_struct(AppAuthorization)4068_storage": { + "label": "struct TokenStaking.AppAuthorization", + "members": [ + { + "label": "authorized", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "deauthorizing", + "type": "t_uint96", + "offset": 12, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ApplicationInfo)4074_storage": { + "label": "struct TokenStaking.ApplicationInfo", + "members": [ + { + "label": "status", + "type": "t_enum(ApplicationStatus)4036", + "offset": 0, + "slot": "0" + }, + { + "label": "panicButton", + "type": "t_address", + "offset": 1, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(SlashingEvent)4079_storage": { + "label": "struct TokenStaking.SlashingEvent", + "members": [ + { + "label": "stakingProvider", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint96", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(StakingProviderInfo)4063_storage": { + "label": "struct TokenStaking.StakingProviderInfo", + "members": [ + { + "label": "nuInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "owner", + "type": "t_address", + "offset": 12, + "slot": "0" + }, + { + "label": "keepInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "1" + }, + { + "label": "beneficiary", + "type": "t_address_payable", + "offset": 12, + "slot": "1" + }, + { + "label": "tStake", + "type": "t_uint96", + "offset": 0, + "slot": "2" + }, + { + "label": "authorizer", + "type": "t_address", + "offset": 12, + "slot": "2" + }, + { + "label": "authorizations", + "type": "t_mapping(t_address,t_struct(AppAuthorization)4068_storage)", + "offset": 0, + "slot": "3" + }, + { + "label": "authorizedApplications", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "startStakingTimestamp", + "type": "t_uint256", + "offset": 0, + "slot": "5" + }, + { + "label": "autoIncrease", + "type": "t_bool", + "offset": 0, + "slot": "6" + }, + { + "label": "optOutAmount", + "type": "t_uint256", + "offset": 0, + "slot": "7" + } + ], + "numberOfBytes": "256" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "label": "uint96", + "numberOfBytes": "12" + } + }, + "namespaces": {} + } } } } From c41bd214064f8ca769bb7ec6c144f5965149504d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=BA=C3=B1ez?= Date: Tue, 26 Aug 2025 13:03:22 +0200 Subject: [PATCH 3/5] Add hardhat-verify dependency to verify TokenStaking Deployment and verification steps: > npx hardhat deploy --tags TokenStaking --network mainnet > npx hardhat verify --network mainnet "0xcdf7028ceab81fa0c6971208e83fa7872994bee5" --- hardhat.config.ts | 5 +++++ package.json | 1 + 2 files changed, 6 insertions(+) diff --git a/hardhat.config.ts b/hardhat.config.ts index 899cc0a2..ad368136 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -102,6 +102,11 @@ const config: HardhatUserConfig = { pages: "files", // `single`, `items` or `files` exclude: ["./test"], }, + etherscan: { + // Your API key for Etherscan + // Obtain one at https://etherscan.io/ + apiKey: process.env.ETHERSCAN_API_KEY || "", + }, } export default config diff --git a/package.json b/package.json index b21ae812..f3cdfc43 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "typescript": "^4.4.4" }, "dependencies": { + "@nomicfoundation/hardhat-verify": "^2.1.0", "@openzeppelin/contracts": "~4.5.0", "@openzeppelin/contracts-upgradeable": "~4.5.2", "@thesis/solidity-contracts": "github:thesis/solidity-contracts#4985bcf" From f9b43a5571fc14b56da4ccde37071c2df2d01ab3 Mon Sep 17 00:00:00 2001 From: maclane Date: Tue, 8 Sep 2026 16:28:11 -0500 Subject: [PATCH 4/5] Keep TIP-100 deployment records separate from verification modernization --- hardhat.config.ts | 5 ----- package.json | 1 - 2 files changed, 6 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index ad368136..899cc0a2 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -102,11 +102,6 @@ const config: HardhatUserConfig = { pages: "files", // `single`, `items` or `files` exclude: ["./test"], }, - etherscan: { - // Your API key for Etherscan - // Obtain one at https://etherscan.io/ - apiKey: process.env.ETHERSCAN_API_KEY || "", - }, } export default config diff --git a/package.json b/package.json index f3cdfc43..b21ae812 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "typescript": "^4.4.4" }, "dependencies": { - "@nomicfoundation/hardhat-verify": "^2.1.0", "@openzeppelin/contracts": "~4.5.0", "@openzeppelin/contracts-upgradeable": "~4.5.2", "@thesis/solidity-contracts": "github:thesis/solidity-contracts#4985bcf" From 487e5e7dd80f28018f8adfb1cb62be2d8300d793 Mon Sep 17 00:00:00 2001 From: maclane Date: Tue, 8 Sep 2026 16:41:14 -0500 Subject: [PATCH 5/5] Preserve 2023 TokenStaking deployment records from #140 Copy both historical implementation records unchanged from advisory-fix-1 at 6ec3ad0. Validate the creation transactions, constructor arguments, implementation version keys, compiled bytecode, and storage layouts before retiring the obsolete mainnet upgrade proposal. --- .openzeppelin/mainnet.json | 687 +++++++++++++++++++++++++++++++++++++ 1 file changed, 687 insertions(+) diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index dcc7148a..537141eb 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -612,6 +612,693 @@ } } }, + "40b8240693018995484efa92b24b6696ac17c23f628218c008afd9037f6ec1fa": { + "address": "0x409bf77A8E3Fe384497227eA508029B5364933DE", + "txHash": "0x512a709abe19dbf5a9985dbb64b27089134604e50aaee01732a7029b3f6f165b", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:39" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:44" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_address)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_array(t_uint128)dyn_storage)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint128)dyn_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:51" + }, + { + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)47_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:61" + }, + { + "label": "governance", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:114" + }, + { + "label": "minTStakeAmount", + "offset": 20, + "slot": "51", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:115" + }, + { + "label": "authorizationCeiling", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:116" + }, + { + "label": "stakeDiscrepancyPenalty", + "offset": 0, + "slot": "53", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:118" + }, + { + "label": "stakeDiscrepancyRewardMultiplier", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:119" + }, + { + "label": "notifiersTreasury", + "offset": 0, + "slot": "55", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:121" + }, + { + "label": "notificationReward", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:122" + }, + { + "label": "stakingProviders", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_struct(StakingProviderInfo)12815_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:125" + }, + { + "label": "applicationInfo", + "offset": 0, + "slot": "58", + "type": "t_mapping(t_address,t_struct(ApplicationInfo)12826_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:126" + }, + { + "label": "applications", + "offset": 0, + "slot": "59", + "type": "t_array(t_address)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:128" + }, + { + "label": "slashingQueue", + "offset": 0, + "slot": "60", + "type": "t_array(t_struct(SlashingEvent)12831_storage)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:130" + }, + { + "label": "slashingQueueIndex", + "offset": 0, + "slot": "61", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:131" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(SlashingEvent)12831_storage)dyn_storage": { + "label": "struct TokenStaking.SlashingEvent[]", + "numberOfBytes": "32" + }, + "t_array(t_uint128)dyn_storage": { + "label": "uint128[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_enum(ApplicationStatus)12792": { + "label": "enum TokenStaking.ApplicationStatus", + "members": [ + "NOT_APPROVED", + "APPROVED", + "PAUSED", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint128)dyn_storage)": { + "label": "mapping(address => uint128[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AppAuthorization)12820_storage)": { + "label": "mapping(address => struct TokenStaking.AppAuthorization)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(ApplicationInfo)12826_storage)": { + "label": "mapping(address => struct TokenStaking.ApplicationInfo)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(StakingProviderInfo)12815_storage)": { + "label": "mapping(address => struct TokenStaking.StakingProviderInfo)", + "numberOfBytes": "32" + }, + "t_struct(AppAuthorization)12820_storage": { + "label": "struct TokenStaking.AppAuthorization", + "members": [ + { + "label": "authorized", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "deauthorizing", + "type": "t_uint96", + "offset": 12, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ApplicationInfo)12826_storage": { + "label": "struct TokenStaking.ApplicationInfo", + "members": [ + { + "label": "status", + "type": "t_enum(ApplicationStatus)12792", + "offset": 0, + "slot": "0" + }, + { + "label": "panicButton", + "type": "t_address", + "offset": 1, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(SlashingEvent)12831_storage": { + "label": "struct TokenStaking.SlashingEvent", + "members": [ + { + "label": "stakingProvider", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint96", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(StakingProviderInfo)12815_storage": { + "label": "struct TokenStaking.StakingProviderInfo", + "members": [ + { + "label": "nuInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "owner", + "type": "t_address", + "offset": 12, + "slot": "0" + }, + { + "label": "keepInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "1" + }, + { + "label": "beneficiary", + "type": "t_address_payable", + "offset": 12, + "slot": "1" + }, + { + "label": "tStake", + "type": "t_uint96", + "offset": 0, + "slot": "2" + }, + { + "label": "authorizer", + "type": "t_address", + "offset": 12, + "slot": "2" + }, + { + "label": "authorizations", + "type": "t_mapping(t_address,t_struct(AppAuthorization)12820_storage)", + "offset": 0, + "slot": "3" + }, + { + "label": "authorizedApplications", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "startStakingTimestamp", + "type": "t_uint256", + "offset": 0, + "slot": "5" + } + ], + "numberOfBytes": "192" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "label": "uint96", + "numberOfBytes": "12" + } + } + } + }, + "3579d70bc8c21d7cbecdefc34d616f4dfaf506e9c53438abaa4565b75c860547": { + "address": "0x4d333B9ECB75252342d82B7aF3610951f81e0888", + "txHash": "0xe05e8db03259711ea7c6bd785517f7e5eadf0bca7e0670bd557b8631f3f95cbc", + "layout": { + "solcVersion": "0.8.9", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:39" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:44" + }, + { + "label": "_delegates", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_address)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_checkpoints", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_array(t_uint128)dyn_storage)", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:49" + }, + { + "label": "_totalSupplyCheckpoints", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint128)dyn_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:51" + }, + { + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)47_storage", + "contract": "Checkpoints", + "src": "contracts/governance/Checkpoints.sol:61" + }, + { + "label": "governance", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "minTStakeAmount", + "offset": 20, + "slot": "51", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:104" + }, + { + "label": "authorizationCeiling", + "offset": 0, + "slot": "52", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:105" + }, + { + "label": "legacyStakeDiscrepancyPenalty", + "offset": 0, + "slot": "53", + "type": "t_uint96", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:111", + "renamedFrom": "stakeDiscrepancyPenalty" + }, + { + "label": "legacyStakeDiscrepancyRewardMultiplier", + "offset": 0, + "slot": "54", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:120", + "renamedFrom": "stakeDiscrepancyRewardMultiplier" + }, + { + "label": "notifiersTreasury", + "offset": 0, + "slot": "55", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:122" + }, + { + "label": "notificationReward", + "offset": 0, + "slot": "56", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:123" + }, + { + "label": "stakingProviders", + "offset": 0, + "slot": "57", + "type": "t_mapping(t_address,t_struct(StakingProviderInfo)4178_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:126" + }, + { + "label": "applicationInfo", + "offset": 0, + "slot": "58", + "type": "t_mapping(t_address,t_struct(ApplicationInfo)4189_storage)", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:127" + }, + { + "label": "applications", + "offset": 0, + "slot": "59", + "type": "t_array(t_address)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:129" + }, + { + "label": "slashingQueue", + "offset": 0, + "slot": "60", + "type": "t_array(t_struct(SlashingEvent)4194_storage)dyn_storage", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:131" + }, + { + "label": "slashingQueueIndex", + "offset": 0, + "slot": "61", + "type": "t_uint256", + "contract": "TokenStaking", + "src": "contracts/staking/TokenStaking.sol:132" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(SlashingEvent)4194_storage)dyn_storage": { + "label": "struct TokenStaking.SlashingEvent[]", + "numberOfBytes": "32" + }, + "t_array(t_uint128)dyn_storage": { + "label": "uint128[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_enum(ApplicationStatus)4153": { + "label": "enum TokenStaking.ApplicationStatus", + "members": [ + "NOT_APPROVED", + "APPROVED", + "PAUSED", + "DISABLED" + ], + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_address)": { + "label": "mapping(address => address)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_array(t_uint128)dyn_storage)": { + "label": "mapping(address => uint128[])", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(AppAuthorization)4183_storage)": { + "label": "mapping(address => struct TokenStaking.AppAuthorization)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(ApplicationInfo)4189_storage)": { + "label": "mapping(address => struct TokenStaking.ApplicationInfo)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(StakingProviderInfo)4178_storage)": { + "label": "mapping(address => struct TokenStaking.StakingProviderInfo)", + "numberOfBytes": "32" + }, + "t_struct(AppAuthorization)4183_storage": { + "label": "struct TokenStaking.AppAuthorization", + "members": [ + { + "label": "authorized", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "deauthorizing", + "type": "t_uint96", + "offset": 12, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(ApplicationInfo)4189_storage": { + "label": "struct TokenStaking.ApplicationInfo", + "members": [ + { + "label": "status", + "type": "t_enum(ApplicationStatus)4153", + "offset": 0, + "slot": "0" + }, + { + "label": "panicButton", + "type": "t_address", + "offset": 1, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(SlashingEvent)4194_storage": { + "label": "struct TokenStaking.SlashingEvent", + "members": [ + { + "label": "stakingProvider", + "type": "t_address", + "offset": 0, + "slot": "0" + }, + { + "label": "amount", + "type": "t_uint96", + "offset": 20, + "slot": "0" + } + ], + "numberOfBytes": "32" + }, + "t_struct(StakingProviderInfo)4178_storage": { + "label": "struct TokenStaking.StakingProviderInfo", + "members": [ + { + "label": "nuInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "0" + }, + { + "label": "owner", + "type": "t_address", + "offset": 12, + "slot": "0" + }, + { + "label": "keepInTStake", + "type": "t_uint96", + "offset": 0, + "slot": "1" + }, + { + "label": "beneficiary", + "type": "t_address_payable", + "offset": 12, + "slot": "1" + }, + { + "label": "tStake", + "type": "t_uint96", + "offset": 0, + "slot": "2" + }, + { + "label": "authorizer", + "type": "t_address", + "offset": 12, + "slot": "2" + }, + { + "label": "authorizations", + "type": "t_mapping(t_address,t_struct(AppAuthorization)4183_storage)", + "offset": 0, + "slot": "3" + }, + { + "label": "authorizedApplications", + "type": "t_array(t_address)dyn_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "startStakingTimestamp", + "type": "t_uint256", + "offset": 0, + "slot": "5" + }, + { + "label": "autoIncrease", + "type": "t_bool", + "offset": 0, + "slot": "6" + } + ], + "numberOfBytes": "224" + }, + "t_uint128": { + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "label": "uint96", + "numberOfBytes": "12" + } + }, + "namespaces": {} + } + }, "d7295b83f42c5fd72f269be391208c000ba8309466811313532ee703aa931c94": { "address": "0x9F84fDAb30a46c541BD3F7E79276Ae476143cEDa", "txHash": "0x28d757359b754fd6ecc0ea809e4fe2ae2de2f2ae0be8466c121a6604d53a613c",