diff --git a/interfaces/Accounting.json b/interfaces/Accounting.json index 95eb78cc..a6a82d3a 100644 --- a/interfaces/Accounting.json +++ b/interfaces/Accounting.json @@ -1,327 +1 @@ -[ - { - "inputs": [ - { - "internalType": "contract ILidoLocator", - "name": "_lidoLocator", - "type": "address" - }, - { - "internalType": "contract ILido", - "name": "_lido", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "reportTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "upperBoundTimestamp", - "type": "uint256" - } - ], - "name": "IncorrectReportTimestamp", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "reportValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxValidators", - "type": "uint256" - } - ], - "name": "IncorrectReportValidators", - "type": "error" - }, - { - "inputs": [], - "name": "InternalSharesCantBeZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "operation", - "type": "string" - }, - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "NotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "LIDO", - "outputs": [ - { - "internalType": "contract ILido", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LIDO_LOCATOR", - "outputs": [ - { - "internalType": "contract ILidoLocator", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeElapsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "clValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "clBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawalVaultBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "elRewardsVaultBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesRequestedToBurn", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "withdrawalFinalizationBatches", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "simulatedShareRate", - "type": "uint256" - } - ], - "internalType": "struct ReportValues", - "name": "_report", - "type": "tuple" - } - ], - "name": "handleOracleReport", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timeElapsed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "clValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "clBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawalVaultBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "elRewardsVaultBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesRequestedToBurn", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "withdrawalFinalizationBatches", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "simulatedShareRate", - "type": "uint256" - } - ], - "internalType": "struct ReportValues", - "name": "_report", - "type": "tuple" - } - ], - "name": "simulateOracleReport", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "withdrawalsVaultTransfer", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "elRewardsVaultTransfer", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "etherToFinalizeWQ", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesToFinalizeWQ", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesToBurnForWithdrawals", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalSharesToBurn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sharesToMintAsFees", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address[]", - "name": "moduleFeeRecipients", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "moduleIds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "moduleSharesToMint", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "treasurySharesToMint", - "type": "uint256" - } - ], - "internalType": "struct Accounting.FeeDistribution", - "name": "feeDistribution", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "principalClBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preTotalShares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "preTotalPooledEther", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "postInternalShares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "postInternalEther", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "postTotalShares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "postTotalPooledEther", - "type": "uint256" - } - ], - "internalType": "struct Accounting.CalculatedValues", - "name": "update", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - } - ] +[{"inputs":[{"internalType":"contract ILidoLocator","name":"_lidoLocator","type":"address"},{"internalType":"contract ILido","name":"_lido","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"reportTimestamp","type":"uint256"},{"internalType":"uint256","name":"upperBoundTimestamp","type":"uint256"}],"name":"IncorrectReportTimestamp","type":"error"},{"inputs":[],"name":"InternalSharesCantBeZero","type":"error"},{"inputs":[{"internalType":"string","name":"operation","type":"string"},{"internalType":"address","name":"addr","type":"address"}],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"contract ILido","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO_LOCATOR","outputs":[{"internalType":"contract ILidoLocator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"timeElapsed","type":"uint256"},{"internalType":"uint256","name":"clValidatorsBalance","type":"uint256"},{"internalType":"uint256","name":"clPendingBalance","type":"uint256"},{"internalType":"uint256","name":"withdrawalVaultBalance","type":"uint256"},{"internalType":"uint256","name":"elRewardsVaultBalance","type":"uint256"},{"internalType":"uint256","name":"sharesRequestedToBurn","type":"uint256"},{"internalType":"uint256[]","name":"withdrawalFinalizationBatches","type":"uint256[]"},{"internalType":"uint256","name":"simulatedShareRate","type":"uint256"}],"internalType":"struct ReportValues","name":"_report","type":"tuple"}],"name":"handleOracleReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"timeElapsed","type":"uint256"},{"internalType":"uint256","name":"clValidatorsBalance","type":"uint256"},{"internalType":"uint256","name":"clPendingBalance","type":"uint256"},{"internalType":"uint256","name":"withdrawalVaultBalance","type":"uint256"},{"internalType":"uint256","name":"elRewardsVaultBalance","type":"uint256"},{"internalType":"uint256","name":"sharesRequestedToBurn","type":"uint256"},{"internalType":"uint256[]","name":"withdrawalFinalizationBatches","type":"uint256[]"},{"internalType":"uint256","name":"simulatedShareRate","type":"uint256"}],"internalType":"struct ReportValues","name":"_report","type":"tuple"}],"name":"simulateOracleReport","outputs":[{"components":[{"internalType":"uint256","name":"withdrawalsVaultTransfer","type":"uint256"},{"internalType":"uint256","name":"elRewardsVaultTransfer","type":"uint256"},{"internalType":"uint256","name":"etherToFinalizeWQ","type":"uint256"},{"internalType":"uint256","name":"sharesToFinalizeWQ","type":"uint256"},{"internalType":"uint256","name":"sharesToBurnForWithdrawals","type":"uint256"},{"internalType":"uint256","name":"totalSharesToBurn","type":"uint256"},{"internalType":"uint256","name":"sharesToMintAsFees","type":"uint256"},{"components":[{"internalType":"address[]","name":"moduleFeeRecipients","type":"address[]"},{"internalType":"uint256[]","name":"moduleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"moduleSharesToMint","type":"uint256[]"},{"internalType":"uint256","name":"treasurySharesToMint","type":"uint256"}],"internalType":"struct Accounting.FeeDistribution","name":"feeDistribution","type":"tuple"},{"internalType":"uint256","name":"principalClBalance","type":"uint256"},{"internalType":"uint256","name":"preTotalShares","type":"uint256"},{"internalType":"uint256","name":"preTotalPooledEther","type":"uint256"},{"internalType":"uint256","name":"postInternalShares","type":"uint256"},{"internalType":"uint256","name":"postInternalEther","type":"uint256"},{"internalType":"uint256","name":"postTotalShares","type":"uint256"},{"internalType":"uint256","name":"postTotalPooledEther","type":"uint256"}],"internalType":"struct Accounting.CalculatedValues","name":"update","type":"tuple"}],"stateMutability":"view","type":"function"}] diff --git a/interfaces/CSParametersRegistry.json b/interfaces/CSParametersRegistry.json index 8a41979f..120a2270 100644 --- a/interfaces/CSParametersRegistry.json +++ b/interfaces/CSParametersRegistry.json @@ -1 +1 @@ -[{"type":"constructor","inputs":[{"name":"queueLowestPriority","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"QUEUE_LEGACY_PRIORITY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"QUEUE_LOWEST_PRIORITY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultAllowedExitDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultBadPerformancePenalty","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultElRewardsStealingAdditionalFine","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultExitDelayPenalty","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultKeyRemovalCharge","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultKeysLimit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultMaxWithdrawalRequestFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultPerformanceCoefficients","inputs":[],"outputs":[{"name":"attestationsWeight","type":"uint32","internalType":"uint32"},{"name":"blocksWeight","type":"uint32","internalType":"uint32"},{"name":"syncWeight","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"defaultPerformanceLeeway","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultQueueConfig","inputs":[],"outputs":[{"name":"priority","type":"uint32","internalType":"uint32"},{"name":"maxDeposits","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"defaultRewardShare","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultStrikesParams","inputs":[],"outputs":[{"name":"lifetime","type":"uint32","internalType":"uint32"},{"name":"threshold","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getElRewardsStealingAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"fine","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getExitDelayPenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getInitializedVersion","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"limit","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple[]","internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"queuePriority","type":"uint32","internalType":"uint32"},{"name":"maxDeposits","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple[]","internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getRoleMember","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getRoleMemberCount","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"admin","type":"address","internalType":"address"},{"name":"data","type":"tuple","internalType":"struct ICSParametersRegistry.InitializationData","components":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"},{"name":"elRewardsStealingAdditionalFine","type":"uint256","internalType":"uint256"},{"name":"keysLimit","type":"uint256","internalType":"uint256"},{"name":"rewardShare","type":"uint256","internalType":"uint256"},{"name":"performanceLeeway","type":"uint256","internalType":"uint256"},{"name":"strikesLifetime","type":"uint256","internalType":"uint256"},{"name":"strikesThreshold","type":"uint256","internalType":"uint256"},{"name":"defaultQueuePriority","type":"uint256","internalType":"uint256"},{"name":"defaultQueueMaxDeposits","type":"uint256","internalType":"uint256"},{"name":"badPerformancePenalty","type":"uint256","internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"},{"name":"defaultAllowedExitDelay","type":"uint256","internalType":"uint256"},{"name":"defaultExitDelayPenalty","type":"uint256","internalType":"uint256"},{"name":"defaultMaxWithdrawalRequestFee","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"delay","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultAllowedExitDelay","inputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultBadPerformancePenalty","inputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultElRewardsStealingAdditionalFine","inputs":[{"name":"fine","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultExitDelayPenalty","inputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultKeyRemovalCharge","inputs":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultKeysLimit","inputs":[{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultMaxWithdrawalRequestFee","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultPerformanceCoefficients","inputs":[{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultPerformanceLeeway","inputs":[{"name":"leeway","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultQueueConfig","inputs":[{"name":"priority","type":"uint256","internalType":"uint256"},{"name":"maxDeposits","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultRewardShare","inputs":[{"name":"share","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultStrikesParams","inputs":[{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setElRewardsStealingAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"fine","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setExitDelayPenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"data","type":"tuple[]","internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"priority","type":"uint256","internalType":"uint256"},{"name":"maxDeposits","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"data","type":"tuple[]","internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unsetAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetElRewardsStealingAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetExitDelayPenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetMaxWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AllowedExitDelaySet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"delay","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AllowedExitDelayUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BadPerformancePenaltySet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BadPerformancePenaltyUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultAllowedExitDelaySet","inputs":[{"name":"delay","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultBadPerformancePenaltySet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultElRewardsStealingAdditionalFineSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultExitDelayPenaltySet","inputs":[{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultKeyRemovalChargeSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultKeysLimitSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultMaxWithdrawalRequestFeeSet","inputs":[{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultPerformanceCoefficientsSet","inputs":[{"name":"attestationsWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blocksWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"syncWeight","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultPerformanceLeewaySet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultQueueConfigSet","inputs":[{"name":"priority","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxDeposits","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultRewardShareSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultStrikesParamsSet","inputs":[{"name":"lifetime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"threshold","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ElRewardsStealingAdditionalFineSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"fine","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ElRewardsStealingAdditionalFineUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ExitDelayPenaltySet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ExitDelayPenaltyUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"KeyRemovalChargeSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"keyRemovalCharge","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeyRemovalChargeUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeysLimitSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"limit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeysLimitUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MaxWithdrawalRequestFeeSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MaxWithdrawalRequestFeeUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceCoefficientsSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blocksWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"syncWeight","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceCoefficientsUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceLeewayDataSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"tuple[]","indexed":false,"internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"PerformanceLeewayDataUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"QueueConfigSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"priority","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxDeposits","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"QueueConfigUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardShareDataSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"tuple[]","indexed":false,"internalType":"struct ICSParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"RewardShareDataUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StrikesParamsSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"lifetime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"threshold","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StrikesParamsUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidAllowedExitDelay","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidKeyNumberValueIntervals","inputs":[]},{"type":"error","name":"InvalidPerformanceCoefficients","inputs":[]},{"type":"error","name":"InvalidPerformanceLeewayData","inputs":[]},{"type":"error","name":"InvalidRewardShareData","inputs":[]},{"type":"error","name":"InvalidStrikesParams","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"QueueCannotBeUsed","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ZeroAdminAddress","inputs":[]},{"type":"error","name":"ZeroMaxDeposits","inputs":[]},{"type":"error","name":"ZeroQueueLowestPriority","inputs":[]}] +[{"type":"constructor","inputs":[{"name":"queueLowestPriority","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_CURVE_PARAMETERS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_KEYS_LIMIT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_PERFORMANCE_PARAMETERS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_QUEUE_CONFIG_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_REWARD_SHARE_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MANAGE_VALIDATOR_EXIT_PARAMETERS_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"QUEUE_LOWEST_PRIORITY","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultAllowedExitDelay","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultBadPerformancePenalty","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultExitDelayFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultGeneralDelayedPenaltyAdditionalFine","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultKeyRemovalCharge","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultKeysLimit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultMaxElWithdrawalRequestFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultPerformanceCoefficients","inputs":[],"outputs":[{"name":"attestationsWeight","type":"uint32","internalType":"uint32"},{"name":"blocksWeight","type":"uint32","internalType":"uint32"},{"name":"syncWeight","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"defaultPerformanceLeeway","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultQueueConfig","inputs":[],"outputs":[{"name":"priority","type":"uint32","internalType":"uint32"},{"name":"maxDeposits","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"defaultRewardShare","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"defaultStrikesParams","inputs":[],"outputs":[{"name":"lifetime","type":"uint32","internalType":"uint32"},{"name":"threshold","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"finalizeUpgradeV3","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurveParameters","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"params","type":"tuple","internalType":"struct IParametersRegistry.CurveParameters","components":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"},{"name":"generalDelayedPenaltyAdditionalFine","type":"uint256","internalType":"uint256"},{"name":"keysLimit","type":"uint256","internalType":"uint256"},{"name":"queuePriority","type":"uint32","internalType":"uint32"},{"name":"queueMaxDeposits","type":"uint32","internalType":"uint32"},{"name":"rewardShareData","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"performanceLeewayData","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"name":"strikesLifetime","type":"uint256","internalType":"uint256"},{"name":"strikesThreshold","type":"uint256","internalType":"uint256"},{"name":"badPerformancePenalty","type":"uint256","internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"},{"name":"allowedExitDelay","type":"uint256","internalType":"uint256"},{"name":"exitDelayFee","type":"uint256","internalType":"uint256"},{"name":"maxElWithdrawalRequestFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getExitDelayFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getGeneralDelayedPenaltyAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"fine","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getInitializedVersion","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"limit","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxElWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"queuePriority","type":"uint32","internalType":"uint32"},{"name":"maxDeposits","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"getRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"data","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getRoleMember","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getRoleMemberCount","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleMembers","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"admin","type":"address","internalType":"address"},{"name":"data","type":"tuple","internalType":"struct IParametersRegistry.InitializationData","components":[{"name":"defaultKeyRemovalCharge","type":"uint256","internalType":"uint256"},{"name":"defaultGeneralDelayedPenaltyAdditionalFine","type":"uint256","internalType":"uint256"},{"name":"defaultKeysLimit","type":"uint256","internalType":"uint256"},{"name":"defaultRewardShare","type":"uint256","internalType":"uint256"},{"name":"defaultPerformanceLeeway","type":"uint256","internalType":"uint256"},{"name":"defaultStrikesLifetime","type":"uint256","internalType":"uint256"},{"name":"defaultStrikesThreshold","type":"uint256","internalType":"uint256"},{"name":"defaultQueuePriority","type":"uint256","internalType":"uint256"},{"name":"defaultQueueMaxDeposits","type":"uint256","internalType":"uint256"},{"name":"defaultBadPerformancePenalty","type":"uint256","internalType":"uint256"},{"name":"defaultAttestationsWeight","type":"uint256","internalType":"uint256"},{"name":"defaultBlocksWeight","type":"uint256","internalType":"uint256"},{"name":"defaultSyncWeight","type":"uint256","internalType":"uint256"},{"name":"defaultAllowedExitDelay","type":"uint256","internalType":"uint256"},{"name":"defaultExitDelayFee","type":"uint256","internalType":"uint256"},{"name":"defaultMaxElWithdrawalRequestFee","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"delay","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultAllowedExitDelay","inputs":[{"name":"delay","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultBadPerformancePenalty","inputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultExitDelayFee","inputs":[{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultGeneralDelayedPenaltyAdditionalFine","inputs":[{"name":"fine","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultKeyRemovalCharge","inputs":[{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultKeysLimit","inputs":[{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultMaxElWithdrawalRequestFee","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultPerformanceCoefficients","inputs":[{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultPerformanceLeeway","inputs":[{"name":"leeway","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultQueueConfig","inputs":[{"name":"priority","type":"uint256","internalType":"uint256"},{"name":"maxDeposits","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultRewardShare","inputs":[{"name":"share","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultStrikesParams","inputs":[{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setExitDelayFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"penalty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setGeneralDelayedPenaltyAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"fine","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"keyRemovalCharge","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxElWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","internalType":"uint256"},{"name":"blocksWeight","type":"uint256","internalType":"uint256"},{"name":"syncWeight","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"data","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"priority","type":"uint256","internalType":"uint256"},{"name":"maxDeposits","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"data","type":"tuple[]","internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"},{"name":"lifetime","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unsetAllowedExitDelay","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetBadPerformancePenalty","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetExitDelayFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetGeneralDelayedPenaltyAdditionalFine","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetKeyRemovalCharge","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetKeysLimit","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetMaxElWithdrawalRequestFee","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetPerformanceCoefficients","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetPerformanceLeewayData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetQueueConfig","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetRewardShareData","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unsetStrikesParams","inputs":[{"name":"curveId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AllowedExitDelaySet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"delay","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AllowedExitDelayUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BadPerformancePenaltySet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BadPerformancePenaltyUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultAllowedExitDelaySet","inputs":[{"name":"delay","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultBadPerformancePenaltySet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultExitDelayFeeSet","inputs":[{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultGeneralDelayedPenaltyAdditionalFineSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultKeyRemovalChargeSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultKeysLimitSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultMaxElWithdrawalRequestFeeSet","inputs":[{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultPerformanceCoefficientsSet","inputs":[{"name":"attestationsWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blocksWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"syncWeight","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultPerformanceLeewaySet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultQueueConfigSet","inputs":[{"name":"priority","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxDeposits","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultRewardShareSet","inputs":[{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefaultStrikesParamsSet","inputs":[{"name":"lifetime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"threshold","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ExitDelayFeeSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"penalty","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ExitDelayFeeUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"GeneralDelayedPenaltyAdditionalFineSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"fine","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"GeneralDelayedPenaltyAdditionalFineUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"KeyRemovalChargeSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"keyRemovalCharge","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeyRemovalChargeUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeysLimitSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"limit","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"KeysLimitUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MaxElWithdrawalRequestFeeSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"MaxElWithdrawalRequestFeeUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceCoefficientsSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"attestationsWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"blocksWeight","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"syncWeight","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceCoefficientsUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"PerformanceLeewayDataSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"tuple[]","indexed":false,"internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"PerformanceLeewayDataUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"QueueConfigSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"priority","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxDeposits","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"QueueConfigUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RewardShareDataSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"data","type":"tuple[]","indexed":false,"internalType":"struct IParametersRegistry.KeyNumberValueInterval[]","components":[{"name":"minKeyNumber","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"}]}],"anonymous":false},{"type":"event","name":"RewardShareDataUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StrikesParamsSet","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"lifetime","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"threshold","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StrikesParamsUnset","inputs":[{"name":"curveId","type":"uint256","indexed":true,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidAllowedExitDelay","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidKeyNumberValueIntervals","inputs":[]},{"type":"error","name":"InvalidPerformanceCoefficients","inputs":[]},{"type":"error","name":"InvalidPerformanceLeewayData","inputs":[]},{"type":"error","name":"InvalidRewardShareData","inputs":[]},{"type":"error","name":"InvalidStrikesParams","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"QueueCannotBeUsed","inputs":[]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ZeroAdminAddress","inputs":[]},{"type":"error","name":"ZeroMaxDeposits","inputs":[]}] diff --git a/interfaces/CircuitBreaker.json b/interfaces/CircuitBreaker.json new file mode 100644 index 00000000..b05cf2e9 --- /dev/null +++ b/interfaces/CircuitBreaker.json @@ -0,0 +1,506 @@ +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_minPauseDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_maxPauseDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_minHeartbeatInterval", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_maxHeartbeatInterval", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_initialPauseDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_initialHeartbeatInterval", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ADMIN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_HEARTBEAT_INTERVAL", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_PAUSE_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MIN_HEARTBEAT_INTERVAL", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MIN_PAUSE_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPausableCount", + "inputs": [ + { + "name": "_pauser", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPausables", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPauser", + "inputs": [ + { + "name": "_pausable", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "heartbeat", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "heartbeatExpiry", + "inputs": [ + { + "name": "pauser", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "timestamp", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "heartbeatInterval", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isPauserLive", + "inputs": [ + { + "name": "_pauser", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [ + { + "name": "_pausable", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pauseDuration", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerPauser", + "inputs": [ + { + "name": "_pausable", + "type": "address", + "internalType": "address" + }, + { + "name": "_newPauser", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setHeartbeatInterval", + "inputs": [ + { + "name": "_newHeartbeatInterval", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauseDuration", + "inputs": [ + { + "name": "_newPauseDuration", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "CircuitBreakerInitialized", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "minPauseDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "maxPauseDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "minHeartbeatInterval", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "maxHeartbeatInterval", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HeartbeatIntervalUpdated", + "inputs": [ + { + "name": "previousHeartbeatInterval", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newHeartbeatInterval", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "HeartbeatUpdated", + "inputs": [ + { + "name": "pauser", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newHeartbeatExpiry", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauseDurationUpdated", + "inputs": [ + { + "name": "previousPauseDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newPauseDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauseTriggered", + "inputs": [ + { + "name": "pausable", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "pauser", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "pauseDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PauserSet", + "inputs": [ + { + "name": "pausable", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "previousPauser", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newPauser", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AdminZero", + "inputs": [] + }, + { + "type": "error", + "name": "HeartbeatExpired", + "inputs": [] + }, + { + "type": "error", + "name": "HeartbeatIntervalAboveMax", + "inputs": [] + }, + { + "type": "error", + "name": "HeartbeatIntervalBelowMin", + "inputs": [] + }, + { + "type": "error", + "name": "MinHeartbeatIntervalExceedsMax", + "inputs": [] + }, + { + "type": "error", + "name": "MinHeartbeatIntervalZero", + "inputs": [] + }, + { + "type": "error", + "name": "MinPauseDurationExceedsMax", + "inputs": [] + }, + { + "type": "error", + "name": "MinPauseDurationZero", + "inputs": [] + }, + { + "type": "error", + "name": "PausableZero", + "inputs": [] + }, + { + "type": "error", + "name": "PauseDurationAboveMax", + "inputs": [] + }, + { + "type": "error", + "name": "PauseDurationBelowMin", + "inputs": [] + }, + { + "type": "error", + "name": "PauseFailed", + "inputs": [] + }, + { + "type": "error", + "name": "ReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "SenderNotAdmin", + "inputs": [] + }, + { + "type": "error", + "name": "SenderNotPauser", + "inputs": [] + } +] diff --git a/interfaces/ConsolidationMigrator.json b/interfaces/ConsolidationMigrator.json new file mode 100644 index 00000000..67f4e11f --- /dev/null +++ b/interfaces/ConsolidationMigrator.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"stakingRouter","type":"address"},{"internalType":"address","name":"consolidationBus","type":"address"},{"internalType":"uint256","name":"_sourceModuleId","type":"uint256"},{"internalType":"uint256","name":"_targetModuleId","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AdminCannotBeZero","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[{"internalType":"uint256","name":"moduleId","type":"uint256"},{"internalType":"uint256","name":"operatorId","type":"uint256"},{"internalType":"uint256","name":"keyIndex","type":"uint256"}],"name":"KeyNotDeposited","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"PairNotInAllowlist","type":"error"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"ZeroArgument","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"targetOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"submitter","type":"address"}],"name":"ConsolidationPairAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"targetOperatorId","type":"uint256"},{"indexed":true,"internalType":"address","name":"submitter","type":"address"}],"name":"ConsolidationPairDisallowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"targetOperatorId","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"sourceKeyIndices","type":"uint256[]"},{"internalType":"uint256","name":"targetKeyIndex","type":"uint256"}],"indexed":false,"internalType":"struct ConsolidationMigrator.ConsolidationIndexGroup[]","name":"groups","type":"tuple[]"}],"name":"ConsolidationSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ALLOW_PAIR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISALLOW_PAIR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBKEY_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"},{"internalType":"address","name":"submitter","type":"address"}],"name":"allowPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"disallowPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"}],"name":"getAllowedTargets","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsolidationBus","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMembers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"getSubmitter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"isPairAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"}],"name":"selfDisallowPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sourceModuleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sourceOperatorId","type":"uint256"},{"internalType":"uint256","name":"targetOperatorId","type":"uint256"},{"components":[{"internalType":"uint256[]","name":"sourceKeyIndices","type":"uint256[]"},{"internalType":"uint256","name":"targetKeyIndex","type":"uint256"}],"internalType":"struct ConsolidationMigrator.ConsolidationIndexGroup[]","name":"groups","type":"tuple[]"}],"name":"submitConsolidationBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetModuleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}] diff --git a/interfaces/HashConsensus.json b/interfaces/HashConsensus.json index 38512567..f23dd947 100644 --- a/interfaces/HashConsensus.json +++ b/interfaces/HashConsensus.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint256","name":"slotsPerEpoch","type":"uint256"},{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"},{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"reportProcessor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressCannotBeZero","type":"error"},{"inputs":[],"name":"AdminCannotBeZero","type":"error"},{"inputs":[],"name":"ConsensusReportAlreadyProcessing","type":"error"},{"inputs":[],"name":"DuplicateMember","type":"error"},{"inputs":[],"name":"DuplicateReport","type":"error"},{"inputs":[],"name":"EmptyReport","type":"error"},{"inputs":[],"name":"EpochsPerFrameCannotBeZero","type":"error"},{"inputs":[],"name":"FastLanePeriodCannotBeLongerThanFrame","type":"error"},{"inputs":[],"name":"InitialEpochAlreadyArrived","type":"error"},{"inputs":[],"name":"InitialEpochIsYetToArrive","type":"error"},{"inputs":[],"name":"InitialEpochRefSlotCannotBeEarlierThanProcessingSlot","type":"error"},{"inputs":[],"name":"InvalidChainConfig","type":"error"},{"inputs":[],"name":"InvalidSlot","type":"error"},{"inputs":[],"name":"NewProcessorCannotBeTheSame","type":"error"},{"inputs":[],"name":"NonFastLaneMemberCannotReportWithinFastLaneInterval","type":"error"},{"inputs":[],"name":"NonMember","type":"error"},{"inputs":[],"name":"NumericOverflow","type":"error"},{"inputs":[{"internalType":"uint256","name":"minQuorum","type":"uint256"},{"internalType":"uint256","name":"receivedQuorum","type":"uint256"}],"name":"QuorumTooSmall","type":"error"},{"inputs":[],"name":"ReportProcessorCannotBeZero","type":"error"},{"inputs":[],"name":"StaleReport","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnexpectedConsensusVersion","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"ConsensusLost","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"report","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"support","type":"uint256"}],"name":"ConsensusReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"FastLaneConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newInitialEpoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEpochsPerFrame","type":"uint256"}],"name":"FrameConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTotalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTotalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevQuorum","type":"uint256"}],"name":"QuorumSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"processor","type":"address"},{"indexed":true,"internalType":"address","name":"prevProcessor","type":"address"}],"name":"ReportProcessorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"bytes32","name":"report","type":"bytes32"}],"name":"ReportReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISABLE_CONSENSUS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_FAST_LANE_CONFIG_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_FRAME_CONFIG_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_MEMBERS_AND_QUORUM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_REPORT_PROCESSOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"addMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableConsensus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainConfig","outputs":[{"internalType":"uint256","name":"slotsPerEpoch","type":"uint256"},{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusState","outputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"bytes32","name":"consensusReport","type":"bytes32"},{"internalType":"bool","name":"isReportProcessing","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getConsensusStateForMember","outputs":[{"components":[{"internalType":"uint256","name":"currentFrameRefSlot","type":"uint256"},{"internalType":"bytes32","name":"currentFrameConsensusReport","type":"bytes32"},{"internalType":"bool","name":"isMember","type":"bool"},{"internalType":"bool","name":"isFastLane","type":"bool"},{"internalType":"bool","name":"canReport","type":"bool"},{"internalType":"uint256","name":"lastMemberReportRefSlot","type":"uint256"},{"internalType":"bytes32","name":"currentFrameMemberReport","type":"bytes32"}],"internalType":"struct HashConsensus.MemberConsensusState","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentFrame","outputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"reportProcessingDeadlineSlot","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFastLaneMembers","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"lastReportedRefSlots","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFrameConfig","outputs":[{"internalType":"uint256","name":"initialEpoch","type":"uint256"},{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInitialRefSlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getIsFastLaneMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getIsMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMembers","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"lastReportedRefSlots","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getQuorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReportProcessor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReportVariants","outputs":[{"internalType":"bytes32[]","name":"variants","type":"bytes32[]"},{"internalType":"uint256[]","name":"support","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"removeMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"setFastLaneLengthSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"setFrameConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProcessor","type":"address"}],"name":"setReportProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"bytes32","name":"report","type":"bytes32"},{"internalType":"uint256","name":"consensusVersion","type":"uint256"}],"name":"submitReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialEpoch","type":"uint256"}],"name":"updateInitialEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"uint256","name":"slotsPerEpoch","type":"uint256"},{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"},{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"reportProcessor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressCannotBeZero","type":"error"},{"inputs":[],"name":"AdminCannotBeZero","type":"error"},{"inputs":[],"name":"ConsensusReportAlreadyProcessing","type":"error"},{"inputs":[],"name":"DuplicateMember","type":"error"},{"inputs":[],"name":"DuplicateReport","type":"error"},{"inputs":[],"name":"EmptyReport","type":"error"},{"inputs":[],"name":"EpochsPerFrameCannotBeZero","type":"error"},{"inputs":[],"name":"FastLanePeriodCannotBeLongerThanFrame","type":"error"},{"inputs":[],"name":"InitialEpochAlreadyArrived","type":"error"},{"inputs":[],"name":"InitialEpochIsYetToArrive","type":"error"},{"inputs":[],"name":"InitialEpochRefSlotCannotBeEarlierThanProcessingSlot","type":"error"},{"inputs":[],"name":"InvalidChainConfig","type":"error"},{"inputs":[],"name":"InvalidSlot","type":"error"},{"inputs":[],"name":"NewProcessorCannotBeTheSame","type":"error"},{"inputs":[],"name":"NonFastLaneMemberCannotReportWithinFastLaneInterval","type":"error"},{"inputs":[],"name":"NonMember","type":"error"},{"inputs":[],"name":"NumericOverflow","type":"error"},{"inputs":[{"internalType":"uint256","name":"minQuorum","type":"uint256"},{"internalType":"uint256","name":"receivedQuorum","type":"uint256"}],"name":"QuorumTooSmall","type":"error"},{"inputs":[],"name":"ReportProcessorCannotBeZero","type":"error"},{"inputs":[],"name":"StaleReport","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnexpectedConsensusVersion","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"ConsensusLost","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"report","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"support","type":"uint256"}],"name":"ConsensusReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"FastLaneConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newInitialEpoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEpochsPerFrame","type":"uint256"}],"name":"FrameConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTotalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"newTotalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newQuorum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalMembers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevQuorum","type":"uint256"}],"name":"QuorumSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"processor","type":"address"},{"indexed":true,"internalType":"address","name":"prevProcessor","type":"address"}],"name":"ReportProcessorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":true,"internalType":"address","name":"member","type":"address"},{"indexed":false,"internalType":"bytes32","name":"report","type":"bytes32"}],"name":"ReportReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISABLE_CONSENSUS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_FAST_LANE_CONFIG_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_FRAME_CONFIG_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_MEMBERS_AND_QUORUM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_REPORT_PROCESSOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"addMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableConsensus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainConfig","outputs":[{"internalType":"uint256","name":"slotsPerEpoch","type":"uint256"},{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusState","outputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"bytes32","name":"consensusReport","type":"bytes32"},{"internalType":"bool","name":"isReportProcessing","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getConsensusStateForMember","outputs":[{"components":[{"internalType":"uint256","name":"currentFrameRefSlot","type":"uint256"},{"internalType":"bytes32","name":"currentFrameConsensusReport","type":"bytes32"},{"internalType":"bool","name":"isMember","type":"bool"},{"internalType":"bool","name":"isFastLane","type":"bool"},{"internalType":"bool","name":"canReport","type":"bool"},{"internalType":"uint256","name":"lastMemberReportRefSlot","type":"uint256"},{"internalType":"bytes32","name":"currentFrameMemberReport","type":"bytes32"}],"internalType":"struct HashConsensus.MemberConsensusState","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentFrame","outputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"reportProcessingDeadlineSlot","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFastLaneMembers","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"lastReportedRefSlots","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFrameConfig","outputs":[{"internalType":"uint256","name":"initialEpoch","type":"uint256"},{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInitialRefSlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getIsFastLaneMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getIsMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMembers","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"lastReportedRefSlots","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getQuorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReportProcessor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReportVariants","outputs":[{"internalType":"bytes32[]","name":"variants","type":"bytes32[]"},{"internalType":"uint256[]","name":"support","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"removeMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"setFastLaneLengthSlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epochsPerFrame","type":"uint256"},{"internalType":"uint256","name":"fastLaneLengthSlots","type":"uint256"}],"name":"setFrameConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProcessor","type":"address"}],"name":"setReportProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slot","type":"uint256"},{"internalType":"bytes32","name":"report","type":"bytes32"},{"internalType":"uint256","name":"consensusVersion","type":"uint256"}],"name":"submitReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialEpoch","type":"uint256"}],"name":"updateInitialEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/interfaces/IConsolidationMigrator.json b/interfaces/IConsolidationMigrator.json new file mode 100644 index 00000000..376e3984 --- /dev/null +++ b/interfaces/IConsolidationMigrator.json @@ -0,0 +1,43 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "sourceOperatorId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "targetOperatorId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "submitter", + "type": "address" + } + ], + "name": "allowPair", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "sourceOperatorId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "targetOperatorId", + "type": "uint256" + } + ], + "name": "disallowPair", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/interfaces/IMetaRegistry.json b/interfaces/IMetaRegistry.json new file mode 100644 index 00000000..d99e774c --- /dev/null +++ b/interfaces/IMetaRegistry.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"uint256","name":"groupId","type":"uint256"},{"components":[{"components":[{"internalType":"uint64","name":"nodeOperatorId","type":"uint64"},{"internalType":"uint16","name":"share","type":"uint16"}],"internalType":"struct IMetaRegistry.SubNodeOperator[]","name":"subNodeOperators","type":"tuple[]"},{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct IMetaRegistry.ExternalOperator[]","name":"externalOperators","type":"tuple[]"}],"internalType":"struct IMetaRegistry.OperatorGroup","name":"groupInfo","type":"tuple"}],"name":"createOrUpdateOperatorGroup","outputs":[],"stateMutability":"nonpayable","type":"function"}] diff --git a/interfaces/IValidatorStrikesV3.json b/interfaces/IValidatorStrikesV3.json new file mode 100644 index 00000000..0bad3888 --- /dev/null +++ b/interfaces/IValidatorStrikesV3.json @@ -0,0 +1,28 @@ +[ + { + "inputs": [], + "name": "ejector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newEjector", + "type": "address" + } + ], + "name": "setEjector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/interfaces/OneShotCurveSetup.json b/interfaces/OneShotCurveSetup.json new file mode 100644 index 00000000..06caa769 --- /dev/null +++ b/interfaces/OneShotCurveSetup.json @@ -0,0 +1,15 @@ +[ + { + "type": "event", + "name": "BondCurveDeployed", + "inputs": [ + { + "name": "curveId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + } +] diff --git a/interfaces/StakingRouter.json b/interfaces/StakingRouter.json index 63233f2d..7c7ec3d2 100644 --- a/interfaces/StakingRouter.json +++ b/interfaces/StakingRouter.json @@ -1,2565 +1 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_depositContract", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AppAuthLidoFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstArrayLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "secondArrayLength", - "type": "uint256" - } - ], - "name": "ArraysLengthMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "DepositContractZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "DirectETHTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "EmptyWithdrawalsCredentials", - "type": "error" - }, - { - "inputs": [], - "name": "ExitedValidatorsCountCannotDecrease", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidContractVersionIncrement", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "etherValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositsCount", - "type": "uint256" - } - ], - "name": "InvalidDepositsValue", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidFeeSum", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidMaxDepositPerBlockValue", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidMinDepositBlockDistance", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidPriorityExitShareThreshold", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "InvalidPublicKeysBatchLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "code", - "type": "uint256" - } - ], - "name": "InvalidReportData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "InvalidSignaturesBatchLength", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidStakeShareLimit", - "type": "error" - }, - { - "inputs": [], - "name": "NonZeroContractVersionOnInit", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "reportedExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositedValidatorsCount", - "type": "uint256" - } - ], - "name": "ReportedExitedValidatorsExceedDeposited", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModuleAddressExists", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModuleNotActive", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModuleStatusTheSame", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModuleUnregistered", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModuleWrongName", - "type": "error" - }, - { - "inputs": [], - "name": "StakingModulesLimitExceeded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "received", - "type": "uint256" - } - ], - "name": "UnexpectedContractVersion", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOpExitedValidatorsCount", - "type": "uint256" - } - ], - "name": "UnexpectedCurrentValidatorsCount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newModuleTotalExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newModuleTotalExitedValidatorsCountInStakingRouter", - "type": "uint256" - } - ], - "name": "UnexpectedFinalExitedValidatorsCount", - "type": "error" - }, - { - "inputs": [], - "name": "UnrecoverableModuleError", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressLido", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressStakingModule", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "version", - "type": "uint256" - } - ], - "name": "ContractVersionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "ExitedAndStuckValidatorsCountsUpdateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "RewardsMintedReportFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "stakingModule", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "createdBy", - "type": "address" - } - ], - "name": "StakingModuleAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unreportedExitedValidatorsCount", - "type": "uint256" - } - ], - "name": "StakingModuleExitedValidatorsIncompleteReporting", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakingModuleFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "treasuryFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxDepositsPerBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleMaxDepositsPerBlockSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "minDepositBlockDistance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleMinDepositBlockDistanceSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeShareLimit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "priorityExitShareThreshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleShareLimitSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "status", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleStatusSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakingRouterETHDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "WithdrawalCredentialsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "WithdrawalsCredentialsChangeFailed", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEPOSIT_CONTRACT", - "outputs": [ - { - "internalType": "contract IDepositContract", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_PRECISION_POINTS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MANAGE_WITHDRAWAL_CREDENTIALS_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_STAKING_MODULES_COUNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_STAKING_MODULE_NAME_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_EXITED_VALIDATORS_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_REWARDS_MINTED_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_VALIDATOR_EXITING_STATUS_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_VALIDATOR_EXIT_TRIGGERED_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_MODULE_MANAGE_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_MODULE_UNVETTING_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TOTAL_BASIS_POINTS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UNSAFE_SET_EXITED_VALIDATORS_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "address", - "name": "_stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_stakeShareLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priorityExitShareThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_treasuryFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDepositsPerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minDepositBlockDistance", - "type": "uint256" - } - ], - "name": "addStakingModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_nodeOperatorIds", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_vettedSigningKeysCounts", - "type": "bytes" - } - ], - "name": "decreaseStakingModuleVettedKeysCountByNodeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_depositsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_depositCalldata", - "type": "bytes" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "finalizeUpgrade_v3", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getAllNodeOperatorDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isActive", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAllStakingModuleDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nodeOperatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "activeNodeOperatorsCount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint24", - "name": "id", - "type": "uint24" - }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { - "internalType": "uint8", - "name": "status", - "type": "uint8" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "state", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.StakingModuleDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractVersion", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_depositsCount", - "type": "uint256" - } - ], - "name": "getDepositsAllocation", - "outputs": [ - { - "internalType": "uint256", - "name": "allocated", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "allocations", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLido", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_nodeOperatorIds", - "type": "uint256[]" - } - ], - "name": "getNodeOperatorDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isActive", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "digests", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_limit", - "type": "uint256" - } - ], - "name": "getNodeOperatorDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isActive", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - } - ], - "name": "getNodeOperatorSummary", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getRoleMember", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleMemberCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingFeeAggregateDistribution", - "outputs": [ - { - "internalType": "uint96", - "name": "modulesFee", - "type": "uint96" - }, - { - "internalType": "uint96", - "name": "treasuryFee", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "basePrecision", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingFeeAggregateDistributionE4Precision", - "outputs": [ - { - "internalType": "uint16", - "name": "modulesFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModule", - "outputs": [ - { - "components": [ - { - "internalType": "uint24", - "name": "id", - "type": "uint24" - }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { - "internalType": "uint8", - "name": "status", - "type": "uint8" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleActiveValidatorsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "activeValidatorsCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - } - ], - "name": "getStakingModuleDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nodeOperatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "activeNodeOperatorsCount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint24", - "name": "id", - "type": "uint24" - }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { - "internalType": "uint8", - "name": "status", - "type": "uint8" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "state", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.StakingModuleDigest[]", - "name": "digests", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModuleIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "stakingModuleIds", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsDepositsPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsStopped", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleLastDepositBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDepositsValue", - "type": "uint256" - } - ], - "name": "getStakingModuleMaxDepositsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleMaxDepositsPerBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleMinDepositBlockDistance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleStatus", - "outputs": [ - { - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleSummary", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModules", - "outputs": [ - { - "components": [ - { - "internalType": "uint24", - "name": "id", - "type": "uint24" - }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { - "internalType": "uint8", - "name": "status", - "type": "uint8" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule[]", - "name": "res", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModulesCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingRewardsDistribution", - "outputs": [ - { - "internalType": "address[]", - "name": "recipients", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint96[]", - "name": "stakingModuleFees", - "type": "uint96[]" - }, - { - "internalType": "uint96", - "name": "totalFee", - "type": "uint96" - }, - { - "internalType": "uint256", - "name": "precisionPoints", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotalFeeE4Precision", - "outputs": [ - { - "internalType": "uint16", - "name": "totalFee", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWithdrawalCredentials", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "hasStakingModule", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_lido", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_publicKey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_withdrawalRequestPaidFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_exitType", - "type": "uint256" - } - ], - "name": "onValidatorExitTriggered", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "onValidatorsCountsByNodeOperatorReportingFinished", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_totalShares", - "type": "uint256[]" - } - ], - "name": "reportRewardsMinted", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_nodeOperatorIds", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_exitedValidatorsCounts", - "type": "bytes" - } - ], - "name": "reportStakingModuleExitedValidatorsCountByNodeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_proofSlotTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_publicKey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_eligibleToExitInSec", - "type": "uint256" - } - ], - "name": "reportValidatorExitDelay", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "_status", - "type": "uint8" - } - ], - "name": "setStakingModuleStatus", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "setWithdrawalCredentials", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_triggerUpdateFinish", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "currentModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOperatorExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newNodeOperatorExitedValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.ValidatorsCountsCorrection", - "name": "_correction", - "type": "tuple" - } - ], - "name": "unsafeSetExitedValidatorsCount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_exitedValidatorsCounts", - "type": "uint256[]" - } - ], - "name": "updateExitedValidatorsCountByStakingModule", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_refundedValidatorsCount", - "type": "uint256" - } - ], - "name": "updateRefundedValidatorsCount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakeShareLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priorityExitShareThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_treasuryFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDepositsPerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minDepositBlockDistance", - "type": "uint256" - } - ], - "name": "updateStakingModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_targetLimit", - "type": "uint256" - } - ], - "name": "updateTargetValidatorsLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } -] +[{"inputs":[{"internalType":"address","name":"_depositContract","type":"address"},{"internalType":"address","name":"_lido","type":"address"},{"internalType":"address","name":"_lidoLocator","type":"address"},{"internalType":"uint256","name":"_maxEBType1","type":"uint256"},{"internalType":"uint256","name":"_maxEBType2","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AllocationExceedsLimit","type":"error"},{"inputs":[],"name":"AmountNotAlignedToGwei","type":"error"},{"inputs":[],"name":"ArraysLengthMismatch","type":"error"},{"inputs":[],"name":"DirectETHTransfer","type":"error"},{"inputs":[],"name":"EmptyKeysList","type":"error"},{"inputs":[],"name":"ExitedValidatorsCountCannotDecrease","type":"error"},{"inputs":[],"name":"InconsistentFeeSum","type":"error"},{"inputs":[],"name":"InvalidAmountGwei","type":"error"},{"inputs":[],"name":"InvalidFeeSum","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"InvalidMaxDepositPerBlockValue","type":"error"},{"inputs":[],"name":"InvalidMinDepositBlockDistance","type":"error"},{"inputs":[],"name":"InvalidPriorityExitShareThreshold","type":"error"},{"inputs":[{"internalType":"uint256","name":"code","type":"uint256"}],"name":"InvalidReportData","type":"error"},{"inputs":[],"name":"InvalidStakeShareLimit","type":"error"},{"inputs":[],"name":"ModuleReturnExceedTarget","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"OracleExtraDataNotSubmitted","type":"error"},{"inputs":[{"internalType":"uint256","name":"reportedExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"depositedValidatorsCount","type":"uint256"}],"name":"ReportedExitedValidatorsExceedDeposited","type":"error"},{"inputs":[],"name":"StakingModuleAddressExists","type":"error"},{"inputs":[],"name":"StakingModuleNotActive","type":"error"},{"inputs":[],"name":"StakingModuleStatusTheSame","type":"error"},{"inputs":[],"name":"StakingModuleUnregistered","type":"error"},{"inputs":[],"name":"StakingModuleWrongName","type":"error"},{"inputs":[],"name":"StakingModulesLimitExceeded","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOpExitedValidatorsCount","type":"uint256"}],"name":"UnexpectedCurrentValidatorsCount","type":"error"},{"inputs":[{"internalType":"uint256","name":"newModuleTotalExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newModuleTotalExitedValidatorsCountInStakingRouter","type":"uint256"}],"name":"UnexpectedFinalExitedValidatorsCount","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedId","type":"uint256"},{"internalType":"uint256","name":"actualId","type":"uint256"}],"name":"UnexpectedModuleId","type":"error"},{"inputs":[],"name":"UnrecoverableModuleError","type":"error"},{"inputs":[],"name":"WrongPubkeyLength","type":"error"},{"inputs":[],"name":"WrongWithdrawalCredentialsType","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroArgument","type":"error"},{"inputs":[],"name":"ZeroDeposits","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositableEthReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"ExitedAndStuckValidatorsCountsUpdateFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"RewardsMintedReportFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"address","name":"stakingModule","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"createdBy","type":"address"}],"name":"StakingModuleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_publicKey","type":"bytes"}],"name":"StakingModuleExitNotificationFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unreportedExitedValidatorsCount","type":"uint256"}],"name":"StakingModuleExitedValidatorsIncompleteReporting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingModuleFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleFeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxDepositsPerBlock","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleMaxDepositsPerBlockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDepositBlockDistance","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleMinDepositBlockDistanceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeShareLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priorityExitShareThreshold","type":"uint256"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleShareLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"enum StakingModuleStatus","name":"status","type":"uint8"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"StakingModuleStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingRouterETHDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"withdrawalCredentials","type":"bytes32"},{"indexed":false,"internalType":"address","name":"setBy","type":"address"}],"name":"WithdrawalCredentialsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"lowLevelRevertData","type":"bytes"}],"name":"WithdrawalsCredentialsChangeFailed","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEPOSIT_CONTRACT","outputs":[{"internalType":"contract IDepositContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PRECISION_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_DEPOSIT_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"contract ILido","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO_LOCATOR","outputs":[{"internalType":"contract ILidoLocator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_WITHDRAWAL_CREDENTIALS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EFFECTIVE_BALANCE_WC_TYPE_01","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EFFECTIVE_BALANCE_WC_TYPE_02","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STAKING_MODULES_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"MAX_STAKING_MODULE_NAME_LENGTH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"REPORT_EXITED_VALIDATORS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_REWARDS_MINTED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_VALIDATOR_EXITING_STATUS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REPORT_VALIDATOR_EXIT_TRIGGERED_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_MANAGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_SHARE_MANAGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MODULE_UNVETTING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"UNSAFE_SET_EXITED_VALIDATORS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_stakingModuleAddress","type":"address"},{"components":[{"internalType":"uint256","name":"stakeShareLimit","type":"uint256"},{"internalType":"uint256","name":"priorityExitShareThreshold","type":"uint256"},{"internalType":"uint256","name":"stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"minDepositBlockDistance","type":"uint256"},{"internalType":"uint256","name":"withdrawalCredentialsType","type":"uint256"}],"internalType":"struct StakingModuleConfig","name":"_stakingModuleConfig","type":"tuple"}],"name":"addStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"_vettedSigningKeysCounts","type":"bytes"}],"name":"decreaseStakingModuleVettedKeysCountByNodeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_depositCalldata","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeUpgrade_v4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getAllNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct NodeOperatorDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllStakingModuleDigests","outputs":[{"components":[{"internalType":"uint256","name":"nodeOperatorsCount","type":"uint256"},{"internalType":"uint256","name":"activeNodeOperatorsCount","type":"uint256"},{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"stakeShareLimit","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"},{"internalType":"uint16","name":"priorityExitShareThreshold","type":"uint16"},{"internalType":"uint64","name":"maxDepositsPerBlock","type":"uint64"},{"internalType":"uint64","name":"minDepositBlockDistance","type":"uint64"},{"internalType":"uint8","name":"withdrawalCredentialsType","type":"uint8"},{"internalType":"uint64","name":"validatorsBalanceGwei","type":"uint64"}],"internalType":"struct StakingModule","name":"state","type":"tuple"},{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingModuleSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingModuleDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositAmount","type":"uint256"},{"internalType":"bool","name":"_isTopUp","type":"bool"}],"name":"getDepositAllocations","outputs":[{"internalType":"uint256","name":"totalAllocated","type":"uint256"},{"internalType":"uint256[]","name":"allocated","type":"uint256[]"},{"internalType":"uint256[]","name":"newAllocations","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"moduleId","type":"uint256"}],"name":"getModuleValidatorsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256[]","name":"_nodeOperatorIds","type":"uint256[]"}],"name":"getNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct NodeOperatorDigest[]","name":"digests","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"getNodeOperatorDigests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"components":[{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct NodeOperatorSummary","name":"summary","type":"tuple"}],"internalType":"struct NodeOperatorDigest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"}],"name":"getNodeOperatorSummary","outputs":[{"components":[{"internalType":"uint256","name":"targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"targetValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"refundedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"stuckPenaltyEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct NodeOperatorSummary","name":"summary","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMembers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingFeeAggregateDistribution","outputs":[{"internalType":"uint96","name":"modulesFee","type":"uint96"},{"internalType":"uint96","name":"treasuryFee","type":"uint96"},{"internalType":"uint256","name":"basePrecision","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingFeeAggregateDistributionE4Precision","outputs":[{"internalType":"uint16","name":"modulesFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModule","outputs":[{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"stakeShareLimit","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"},{"internalType":"uint16","name":"priorityExitShareThreshold","type":"uint16"},{"internalType":"uint64","name":"maxDepositsPerBlock","type":"uint64"},{"internalType":"uint64","name":"minDepositBlockDistance","type":"uint64"},{"internalType":"uint8","name":"withdrawalCredentialsType","type":"uint8"},{"internalType":"uint64","name":"validatorsBalanceGwei","type":"uint64"}],"internalType":"struct StakingModule","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleActiveValidatorsCount","outputs":[{"internalType":"uint256","name":"activeValidatorsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"}],"name":"getStakingModuleDigests","outputs":[{"components":[{"internalType":"uint256","name":"nodeOperatorsCount","type":"uint256"},{"internalType":"uint256","name":"activeNodeOperatorsCount","type":"uint256"},{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"stakeShareLimit","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"},{"internalType":"uint16","name":"priorityExitShareThreshold","type":"uint16"},{"internalType":"uint64","name":"maxDepositsPerBlock","type":"uint64"},{"internalType":"uint64","name":"minDepositBlockDistance","type":"uint64"},{"internalType":"uint8","name":"withdrawalCredentialsType","type":"uint8"},{"internalType":"uint64","name":"validatorsBalanceGwei","type":"uint64"}],"internalType":"struct StakingModule","name":"state","type":"tuple"},{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingModuleSummary","name":"summary","type":"tuple"}],"internalType":"struct StakingModuleDigest[]","name":"digests","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModuleIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsDepositsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleIsStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleLastDepositBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_maxDepositsValue","type":"uint256"}],"name":"getStakingModuleMaxDepositsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleMaxDepositsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleMinDepositBlockDistance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleStateAccounting","outputs":[{"internalType":"uint64","name":"validatorsBalanceGwei","type":"uint64"},{"internalType":"uint64","name":"exitedValidatorsCount","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleStateConfig","outputs":[{"components":[{"internalType":"address","name":"moduleAddress","type":"address"},{"internalType":"uint16","name":"moduleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"stakeShareLimit","type":"uint16"},{"internalType":"uint16","name":"priorityExitShareThreshold","type":"uint16"},{"internalType":"enum StakingModuleStatus","name":"status","type":"uint8"},{"internalType":"uint8","name":"withdrawalCredentialsType","type":"uint8"}],"internalType":"struct ModuleStateConfig","name":"stateConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleStateDeposits","outputs":[{"components":[{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint64","name":"lastDepositBlock","type":"uint64"},{"internalType":"uint64","name":"maxDepositsPerBlock","type":"uint64"},{"internalType":"uint64","name":"minDepositBlockDistance","type":"uint64"}],"internalType":"struct ModuleStateDeposits","name":"stateDeposits","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleStatus","outputs":[{"internalType":"enum StakingModuleStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleSummary","outputs":[{"components":[{"internalType":"uint256","name":"totalExitedValidators","type":"uint256"},{"internalType":"uint256","name":"totalDepositedValidators","type":"uint256"},{"internalType":"uint256","name":"depositableValidatorsCount","type":"uint256"}],"internalType":"struct StakingModuleSummary","name":"summary","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"getStakingModuleWithdrawalCredentials","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModules","outputs":[{"components":[{"internalType":"uint24","name":"id","type":"uint24"},{"internalType":"address","name":"stakingModuleAddress","type":"address"},{"internalType":"uint16","name":"stakingModuleFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"stakeShareLimit","type":"uint16"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"lastDepositAt","type":"uint64"},{"internalType":"uint256","name":"lastDepositBlock","type":"uint256"},{"internalType":"uint256","name":"exitedValidatorsCount","type":"uint256"},{"internalType":"uint16","name":"priorityExitShareThreshold","type":"uint16"},{"internalType":"uint64","name":"maxDepositsPerBlock","type":"uint64"},{"internalType":"uint64","name":"minDepositBlockDistance","type":"uint64"},{"internalType":"uint8","name":"withdrawalCredentialsType","type":"uint8"},{"internalType":"uint64","name":"validatorsBalanceGwei","type":"uint64"}],"internalType":"struct StakingModule[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingModulesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingRewardsDistribution","outputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"stakingModuleIds","type":"uint256[]"},{"internalType":"uint96[]","name":"stakingModuleFees","type":"uint96[]"},{"internalType":"uint96","name":"totalFee","type":"uint96"},{"internalType":"uint256","name":"precisionPoints","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFeeE4Precision","outputs":[{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalModulesValidatorsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWithdrawalCredentials","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"}],"name":"hasStakingModule","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"bytes32","name":"_withdrawalCredentials","type":"bytes32"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"bytes","name":"pubkey","type":"bytes"}],"internalType":"struct ValidatorExitData[]","name":"validatorExitData","type":"tuple[]"},{"internalType":"uint256","name":"_withdrawalRequestPaidFee","type":"uint256"},{"internalType":"uint256","name":"_exitType","type":"uint256"}],"name":"onValidatorExitTriggered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"onValidatorsCountsByNodeOperatorReportingFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receiveDepositableEther","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_totalShares","type":"uint256[]"}],"name":"reportRewardsMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"bytes","name":"_nodeOperatorIds","type":"bytes"},{"internalType":"bytes","name":"_exitedValidatorsCounts","type":"bytes"}],"name":"reportStakingModuleExitedValidatorsCountByNodeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_validatorBalancesGwei","type":"uint256[]"}],"name":"reportValidatorBalancesByStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"_proofSlotTimestamp","type":"uint256"},{"internalType":"bytes","name":"_publicKey","type":"bytes"},{"internalType":"uint256","name":"_eligibleToExitInSec","type":"uint256"}],"name":"reportValidatorExitDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"enum StakingModuleStatus","name":"_status","type":"uint8"}],"name":"setStakingModuleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_withdrawalCredentials","type":"bytes32"}],"name":"setWithdrawalCredentials","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256[]","name":"_keyIndices","type":"uint256[]"},{"internalType":"uint256[]","name":"_operatorIds","type":"uint256[]"},{"internalType":"bytes[]","name":"_pubkeys","type":"bytes[]"},{"internalType":"uint256[]","name":"_topUpLimits","type":"uint256[]"}],"name":"topUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"bool","name":"_triggerUpdateFinish","type":"bool"},{"components":[{"internalType":"uint256","name":"currentModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"currentNodeOperatorExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newModuleExitedValidatorsCount","type":"uint256"},{"internalType":"uint256","name":"newNodeOperatorExitedValidatorsCount","type":"uint256"}],"internalType":"struct ValidatorsCountsCorrection","name":"_correction","type":"tuple"}],"name":"unsafeSetExitedValidatorsCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_treasuryFees","type":"uint256[]"}],"name":"updateAllStakingModulesFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_exitedValidatorsCounts","type":"uint256[]"}],"name":"updateExitedValidatorsCountByStakingModule","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint16","name":"_stakeShareLimit","type":"uint16"},{"internalType":"uint16","name":"_priorityExitShareThreshold","type":"uint16"}],"name":"updateModuleShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_stakeShareLimit","type":"uint256"},{"internalType":"uint256","name":"_priorityExitShareThreshold","type":"uint256"},{"internalType":"uint256","name":"_stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"_minDepositBlockDistance","type":"uint256"}],"name":"updateStakingModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingModuleId","type":"uint256"},{"internalType":"uint256","name":"_nodeOperatorId","type":"uint256"},{"internalType":"uint256","name":"_targetLimitMode","type":"uint256"},{"internalType":"uint256","name":"_targetLimit","type":"uint256"}],"name":"updateTargetValidatorsLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_stakingModuleIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_validatorBalancesGwei","type":"uint256[]"}],"name":"validateReportValidatorBalancesByStakingModule","outputs":[],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}] diff --git a/interfaces/UpgradeConfig.json b/interfaces/UpgradeConfig.json new file mode 100644 index 00000000..7a004dfd --- /dev/null +++ b/interfaces/UpgradeConfig.json @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"address","name":"locator","type":"address"},{"internalType":"address","name":"agent","type":"address"},{"internalType":"address","name":"voting","type":"address"},{"internalType":"address","name":"dualGovernance","type":"address"},{"internalType":"address","name":"resealManager","type":"address"},{"internalType":"address","name":"circuitBreaker","type":"address"},{"internalType":"address","name":"easyTrack","type":"address"},{"components":[{"internalType":"address","name":"UpdateStakingModuleShareLimits","type":"address"},{"internalType":"address","name":"AllowConsolidationPair","type":"address"},{"internalType":"address","name":"SetMerkleGateTreeForCSM","type":"address"},{"internalType":"address","name":"ReportWithdrawalsForSlashedValidatorsForCSM","type":"address"},{"internalType":"address","name":"SettleGeneralDelayedPenaltyForCSM","type":"address"},{"internalType":"address","name":"SetMerkleGateTreeForCM","type":"address"},{"internalType":"address","name":"ReportWithdrawalsForSlashedValidatorsForCM","type":"address"},{"internalType":"address","name":"SettleGeneralDelayedPenaltyForCM","type":"address"},{"internalType":"address","name":"CreateOrUpdateOperatorGroupForCM","type":"address"}],"internalType":"struct EasyTrackNewFactories","name":"newFactories","type":"tuple"},{"components":[{"internalType":"address","name":"CSMSettleElStealingPenalty","type":"address"},{"internalType":"address","name":"CSMSetVettedGateTree","type":"address"}],"internalType":"struct EasyTrackOldFactories","name":"oldFactories","type":"tuple"},{"components":[{"internalType":"address","name":"oldLocatorImpl","type":"address"},{"internalType":"address","name":"oldLidoImpl","type":"address"},{"internalType":"address","name":"oldAccountingImpl","type":"address"},{"internalType":"address","name":"oldAccountingOracleImpl","type":"address"},{"internalType":"address","name":"oldStakingRouterImpl","type":"address"},{"internalType":"address","name":"oldWithdrawalVaultImpl","type":"address"},{"internalType":"address","name":"oldValidatorsExitBusOracleImpl","type":"address"},{"internalType":"address","name":"newLocatorImpl","type":"address"},{"internalType":"address","name":"newLidoImpl","type":"address"},{"internalType":"address","name":"newAccountingImpl","type":"address"},{"internalType":"address","name":"newAccountingOracleImpl","type":"address"},{"internalType":"address","name":"newStakingRouterImpl","type":"address"},{"internalType":"address","name":"newWithdrawalVaultImpl","type":"address"},{"internalType":"address","name":"newValidatorsExitBusOracleImpl","type":"address"},{"internalType":"address","name":"consolidationBusImpl","type":"address"},{"internalType":"address","name":"consolidationMigratorImpl","type":"address"},{"internalType":"address","name":"topUpGatewayImpl","type":"address"},{"internalType":"address","name":"consolidationBus","type":"address"},{"internalType":"address","name":"consolidationMigrator","type":"address"},{"internalType":"address","name":"topUpGateway","type":"address"},{"internalType":"uint256","name":"lidoDepositsReserveTarget","type":"uint256"},{"internalType":"address","name":"curatedModuleCommittee","type":"address"},{"internalType":"address","name":"topUpGatewayDepositor","type":"address"},{"internalType":"address","name":"consolidationGatewayPauser","type":"address"},{"internalType":"uint256","name":"twMaxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"twExitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"twFrameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"aoConsensusVersion","type":"uint256"},{"internalType":"uint256","name":"veboMaxValidatorsPerReport","type":"uint256"},{"internalType":"uint256","name":"veboMaxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"veboBalancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"veboFrameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"veboConsensusVersion","type":"uint256"}],"internalType":"struct CoreUpgradeParams","name":"coreUpgrade","type":"tuple"},{"components":[{"internalType":"address","name":"csmProxy","type":"address"},{"internalType":"address","name":"csmImpl","type":"address"},{"internalType":"address","name":"vettedGateProxy","type":"address"},{"internalType":"address","name":"identifiedDVTClusterGate","type":"address"},{"internalType":"address","name":"identifiedDVTClusterCurveSetup","type":"address"},{"internalType":"uint256","name":"identifiedDVTClusterBondCurveId","type":"uint256"},{"internalType":"address","name":"parametersRegistryImpl","type":"address"},{"internalType":"address","name":"feeOracleImpl","type":"address"},{"internalType":"uint256","name":"feeOracleConsensusVersion","type":"uint256"},{"internalType":"address","name":"vettedGateImpl","type":"address"},{"internalType":"address","name":"accountingImpl","type":"address"},{"internalType":"address","name":"feeDistributorImpl","type":"address"},{"internalType":"address","name":"exitPenaltiesImpl","type":"address"},{"internalType":"address","name":"strikesImpl","type":"address"},{"internalType":"address","name":"oldPermissionlessGate","type":"address"},{"internalType":"address","name":"newPermissionlessGate","type":"address"},{"internalType":"address","name":"oldVerifier","type":"address"},{"internalType":"address","name":"newVerifier","type":"address"},{"internalType":"address","name":"ejector","type":"address"},{"internalType":"address","name":"csmCommittee","type":"address"}],"internalType":"struct CSMUpgradeParams","name":"csmUpgrade","type":"tuple"},{"components":[{"internalType":"address","name":"module","type":"address"},{"internalType":"address[]","name":"curatedGates","type":"address[]"},{"internalType":"address","name":"verifier","type":"address"},{"internalType":"address","name":"circuitBreakerPauser","type":"address"},{"internalType":"string","name":"moduleName","type":"string"},{"internalType":"uint256","name":"stakeShareLimit","type":"uint256"},{"internalType":"uint256","name":"priorityExitShareThreshold","type":"uint256"},{"internalType":"uint256","name":"stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"minDepositBlockDistance","type":"uint256"},{"internalType":"uint256","name":"feeOracleConsensusVersion","type":"uint256"},{"internalType":"uint256","name":"hashConsensusInitialEpoch","type":"uint256"}],"internalType":"struct CuratedModuleParams","name":"curatedModule","type":"tuple"}],"internalType":"struct UpgradeParameters","name":"params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"NewAndOldLocatorImplementationsMustBeDifferent","type":"error"},{"inputs":[],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"AGENT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BURNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CIRCUIT_BREAKER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DUAL_GOVERNANCE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESEAL_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCSMUpgradeConfig","outputs":[{"components":[{"internalType":"address","name":"csm","type":"address"},{"internalType":"address","name":"csmImpl","type":"address"},{"internalType":"address","name":"parametersRegistry","type":"address"},{"internalType":"address","name":"parametersRegistryImpl","type":"address"},{"internalType":"address","name":"feeOracle","type":"address"},{"internalType":"address","name":"feeOracleImpl","type":"address"},{"internalType":"uint256","name":"feeOracleConsensusVersion","type":"uint256"},{"internalType":"address","name":"vettedGate","type":"address"},{"internalType":"address","name":"identifiedDVTClusterGate","type":"address"},{"internalType":"address","name":"identifiedDVTClusterCurveSetup","type":"address"},{"internalType":"uint256","name":"identifiedDVTClusterBondCurveId","type":"uint256"},{"internalType":"address","name":"vettedGateImpl","type":"address"},{"internalType":"address","name":"accounting","type":"address"},{"internalType":"address","name":"accountingImpl","type":"address"},{"internalType":"address","name":"feeDistributor","type":"address"},{"internalType":"address","name":"feeDistributorImpl","type":"address"},{"internalType":"address","name":"exitPenalties","type":"address"},{"internalType":"address","name":"exitPenaltiesImpl","type":"address"},{"internalType":"address","name":"strikes","type":"address"},{"internalType":"address","name":"strikesImpl","type":"address"},{"internalType":"address","name":"oldPermissionlessGate","type":"address"},{"internalType":"address","name":"oldVerifier","type":"address"},{"internalType":"address","name":"newVerifier","type":"address"},{"internalType":"address","name":"newPermissionlessGate","type":"address"},{"internalType":"address","name":"oldEjector","type":"address"},{"internalType":"address","name":"ejector","type":"address"},{"internalType":"address","name":"csmCommittee","type":"address"}],"internalType":"struct CSMUpgradeConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCoreUpgradeConfig","outputs":[{"components":[{"internalType":"address","name":"kernel","type":"address"},{"internalType":"address","name":"acl","type":"address"},{"internalType":"bytes32","name":"lidoAppId","type":"bytes32"},{"internalType":"address","name":"locator","type":"address"},{"internalType":"address","name":"oldLocatorImpl","type":"address"},{"internalType":"address","name":"oldLidoImpl","type":"address"},{"internalType":"address","name":"oldAccountingImpl","type":"address"},{"internalType":"address","name":"oldAccountingOracleImpl","type":"address"},{"internalType":"address","name":"oldStakingRouterImpl","type":"address"},{"internalType":"address","name":"oldWithdrawalVaultImpl","type":"address"},{"internalType":"address","name":"oldValidatorsExitBusOracleImpl","type":"address"},{"internalType":"address","name":"oldOracleReportSanityChecker","type":"address"},{"internalType":"address","name":"oldDepositSecurityModule","type":"address"},{"internalType":"address","name":"newLocatorImpl","type":"address"},{"internalType":"address","name":"newLidoImpl","type":"address"},{"internalType":"address","name":"newAccountingImpl","type":"address"},{"internalType":"address","name":"newAccountingOracleImpl","type":"address"},{"internalType":"address","name":"newStakingRouterImpl","type":"address"},{"internalType":"address","name":"newWithdrawalVaultImpl","type":"address"},{"internalType":"address","name":"newValidatorsExitBusOracleImpl","type":"address"},{"internalType":"address","name":"newOracleReportSanityChecker","type":"address"},{"internalType":"address","name":"newDepositSecurityModule","type":"address"},{"internalType":"address","name":"consolidationBusImpl","type":"address"},{"internalType":"address","name":"consolidationMigratorImpl","type":"address"},{"internalType":"address","name":"topUpGatewayImpl","type":"address"},{"internalType":"address","name":"accounting","type":"address"},{"internalType":"address","name":"accountingOracle","type":"address"},{"internalType":"address","name":"validatorsExitBusOracle","type":"address"},{"internalType":"address","name":"withdrawalVault","type":"address"},{"internalType":"address","name":"consolidationGateway","type":"address"},{"internalType":"address","name":"consolidationBus","type":"address"},{"internalType":"address","name":"consolidationMigrator","type":"address"},{"internalType":"address","name":"topUpGateway","type":"address"},{"internalType":"uint256","name":"lidoDepositsReserveTarget","type":"uint256"},{"internalType":"address","name":"curatedModuleCommittee","type":"address"},{"internalType":"address","name":"topUpGatewayDepositor","type":"address"},{"internalType":"address","name":"consolidationGatewayPauser","type":"address"},{"internalType":"uint256","name":"twMaxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"twExitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"twFrameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"aoConsensusVersion","type":"uint256"},{"internalType":"uint256","name":"veboMaxValidatorsPerReport","type":"uint256"},{"internalType":"uint256","name":"veboMaxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"veboBalancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"veboFrameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"veboConsensusVersion","type":"uint256"}],"internalType":"struct CoreUpgradeConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCuratedModuleConfig","outputs":[{"components":[{"internalType":"address","name":"module","type":"address"},{"internalType":"address[]","name":"curatedGates","type":"address[]"},{"internalType":"address","name":"parametersRegistry","type":"address"},{"internalType":"address","name":"accounting","type":"address"},{"internalType":"address","name":"ejector","type":"address"},{"internalType":"address","name":"verifier","type":"address"},{"internalType":"address","name":"circuitBreakerPauser","type":"address"},{"internalType":"address","name":"feeDistributor","type":"address"},{"internalType":"address","name":"feeOracle","type":"address"},{"internalType":"address","name":"hashConsensus","type":"address"},{"internalType":"address","name":"strikes","type":"address"},{"internalType":"string","name":"moduleName","type":"string"},{"internalType":"uint256","name":"stakeShareLimit","type":"uint256"},{"internalType":"uint256","name":"priorityExitShareThreshold","type":"uint256"},{"internalType":"uint256","name":"stakingModuleFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"maxDepositsPerBlock","type":"uint256"},{"internalType":"uint256","name":"minDepositBlockDistance","type":"uint256"},{"internalType":"uint256","name":"feeOracleConsensusVersion","type":"uint256"},{"internalType":"uint256","name":"hashConsensusInitialEpoch","type":"uint256"},{"internalType":"address","name":"metaRegistry","type":"address"}],"internalType":"struct CuratedModuleConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEasyTrackConfig","outputs":[{"components":[{"internalType":"address","name":"UpdateStakingModuleShareLimits","type":"address"},{"internalType":"address","name":"AllowConsolidationPair","type":"address"},{"internalType":"address","name":"SetMerkleGateTreeForCSM","type":"address"},{"internalType":"address","name":"ReportWithdrawalsForSlashedValidatorsForCSM","type":"address"},{"internalType":"address","name":"SettleGeneralDelayedPenaltyForCSM","type":"address"},{"internalType":"address","name":"SetMerkleGateTreeForCM","type":"address"},{"internalType":"address","name":"ReportWithdrawalsForSlashedValidatorsForCM","type":"address"},{"internalType":"address","name":"SettleGeneralDelayedPenaltyForCM","type":"address"},{"internalType":"address","name":"CreateOrUpdateOperatorGroupForCM","type":"address"}],"internalType":"struct EasyTrackNewFactories","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"CSMSettleElStealingPenalty","type":"address"},{"internalType":"address","name":"CSMSetVettedGateTree","type":"address"}],"internalType":"struct EasyTrackOldFactories","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalConfig","outputs":[{"components":[{"internalType":"address","name":"agent","type":"address"},{"internalType":"address","name":"lido","type":"address"},{"internalType":"address","name":"burner","type":"address"},{"internalType":"address","name":"resealManager","type":"address"},{"internalType":"address","name":"circuitBreaker","type":"address"},{"internalType":"address","name":"easyTrack","type":"address"},{"internalType":"address","name":"easyTrackEVMScriptExecutor","type":"address"},{"internalType":"address","name":"stakingRouter","type":"address"},{"internalType":"address","name":"triggerableWithdrawalsGateway","type":"address"}],"internalType":"struct GlobalConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}] diff --git a/interfaces/UpgradeVoteScript.json b/interfaces/UpgradeVoteScript.json new file mode 100644 index 00000000..b2d293e7 --- /dev/null +++ b/interfaces/UpgradeVoteScript.json @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"address","name":"upgradeTemplate","type":"address"},{"internalType":"address","name":"timeConstraints","type":"address"},{"internalType":"uint32","name":"enabledDaySpanStart","type":"uint32"},{"internalType":"uint32","name":"enabledDaySpanEnd","type":"uint32"}],"internalType":"struct UpgradeVoteScript.ScriptParams","name":"_params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"InvalidItemsCount","type":"error"},{"inputs":[],"name":"InvalidMerkleGateAddress","type":"error"},{"inputs":[],"name":"CONFIG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DG_ITEMS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENABLED_DAY_SPAN_END","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENABLED_DAY_SPAN_START","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEMPLATE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_CONSTRAINTS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING_ITEMS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"proposalMetadata","type":"string"}],"name":"getEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"proposalMetadata","type":"string"}],"name":"getNewVoteCallBytecode","outputs":[{"internalType":"bytes","name":"newVoteBytecode","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVoteItems","outputs":[{"components":[{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct OmnibusBase.ScriptCall","name":"call","type":"tuple"}],"internalType":"struct OmnibusBase.VoteItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVoteItemsRaw","outputs":[{"components":[{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct OmnibusBase.ScriptCall","name":"call","type":"tuple"}],"internalType":"struct OmnibusBase.VoteItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVotingVoteItems","outputs":[{"components":[{"internalType":"string","name":"description","type":"string"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct OmnibusBase.ScriptCall","name":"call","type":"tuple"}],"internalType":"struct OmnibusBase.VoteItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"voteId","type":"uint256"},{"internalType":"string","name":"proposalMetadata","type":"string"}],"name":"isValidVoteScript","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}] diff --git a/interfaces/ValidatorsExitBusOracle.json b/interfaces/ValidatorsExitBusOracle.json index ba352a4f..2fc38211 100644 --- a/interfaces/ValidatorsExitBusOracle.json +++ b/interfaces/ValidatorsExitBusOracle.json @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"},{"internalType":"address","name":"lidoLocator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressCannotBeSame","type":"error"},{"inputs":[],"name":"AddressCannotBeZero","type":"error"},{"inputs":[],"name":"AdminCannotBeZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"exitDataIndex","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"}],"name":"ExitDataIndexOutOfRange","type":"error"},{"inputs":[],"name":"ExitHashAlreadySubmitted","type":"error"},{"inputs":[],"name":"ExitHashNotSubmitted","type":"error"},{"inputs":[{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"remainingLimit","type":"uint256"}],"name":"ExitRequestsLimitExceeded","type":"error"},{"inputs":[],"name":"HashCannotBeZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"initialRefSlot","type":"uint256"},{"internalType":"uint256","name":"processingRefSlot","type":"uint256"}],"name":"InitialRefSlotCannotBeLessThanProcessingOne","type":"error"},{"inputs":[],"name":"InvalidContractVersionIncrement","type":"error"},{"inputs":[],"name":"InvalidExitDataIndexSortOrder","type":"error"},{"inputs":[],"name":"InvalidModuleId","type":"error"},{"inputs":[],"name":"InvalidRequestsDataLength","type":"error"},{"inputs":[],"name":"InvalidRequestsDataSortOrder","type":"error"},{"inputs":[],"name":"LimitExceeded","type":"error"},{"inputs":[],"name":"NoConsensusReportToProcess","type":"error"},{"inputs":[],"name":"NonZeroContractVersionOnInit","type":"error"},{"inputs":[],"name":"PauseUntilMustBeInFuture","type":"error"},{"inputs":[],"name":"PausedExpected","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ProcessingDeadlineMissed","type":"error"},{"inputs":[],"name":"RefSlotAlreadyProcessing","type":"error"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"prevRefSlot","type":"uint256"}],"name":"RefSlotCannotDecrease","type":"error"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"processingRefSlot","type":"uint256"}],"name":"RefSlotMustBeGreaterThanProcessingOne","type":"error"},{"inputs":[],"name":"RequestsAlreadyDelivered","type":"error"},{"inputs":[],"name":"RequestsNotDelivered","type":"error"},{"inputs":[],"name":"ResumedExpected","type":"error"},{"inputs":[],"name":"SecondsPerSlotCannotBeZero","type":"error"},{"inputs":[],"name":"SenderIsNotTheConsensusContract","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"TooLargeExitsPerFrame","type":"error"},{"inputs":[],"name":"TooLargeFrameDuration","type":"error"},{"inputs":[],"name":"TooLargeMaxExitRequestsLimit","type":"error"},{"inputs":[{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"maxRequestsPerReport","type":"uint256"}],"name":"TooManyExitRequestsInReport","type":"error"},{"inputs":[],"name":"UnexpectedChainConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedVersion","type":"uint256"},{"internalType":"uint256","name":"receivedVersion","type":"uint256"}],"name":"UnexpectedConsensusVersion","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnexpectedContractVersion","type":"error"},{"inputs":[{"internalType":"bytes32","name":"consensusHash","type":"bytes32"},{"internalType":"bytes32","name":"receivedHash","type":"bytes32"}],"name":"UnexpectedDataHash","type":"error"},{"inputs":[{"internalType":"uint256","name":"consensusRefSlot","type":"uint256"},{"internalType":"uint256","name":"dataRefSlot","type":"uint256"}],"name":"UnexpectedRefSlot","type":"error"},{"inputs":[],"name":"UnexpectedRequestsDataLength","type":"error"},{"inputs":[{"internalType":"uint256","name":"format","type":"uint256"}],"name":"UnsupportedRequestsDataFormat","type":"error"},{"inputs":[],"name":"VersionCannotBeSame","type":"error"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"ZeroArgument","type":"error"},{"inputs":[],"name":"ZeroFrameDuration","type":"error"},{"inputs":[],"name":"ZeroPauseDuration","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"prevAddr","type":"address"}],"name":"ConsensusHashContractSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"prevVersion","type":"uint256"}],"name":"ConsensusVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"ContractVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"ExitDataProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxExitRequestsLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exitsPerFrame","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"ExitRequestsLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"ProcessingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"ReportDiscarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"}],"name":"ReportSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"RequestsHashSubmitted","type":"event"},{"anonymous":false,"inputs":[],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxValidatorsPerReport","type":"uint256"}],"name":"SetMaxValidatorsPerReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"validatorIndex","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"validatorPubkey","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ValidatorExitRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestsProcessed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestsCount","type":"uint256"}],"name":"WarnDataIncompleteProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"WarnProcessingMissed","type":"event"},{"inputs":[],"name":"DATA_FORMAT_LIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_REQUEST_LIMIT_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_TYPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENESIS_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_CONSENSUS_CONTRACT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_CONSENSUS_VERSION_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_INFINITELY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESUME_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_SLOT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_DATA_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_REPORT_HASH_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"discardConsensusReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxValidatorsPerReport","type":"uint256"},{"internalType":"uint256","name":"maxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"exitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"finalizeUpgrade_v2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getConsensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusReport","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"},{"internalType":"bool","name":"processingStarted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"getDeliveryTimestamp","outputs":[{"internalType":"uint256","name":"deliveryDateTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExitRequestLimitFullInfo","outputs":[{"internalType":"uint256","name":"maxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"exitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"prevExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"currentExitRequestsLimit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessingRefSlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxValidatorsPerReport","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProcessingState","outputs":[{"components":[{"internalType":"uint256","name":"currentFrameRefSlot","type":"uint256"},{"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bool","name":"dataSubmitted","type":"bool"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"requestsSubmitted","type":"uint256"}],"internalType":"struct ValidatorsExitBusOracle.ProcessingState","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResumeSinceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRequestsProcessed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"consensusContract","type":"address"},{"internalType":"uint256","name":"consensusVersion","type":"uint256"},{"internalType":"uint256","name":"lastProcessingRefSlot","type":"uint256"},{"internalType":"uint256","name":"maxValidatorsPerRequest","type":"uint256"},{"internalType":"uint256","name":"maxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"exitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"pauseFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pauseUntilInclusive","type":"uint256"}],"name":"pauseUntil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setConsensusContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version","type":"uint256"}],"name":"setConsensusVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxExitRequestsLimit","type":"uint256"},{"internalType":"uint256","name":"exitsPerFrame","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"setExitRequestLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxRequests","type":"uint256"}],"name":"setMaxValidatorsPerReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"reportHash","type":"bytes32"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"submitConsensusReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"}],"internalType":"struct ValidatorsExitBus.ExitRequestsData","name":"request","type":"tuple"}],"name":"submitExitRequestsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"submitExitRequestsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"consensusVersion","type":"uint256"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ValidatorsExitBusOracle.ReportData","name":"data","type":"tuple"},{"internalType":"uint256","name":"contractVersion","type":"uint256"}],"name":"submitReportData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"}],"internalType":"struct ValidatorsExitBus.ExitRequestsData","name":"exitsData","type":"tuple"},{"internalType":"uint256[]","name":"exitDataIndexes","type":"uint256[]"},{"internalType":"address","name":"refundRecipient","type":"address"}],"name":"triggerExits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"exitRequests","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"unpackExitRequest","outputs":[{"internalType":"bytes","name":"pubkey","type":"bytes"},{"internalType":"uint256","name":"nodeOpId","type":"uint256"},{"internalType":"uint256","name":"moduleId","type":"uint256"},{"internalType":"uint256","name":"valIndex","type":"uint256"}],"stateMutability":"pure","type":"function"}] +[{"inputs":[{"internalType":"uint256","name":"secondsPerSlot","type":"uint256"},{"internalType":"uint256","name":"genesisTime","type":"uint256"},{"internalType":"address","name":"lidoLocator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressCannotBeSame","type":"error"},{"inputs":[],"name":"AddressCannotBeZero","type":"error"},{"inputs":[],"name":"AdminCannotBeZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"exitDataIndex","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"}],"name":"ExitDataIndexOutOfRange","type":"error"},{"inputs":[],"name":"ExitHashAlreadySubmitted","type":"error"},{"inputs":[],"name":"ExitHashNotSubmitted","type":"error"},{"inputs":[{"internalType":"uint256","name":"balanceEth","type":"uint256"},{"internalType":"uint256","name":"remainingLimitEth","type":"uint256"}],"name":"ExitRequestsLimitExceeded","type":"error"},{"inputs":[],"name":"HashCannotBeZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"initialRefSlot","type":"uint256"},{"internalType":"uint256","name":"processingRefSlot","type":"uint256"}],"name":"InitialRefSlotCannotBeLessThanProcessingOne","type":"error"},{"inputs":[],"name":"InvalidContractVersionIncrement","type":"error"},{"inputs":[],"name":"InvalidExitDataIndexSortOrder","type":"error"},{"inputs":[],"name":"InvalidMaxEBWeight","type":"error"},{"inputs":[],"name":"InvalidModuleId","type":"error"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"InvalidPublicKey","type":"error"},{"inputs":[],"name":"InvalidRequestsDataLength","type":"error"},{"inputs":[],"name":"InvalidRequestsDataSortOrder","type":"error"},{"inputs":[],"name":"InvalidRetrievedKeyLength","type":"error"},{"inputs":[],"name":"LimitExceeded","type":"error"},{"inputs":[],"name":"NoConsensusReportToProcess","type":"error"},{"inputs":[],"name":"NonZeroContractVersionOnInit","type":"error"},{"inputs":[],"name":"PauseUntilMustBeInFuture","type":"error"},{"inputs":[],"name":"PausedExpected","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ProcessingDeadlineMissed","type":"error"},{"inputs":[],"name":"RefSlotAlreadyProcessing","type":"error"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"prevRefSlot","type":"uint256"}],"name":"RefSlotCannotDecrease","type":"error"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"processingRefSlot","type":"uint256"}],"name":"RefSlotMustBeGreaterThanProcessingOne","type":"error"},{"inputs":[],"name":"RequestsAlreadyDelivered","type":"error"},{"inputs":[],"name":"RequestsNotDelivered","type":"error"},{"inputs":[],"name":"ResumedExpected","type":"error"},{"inputs":[],"name":"SecondsPerSlotCannotBeZero","type":"error"},{"inputs":[],"name":"SenderIsNotTheConsensusContract","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"TooLargeFrameDuration","type":"error"},{"inputs":[],"name":"TooLargeItemsPerFrame","type":"error"},{"inputs":[],"name":"TooLargeMaxLimit","type":"error"},{"inputs":[{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"maxRequestsPerReport","type":"uint256"}],"name":"TooManyExitRequestsInReport","type":"error"},{"inputs":[],"name":"UnexpectedChainConfig","type":"error"},{"inputs":[{"internalType":"uint256","name":"expectedVersion","type":"uint256"},{"internalType":"uint256","name":"receivedVersion","type":"uint256"}],"name":"UnexpectedConsensusVersion","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"name":"UnexpectedContractVersion","type":"error"},{"inputs":[{"internalType":"bytes32","name":"consensusHash","type":"bytes32"},{"internalType":"bytes32","name":"receivedHash","type":"bytes32"}],"name":"UnexpectedDataHash","type":"error"},{"inputs":[{"internalType":"uint256","name":"consensusRefSlot","type":"uint256"},{"internalType":"uint256","name":"dataRefSlot","type":"uint256"}],"name":"UnexpectedRefSlot","type":"error"},{"inputs":[],"name":"UnexpectedRequestsDataLength","type":"error"},{"inputs":[],"name":"UnexpectedWCType","type":"error"},{"inputs":[{"internalType":"uint256","name":"format","type":"uint256"}],"name":"UnsupportedRequestsDataFormat","type":"error"},{"inputs":[],"name":"VersionCannotBeSame","type":"error"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"ZeroArgument","type":"error"},{"inputs":[],"name":"ZeroFrameDuration","type":"error"},{"inputs":[],"name":"ZeroPauseDuration","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"prevAddr","type":"address"}],"name":"ConsensusHashContractSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"version","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"prevVersion","type":"uint256"}],"name":"ConsensusVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"ContractVersionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxExitBalanceEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balancePerFrameEth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"ExitBalanceLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"ExitDataProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"ProcessingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"ReportDiscarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"}],"name":"ReportSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"RequestsHashSubmitted","type":"event"},{"anonymous":false,"inputs":[],"name":"Resumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxValidatorsPerReport","type":"uint256"}],"name":"SetMaxValidatorsPerReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"stakingModuleId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"validatorIndex","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"validatorPubkey","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ValidatorExitRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestsProcessed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestsCount","type":"uint256"}],"name":"WarnDataIncompleteProcessing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"WarnProcessingMissed","type":"event"},{"inputs":[],"name":"DATA_FORMAT_LIST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DATA_FORMAT_LIST_WITH_KEY_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_REQUEST_LIMIT_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXIT_TYPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENESIS_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_CONSENSUS_CONTRACT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGE_CONSENSUS_VERSION_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EFFECTIVE_BALANCE_WEIGHT_WC_TYPE_01","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EFFECTIVE_BALANCE_WEIGHT_WC_TYPE_02","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_INFINITELY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESUME_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_SLOT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_DATA_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUBMIT_REPORT_HASH_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"refSlot","type":"uint256"}],"name":"discardConsensusReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxValidatorsPerReport","type":"uint256"},{"internalType":"uint256","name":"maxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"balancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"consensusVersion","type":"uint256"}],"name":"finalizeUpgrade_v3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getConsensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusReport","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"},{"internalType":"bool","name":"processingStarted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getConsensusVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"getDeliveryTimestamp","outputs":[{"internalType":"uint256","name":"deliveryDateTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExitRequestLimitFullInfo","outputs":[{"internalType":"uint256","name":"maxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"balancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"},{"internalType":"uint256","name":"prevExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"currentExitBalanceEth","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessingRefSlot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxValidatorsPerReport","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProcessingState","outputs":[{"components":[{"internalType":"uint256","name":"currentFrameRefSlot","type":"uint256"},{"internalType":"uint256","name":"processingDeadlineTime","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"internalType":"bool","name":"dataSubmitted","type":"bool"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"requestsSubmitted","type":"uint256"}],"internalType":"struct ValidatorsExitBusOracle.ProcessingState","name":"result","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResumeSinceTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRequestsProcessed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"consensusContract","type":"address"},{"internalType":"uint256","name":"consensusVersion","type":"uint256"},{"internalType":"uint256","name":"lastProcessingRefSlot","type":"uint256"},{"internalType":"uint256","name":"maxValidatorsPerReport","type":"uint256"},{"internalType":"uint256","name":"maxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"balancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"pauseFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pauseUntilInclusive","type":"uint256"}],"name":"pauseUntil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setConsensusContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"version","type":"uint256"}],"name":"setConsensusVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxExitBalanceEth","type":"uint256"},{"internalType":"uint256","name":"balancePerFrameEth","type":"uint256"},{"internalType":"uint256","name":"frameDurationInSec","type":"uint256"}],"name":"setExitRequestLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxRequests","type":"uint256"}],"name":"setMaxValidatorsPerReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"reportHash","type":"bytes32"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"submitConsensusReport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"}],"internalType":"struct ValidatorsExitBus.ExitRequestsData","name":"request","type":"tuple"}],"name":"submitExitRequestsData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"exitRequestsHash","type":"bytes32"}],"name":"submitExitRequestsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"consensusVersion","type":"uint256"},{"internalType":"uint256","name":"refSlot","type":"uint256"},{"internalType":"uint256","name":"requestsCount","type":"uint256"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ValidatorsExitBusOracle.ReportData","name":"data","type":"tuple"},{"internalType":"uint256","name":"contractVersion","type":"uint256"}],"name":"submitReportData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"}],"internalType":"struct ValidatorsExitBus.ExitRequestsData","name":"exitsData","type":"tuple"},{"internalType":"uint256[]","name":"exitDataIndexes","type":"uint256[]"},{"internalType":"address","name":"refundRecipient","type":"address"}],"name":"triggerExits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"exitRequests","type":"bytes"},{"internalType":"uint256","name":"dataFormat","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"unpackExitRequest","outputs":[{"internalType":"bytes","name":"pubkey","type":"bytes"},{"internalType":"uint256","name":"nodeOpId","type":"uint256"},{"internalType":"uint256","name":"moduleId","type":"uint256"},{"internalType":"uint256","name":"valIndex","type":"uint256"}],"stateMutability":"pure","type":"function"}] diff --git a/interfaces/WithdrawalsManagerProxy.json b/interfaces/WithdrawalsManagerProxy.json index 92f4356b..29a0e78d 100644 --- a/interfaces/WithdrawalsManagerProxy.json +++ b/interfaces/WithdrawalsManagerProxy.json @@ -1,81 +1 @@ -[ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { "stateMutability": "payable", "type": "fallback" }, - { - "inputs": [], - "name": "implementation", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "newAdmin", "type": "address" } - ], - "name": "proxy_changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxy_getAdmin", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxy_getIsOssified", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { "internalType": "bytes", "name": "setupCalldata", "type": "bytes" } - ], - "name": "proxy_upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] +[{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"proxy_changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxy_getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxy_getIsOssified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"setupCalldata","type":"bytes"}],"name":"proxy_upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] diff --git a/scripts/upgrade_2026_04_30_hoodi_srv3_cmv2.py b/scripts/upgrade_2026_04_30_hoodi_srv3_cmv2.py new file mode 100644 index 00000000..912a61db --- /dev/null +++ b/scripts/upgrade_2026_04_30_hoodi_srv3_cmv2.py @@ -0,0 +1,220 @@ +""" +Vote 2026_04_30 + +1. Submit a Dual Governance proposal to activate Staking Router v3 + Curated Module v2 + Community Staking Module v3 +# ======================== Core ======================== +1.1. Call UpgradeTemplate.startUpgrade +1.2. Upgrade LidoLocator implementation +1.3. Upgrade and finalize StakingRouter +1.4. Upgrade and finalize AccountingOracle +1.5. Upgrade and finalize ValidatorsExitBusOracle +1.6. Upgrade Accounting implementation +1.7. Upgrade WithdrawalVault implementation +1.8. Grant Aragon APP_MANAGER_ROLE to the AGENT +1.9. Set Lido implementation in Kernel +1.10. Revoke Aragon APP_MANAGER_ROLE from the AGENT +1.11. Create and grant Aragon BUFFER_RESERVE_MANAGER_ROLE to the AGENT +1.12. Call finalizeUpgrade_v4 on Lido +1.13. Grant STAKING_MODULE_SHARE_MANAGE_ROLE to EasyTrack executor +1.14. Revoke STAKING_MODULE_UNVETTING_ROLE from old DSM +1.15. Grant STAKING_MODULE_UNVETTING_ROLE to new DSM +1.16. Grant TW_EXIT_LIMIT_MANAGER_ROLE to Agent on TWGateway +1.17. Set TWGateway exit request limits +1.18. Register CircuitBreaker pauser for ConsolidationGateway +# ======================== CSM ======================== +1.19. Upgrade and finalize CSM v3 +1.20. Upgrade and finalize ParametersRegistry v3 +1.21. Upgrade and finalize FeeOracle v3 +1.22. Upgrade CSVettedGate implementation +1.23. Upgrade and finalize Accounting v3 +1.24. Upgrade and finalize FeeDistributor v3 +1.25. Upgrade ExitPenalties implementation +1.26. Upgrade ValidatorStrikes implementation +1.27. Point ValidatorStrikes to the new Ejector +1.28. Revoke REPORT_EL_REWARDS_STEALING_PENALTY_ROLE +1.29. Grant REPORT_GENERAL_DELAYED_PENALTY_ROLE +1.30. Revoke SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE +1.31. Grant SETTLE_GENERAL_DELAYED_PENALTY_ROLE +1.32. Revoke VERIFIER_ROLE from old verifier +1.33. Grant VERIFIER_ROLE to new verifier +1.34. Grant REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE to VerifierV3 +1.35. Grant REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE to Easy Track +1.36. Revoke CREATE_NODE_OPERATOR_ROLE from old PermissionlessGate +1.37. Grant CREATE_NODE_OPERATOR_ROLE to new PermissionlessGate +1.38. Revoke START_REFERRAL_SEASON_ROLE +1.39. Revoke END_REFERRAL_SEASON_ROLE +1.40. Register CircuitBreaker pauser for CSM new verifier +1.41. Register CircuitBreaker pauser for CSM Ejector +1.42. Register CircuitBreaker pauser for CSM identified DVT cluster gate +1.43. Grant CREATE_NODE_OPERATOR_ROLE to identified DVT cluster gate +1.44. Grant SET_BOND_CURVE_ROLE to identified DVT cluster gate +1.45. Grant MANAGE_BOND_CURVES_ROLE to identified DVT cluster curve setup +1.46. Grant MANAGE_CURVE_PARAMETERS_ROLE to identified DVT cluster curve setup +1.47. Execute identified DVT cluster curve setup +1.48. Grant MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE to CSM Committee +1.49. Revoke REQUEST_BURN_SHARES_ROLE from CSM Accounting +1.50. Grant REQUEST_BURN_MY_STETH_ROLE to CSM Accounting +1.51. Revoke TWG full-withdrawal role from old Ejector +1.52. Grant TWG full-withdrawal role to new Ejector +# ======================== Curated Module ======================== +1.53. Add Curated module to StakingRouter +1.54. Grant REQUEST_BURN_MY_STETH_ROLE to Curated Accounting +1.55. Grant TWG full-withdrawal role to Curated Ejector +1.56. Grant RESUME_ROLE to agent on Curated module +1.57. Resume Curated module +1.58. Revoke RESUME_ROLE from agent on Curated module +1.59. Update Curated HashConsensus frame config +1.60. Register CircuitBreaker pauser for Curated module +1.61. Register CircuitBreaker pauser for Curated Accounting +1.62. Register CircuitBreaker pauser for Curated FeeOracle +1.63. Register CircuitBreaker pauser for Curated Verifier +1.64. Register CircuitBreaker pauser for Curated Ejector +# ======================== Finish Upgrade ======================== +1.65. Call UpgradeTemplate.finishUpgrade + +# ======================== EasyTrack ======================== +2. Remove CSMSettleElStealingPenalty ET factory +3. Remove CSMSetVettedGateTree ET factory +4. Add UpdateStakingModuleShareLimits ET factory +5. Add AllowConsolidationPair ET factory +6. Add SetMerkleGateTree CSM ET factory +7. Add ReportWithdrawalsForSlashedValidators CSM ET factory +8. Add SettleGeneralDelayedPenalty CSM ET factory +9. Add SetMerkleGateTree CM ET factory +10. Add ReportWithdrawalsForSlashedValidators CM ET factory +11. Add SettleGeneralDelayedPenalty CM ET factory +12. Add CreateOrUpdateOperatorGroup CM ET factory + +""" + +from typing import Dict, List, Optional, Tuple + +from brownie import interface + +from utils.config import get_deployer_account, get_is_live, get_priority_fee +from utils.dual_governance import submit_proposals +from utils.ipfs import calculate_vote_ipfs_description, upload_vote_ipfs_description +from utils.mainnet_fork import pass_and_exec_dao_vote +from utils.voting import bake_vote_items, confirm_vote_script, create_vote + + +# ============================== Addresses =================================== +UPGRADE_VOTE_SCRIPT = "0xaC83987948dB29c54b91B9a3Bd7a5cA99fA7F1D1" + + +# ============================= Description ================================== +DG_PROPOSAL_METADATA = "Activate Staking Router v3 + Curated Module v2 + Community Staking Module v3" +DG_SUBMISSION_DESCRIPTION = "1. Submit a Dual Governance proposal to activate Staking Router v3 + Curated Module v2 + Community Staking Module v3" +IPFS_DESCRIPTION = """ +1. **Activate Staking Router v3**, including protocol contract upgrades and Dual Governance execution setup. Items 1.1-1.18. +2. **Upgrade Community Staking Module to v3**, including CSM contract upgrades, role updates and identified DVT cluster setup. Items 1.19-1.52. +3. **Add and configure Curated Module v2**. Items 1.53-1.64. +4. **Finalize the protocol upgrade**. Item 1.65. +5. **Update Easy Track factories for CSM v3 and Curated Module v2 operations**. Items 2-12. +""" + + +def is_placeholder_vote_script_address(value: str) -> bool: + normalized = value.strip().lower() + return normalized in ("", "0x0000000000000000000000000000000000000000") or normalized.startswith("todo") + + +def get_dg_items(upgrade_vote_script: Optional[str] = None) -> List[Tuple[str, str]]: + vote_script_address = (upgrade_vote_script or UPGRADE_VOTE_SCRIPT).strip() + if is_placeholder_vote_script_address(vote_script_address): + raise ValueError( + "UpgradeVoteScript address is not configured. " + "Pass upgrade_vote_script explicitly or set UPGRADE_VOTE_SCRIPT at the top of this file." + ) + + omnibus = interface.UpgradeVoteScript(vote_script_address) + dg_items: List[Tuple[str, str]] = [] + + for _, call_script in omnibus.getVoteItems(): + dg_items.append((call_script[0], call_script[1].hex())) + + return dg_items + + +def get_vote_items( + upgrade_vote_script: Optional[str] = None, +) -> Tuple[List[str], List[Tuple[str, str]]]: + vote_script_address = (upgrade_vote_script or UPGRADE_VOTE_SCRIPT).strip() + if is_placeholder_vote_script_address(vote_script_address): + raise ValueError( + "UpgradeVoteScript address is not configured. " + "Pass upgrade_vote_script explicitly or set UPGRADE_VOTE_SCRIPT at the top of this file." + ) + + omnibus = interface.UpgradeVoteScript(vote_script_address) + + vote_desc_items: List[str] = [] + call_script_items: List[Tuple[str, str]] = [] + + dg_items = get_dg_items(upgrade_vote_script) + + dg_call_script = submit_proposals([(dg_items, DG_PROPOSAL_METADATA)]) + vote_desc_items.append(DG_SUBMISSION_DESCRIPTION) + call_script_items.append(dg_call_script[0]) + + voting_items = omnibus.getVotingVoteItems() + for desc, call_script in voting_items: + vote_desc_items.append(desc) + call_script_items.append((call_script[0], call_script[1].hex())) + + return vote_desc_items, call_script_items + + +def start_vote( + tx_params: Dict[str, str], + silent: bool = False, + upgrade_vote_script: Optional[str] = None, +): + vote_desc_items, call_script_items = get_vote_items( + upgrade_vote_script=upgrade_vote_script, + ) + vote_items = bake_vote_items(list(vote_desc_items), list(call_script_items)) + desc_ipfs = ( + calculate_vote_ipfs_description(IPFS_DESCRIPTION) + if silent + else upload_vote_ipfs_description(IPFS_DESCRIPTION) + ) + + vote_id, tx = confirm_vote_script(vote_items, silent, desc_ipfs) and list( + create_vote(vote_items, tx_params, desc_ipfs=desc_ipfs) + ) + + vote_script_address = (upgrade_vote_script or UPGRADE_VOTE_SCRIPT).strip() + assert interface.UpgradeVoteScript(vote_script_address).isValidVoteScript( + vote_id, + DG_PROPOSAL_METADATA, + ) + + return vote_id, tx + + +def main(upgrade_vote_script: Optional[str] = None): + tx_params: Dict[str, str] = {"from": get_deployer_account().address} + if get_is_live(): + tx_params["priority_fee"] = get_priority_fee() + + vote_id, _ = start_vote( + tx_params=tx_params, + silent=False, + upgrade_vote_script=upgrade_vote_script, + ) + vote_id >= 0 and print(f"Vote created: {vote_id}.") + + +def start_and_execute_vote_on_fork_manual(upgrade_vote_script: Optional[str] = None): + if get_is_live(): + raise Exception("This script is for local testing only.") + + tx_params = {"from": get_deployer_account()} + vote_id, _ = start_vote( + tx_params=tx_params, + silent=True, + upgrade_vote_script=upgrade_vote_script, + ) + print(f"Vote created: {vote_id}.") + pass_and_exec_dao_vote(int(vote_id), step_by_step=True) diff --git a/tests/conftest.py b/tests/conftest.py index f14b9cb0..e209869a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -169,7 +169,10 @@ def prefetch_contracts_from_etherscan(): # add contracts here to fetch the abis from etherscan # Use next format to fetch the abi: # Contract.from_explorer() - Contract.from_explorer(contracts.cs_exit_penalties.address) + try: + Contract.from_explorer(contracts.cs_exit_penalties.address) + except Exception as exc: + print(f"warning: unable to prefetch ABI from Etherscan, continuing with local ABIs: {exc}") Helpers._etherscan_is_fetched = True diff --git a/tests/test_2026_04_30_hoodi_srv3_cmv2.py b/tests/test_2026_04_30_hoodi_srv3_cmv2.py new file mode 100644 index 00000000..6cb6e7ec --- /dev/null +++ b/tests/test_2026_04_30_hoodi_srv3_cmv2.py @@ -0,0 +1,1533 @@ +import os + +from typing import NamedTuple, Optional + +import pytest + +from brownie import chain, convert, interface, web3 +from brownie.network.event import EventDict +from brownie.network.transaction import TransactionReceipt + +from utils.config import network_name +from utils.test.tx_tracing_helpers import ( + add_event_emitter, + count_vote_items_by_events, + display_dg_events, + display_voting_events, + group_dg_events_from_receipt, + group_voting_events_from_receipt, +) +from utils.tx_tracing import tx_events_from_receipt +from utils.evm_script import encode_call_script +from utils.dual_governance import PROPOSAL_STATUS +from utils.test.event_validators.common import validate_events_chain +from utils.test.event_validators.dual_governance import validate_dual_governance_submit_event +from utils.test.event_validators.easy_track import ( + EVMScriptFactoryAdded, + validate_evmscript_factory_added_event, + validate_evmscript_factory_removed_event, +) +from utils.voting import find_metadata_by_vote_id +from utils.ipfs import calculate_vote_ipfs_description, get_lido_vote_cid_from_str + + +# ============================================================================ +# ============================== Import vote ================================= +# ============================================================================ +from scripts.upgrade_2026_04_30_hoodi_srv3_cmv2 import ( + IPFS_DESCRIPTION, + start_vote, + get_vote_items, + get_dg_items, + DG_PROPOSAL_METADATA, + UPGRADE_VOTE_SCRIPT, +) + + +# ============================================================================ +# ============================== Constants =================================== +# ============================================================================ +def _selector(signature: str) -> str: + return web3.keccak(text=signature).hex()[:10] + + +ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" +EMERGENCY_PROTECTED_TIMELOCK = "0x0A5E22782C0Bd4AddF10D771f0bF0406B038282d" +HOODI_LEGACY_STAKING_MODULE_MANAGER = "0xE28f573b732632fdE03BD5507A7d475383e8512E" +DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000" +APP_MANAGER_ROLE = web3.keccak(text="APP_MANAGER_ROLE").hex() +BUFFER_RESERVE_MANAGER_ROLE = web3.keccak(text="BUFFER_RESERVE_MANAGER_ROLE").hex() +STAKING_MODULE_MANAGE_ROLE = web3.keccak(text="STAKING_MODULE_MANAGE_ROLE").hex() +STAKING_MODULE_UNVETTING_ROLE = web3.keccak(text="STAKING_MODULE_UNVETTING_ROLE").hex() +STAKING_MODULE_SHARE_MANAGE_ROLE = web3.keccak(text="STAKING_MODULE_SHARE_MANAGE_ROLE").hex() +REPORT_EXITED_VALIDATORS_ROLE = web3.keccak(text="REPORT_EXITED_VALIDATORS_ROLE").hex() +REPORT_VALIDATOR_EXITING_STATUS_ROLE = web3.keccak(text="REPORT_VALIDATOR_EXITING_STATUS_ROLE").hex() +REPORT_VALIDATOR_EXIT_TRIGGERED_ROLE = web3.keccak(text="REPORT_VALIDATOR_EXIT_TRIGGERED_ROLE").hex() +REPORT_REWARDS_MINTED_ROLE = web3.keccak(text="REPORT_REWARDS_MINTED_ROLE").hex() +TW_EXIT_LIMIT_MANAGER_ROLE = web3.keccak(text="TW_EXIT_LIMIT_MANAGER_ROLE").hex() +REPORT_GENERAL_DELAYED_PENALTY_ROLE = web3.keccak(text="REPORT_GENERAL_DELAYED_PENALTY_ROLE").hex() +SETTLE_GENERAL_DELAYED_PENALTY_ROLE = web3.keccak(text="SETTLE_GENERAL_DELAYED_PENALTY_ROLE").hex() +REPORT_EL_REWARDS_STEALING_PENALTY_ROLE = web3.keccak(text="REPORT_EL_REWARDS_STEALING_PENALTY_ROLE").hex() +SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE = web3.keccak(text="SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE").hex() +VERIFIER_ROLE = web3.keccak(text="VERIFIER_ROLE").hex() +REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE = web3.keccak(text="REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE").hex() +REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE = web3.keccak(text="REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE").hex() +CREATE_NODE_OPERATOR_ROLE = web3.keccak(text="CREATE_NODE_OPERATOR_ROLE").hex() +SET_BOND_CURVE_ROLE = web3.keccak(text="SET_BOND_CURVE_ROLE").hex() +MANAGE_BOND_CURVES_ROLE = web3.keccak(text="MANAGE_BOND_CURVES_ROLE").hex() +MANAGE_CURVE_PARAMETERS_ROLE = web3.keccak(text="MANAGE_CURVE_PARAMETERS_ROLE").hex() +RESUME_ROLE = web3.keccak(text="RESUME_ROLE").hex() +START_REFERRAL_SEASON_ROLE = web3.keccak(text="START_REFERRAL_SEASON_ROLE").hex() +END_REFERRAL_SEASON_ROLE = web3.keccak(text="END_REFERRAL_SEASON_ROLE").hex() +MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE = web3.keccak(text="MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE").hex() +REQUEST_BURN_SHARES_ROLE = web3.keccak(text="REQUEST_BURN_SHARES_ROLE").hex() +REQUEST_BURN_MY_STETH_ROLE = web3.keccak(text="REQUEST_BURN_MY_STETH_ROLE").hex() +ADD_FULL_WITHDRAWAL_REQUEST_ROLE = web3.keccak(text="ADD_FULL_WITHDRAWAL_REQUEST_ROLE").hex() +VALIDATE_STAKING_MODULE_SHARE_PARAMS_SELECTOR = _selector("validateParams((uint16,uint16,uint16,uint16))") +UPDATE_MODULE_SHARES_SELECTOR = _selector("updateModuleShares(uint256,uint16,uint16)") +ALLOW_CONSOLIDATION_PAIR_SELECTOR = _selector("allowPair(uint256,uint256,address)") +SET_TREE_PARAMS_SELECTOR = _selector("setTreeParams(bytes32,string)") +REPORT_SLASHED_WITHDRAWN_VALIDATORS_SELECTOR = _selector( + "reportSlashedWithdrawnValidators((uint256,uint256,uint256,uint256,bool)[])" +) +SETTLE_GENERAL_DELAYED_PENALTY_SELECTOR = _selector("settleGeneralDelayedPenalty(uint256[],uint256[])") +CREATE_OR_UPDATE_OPERATOR_GROUP_SELECTOR = _selector( + "createOrUpdateOperatorGroup(uint256,((uint64,uint16)[],(bytes)[]))" +) +AO_CONTRACT_VERSION = 5 +AO_CONSENSUS_VERSION = 6 +AO_PREV_CONSENSUS_VERSION = 5 +VEBO_CONTRACT_VERSION = 3 +VEBO_CONSENSUS_VERSION = 5 +VEBO_PREV_CONSENSUS_VERSION = 4 +VEBO_MAX_VALIDATORS_PER_REPORT = 600 +VALIDATORS_EXIT_BUS_MAX_EXIT_BALANCE_ETH = 358400 +VALIDATORS_EXIT_BUS_BALANCE_PER_FRAME_ETH = 32 +VALIDATORS_EXIT_BUS_FRAME_DURATION_IN_SEC = 48 +WITHDRAWAL_VAULT_CONTRACT_VERSION = 3 +LIDO_CONTRACT_VERSION = 4 +TW_MAX_EXIT_REQUESTS = 250 +TW_EXITS_PER_FRAME = 1 +TW_FRAME_DURATION_IN_SEC = 240 +CURATED_MODULE_ID = 5 +CURATED_INITIAL_EPOCH = 93833 +CURATED_EPOCHS_PER_FRAME = 1575 +IDVT_BOND_CURVE = [[1, 1500000000000000000], [2, 500000000000000000]] +IDVT_KEY_REMOVAL_CHARGE = 10000000000000000 +IDVT_GENERAL_DELAYED_PENALTY_FINE = 50000000000000000 +IDVT_QUEUE_PRIORITY = 1 +IDVT_QUEUE_MAX_DEPOSITS = 40 +IDVT_REWARD_SHARE_DATA = [[1, 5834], [65, 3334]] +IDVT_ALLOWED_EXIT_DELAY = 432000 +IDVT_EXIT_DELAY_FEE = 50000000000000000 + +# ============================================================================ +# ============================= Test params ================================== +# ============================================================================ +EXPECTED_VOTE_ID = None +EXPECTED_DG_PROPOSAL_ID = None +EXPECTED_VOTE_EVENTS_COUNT = None +EXPECTED_DG_EVENTS_FROM_AGENT = 65 +EXPECTED_DG_EVENTS_COUNT = 65 +IPFS_DESCRIPTION_HASH = None +UPGRADE_VOTE_SCRIPT_ENV = "HOODI_UPGRADE_VOTE_SCRIPT" + + +class StakingModuleItem(NamedTuple): + id: int + staking_module_address: str + name: str + staking_module_fee: int + stake_share_limit: int + treasury_fee: int + priority_exit_share_threshold: int + max_deposits_per_block: int + min_deposit_block_distance: int + + +def _is_placeholder_address(value: str) -> bool: + normalized = str(value).lower() + return normalized in ("", "0x0000000000000000000000000000000000000000") or normalized.startswith("todo") + + +def _is_placeholder_text(value: str) -> bool: + return "TODO:" in value + + +def _event_list(events: EventDict, name: str): + return [event_item for event_item in events if event_item.name == name] + + +def _single_event(events: EventDict, name: str): + items = _event_list(events, name) + assert len(items) == 1, f"Expected exactly one {name} event, got {len(items)}" + return items[0] + + +def _normalize_role(role_value) -> str: + if isinstance(role_value, bytes): + return role_value.hex().replace("0x", "") + + if hasattr(role_value, "hex") and callable(role_value.hex): + return role_value.hex().replace("0x", "") + + return str(role_value).replace("0x", "") + + +def _assert_emitted_by(event_item, emitted_by: str) -> None: + assert convert.to_address(event_item["_emitted_by"]) == convert.to_address( + emitted_by + ), f"Wrong event emitter: expected {emitted_by}, got {event_item['_emitted_by']}" + + +def _permission(contract_address: str, selector: str) -> str: + return convert.to_address(contract_address).lower() + selector.lower().replace("0x", "") + + +def _concat_permissions(*permissions: str) -> str: + assert permissions, "Expected at least one permission" + return permissions[0] + "".join(permission.replace("0x", "") for permission in permissions[1:]) + + +def _raw_event_values(raw_event: dict) -> dict: + return {item["name"]: item["value"] for item in raw_event["data"]} + + +def _group_agent_dg_events_from_receipt(receipt: TransactionReceipt, timelock: str, agent: str) -> list[EventDict]: + events = tx_events_from_receipt(receipt) + + assert len(events) >= 1, "Unexpected events count" + assert ( + convert.to_address(events[-1]["address"]) == convert.to_address(timelock) + and events[-1]["name"] == "ProposalExecuted" + ), "Unexpected Dual Governance service event" + + groups = [] + current_group = None + + for event in events[:-1]: + event_values = _raw_event_values(event) if event["name"] == "LogScriptCall" else {} + is_start_of_new_group = event["name"] == "LogScriptCall" and convert.to_address( + event_values["src"] + ) == convert.to_address(agent) + + if is_start_of_new_group: + current_group = [] + groups.append(current_group) + + assert current_group is not None, "Unexpected DG events chain" + current_group.append(add_event_emitter(event)) + + return [EventDict(group) for group in groups] + + +def validate_proxy_upgrade_event( + event: EventDict, + implementation: str, + emitted_by: Optional[str] = None, + events_chain: Optional[list[str]] = None, +) -> None: + _events_chain = events_chain or ["LogScriptCall", "Upgraded"] + validate_events_chain([e.name for e in event], _events_chain) + + assert event.count("LogScriptCall") == 1 + assert event.count("Upgraded") == 1 + + upgraded_event = _single_event(event, "Upgraded") + assert convert.to_address(upgraded_event["implementation"]) == convert.to_address(implementation), "Wrong implementation address" + + if emitted_by is not None: + _assert_emitted_by(upgraded_event, emitted_by) + + +def validate_contract_version_set_event( + event: EventDict, + version: int, + emitted_by: Optional[str] = None, + events_chain: Optional[list[str]] = None, +) -> None: + _events_chain = events_chain or ["LogScriptCall", "ContractVersionSet"] + validate_events_chain([e.name for e in event], _events_chain) + + assert event.count("ContractVersionSet") == 1 + contract_version_event = _single_event(event, "ContractVersionSet") + assert contract_version_event["version"] == version, "Wrong contract version" + + if emitted_by is not None: + _assert_emitted_by(contract_version_event, emitted_by) + + +def validate_consensus_version_set_event( + event: EventDict, + new_version: int, + prev_version: int, + emitted_by: Optional[str] = None, + events_chain: Optional[list[str]] = None, +) -> None: + _events_chain = events_chain or ["LogScriptCall", "ConsensusVersionSet"] + validate_events_chain([e.name for e in event], _events_chain) + + assert event.count("ConsensusVersionSet") == 1 + consensus_version_event = _single_event(event, "ConsensusVersionSet") + assert consensus_version_event["version"] == new_version, "Wrong new consensus version" + assert consensus_version_event["prevVersion"] == prev_version, "Wrong previous consensus version" + + if emitted_by is not None: + _assert_emitted_by(consensus_version_event, emitted_by) + + +def validate_role_grant_event( + event: EventDict, + role_hash: str, + account: str, + sender: str, + emitted_by: Optional[str] = None, +) -> None: + validate_events_chain([e.name for e in event], ["LogScriptCall", "RoleGranted"]) + + assert event.count("RoleGranted") == 1 + role_granted_event = _single_event(event, "RoleGranted") + assert _normalize_role(role_granted_event["role"]) == role_hash.replace("0x", ""), "Wrong role hash" + assert convert.to_address(role_granted_event["account"]) == convert.to_address(account), "Wrong granted account" + assert convert.to_address(role_granted_event["sender"]) == convert.to_address(sender), "Wrong role grant sender" + + if emitted_by is not None: + _assert_emitted_by(role_granted_event, emitted_by) + + +def validate_role_revoke_event( + event: EventDict, + role_hash: str, + account: str, + sender: str, + emitted_by: Optional[str] = None, +) -> None: + validate_events_chain([e.name for e in event], ["LogScriptCall", "RoleRevoked"]) + + assert event.count("RoleRevoked") == 1 + role_revoked_event = _single_event(event, "RoleRevoked") + assert _normalize_role(role_revoked_event["role"]) == role_hash.replace("0x", ""), "Wrong role hash" + assert convert.to_address(role_revoked_event["account"]) == convert.to_address(account), "Wrong revoked account" + assert convert.to_address(role_revoked_event["sender"]) == convert.to_address(sender), "Wrong role revoke sender" + + if emitted_by is not None: + _assert_emitted_by(role_revoked_event, emitted_by) + +def validate_module_add(event: EventDict, module: StakingModuleItem, emitted_by: str, sender: str) -> None: + validate_events_chain( + [e.name for e in event], + [ + "LogScriptCall", + "StakingModuleAdded", + "StakingModuleShareLimitSet", + "StakingModuleFeesSet", + "StakingModuleMaxDepositsPerBlockSet", + "StakingModuleMinDepositBlockDistanceSet", + "StakingRouterETHDeposited", + ], + ) + + module_added_event = _single_event(event, "StakingModuleAdded") + assert module_added_event["stakingModuleId"] == module.id + assert convert.to_address(module_added_event["stakingModule"]) == convert.to_address(module.staking_module_address) + assert module_added_event["name"] == module.name + assert convert.to_address(module_added_event["createdBy"]) == convert.to_address(sender) + _assert_emitted_by(module_added_event, emitted_by) + + module_share_limit_event = _single_event(event, "StakingModuleShareLimitSet") + assert module_share_limit_event["stakingModuleId"] == module.id + assert module_share_limit_event["stakeShareLimit"] == module.stake_share_limit + assert module_share_limit_event["priorityExitShareThreshold"] == module.priority_exit_share_threshold + assert convert.to_address(module_share_limit_event["setBy"]) == convert.to_address(sender) + _assert_emitted_by(module_share_limit_event, emitted_by) + + module_fees_event = _single_event(event, "StakingModuleFeesSet") + assert module_fees_event["stakingModuleId"] == module.id + assert module_fees_event["stakingModuleFee"] == module.staking_module_fee + assert module_fees_event["treasuryFee"] == module.treasury_fee + assert convert.to_address(module_fees_event["setBy"]) == convert.to_address(sender) + _assert_emitted_by(module_fees_event, emitted_by) + + max_deposits_event = _single_event(event, "StakingModuleMaxDepositsPerBlockSet") + assert max_deposits_event["stakingModuleId"] == module.id + assert max_deposits_event["maxDepositsPerBlock"] == module.max_deposits_per_block + assert convert.to_address(max_deposits_event["setBy"]) == convert.to_address(sender) + _assert_emitted_by(max_deposits_event, emitted_by) + + min_distance_event = _single_event(event, "StakingModuleMinDepositBlockDistanceSet") + assert min_distance_event["stakingModuleId"] == module.id + assert min_distance_event["minDepositBlockDistance"] == module.min_deposit_block_distance + assert convert.to_address(min_distance_event["setBy"]) == convert.to_address(sender) + _assert_emitted_by(min_distance_event, emitted_by) + + deposited_event = _single_event(event, "StakingRouterETHDeposited") + assert deposited_event["stakingModuleId"] == module.id + assert deposited_event["amount"] == 0 + _assert_emitted_by(deposited_event, emitted_by) + + +def validate_circuit_breaker_registration_event( + event: EventDict, + circuit_breaker: str, + pausable: str, + pauser: str, +) -> None: + validate_events_chain( + [e.name for e in event], + ["LogScriptCall", "PauserSet", "HeartbeatUpdated"], + ) + + pauser_set_event = _single_event(event, "PauserSet") + assert convert.to_address(pauser_set_event["pausable"]) == convert.to_address(pausable) + assert convert.to_address(pauser_set_event["previousPauser"]) == convert.to_address(ZERO_ADDRESS) + assert convert.to_address(pauser_set_event["newPauser"]) == convert.to_address(pauser) + _assert_emitted_by(pauser_set_event, circuit_breaker) + + heartbeat_updated_event = _single_event(event, "HeartbeatUpdated") + assert convert.to_address(heartbeat_updated_event["pauser"]) == convert.to_address(pauser) + assert heartbeat_updated_event["newHeartbeatExpiry"] > 0 + _assert_emitted_by(heartbeat_updated_event, circuit_breaker) + + +@pytest.fixture(scope="module") +def runtime_upgrade_context(): + if network_name() != "hoodi-fork": + pytest.skip("Run the dedicated Hoodi upgrade test on --network hoodi-fork.") + + upgrade_vote_script = os.getenv(UPGRADE_VOTE_SCRIPT_ENV, UPGRADE_VOTE_SCRIPT) + + if ( + _is_placeholder_address(upgrade_vote_script) + or _is_placeholder_text(DG_PROPOSAL_METADATA) + or _is_placeholder_text(IPFS_DESCRIPTION) + ): + pytest.skip( + "Upgrade vote script address is missing. Set HOODI_UPGRADE_VOTE_SCRIPT " + "or UPGRADE_VOTE_SCRIPT in scripts/upgrade_2026_04_30_hoodi_srv3_cmv2.py first." + ) + + vote_script = interface.UpgradeVoteScript(upgrade_vote_script) + upgrade_template = vote_script.TEMPLATE() + upgrade_config = interface.UpgradeConfig(vote_script.CONFIG()) + locator_impl = interface.LidoLocator(upgrade_config.getCoreUpgradeConfig()["newLocatorImpl"]) + + global_config = upgrade_config.getGlobalConfig() + core_config = upgrade_config.getCoreUpgradeConfig() + csm_config = upgrade_config.getCSMUpgradeConfig() + curated_config = upgrade_config.getCuratedModuleConfig() + easy_track_new_factories, easy_track_old_factories = upgrade_config.getEasyTrackConfig() + + # Load ABIs for Brownie receipt event decoding. + interface.CircuitBreaker(global_config["circuitBreaker"]) + interface.ValidatorsExitBusOracle(core_config["validatorsExitBusOracle"]) + interface.CSParametersRegistry(csm_config["parametersRegistry"]) + interface.OneShotCurveSetup(csm_config["identifiedDVTClusterCurveSetup"]) + + dual_governance = interface.DualGovernance(upgrade_config.DUAL_GOVERNANCE()) + dual_governance_admin_executor = None + for proposer in dual_governance.getProposers(): + try: + proposer_account = proposer["account"] + proposer_executor = proposer["executor"] + except (KeyError, TypeError): + proposer_account = proposer[0] + proposer_executor = proposer[1] + + if convert.to_address(proposer_account) == convert.to_address(upgrade_config.VOTING()): + dual_governance_admin_executor = proposer_executor + break + + assert dual_governance_admin_executor is not None, "Voting proposer is not registered in Dual Governance" + + validator_strikes = interface.IValidatorStrikesV3(csm_config["strikes"]) + old_csm_ejector = validator_strikes.ejector() + + return { + "upgrade_vote_script": upgrade_vote_script, + "upgrade_template": upgrade_template, + "voting": upgrade_config.VOTING(), + "agent": upgrade_config.AGENT(), + "dual_governance": upgrade_config.DUAL_GOVERNANCE(), + "dual_governance_admin_executor": dual_governance_admin_executor, + "acl": core_config["acl"], + "aragon_kernel": core_config["kernel"], + "lido": global_config["lido"], + "easy_track": global_config["easyTrack"], + "lido_app_id": core_config["lidoAppId"], + "lido_impl": core_config["newLidoImpl"], + "lido_locator": core_config["locator"], + "lido_locator_impl": core_config["newLocatorImpl"], + "staking_router": global_config["stakingRouter"], + "staking_router_impl": core_config["newStakingRouterImpl"], + "accounting_oracle": core_config["accountingOracle"], + "accounting_oracle_impl": core_config["newAccountingOracleImpl"], + "validators_exit_bus_oracle": core_config["validatorsExitBusOracle"], + "validators_exit_bus_oracle_impl": core_config["newValidatorsExitBusOracleImpl"], + "accounting": core_config["accounting"], + "accounting_impl": core_config["newAccountingImpl"], + "withdrawal_vault": core_config["withdrawalVault"], + "withdrawal_vault_impl": core_config["newWithdrawalVaultImpl"], + "validator_exit_delay_verifier": locator_impl.validatorExitDelayVerifier(), + "easytrack_evm_script_executor": global_config["easyTrackEVMScriptExecutor"], + "circuit_breaker": global_config["circuitBreaker"], + "consolidation_gateway": core_config["consolidationGateway"], + "consolidation_gateway_pauser": core_config["consolidationGatewayPauser"], + "curated_module_committee": core_config["curatedModuleCommittee"], + "old_deposit_security_module": core_config["oldDepositSecurityModule"], + "new_deposit_security_module": core_config["newDepositSecurityModule"], + "triggerable_withdrawals_gateway": global_config["triggerableWithdrawalsGateway"], + "burner": global_config["burner"], + "csm": csm_config["csm"], + "csm_impl": csm_config["csmImpl"], + "cs_parameters_registry": csm_config["parametersRegistry"], + "cs_parameters_registry_impl": csm_config["parametersRegistryImpl"], + "cs_fee_oracle": csm_config["feeOracle"], + "cs_fee_oracle_impl": csm_config["feeOracleImpl"], + "cs_fee_oracle_consensus_version": csm_config["feeOracleConsensusVersion"], + "cs_vetted_gate": csm_config["vettedGate"], + "cs_vetted_gate_impl": csm_config["vettedGateImpl"], + "cs_accounting": csm_config["accounting"], + "cs_accounting_impl": csm_config["accountingImpl"], + "cs_fee_distributor": csm_config["feeDistributor"], + "cs_fee_distributor_impl": csm_config["feeDistributorImpl"], + "cs_exit_penalties": csm_config["exitPenalties"], + "cs_exit_penalties_impl": csm_config["exitPenaltiesImpl"], + "cs_validator_strikes": csm_config["strikes"], + "cs_validator_strikes_impl": csm_config["strikesImpl"], + "old_verifier": csm_config["oldVerifier"], + "verifier_v3": csm_config["newVerifier"], + "old_permissionless_gate": csm_config["oldPermissionlessGate"], + "new_permissionless_gate": csm_config["newPermissionlessGate"], + "identified_dvt_cluster_gate": csm_config["identifiedDVTClusterGate"], + "identified_dvt_cluster_curve_setup": csm_config["identifiedDVTClusterCurveSetup"], + "identified_dvt_cluster_bond_curve_id": csm_config["identifiedDVTClusterBondCurveId"], + "old_csm_ejector": old_csm_ejector, + "csm_ejector": csm_config["ejector"], + "csm_committee": csm_config["csmCommittee"], + "curated_module": curated_config["module"], + "curated_gates": curated_config["curatedGates"], + "curated_accounting": curated_config["accounting"], + "curated_ejector": curated_config["ejector"], + "curated_fee_oracle": curated_config["feeOracle"], + "curated_verifier": curated_config["verifier"], + "curated_circuit_breaker_pauser": curated_config["circuitBreakerPauser"], + "curated_hash_consensus": curated_config["hashConsensus"], + "curated_module_item": StakingModuleItem( + id=CURATED_MODULE_ID, + staking_module_address=curated_config["module"], + name=curated_config["moduleName"], + staking_module_fee=curated_config["stakingModuleFee"], + stake_share_limit=curated_config["stakeShareLimit"], + treasury_fee=curated_config["treasuryFee"], + priority_exit_share_threshold=curated_config["priorityExitShareThreshold"], + max_deposits_per_block=curated_config["maxDepositsPerBlock"], + min_deposit_block_distance=curated_config["minDepositBlockDistance"], + ), + "update_staking_module_share_limits_factory": easy_track_new_factories["UpdateStakingModuleShareLimits"], + "allow_consolidation_pair_factory": easy_track_new_factories["AllowConsolidationPair"], + "set_merkle_gate_tree_for_csm_factory": easy_track_new_factories["SetMerkleGateTreeForCSM"], + "report_withdrawals_for_slashed_validators_for_csm_factory": easy_track_new_factories[ + "ReportWithdrawalsForSlashedValidatorsForCSM" + ], + "settle_general_delayed_penalty_for_csm_factory": easy_track_new_factories[ + "SettleGeneralDelayedPenaltyForCSM" + ], + "set_merkle_gate_tree_for_cm_factory": easy_track_new_factories["SetMerkleGateTreeForCM"], + "report_withdrawals_for_slashed_validators_for_cm_factory": easy_track_new_factories[ + "ReportWithdrawalsForSlashedValidatorsForCM" + ], + "settle_general_delayed_penalty_for_cm_factory": easy_track_new_factories[ + "SettleGeneralDelayedPenaltyForCM" + ], + "create_or_update_operator_group_factory": easy_track_new_factories["CreateOrUpdateOperatorGroupForCM"], + "old_csm_settle_el_stealing_penalty_factory": easy_track_old_factories["CSMSettleElStealingPenalty"], + "old_csm_set_vetted_gate_tree_factory": easy_track_old_factories["CSMSetVettedGateTree"], + "consolidation_migrator": core_config["consolidationMigrator"], + "meta_registry": curated_config["metaRegistry"], + } + + +@pytest.fixture(scope="module") +def dual_governance_proposal_calls(runtime_upgrade_context): + dg_items = get_dg_items(runtime_upgrade_context["upgrade_vote_script"]) + + proposal_calls = [] + for target, data in dg_items: + proposal_calls.append( + { + "target": target, + "value": 0, + "data": data, + } + ) + + return proposal_calls + + +def test_vote(helpers, accounts, ldo_holder, vote_ids_from_env, stranger, dual_governance_proposal_calls, runtime_upgrade_context): + ctx = runtime_upgrade_context + + voting = interface.Voting(ctx["voting"]) + agent = interface.Agent(ctx["agent"]) + timelock = interface.EmergencyProtectedTimelock(EMERGENCY_PROTECTED_TIMELOCK) + dual_governance = interface.DualGovernance(ctx["dual_governance"]) + easy_track = interface.EasyTrack(ctx["easy_track"]) + + _, call_script_items = get_vote_items(upgrade_vote_script=ctx["upgrade_vote_script"]) + dg_items = get_dg_items(ctx["upgrade_vote_script"]) + upgrade_template = ctx["upgrade_template"] + + expected_vote_events_count = EXPECTED_VOTE_EVENTS_COUNT or len(call_script_items) + expected_dg_events_from_agent = EXPECTED_DG_EVENTS_FROM_AGENT or len(dg_items) + expected_dg_events_count = EXPECTED_DG_EVENTS_COUNT or len(dg_items) + expected_ipfs_description_hash = IPFS_DESCRIPTION_HASH or calculate_vote_ipfs_description(IPFS_DESCRIPTION)["cid"] + old_easy_track_factories = [ + ctx["old_csm_settle_el_stealing_penalty_factory"], + ctx["old_csm_set_vetted_gate_tree_factory"], + ] + new_easy_track_factories = [ + ctx["update_staking_module_share_limits_factory"], + ctx["allow_consolidation_pair_factory"], + ctx["set_merkle_gate_tree_for_csm_factory"], + ctx["report_withdrawals_for_slashed_validators_for_csm_factory"], + ctx["settle_general_delayed_penalty_for_csm_factory"], + ctx["set_merkle_gate_tree_for_cm_factory"], + ctx["report_withdrawals_for_slashed_validators_for_cm_factory"], + ctx["settle_general_delayed_penalty_for_cm_factory"], + ctx["create_or_update_operator_group_factory"], + ] + csm_tree_gate_permissions = _concat_permissions( + _permission(ctx["cs_vetted_gate"], SET_TREE_PARAMS_SELECTOR), + _permission(ctx["identified_dvt_cluster_gate"], SET_TREE_PARAMS_SELECTOR), + ) + curated_tree_gate_permissions = _concat_permissions( + *[_permission(gate, SET_TREE_PARAMS_SELECTOR) for gate in ctx["curated_gates"]] + ) + + # ========================================================================= + # ======================== Identify or Create vote ======================== + # ========================================================================= + if vote_ids_from_env: + vote_id = vote_ids_from_env[0] + if EXPECTED_VOTE_ID is not None: + assert vote_id == EXPECTED_VOTE_ID + elif EXPECTED_VOTE_ID is not None and voting.votesLength() > EXPECTED_VOTE_ID: + vote_id = EXPECTED_VOTE_ID + else: + vote_id, _ = start_vote( + {"from": ldo_holder}, + silent=True, + upgrade_vote_script=ctx["upgrade_vote_script"], + ) + + onchain_script = voting.getVote(vote_id)["script"] + assert str(onchain_script).lower() == encode_call_script(call_script_items).lower() + + expected_dg_proposal_id = EXPECTED_DG_PROPOSAL_ID + dg_proposals_count_before_vote_execution = timelock.getProposalsCount() + + # ========================================================================= + # ============================= Execute Vote ============================== + # ========================================================================= + is_executed = voting.getVote(vote_id)["executed"] + if not is_executed: + # ======================================================================= + # ========================= Before voting checks ======================== + # ======================================================================= + + initial_factories = easy_track.getEVMScriptFactories() + for factory in old_easy_track_factories: + assert factory in initial_factories + for factory in new_easy_track_factories: + assert factory not in initial_factories + + assert get_lido_vote_cid_from_str(find_metadata_by_vote_id(vote_id)) == expected_ipfs_description_hash + + vote_tx: TransactionReceipt = helpers.execute_vote(vote_id=vote_id, accounts=accounts, dao_voting=voting) + display_voting_events(vote_tx) + vote_events = group_voting_events_from_receipt(vote_tx) + + # ======================================================================= + # ========================= After voting checks ========================= + # ======================================================================= + + new_factories = easy_track.getEVMScriptFactories() + for factory in old_easy_track_factories: + assert factory not in new_factories + for factory in new_easy_track_factories: + assert factory in new_factories + + assert len(vote_events) == expected_vote_events_count + assert count_vote_items_by_events(vote_tx, voting.address) == expected_vote_events_count + + if expected_dg_proposal_id is None: + expected_dg_proposal_id = dg_proposals_count_before_vote_execution + 1 + + assert expected_dg_proposal_id == timelock.getProposalsCount() + + # 1. Submit a Dual Governance proposal to activate Staking Router v3 + Curated Module v2 + Community Staking Module v3 + validate_dual_governance_submit_event( + vote_events[0], + proposal_id=expected_dg_proposal_id, + proposer=ctx["voting"], + executor=ctx["dual_governance_admin_executor"], + metadata=DG_PROPOSAL_METADATA, + proposal_calls=dual_governance_proposal_calls, + ) + + # 2. Remove CSMSettleElStealingPenalty ET factory + validate_evmscript_factory_removed_event( + vote_events[1], + factory_addr=ctx["old_csm_settle_el_stealing_penalty_factory"], + emitted_by=easy_track, + ) + + # 3. Remove CSMSetVettedGateTree ET factory + validate_evmscript_factory_removed_event( + vote_events[2], + factory_addr=ctx["old_csm_set_vetted_gate_tree_factory"], + emitted_by=easy_track, + ) + + # 4. Add UpdateStakingModuleShareLimits ET factory + validate_evmscript_factory_added_event( + event=vote_events[3], + p=EVMScriptFactoryAdded( + factory_addr=ctx["update_staking_module_share_limits_factory"], + permissions=_concat_permissions( + _permission( + ctx["update_staking_module_share_limits_factory"], + VALIDATE_STAKING_MODULE_SHARE_PARAMS_SELECTOR, + ), + _permission(ctx["staking_router"], UPDATE_MODULE_SHARES_SELECTOR), + ), + ), + emitted_by=easy_track, + ) + + # 5. Add AllowConsolidationPair ET factory + validate_evmscript_factory_added_event( + event=vote_events[4], + p=EVMScriptFactoryAdded( + factory_addr=ctx["allow_consolidation_pair_factory"], + permissions=_permission(ctx["consolidation_migrator"], ALLOW_CONSOLIDATION_PAIR_SELECTOR), + ), + emitted_by=easy_track, + ) + + # 6. Add SetMerkleGateTree CSM ET factory + validate_evmscript_factory_added_event( + event=vote_events[5], + p=EVMScriptFactoryAdded( + factory_addr=ctx["set_merkle_gate_tree_for_csm_factory"], + permissions=csm_tree_gate_permissions, + ), + emitted_by=easy_track, + ) + + # 7. Add ReportWithdrawalsForSlashedValidators CSM ET factory + validate_evmscript_factory_added_event( + event=vote_events[6], + p=EVMScriptFactoryAdded( + factory_addr=ctx["report_withdrawals_for_slashed_validators_for_csm_factory"], + permissions=_permission(ctx["csm"], REPORT_SLASHED_WITHDRAWN_VALIDATORS_SELECTOR), + ), + emitted_by=easy_track, + ) + + # 8. Add SettleGeneralDelayedPenalty CSM ET factory + validate_evmscript_factory_added_event( + event=vote_events[7], + p=EVMScriptFactoryAdded( + factory_addr=ctx["settle_general_delayed_penalty_for_csm_factory"], + permissions=_permission(ctx["csm"], SETTLE_GENERAL_DELAYED_PENALTY_SELECTOR), + ), + emitted_by=easy_track, + ) + + # 9. Add SetMerkleGateTree CM ET factory + validate_evmscript_factory_added_event( + event=vote_events[8], + p=EVMScriptFactoryAdded( + factory_addr=ctx["set_merkle_gate_tree_for_cm_factory"], + permissions=curated_tree_gate_permissions, + ), + emitted_by=easy_track, + ) + + # 10. Add ReportWithdrawalsForSlashedValidators CM ET factory + validate_evmscript_factory_added_event( + event=vote_events[9], + p=EVMScriptFactoryAdded( + factory_addr=ctx["report_withdrawals_for_slashed_validators_for_cm_factory"], + permissions=_permission(ctx["curated_module"], REPORT_SLASHED_WITHDRAWN_VALIDATORS_SELECTOR), + ), + emitted_by=easy_track, + ) + + # 11. Add SettleGeneralDelayedPenalty CM ET factory + validate_evmscript_factory_added_event( + event=vote_events[10], + p=EVMScriptFactoryAdded( + factory_addr=ctx["settle_general_delayed_penalty_for_cm_factory"], + permissions=_permission(ctx["curated_module"], SETTLE_GENERAL_DELAYED_PENALTY_SELECTOR), + ), + emitted_by=easy_track, + ) + + # 12. Add CreateOrUpdateOperatorGroup CM ET factory + validate_evmscript_factory_added_event( + event=vote_events[11], + p=EVMScriptFactoryAdded( + factory_addr=ctx["create_or_update_operator_group_factory"], + permissions=_permission(ctx["meta_registry"], CREATE_OR_UPDATE_OPERATOR_GROUP_SELECTOR), + ), + emitted_by=easy_track, + ) + elif expected_dg_proposal_id is None: + pytest.skip("Fill EXPECTED_DG_PROPOSAL_ID to run the DG part against an already executed live Hoodi vote.") + + # ========================================================================= + # ======================= Execute DG Proposal ============================= + # ========================================================================= + if expected_dg_proposal_id is not None: + initial_cs_fee_oracle_consensus_version = interface.CSFeeOracle(ctx["cs_fee_oracle"]).getConsensusVersion() + details = timelock.getProposalDetails(expected_dg_proposal_id) + if details["status"] != PROPOSAL_STATUS["executed"]: + if details["status"] == PROPOSAL_STATUS["submitted"]: + chain.sleep(timelock.getAfterSubmitDelay() + 1) + dual_governance.scheduleProposal(expected_dg_proposal_id, {"from": stranger}) + + if timelock.getProposalDetails(expected_dg_proposal_id)["status"] == PROPOSAL_STATUS["scheduled"]: + chain.sleep(timelock.getAfterScheduleDelay() + 1) + + dg_tx: TransactionReceipt = timelock.execute(expected_dg_proposal_id, {"from": stranger}) + display_dg_events(dg_tx) + outer_dg_events = group_dg_events_from_receipt( + dg_tx, + timelock=EMERGENCY_PROTECTED_TIMELOCK, + admin_executor=ctx["dual_governance_admin_executor"], + ) + dg_events = _group_agent_dg_events_from_receipt( + dg_tx, + timelock=EMERGENCY_PROTECTED_TIMELOCK, + agent=agent.address, + ) + assert count_vote_items_by_events(dg_tx, agent.address) == expected_dg_events_from_agent + assert len(outer_dg_events) == 1 + assert len(dg_events) == expected_dg_events_count + + # === DG EXECUTION EVENTS VALIDATION === + + # 1.1. Call UpgradeTemplate.startUpgrade + validate_events_chain([e.name for e in dg_events[0]], ["LogScriptCall", "UpgradeStarted"]) + upgrade_started_event = _single_event(dg_events[0], "UpgradeStarted") + _assert_emitted_by(upgrade_started_event, upgrade_template) + + # 1.2. Upgrade LidoLocator implementation + validate_proxy_upgrade_event(dg_events[1], ctx["lido_locator_impl"], emitted_by=ctx["lido_locator"]) + + # 1.3. Upgrade and finalize StakingRouter + validate_proxy_upgrade_event( + dg_events[2], + ctx["staking_router_impl"], + emitted_by=ctx["staking_router"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "RoleGranted", + "Initialized", + ], + ) + role_grants = _event_list(dg_events[2], "RoleGranted") + assert len(role_grants) == 8 + for role_granted_event, (role_hash, account) in zip( + role_grants, + [ + (DEFAULT_ADMIN_ROLE, ctx["agent"]), + (STAKING_MODULE_MANAGE_ROLE, ctx["agent"]), + (STAKING_MODULE_MANAGE_ROLE, HOODI_LEGACY_STAKING_MODULE_MANAGER), + (STAKING_MODULE_UNVETTING_ROLE, ctx["old_deposit_security_module"]), + (REPORT_EXITED_VALIDATORS_ROLE, ctx["accounting_oracle"]), + (REPORT_VALIDATOR_EXITING_STATUS_ROLE, ctx["validator_exit_delay_verifier"]), + (REPORT_VALIDATOR_EXIT_TRIGGERED_ROLE, ctx["triggerable_withdrawals_gateway"]), + (REPORT_REWARDS_MINTED_ROLE, ctx["accounting"]), + ], + ): + assert _normalize_role(role_granted_event["role"]) == role_hash.replace("0x", "") + assert convert.to_address(role_granted_event["account"]) == convert.to_address(account) + assert convert.to_address(role_granted_event["sender"]) == convert.to_address(ctx["agent"]) + _assert_emitted_by(role_granted_event, ctx["staking_router"]) + initialized_event = _single_event(dg_events[2], "Initialized") + assert initialized_event["version"] == 4 + _assert_emitted_by(initialized_event, ctx["staking_router"]) + + # 1.4. Upgrade and finalize AccountingOracle + validate_proxy_upgrade_event( + dg_events[3], + ctx["accounting_oracle_impl"], + emitted_by=ctx["accounting_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + ], + ) + validate_contract_version_set_event( + dg_events[3], + AO_CONTRACT_VERSION, + emitted_by=ctx["accounting_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + ], + ) + validate_consensus_version_set_event( + dg_events[3], + AO_CONSENSUS_VERSION, + AO_PREV_CONSENSUS_VERSION, + emitted_by=ctx["accounting_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + ], + ) + + # 1.5. Upgrade and finalize ValidatorsExitBusOracle + validate_proxy_upgrade_event( + dg_events[4], + ctx["validators_exit_bus_oracle_impl"], + emitted_by=ctx["validators_exit_bus_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + "SetMaxValidatorsPerReport", + "ExitBalanceLimitSet", + ], + ) + validate_contract_version_set_event( + dg_events[4], + VEBO_CONTRACT_VERSION, + emitted_by=ctx["validators_exit_bus_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + "SetMaxValidatorsPerReport", + "ExitBalanceLimitSet", + ], + ) + validate_consensus_version_set_event( + dg_events[4], + VEBO_CONSENSUS_VERSION, + VEBO_PREV_CONSENSUS_VERSION, + emitted_by=ctx["validators_exit_bus_oracle"], + events_chain=[ + "LogScriptCall", + "Upgraded", + "ContractVersionSet", + "ConsensusVersionSet", + "SetMaxValidatorsPerReport", + "ExitBalanceLimitSet", + ], + ) + set_max_validators_event = _single_event(dg_events[4], "SetMaxValidatorsPerReport") + assert set_max_validators_event["maxValidatorsPerReport"] == VEBO_MAX_VALIDATORS_PER_REPORT + _assert_emitted_by(set_max_validators_event, ctx["validators_exit_bus_oracle"]) + exit_balance_limit_event = _single_event(dg_events[4], "ExitBalanceLimitSet") + assert exit_balance_limit_event["maxExitBalanceEth"] == VALIDATORS_EXIT_BUS_MAX_EXIT_BALANCE_ETH + assert exit_balance_limit_event["balancePerFrameEth"] == VALIDATORS_EXIT_BUS_BALANCE_PER_FRAME_ETH + assert exit_balance_limit_event["frameDurationInSec"] == VALIDATORS_EXIT_BUS_FRAME_DURATION_IN_SEC + _assert_emitted_by(exit_balance_limit_event, ctx["validators_exit_bus_oracle"]) + + # 1.6. Upgrade Accounting implementation + validate_proxy_upgrade_event(dg_events[5], ctx["accounting_impl"], emitted_by=ctx["accounting"]) + + # 1.7. Upgrade WithdrawalVault implementation + validate_proxy_upgrade_event( + dg_events[6], + ctx["withdrawal_vault_impl"], + emitted_by=ctx["withdrawal_vault"], + events_chain=["LogScriptCall", "Upgraded", "ContractVersionSet"], + ) + validate_contract_version_set_event( + dg_events[6], + WITHDRAWAL_VAULT_CONTRACT_VERSION, + emitted_by=ctx["withdrawal_vault"], + events_chain=["LogScriptCall", "Upgraded", "ContractVersionSet"], + ) + + # 1.8. Grant Aragon APP_MANAGER_ROLE to the AGENT + validate_events_chain([e.name for e in dg_events[7]], ["LogScriptCall", "SetPermission"]) + set_permission_event = _single_event(dg_events[7], "SetPermission") + assert convert.to_address(set_permission_event["entity"]) == convert.to_address(ctx["agent"]) + assert convert.to_address(set_permission_event["app"]) == convert.to_address(ctx["aragon_kernel"]) + assert set_permission_event["role"] == APP_MANAGER_ROLE + assert set_permission_event["allowed"] is True + _assert_emitted_by(set_permission_event, ctx["acl"]) + + # 1.9. Set Lido implementation in Kernel + validate_events_chain([e.name for e in dg_events[8]], ["LogScriptCall", "SetApp"]) + set_app_event = _single_event(dg_events[8], "SetApp") + assert set_app_event["appId"] == ctx["lido_app_id"] + assert convert.to_address(set_app_event["app"]) == convert.to_address(ctx["lido_impl"]) + _assert_emitted_by(set_app_event, ctx["aragon_kernel"]) + + # 1.10. Revoke Aragon APP_MANAGER_ROLE from the AGENT + validate_events_chain([e.name for e in dg_events[9]], ["LogScriptCall", "SetPermission"]) + set_permission_event = _single_event(dg_events[9], "SetPermission") + assert convert.to_address(set_permission_event["entity"]) == convert.to_address(ctx["agent"]) + assert convert.to_address(set_permission_event["app"]) == convert.to_address(ctx["aragon_kernel"]) + assert set_permission_event["role"] == APP_MANAGER_ROLE + assert set_permission_event["allowed"] is False + _assert_emitted_by(set_permission_event, ctx["acl"]) + + # 1.11. Create and grant Aragon BUFFER_RESERVE_MANAGER_ROLE to the AGENT + validate_events_chain( + [e.name for e in dg_events[10]], + ["LogScriptCall", "SetPermission", "ChangePermissionManager"], + ) + set_permission_event = _single_event(dg_events[10], "SetPermission") + assert convert.to_address(set_permission_event["entity"]) == convert.to_address(ctx["agent"]) + assert convert.to_address(set_permission_event["app"]) == convert.to_address(ctx["lido"]) + assert set_permission_event["role"] == BUFFER_RESERVE_MANAGER_ROLE + assert set_permission_event["allowed"] is True + _assert_emitted_by(set_permission_event, ctx["acl"]) + change_permission_manager_event = _single_event(dg_events[10], "ChangePermissionManager") + assert convert.to_address(change_permission_manager_event["app"]) == convert.to_address(ctx["lido"]) + assert change_permission_manager_event["role"] == BUFFER_RESERVE_MANAGER_ROLE + assert convert.to_address(change_permission_manager_event["manager"]) == convert.to_address(ctx["agent"]) + _assert_emitted_by(change_permission_manager_event, ctx["acl"]) + + # 1.12. Call finalizeUpgrade_v4 on Lido + validate_contract_version_set_event(dg_events[11], LIDO_CONTRACT_VERSION, emitted_by=ctx["lido"]) + + # 1.13. Grant STAKING_MODULE_SHARE_MANAGE_ROLE to EasyTrack executor + validate_role_grant_event( + dg_events[12], + STAKING_MODULE_SHARE_MANAGE_ROLE, + ctx["easytrack_evm_script_executor"], + sender=ctx["agent"], + emitted_by=ctx["staking_router"], + ) + + # 1.14. Revoke STAKING_MODULE_UNVETTING_ROLE from old DSM + validate_role_revoke_event( + dg_events[13], + STAKING_MODULE_UNVETTING_ROLE, + ctx["old_deposit_security_module"], + sender=ctx["agent"], + emitted_by=ctx["staking_router"], + ) + + # 1.15. Grant STAKING_MODULE_UNVETTING_ROLE to new DSM + validate_role_grant_event( + dg_events[14], + STAKING_MODULE_UNVETTING_ROLE, + ctx["new_deposit_security_module"], + sender=ctx["agent"], + emitted_by=ctx["staking_router"], + ) + + # 1.16. Grant TW_EXIT_LIMIT_MANAGER_ROLE to Agent on TWGateway + validate_role_grant_event( + dg_events[15], + TW_EXIT_LIMIT_MANAGER_ROLE, + ctx["agent"], + sender=ctx["agent"], + emitted_by=ctx["triggerable_withdrawals_gateway"], + ) + + # 1.17. Set TWGateway exit request limits + validate_events_chain( + [e.name for e in dg_events[16]], + ["LogScriptCall", "ExitRequestsLimitSet"], + ) + exit_requests_limit_set_event = _single_event(dg_events[16], "ExitRequestsLimitSet") + assert exit_requests_limit_set_event["maxExitRequestsLimit"] == TW_MAX_EXIT_REQUESTS + assert exit_requests_limit_set_event["exitsPerFrame"] == TW_EXITS_PER_FRAME + assert exit_requests_limit_set_event["frameDurationInSec"] == TW_FRAME_DURATION_IN_SEC + _assert_emitted_by(exit_requests_limit_set_event, ctx["triggerable_withdrawals_gateway"]) + + # 1.18. Register CircuitBreaker pauser for ConsolidationGateway + validate_circuit_breaker_registration_event( + dg_events[17], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["consolidation_gateway"], + pauser=ctx["consolidation_gateway_pauser"], + ) + + # 1.19. Upgrade and finalize CSM v3 + validate_proxy_upgrade_event( + dg_events[18], + ctx["csm_impl"], + emitted_by=ctx["csm"], + events_chain=["LogScriptCall", "Upgraded", "Initialized"], + ) + initialized_event = _single_event(dg_events[18], "Initialized") + assert initialized_event["version"] == 3 + _assert_emitted_by(initialized_event, ctx["csm"]) + + # 1.20. Upgrade and finalize ParametersRegistry v3 + validate_proxy_upgrade_event( + dg_events[19], + ctx["cs_parameters_registry_impl"], + emitted_by=ctx["cs_parameters_registry"], + events_chain=["LogScriptCall", "Upgraded", "Initialized"], + ) + initialized_event = _single_event(dg_events[19], "Initialized") + assert initialized_event["version"] == 3 + _assert_emitted_by(initialized_event, ctx["cs_parameters_registry"]) + + # 1.21. Upgrade and finalize FeeOracle v3 + validate_proxy_upgrade_event( + dg_events[20], + ctx["cs_fee_oracle_impl"], + emitted_by=ctx["cs_fee_oracle"], + events_chain=["LogScriptCall", "Upgraded", "ConsensusVersionSet", "ContractVersionSet"], + ) + validate_consensus_version_set_event( + dg_events[20], + ctx["cs_fee_oracle_consensus_version"], + initial_cs_fee_oracle_consensus_version, + emitted_by=ctx["cs_fee_oracle"], + events_chain=["LogScriptCall", "Upgraded", "ConsensusVersionSet", "ContractVersionSet"], + ) + validate_contract_version_set_event( + dg_events[20], + 3, + emitted_by=ctx["cs_fee_oracle"], + events_chain=["LogScriptCall", "Upgraded", "ConsensusVersionSet", "ContractVersionSet"], + ) + + # 1.22. Upgrade CSVettedGate implementation + validate_proxy_upgrade_event(dg_events[21], ctx["cs_vetted_gate_impl"], emitted_by=ctx["cs_vetted_gate"]) + + # 1.23. Upgrade and finalize Accounting v3 + validate_proxy_upgrade_event( + dg_events[22], + ctx["cs_accounting_impl"], + emitted_by=ctx["cs_accounting"], + events_chain=["LogScriptCall", "Upgraded", "Initialized"], + ) + initialized_event = _single_event(dg_events[22], "Initialized") + assert initialized_event["version"] == 3 + _assert_emitted_by(initialized_event, ctx["cs_accounting"]) + + # 1.24. Upgrade and finalize FeeDistributor v3 + validate_proxy_upgrade_event( + dg_events[23], + ctx["cs_fee_distributor_impl"], + emitted_by=ctx["cs_fee_distributor"], + events_chain=["LogScriptCall", "Upgraded", "Initialized"], + ) + initialized_event = _single_event(dg_events[23], "Initialized") + assert initialized_event["version"] == 3 + _assert_emitted_by(initialized_event, ctx["cs_fee_distributor"]) + + # 1.25. Upgrade ExitPenalties implementation + validate_proxy_upgrade_event(dg_events[24], ctx["cs_exit_penalties_impl"], emitted_by=ctx["cs_exit_penalties"]) + + # 1.26. Upgrade ValidatorStrikes implementation + validate_proxy_upgrade_event(dg_events[25], ctx["cs_validator_strikes_impl"], emitted_by=ctx["cs_validator_strikes"]) + + # 1.27. Point ValidatorStrikes to the new Ejector + validate_events_chain([e.name for e in dg_events[26]], ["LogScriptCall", "EjectorSet"]) + ejector_set_event = _single_event(dg_events[26], "EjectorSet") + assert convert.to_address(ejector_set_event["ejector"]) == convert.to_address(ctx["csm_ejector"]) + _assert_emitted_by(ejector_set_event, ctx["cs_validator_strikes"]) + + # 1.28. Revoke REPORT_EL_REWARDS_STEALING_PENALTY_ROLE + validate_role_revoke_event( + dg_events[27], + REPORT_EL_REWARDS_STEALING_PENALTY_ROLE, + ctx["csm_committee"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.29. Grant REPORT_GENERAL_DELAYED_PENALTY_ROLE + validate_role_grant_event( + dg_events[28], + REPORT_GENERAL_DELAYED_PENALTY_ROLE, + ctx["csm_committee"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.30. Revoke SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE + validate_role_revoke_event( + dg_events[29], + SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE, + ctx["easytrack_evm_script_executor"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.31. Grant SETTLE_GENERAL_DELAYED_PENALTY_ROLE + validate_role_grant_event( + dg_events[30], + SETTLE_GENERAL_DELAYED_PENALTY_ROLE, + ctx["easytrack_evm_script_executor"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.32. Revoke VERIFIER_ROLE from old verifier + validate_role_revoke_event( + dg_events[31], + VERIFIER_ROLE, + ctx["old_verifier"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.33. Grant VERIFIER_ROLE to new verifier + validate_role_grant_event( + dg_events[32], + VERIFIER_ROLE, + ctx["verifier_v3"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.34. Grant REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE to VerifierV3 + validate_role_grant_event( + dg_events[33], + REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE, + ctx["verifier_v3"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.35. Grant REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE to Easy Track + validate_role_grant_event( + dg_events[34], + REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE, + ctx["easytrack_evm_script_executor"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.36. Revoke CREATE_NODE_OPERATOR_ROLE from old PermissionlessGate + validate_role_revoke_event( + dg_events[35], + CREATE_NODE_OPERATOR_ROLE, + ctx["old_permissionless_gate"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.37. Grant CREATE_NODE_OPERATOR_ROLE to new PermissionlessGate + validate_role_grant_event( + dg_events[36], + CREATE_NODE_OPERATOR_ROLE, + ctx["new_permissionless_gate"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.38. Revoke START_REFERRAL_SEASON_ROLE + validate_role_revoke_event( + dg_events[37], + START_REFERRAL_SEASON_ROLE, + ctx["agent"], + sender=ctx["agent"], + emitted_by=ctx["cs_vetted_gate"], + ) + + # 1.39. Revoke END_REFERRAL_SEASON_ROLE + validate_role_revoke_event( + dg_events[38], + END_REFERRAL_SEASON_ROLE, + ctx["csm_committee"], + sender=ctx["agent"], + emitted_by=ctx["cs_vetted_gate"], + ) + + # 1.40. Register CircuitBreaker pauser for CSM new verifier + validate_circuit_breaker_registration_event( + dg_events[39], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["verifier_v3"], + pauser=ctx["csm_committee"], + ) + + # 1.41. Register CircuitBreaker pauser for CSM Ejector + validate_circuit_breaker_registration_event( + dg_events[40], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["csm_ejector"], + pauser=ctx["csm_committee"], + ) + + # 1.42. Register CircuitBreaker pauser for CSM identified DVT cluster gate + validate_circuit_breaker_registration_event( + dg_events[41], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["identified_dvt_cluster_gate"], + pauser=ctx["csm_committee"], + ) + + # 1.43. Grant CREATE_NODE_OPERATOR_ROLE to identified DVT cluster gate + validate_role_grant_event( + dg_events[42], + CREATE_NODE_OPERATOR_ROLE, + ctx["identified_dvt_cluster_gate"], + sender=ctx["agent"], + emitted_by=ctx["csm"], + ) + + # 1.44. Grant SET_BOND_CURVE_ROLE to identified DVT cluster gate + validate_role_grant_event( + dg_events[43], + SET_BOND_CURVE_ROLE, + ctx["identified_dvt_cluster_gate"], + sender=ctx["agent"], + emitted_by=ctx["cs_accounting"], + ) + + # 1.45. Grant MANAGE_BOND_CURVES_ROLE to identified DVT cluster curve setup + validate_role_grant_event( + dg_events[44], + MANAGE_BOND_CURVES_ROLE, + ctx["identified_dvt_cluster_curve_setup"], + sender=ctx["agent"], + emitted_by=ctx["cs_accounting"], + ) + + # 1.46. Grant MANAGE_CURVE_PARAMETERS_ROLE to identified DVT cluster curve setup + validate_role_grant_event( + dg_events[45], + MANAGE_CURVE_PARAMETERS_ROLE, + ctx["identified_dvt_cluster_curve_setup"], + sender=ctx["agent"], + emitted_by=ctx["cs_parameters_registry"], + ) + + # 1.47. Execute identified DVT cluster curve setup + validate_events_chain( + [e.name for e in dg_events[46]], + [ + "LogScriptCall", + "BondCurveAdded", + "KeyRemovalChargeSet", + "GeneralDelayedPenaltyAdditionalFineSet", + "QueueConfigSet", + "RewardShareDataSet", + "AllowedExitDelaySet", + "ExitDelayFeeSet", + "RoleRevoked", + "RoleRevoked", + "BondCurveDeployed", + ], + ) + bond_curve_added_event = _single_event(dg_events[46], "BondCurveAdded") + assert bond_curve_added_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert bond_curve_added_event["bondCurveIntervals"] == IDVT_BOND_CURVE + _assert_emitted_by(bond_curve_added_event, ctx["cs_accounting"]) + key_removal_charge_set_event = _single_event(dg_events[46], "KeyRemovalChargeSet") + assert key_removal_charge_set_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert key_removal_charge_set_event["keyRemovalCharge"] == IDVT_KEY_REMOVAL_CHARGE + _assert_emitted_by(key_removal_charge_set_event, ctx["cs_parameters_registry"]) + general_delayed_penalty_fine_event = _single_event( + dg_events[46], + "GeneralDelayedPenaltyAdditionalFineSet", + ) + assert general_delayed_penalty_fine_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert general_delayed_penalty_fine_event["fine"] == IDVT_GENERAL_DELAYED_PENALTY_FINE + _assert_emitted_by(general_delayed_penalty_fine_event, ctx["cs_parameters_registry"]) + queue_config_set_event = _single_event(dg_events[46], "QueueConfigSet") + assert queue_config_set_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert queue_config_set_event["priority"] == IDVT_QUEUE_PRIORITY + assert queue_config_set_event["maxDeposits"] == IDVT_QUEUE_MAX_DEPOSITS + _assert_emitted_by(queue_config_set_event, ctx["cs_parameters_registry"]) + reward_share_data_set_event = _single_event(dg_events[46], "RewardShareDataSet") + assert reward_share_data_set_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert reward_share_data_set_event["data"] == IDVT_REWARD_SHARE_DATA + _assert_emitted_by(reward_share_data_set_event, ctx["cs_parameters_registry"]) + allowed_exit_delay_set_event = _single_event(dg_events[46], "AllowedExitDelaySet") + assert allowed_exit_delay_set_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert allowed_exit_delay_set_event["delay"] == IDVT_ALLOWED_EXIT_DELAY + _assert_emitted_by(allowed_exit_delay_set_event, ctx["cs_parameters_registry"]) + exit_delay_fee_event = _single_event(dg_events[46], "ExitDelayFeeSet") + assert exit_delay_fee_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + assert exit_delay_fee_event["penalty"] == IDVT_EXIT_DELAY_FEE + _assert_emitted_by(exit_delay_fee_event, ctx["cs_parameters_registry"]) + role_revokes = _event_list(dg_events[46], "RoleRevoked") + assert len(role_revokes) == 2 + assert _normalize_role(role_revokes[0]["role"]) == MANAGE_BOND_CURVES_ROLE.replace("0x", "") + assert convert.to_address(role_revokes[0]["account"]) == convert.to_address( + ctx["identified_dvt_cluster_curve_setup"] + ) + assert convert.to_address(role_revokes[0]["sender"]) == convert.to_address( + ctx["identified_dvt_cluster_curve_setup"] + ) + _assert_emitted_by(role_revokes[0], ctx["cs_accounting"]) + assert _normalize_role(role_revokes[1]["role"]) == MANAGE_CURVE_PARAMETERS_ROLE.replace("0x", "") + assert convert.to_address(role_revokes[1]["account"]) == convert.to_address( + ctx["identified_dvt_cluster_curve_setup"] + ) + assert convert.to_address(role_revokes[1]["sender"]) == convert.to_address( + ctx["identified_dvt_cluster_curve_setup"] + ) + _assert_emitted_by(role_revokes[1], ctx["cs_parameters_registry"]) + bond_curve_deployed_event = _single_event(dg_events[46], "BondCurveDeployed") + assert bond_curve_deployed_event["curveId"] == ctx["identified_dvt_cluster_bond_curve_id"] + _assert_emitted_by(bond_curve_deployed_event, ctx["identified_dvt_cluster_curve_setup"]) + + # 1.48. Grant MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE to CSM Committee + validate_role_grant_event( + dg_events[47], + MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE, + ctx["csm_committee"], + sender=ctx["agent"], + emitted_by=ctx["cs_parameters_registry"], + ) + + # 1.49. Revoke REQUEST_BURN_SHARES_ROLE from CSM Accounting + validate_role_revoke_event( + dg_events[48], + REQUEST_BURN_SHARES_ROLE, + ctx["cs_accounting"], + sender=ctx["agent"], + emitted_by=ctx["burner"], + ) + + # 1.50. Grant REQUEST_BURN_MY_STETH_ROLE to CSM Accounting + validate_role_grant_event( + dg_events[49], + REQUEST_BURN_MY_STETH_ROLE, + ctx["cs_accounting"], + sender=ctx["agent"], + emitted_by=ctx["burner"], + ) + + # 1.51. Revoke TWG full-withdrawal role from old Ejector + validate_role_revoke_event( + dg_events[50], + ADD_FULL_WITHDRAWAL_REQUEST_ROLE, + ctx["old_csm_ejector"], + sender=ctx["agent"], + emitted_by=ctx["triggerable_withdrawals_gateway"], + ) + + # 1.52. Grant TWG full-withdrawal role to new Ejector + validate_role_grant_event( + dg_events[51], + ADD_FULL_WITHDRAWAL_REQUEST_ROLE, + ctx["csm_ejector"], + sender=ctx["agent"], + emitted_by=ctx["triggerable_withdrawals_gateway"], + ) + + # 1.53. Add Curated module to StakingRouter + validate_module_add(dg_events[52], ctx["curated_module_item"], emitted_by=ctx["staking_router"], sender=ctx["agent"]) + + # 1.54. Grant REQUEST_BURN_MY_STETH_ROLE to Curated Accounting + validate_role_grant_event( + dg_events[53], + REQUEST_BURN_MY_STETH_ROLE, + ctx["curated_accounting"], + sender=ctx["agent"], + emitted_by=ctx["burner"], + ) + + # 1.55. Grant TWG full-withdrawal role to Curated Ejector + validate_role_grant_event( + dg_events[54], + ADD_FULL_WITHDRAWAL_REQUEST_ROLE, + ctx["curated_ejector"], + sender=ctx["agent"], + emitted_by=ctx["triggerable_withdrawals_gateway"], + ) + + # 1.56. Grant RESUME_ROLE to agent on Curated module + validate_role_grant_event( + dg_events[55], + RESUME_ROLE, + ctx["agent"], + sender=ctx["agent"], + emitted_by=ctx["curated_module"], + ) + + # 1.57. Resume Curated module + validate_events_chain([e.name for e in dg_events[56]], ["LogScriptCall", "Resumed"]) + resumed_event = _single_event(dg_events[56], "Resumed") + _assert_emitted_by(resumed_event, ctx["curated_module"]) + + # 1.58. Revoke RESUME_ROLE from agent on Curated module + validate_role_revoke_event( + dg_events[57], + RESUME_ROLE, + ctx["agent"], + sender=ctx["agent"], + emitted_by=ctx["curated_module"], + ) + + # 1.59. Update Curated HashConsensus frame config + validate_events_chain([e.name for e in dg_events[58]], ["LogScriptCall", "FrameConfigSet"]) + frame_config_set_event = _single_event(dg_events[58], "FrameConfigSet") + assert frame_config_set_event["newInitialEpoch"] == CURATED_INITIAL_EPOCH + assert frame_config_set_event["newEpochsPerFrame"] == CURATED_EPOCHS_PER_FRAME + _assert_emitted_by(frame_config_set_event, ctx["curated_hash_consensus"]) + + # 1.60. Register CircuitBreaker pauser for Curated module + validate_circuit_breaker_registration_event( + dg_events[59], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["curated_module"], + pauser=ctx["curated_circuit_breaker_pauser"], + ) + + # 1.61. Register CircuitBreaker pauser for Curated Accounting + validate_circuit_breaker_registration_event( + dg_events[60], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["curated_accounting"], + pauser=ctx["curated_circuit_breaker_pauser"], + ) + + # 1.62. Register CircuitBreaker pauser for Curated FeeOracle + validate_circuit_breaker_registration_event( + dg_events[61], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["curated_fee_oracle"], + pauser=ctx["curated_circuit_breaker_pauser"], + ) + + # 1.63. Register CircuitBreaker pauser for Curated Verifier + validate_circuit_breaker_registration_event( + dg_events[62], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["curated_verifier"], + pauser=ctx["curated_circuit_breaker_pauser"], + ) + + # 1.64. Register CircuitBreaker pauser for Curated Ejector + validate_circuit_breaker_registration_event( + dg_events[63], + circuit_breaker=ctx["circuit_breaker"], + pausable=ctx["curated_ejector"], + pauser=ctx["curated_circuit_breaker_pauser"], + ) + + # 1.65. Call UpgradeTemplate.finishUpgrade + validate_events_chain([e.name for e in dg_events[64]], ["LogScriptCall", "UpgradeFinished", "ScriptResult", "Executed"]) + upgrade_finished_event = _single_event(dg_events[64], "UpgradeFinished") + _assert_emitted_by(upgrade_finished_event, upgrade_template) diff --git a/utils/test/event_validators/dual_governance.py b/utils/test/event_validators/dual_governance.py index 922fb93c..e537d0be 100644 --- a/utils/test/event_validators/dual_governance.py +++ b/utils/test/event_validators/dual_governance.py @@ -4,6 +4,19 @@ from utils.config import DUAL_GOVERNANCE, TIMELOCK +def _normalize_hex_data(value: any) -> str: + if isinstance(value, (bytes, bytearray)): + return "0x" + bytes(value).hex() + + if hasattr(value, "hex"): + hex_value = value.hex() + if isinstance(hex_value, str): + return hex_value.lower() if hex_value.startswith("0x") else f"0x{hex_value.lower()}" + + value_str = str(value).lower() + return value_str if value_str.startswith("0x") else f"0x{value_str}" + + def validate_dual_governance_submit_event( event: EventDict, proposal_id: int, @@ -23,9 +36,13 @@ def validate_dual_governance_submit_event( assert len(event["ProposalSubmitted"][0]["calls"]) == len(proposal_calls), "Wrong callsCount" for i in range(0, len(proposal_calls)): - assert event["ProposalSubmitted"][0]["calls"][i][0] == proposal_calls[i]["target"], f"Wrong target {i}: {event['ProposalSubmitted'][0]['calls'][i][0]} : {proposal_calls[i]['target']}" + assert convert.to_address(event["ProposalSubmitted"][0]["calls"][i][0]) == convert.to_address( + proposal_calls[i]["target"] + ), f"Wrong target {i}: {event['ProposalSubmitted'][0]['calls'][i][0]} : {proposal_calls[i]['target']}" assert event["ProposalSubmitted"][0]["calls"][i][1] == proposal_calls[i]["value"], f"Wrong value {i}" - assert event["ProposalSubmitted"][0]["calls"][i][2] == proposal_calls[i]["data"], f'Wrong data {i}' + assert _normalize_hex_data(event["ProposalSubmitted"][0]["calls"][i][2]) == _normalize_hex_data( + proposal_calls[i]["data"] + ), f"Wrong data {i}" assert event["ProposalSubmitted"][1]["proposalId"] == proposal_id, "Wrong proposalId" assert event["ProposalSubmitted"][1]["proposerAccount"] == proposer, "Wrong proposer"