@@ -197,4 +197,89 @@ contract RegistryCoordinatorMigrationUnit is MockAVSDeployer, IServiceManagerBas
197197        assertTrue (avsDirectory.isOperatorSet (address (serviceManager), quorumNumber), "Operator set was not created for the quorum " );
198198
199199    }
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+     }
200285}
0 commit comments