@@ -197,4 +197,89 @@ contract RegistryCoordinatorMigrationUnit is MockAVSDeployer, IServiceManagerBas
197
197
assertTrue (avsDirectory.isOperatorSet (address (serviceManager), quorumNumber), "Operator set was not created for the quorum " );
198
198
199
199
}
200
+
201
+ function test_updateOperatorsForQuorumsAfterDirectUnregister () public {
202
+ vm.prank (proxyAdmin.owner ());
203
+ proxyAdmin.upgrade (
204
+ TransparentUpgradeableProxy (payable (address (avsDirectory))),
205
+ address (avsDirectoryMock)
206
+ );
207
+ uint256 pseudoRandomNumber = uint256 (keccak256 ("pseudoRandomNumber " ));
208
+ _registerRandomOperators (pseudoRandomNumber);
209
+
210
+ vm.prank (proxyAdmin.owner ());
211
+ proxyAdmin.upgrade (
212
+ TransparentUpgradeableProxy (payable (address (avsDirectory))),
213
+ address (avsDirectoryHarness)
214
+ );
215
+
216
+ uint256 quorumCount = registryCoordinator.quorumCount ();
217
+ for (uint256 i = 0 ; i < quorumCount; i++ ) {
218
+ uint256 operatorCount = indexRegistry.totalOperatorsForQuorum (uint8 (i));
219
+ bytes32 [] memory operatorIds =
220
+ indexRegistry.getOperatorListAtBlockNumber (uint8 (i), uint32 (block .number ));
221
+ assertEq (operatorCount, operatorIds.length , "Operator Id length mismatch " ); // sanity check
222
+ for (uint256 j = 0 ; j < operatorCount; j++ ) {
223
+ address operatorAddress =
224
+ registryCoordinator.blsApkRegistry ().getOperatorFromPubkeyHash (operatorIds[j]);
225
+ AVSDirectoryHarness (address (avsDirectory)).setAvsOperatorStatus (
226
+ address (serviceManager),
227
+ operatorAddress,
228
+ IAVSDirectory.OperatorAVSRegistrationStatus.REGISTERED
229
+ );
230
+ }
231
+ }
232
+
233
+ (
234
+ uint32 [] memory operatorSetsToCreate ,
235
+ uint32 [][] memory operatorSetIdsToMigrate ,
236
+ address [] memory operators
237
+ ) = serviceManager.getOperatorsToMigrate ();
238
+ cheats.startPrank (serviceManagerOwner);
239
+ serviceManager.migrateAndCreateOperatorSetIds (operatorSetsToCreate);
240
+ serviceManager.migrateToOperatorSets (operatorSetIdsToMigrate, operators);
241
+ cheats.stopPrank ();
242
+
243
+ bytes32 [] memory registeredOperators = indexRegistry.getOperatorListAtBlockNumber (defaultQuorumNumber, uint32 (block .number ));
244
+ uint256 preNumOperators = registeredOperators.length ;
245
+ address [] memory registeredOperatorAddresses = new address [](registeredOperators.length );
246
+ for (uint256 i = 0 ; i < registeredOperators.length ; i++ ) {
247
+ registeredOperatorAddresses[i] = registryCoordinator.blsApkRegistry ().pubkeyHashToOperator (registeredOperators[i]);
248
+ }
249
+
250
+ uint32 [] memory operatorSetsToUnregister = new uint32 [](1 );
251
+ operatorSetsToUnregister[0 ] = defaultQuorumNumber;
252
+
253
+ vm.prank (operators[0 ]);
254
+ avsDirectory.forceDeregisterFromOperatorSets (
255
+ operators[0 ],
256
+ address (serviceManager),
257
+ operatorSetsToUnregister,
258
+ ISignatureUtils.SignatureWithSaltAndExpiry ({
259
+ signature: new bytes (0 ),
260
+ salt: bytes32 (0 ),
261
+ expiry: 0
262
+ })
263
+ );
264
+ // sanity check if the operator was unregistered from the intended operator set
265
+ bool operatorIsUnRegistered = ! avsDirectory.isMember (operators[0 ], IAVSDirectory.OperatorSet ({
266
+ avs: address (serviceManager),
267
+ operatorSetId: defaultQuorumNumber
268
+ }));
269
+ bool isOperatorSetAVS = avsDirectory.isOperatorSetAVS (address (serviceManager));
270
+ assertTrue (isOperatorSetAVS, "ServiceManager is not an operator set AVS " );
271
+ assertTrue (operatorIsUnRegistered, "Operator wasnt unregistered from op set " );
272
+
273
+ address [][] memory registeredOperatorAddresses2D = new address [][](1 );
274
+ registeredOperatorAddresses2D[0 ] = registeredOperatorAddresses;
275
+ bytes memory quorumNumbers = new bytes (1 );
276
+ quorumNumbers[0 ] = bytes1 (defaultQuorumNumber);
277
+ registryCoordinator.updateOperatorsForQuorum (registeredOperatorAddresses2D, quorumNumbers);
278
+
279
+ registeredOperators = indexRegistry.getOperatorListAtBlockNumber (defaultQuorumNumber, uint32 (block .number ));
280
+ uint256 postRegisteredOperators = registeredOperators.length ;
281
+
282
+ assertEq (preNumOperators-1 , postRegisteredOperators, "" );
283
+
284
+ }
200
285
}
0 commit comments