@@ -54,6 +54,10 @@ interface ICSModule {
5454 function accounting () external view returns (address );
5555}
5656
57+ interface IVaultsAdapter {
58+ function evmScriptExecutor () external view returns (address );
59+ }
60+
5761interface ILidoLocator {
5862 function vaultHub () external view returns (address );
5963 function predepositGuarantee () external view returns (address );
@@ -75,15 +79,14 @@ contract V3TemporaryAdmin {
7579 bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00 ;
7680
7781 address public immutable AGENT;
78- address public immutable GATE_SEAL ;
82+ bool public immutable IS_HOODI ;
7983
8084 bool public isSetupComplete;
8185
82- constructor (address _agent , address _gateSeal ) {
86+ constructor (address _agent , bool _isHoodi ) {
8387 if (_agent == address (0 )) revert ZeroAddress ();
84- if (_gateSeal == address (0 )) revert ZeroAddress ();
8588 AGENT = _agent;
86- GATE_SEAL = _gateSeal ;
89+ IS_HOODI = _isHoodi ;
8790 }
8891
8992 /**
@@ -96,10 +99,10 @@ contract V3TemporaryAdmin {
9699
97100 IStakingRouter.StakingModule[] memory stakingModules = IStakingRouter (_stakingRouter).getStakingModules ();
98101
99- // Find the Community Staking module (index 2)
102+ // Find the Community Staking module (index 2 or 3 on Hoodi )
100103 if (stakingModules.length <= 2 ) revert CsmModuleNotFound ();
101104
102- IStakingRouter.StakingModule memory csm = stakingModules[2 ];
105+ IStakingRouter.StakingModule memory csm = stakingModules[IS_HOODI ? 3 : 2 ];
103106 if (keccak256 (bytes (csm.name)) != keccak256 (bytes ("Community Staking " ))) {
104107 revert CsmModuleNotFound ();
105108 }
@@ -111,13 +114,11 @@ contract V3TemporaryAdmin {
111114 * @notice Complete setup for all contracts - grants all roles and transfers admin to agent
112115 * @dev This is the main external function that should be called after deployment
113116 * @param _lidoLocatorImpl The new LidoLocator implementation address
114- * @param _evmScriptExecutor The EVM script executor address from easyTrack
115117 * @param _vaultsAdapter The vaults' adapter address from easyTrack
116118 */
117- function completeSetup (address _lidoLocatorImpl , address _evmScriptExecutor , address _vaultsAdapter ) external {
119+ function completeSetup (address _lidoLocatorImpl , address _vaultsAdapter , address _gateSeal ) external {
118120 if (isSetupComplete) revert SetupAlreadyCompleted ();
119121 if (_lidoLocatorImpl == address (0 )) revert ZeroLidoLocator ();
120- if (_evmScriptExecutor == address (0 )) revert ZeroEvmScriptExecutor ();
121122 if (_vaultsAdapter == address (0 )) revert ZeroVaultsAdapter ();
122123
123124 isSetupComplete = true ;
@@ -126,11 +127,11 @@ contract V3TemporaryAdmin {
126127
127128 address csmAccounting = getCsmAccountingAddress (locator.stakingRouter ());
128129
129- _setupPredepositGuarantee (locator.predepositGuarantee ());
130+ _setupPredepositGuarantee (locator.predepositGuarantee (), _gateSeal );
130131 _setupLazyOracle (locator.lazyOracle ());
131- _setupOperatorGrid (locator.operatorGrid (), _evmScriptExecutor , _vaultsAdapter);
132+ _setupOperatorGrid (locator.operatorGrid (), IVaultsAdapter (_vaultsAdapter). evmScriptExecutor () , _vaultsAdapter);
132133 _setupBurner (locator.burner (), locator.accounting (), csmAccounting);
133- _setupVaultHub (locator.vaultHub (), _vaultsAdapter);
134+ _setupVaultHub (locator.vaultHub (), _vaultsAdapter, _gateSeal );
134135 }
135136
136137
@@ -139,15 +140,15 @@ contract V3TemporaryAdmin {
139140 * @param _vaultHub The VaultHub contract address
140141 * @param _vaultsAdapter The vaults' adapter address
141142 */
142- function _setupVaultHub (address _vaultHub , address _vaultsAdapter ) private {
143+ function _setupVaultHub (address _vaultHub , address _vaultsAdapter , address _gateSeal ) private {
143144 // Get roles from the contract
144145 bytes32 pauseRole = IPausableUntil (_vaultHub).PAUSE_ROLE ();
145146 bytes32 vaultMasterRole = IVaultHub (_vaultHub).VAULT_MASTER_ROLE ();
146147 bytes32 redemptionMasterRole = IVaultHub (_vaultHub).REDEMPTION_MASTER_ROLE ();
147148 bytes32 validatorExitRole = IVaultHub (_vaultHub).VALIDATOR_EXIT_ROLE ();
148149 bytes32 badDebtMasterRole = IVaultHub (_vaultHub).BAD_DEBT_MASTER_ROLE ();
149150
150- IAccessControl (_vaultHub).grantRole (pauseRole, GATE_SEAL );
151+ IAccessControl (_vaultHub).grantRole (pauseRole, _gateSeal );
151152
152153 IAccessControl (_vaultHub).grantRole (vaultMasterRole, AGENT);
153154 IAccessControl (_vaultHub).grantRole (redemptionMasterRole, AGENT);
@@ -163,9 +164,9 @@ contract V3TemporaryAdmin {
163164 * @notice Setup PredepositGuarantee with PAUSE_ROLE for gateSeal and transfer admin to agent
164165 * @param _predepositGuarantee The PredepositGuarantee contract address
165166 */
166- function _setupPredepositGuarantee (address _predepositGuarantee ) private {
167+ function _setupPredepositGuarantee (address _predepositGuarantee , address _gateSeal ) private {
167168 bytes32 pauseRole = IPausableUntil (_predepositGuarantee).PAUSE_ROLE ();
168- IAccessControl (_predepositGuarantee).grantRole (pauseRole, GATE_SEAL );
169+ IAccessControl (_predepositGuarantee).grantRole (pauseRole, _gateSeal );
169170 _transferAdminToAgent (_predepositGuarantee);
170171 }
171172
@@ -196,6 +197,7 @@ contract V3TemporaryAdmin {
196197 /**
197198 * @notice Setup Burner with required roles and transfer admin to agent
198199 * @param _burner The Burner contract address
200+ * @param _accounting The Accounting contract address
199201 * @param _csmAccounting The CSM Accounting contract address
200202 */
201203 function _setupBurner (
0 commit comments