@@ -1124,7 +1124,7 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
11241124 uint8 quorumNumber ,
11251125 uint32 lookAheadBlocks
11261126 ) public {
1127- // Only consider existing quorums and quorums which have delegated stake
1127+ // Only consider existing quorums and quorums which use delegated stake
11281128 cheats.assume (quorumNumber < nextQuorum);
11291129 cheats.assume (
11301130 stakeRegistry.stakeTypePerQuorum (quorumNumber)
@@ -1135,7 +1135,7 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
11351135 stakeRegistry.setSlashableStakeLookahead (quorumNumber, lookAheadBlocks);
11361136 }
11371137
1138- /// @dev Fuzzes initialized quorum numbers and sets stake look ahead
1138+ /// @dev Fuzzes slashable quorum numbers and sets stake look ahead
11391139 function testFuzz_setSlashableStakeLookahead (
11401140 uint8 quorumNumber ,
11411141 uint32 lookAheadBlocks
@@ -1178,12 +1178,12 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
11781178 RegisterSetup memory setup = _fuzz_setupRegisterOperator (quorumBitmap, additionalStake);
11791179
11801180 // State history should be empty
1181- IStakeRegistry.StakeUpdate[][] memory operatorStakeHistories =
1182- _getOperatorStakeHistories (setup.operatorId, setup.quorumNumbers);
1183- for ( uint256 i = 0 ; i < setup.quorumNumbers. length ; i ++ ) {
1184- assertTrue (
1185- operatorStakeHistories [i].length == 0 , "invalid operator stake history length "
1186- );
1181+ {
1182+ IStakeRegistry.StakeUpdate[][] memory stakeHistories =
1183+ _getOperatorStakeHistories ( setup.operatorId, setup.quorumNumbers);
1184+ for ( uint256 i = 0 ; i < setup.quorumNumbers. length ; i ++ ) {
1185+ assertTrue (stakeHistories [i].length == 0 , "invalid operator stake history length " );
1186+ }
11871187 }
11881188
11891189 // Register the Operator
@@ -1192,11 +1192,32 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
11921192 stakeRegistry.registerOperator (setup.operator, setup.operatorId, setup.quorumNumbers);
11931193
11941194 // Check state history after registration
1195- IStakeRegistry.StakeUpdate[][] memory operatorStakeHistoriesPost =
1196- _getOperatorStakeHistories (setup.operatorId, setup.quorumNumbers);
1197- for (uint256 i = 0 ; i < setup.quorumNumbers.length ; i++ ) {
1198- IStakeRegistry.StakeUpdate[] memory operatorStakeHistory = operatorStakeHistoriesPost[i];
1199- assertTrue (operatorStakeHistory.length == 1 , "invalid operator stake history length " );
1195+ {
1196+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1197+ _getLatestStakeUpdates (setup.operatorId, setup.quorumNumbers);
1198+ IStakeRegistry.StakeUpdate[][] memory stakeHistories =
1199+ _getOperatorStakeHistories (setup.operatorId, setup.quorumNumbers);
1200+ for (uint256 i = 0 ; i < setup.quorumNumbers.length ; i++ ) {
1201+ IStakeRegistry.StakeUpdate[] memory stakeHistory = stakeHistories[i];
1202+ assertTrue (
1203+ stakeHistory.length == 1 , "invalid operator stake history length "
1204+ );
1205+ assertEq (
1206+ stakeHistory[0 ].stake,
1207+ stakeUpdates[i].stake,
1208+ "invalid operator stake history stake "
1209+ );
1210+ assertEq (
1211+ stakeHistory[0 ].updateBlockNumber,
1212+ stakeUpdates[i].updateBlockNumber,
1213+ "invalid operator stake history update block number "
1214+ );
1215+ assertEq (
1216+ stakeHistory[0 ].nextUpdateBlockNumber,
1217+ stakeUpdates[i].nextUpdateBlockNumber,
1218+ "invalid operator stake history next update block number "
1219+ );
1220+ }
12001221 }
12011222 }
12021223
@@ -1209,27 +1230,63 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
12091230 fuzzy_toRemove: quorumsToRemove,
12101231 fuzzy_addtlStake: additionalStake
12111232 });
1212-
1213- // Check stake history
1214- IStakeRegistry.StakeUpdate[][] memory operatorStakeHistories =
1215- _getOperatorStakeHistories (setup.operatorId, setup.registeredQuorumNumbers);
1216- for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1217- assertTrue (
1218- operatorStakeHistories[i].length == 1 , "invalid operator stake history length "
1219- );
1220- IStakeRegistry.StakeUpdate memory operatorStake = operatorStakeHistories[i][0 ];
1233+ uint32 blockNum = uint32 (block .number );
1234+
1235+ {
1236+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1237+ _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1238+ IStakeRegistry.StakeUpdate[][] memory stakeHistories =
1239+ _getOperatorStakeHistories (setup.operatorId, setup.registeredQuorumNumbers);
1240+ for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1241+ assertTrue (stakeHistories[i].length == 1 , "invalid operator stake history length " );
1242+ IStakeRegistry.StakeUpdate memory stakeHistory = stakeHistories[i][0 ];
1243+ assertEq (
1244+ stakeHistory.stake,
1245+ stakeUpdates[i].stake,
1246+ "invalid operator stake history stake2 "
1247+ );
1248+ assertEq (
1249+ stakeHistory.updateBlockNumber,
1250+ blockNum,
1251+ "invalid operator stake history update block number "
1252+ );
1253+ assertEq (
1254+ stakeHistory.nextUpdateBlockNumber,
1255+ stakeUpdates[i].nextUpdateBlockNumber,
1256+ "invalid operator stake history next update block number "
1257+ );
1258+ }
12211259 }
12221260
12231261 // deregisterOperator
12241262 cheats.prank (address (registryCoordinator));
12251263 stakeRegistry.deregisterOperator (setup.operatorId, setup.quorumsToRemove);
12261264
12271265 // Check stake history after deregistration in the same block
1228- IStakeRegistry.StakeUpdate[][] memory operatorStakeHistoriesPost =
1229- _getOperatorStakeHistories (setup.operatorId, setup.registeredQuorumNumbers);
1230- for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1231- IStakeRegistry.StakeUpdate[] memory operatorStakeHistory = operatorStakeHistoriesPost[i];
1232- assertTrue (operatorStakeHistory.length == 1 , "invalid operator stake history length " );
1266+ {
1267+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1268+ _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1269+ IStakeRegistry.StakeUpdate[][] memory stakeHistories =
1270+ _getOperatorStakeHistories (setup.operatorId, setup.registeredQuorumNumbers);
1271+ for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1272+ assertTrue (stakeHistories[i].length == 1 , "invalid operator stake history length " );
1273+ IStakeRegistry.StakeUpdate memory stakeHistory = stakeHistories[i][0 ];
1274+ assertEq (
1275+ stakeHistory.stake,
1276+ stakeUpdates[i].stake,
1277+ "invalid operator stake history stake2 "
1278+ );
1279+ assertEq (
1280+ stakeHistory.updateBlockNumber,
1281+ blockNum,
1282+ "invalid operator stake history update block number "
1283+ );
1284+ assertEq (
1285+ stakeHistory.nextUpdateBlockNumber,
1286+ stakeUpdates[i].nextUpdateBlockNumber,
1287+ "invalid operator stake history next update block number "
1288+ );
1289+ }
12331290 }
12341291 }
12351292
@@ -1248,25 +1305,24 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
12481305 fuzzy_addtlStake: additionalStake
12491306 });
12501307
1251- emit log_uint (block .number );
1252- IStakeRegistry.StakeUpdate[] memory regOperatorStakes =
1253- _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1254- IStakeRegistry.StakeUpdate[] memory operatorStakeUpdates =
1255- _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.registeredQuorumNumbers, 0 );
1256- for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1257- assertEq (
1258- operatorStakeUpdates[i].stake, regOperatorStakes[i].stake, "invalid operator stake "
1259- );
1260- assertEq (
1261- operatorStakeUpdates[i].updateBlockNumber,
1262- regOperatorStakes[i].updateBlockNumber,
1263- "invalid operator stake update block number "
1264- );
1265- assertEq (
1266- operatorStakeUpdates[i].nextUpdateBlockNumber,
1267- regOperatorStakes[i].nextUpdateBlockNumber,
1268- "invalid operator stake next update block number "
1269- );
1308+ {
1309+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1310+ _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1311+ IStakeRegistry.StakeUpdate[] memory indexStakeUpdate =
1312+ _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.registeredQuorumNumbers, 0 );
1313+ for (uint256 i = 0 ; i < setup.registeredQuorumNumbers.length ; i++ ) {
1314+ assertEq (indexStakeUpdate[i].stake, stakeUpdates[i].stake, "invalid operator stake " );
1315+ assertEq (
1316+ indexStakeUpdate[i].updateBlockNumber,
1317+ uint32 (block .number ),
1318+ "invalid operator stake update block number "
1319+ );
1320+ assertEq (
1321+ indexStakeUpdate[i].nextUpdateBlockNumber,
1322+ stakeUpdates[i].nextUpdateBlockNumber,
1323+ "invalid operator stake next update block number "
1324+ );
1325+ }
12701326 }
12711327
12721328 // Force block to be mined to ensure new stake update is registered
@@ -1275,28 +1331,25 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
12751331 // deregisterOperator
12761332 cheats.prank (address (registryCoordinator));
12771333 stakeRegistry.deregisterOperator (setup.operatorId, setup.quorumsToRemove);
1278- emit log_uint (block .number );
12791334
1280- IStakeRegistry.StakeUpdate[] memory deregOperatorStakes =
1281- _getLatestStakeUpdates (setup.operatorId, setup.quorumsToRemove);
1282- IStakeRegistry.StakeUpdate[] memory operatorStakeUpdatesPost =
1283- _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.quorumsToRemove, 1 );
1284- for (uint256 i = 0 ; i < setup.quorumsToRemove.length ; i++ ) {
1285- assertEq (
1286- operatorStakeUpdatesPost[i].stake,
1287- deregOperatorStakes[i].stake,
1288- "invalid operator stake "
1289- );
1290- assertEq (
1291- operatorStakeUpdatesPost[i].updateBlockNumber,
1292- deregOperatorStakes[i].updateBlockNumber,
1293- "invalid operator stake update block number "
1294- );
1295- assertEq (
1296- operatorStakeUpdatesPost[i].nextUpdateBlockNumber,
1297- deregOperatorStakes[i].nextUpdateBlockNumber,
1298- "invalid operator stake next update block number "
1299- );
1335+ {
1336+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1337+ _getLatestStakeUpdates (setup.operatorId, setup.quorumsToRemove);
1338+ IStakeRegistry.StakeUpdate[] memory indexStakeUpdate =
1339+ _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.quorumsToRemove, 1 );
1340+ for (uint256 i = 0 ; i < setup.quorumsToRemove.length ; i++ ) {
1341+ assertEq (indexStakeUpdate[i].stake, stakeUpdates[i].stake, "invalid operator stake " );
1342+ assertEq (
1343+ indexStakeUpdate[i].updateBlockNumber,
1344+ uint32 (block .number ),
1345+ "invalid operator stake update block number "
1346+ );
1347+ assertEq (
1348+ indexStakeUpdate[i].nextUpdateBlockNumber,
1349+ stakeUpdates[i].nextUpdateBlockNumber,
1350+ "invalid operator stake next update block number "
1351+ );
1352+ }
13001353 }
13011354 }
13021355
@@ -1309,53 +1362,54 @@ contract StakeRegistryUnitTests_Config is StakeRegistryUnitTests {
13091362 fuzzy_toRemove: quorumsToRemove,
13101363 fuzzy_addtlStake: additionalStake
13111364 });
1312-
1313- emit log_uint ( block . number );
1314- IStakeRegistry.StakeUpdate[] memory regOperatorStakes =
1315- _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1316- IStakeRegistry.StakeUpdate[] memory operatorStakeUpdates =
1317- _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.registeredQuorumNumbers, 0 );
1318- for ( uint256 i = 0 ; i < setup.registeredQuorumNumbers. length ; i ++ ) {
1319- assertEq (
1320- operatorStakeUpdates [i].stake, regOperatorStakes [i].stake, "invalid operator stake "
1321- );
1322- assertEq (
1323- operatorStakeUpdates[i].updateBlockNumber ,
1324- regOperatorStakes[i].updateBlockNumber,
1325- " invalid operator stake update block number "
1326- );
1327- assertEq (
1328- operatorStakeUpdates [i].nextUpdateBlockNumber,
1329- regOperatorStakes[i].nextUpdateBlockNumber,
1330- " invalid operator stake next update block number "
1331- );
1365+ uint32 blockNum = uint32 ( block . number );
1366+
1367+ {
1368+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1369+ _getLatestStakeUpdates (setup.operatorId, setup.registeredQuorumNumbers);
1370+ IStakeRegistry.StakeUpdate[] memory indexStakeUpdate =
1371+ _getOperatorStakeUpdatesAtIndex ( setup.operatorId, setup.registeredQuorumNumbers, 0 );
1372+ for ( uint256 i = 0 ; i < setup.registeredQuorumNumbers. length ; i ++ ) {
1373+ assertEq (indexStakeUpdate [i].stake, stakeUpdates [i].stake, "invalid operator stake " );
1374+ assertEq (
1375+ indexStakeUpdate[i].updateBlockNumber,
1376+ blockNum ,
1377+ " invalid operator stake update block number "
1378+ );
1379+ assertEq (
1380+ indexStakeUpdate[i].nextUpdateBlockNumber,
1381+ stakeUpdates [i].nextUpdateBlockNumber,
1382+ " invalid operator stake next update block number "
1383+ );
1384+ }
13321385 }
13331386
13341387 // deregisterOperator
13351388 cheats.prank (address (registryCoordinator));
13361389 stakeRegistry.deregisterOperator (setup.operatorId, setup.quorumsToRemove);
1337- emit log_uint (block .number );
13381390
1339- IStakeRegistry.StakeUpdate[] memory deregOperatorStakes =
1340- _getLatestStakeUpdates (setup.operatorId, setup.quorumsToRemove);
1341- IStakeRegistry.StakeUpdate[] memory operatorStakeUpdatesPost =
1342- _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.quorumsToRemove, 0 );
1343- for (uint256 i = 0 ; i < setup.quorumsToRemove.length ; i++ ) {
1344- assertEq (
1345- operatorStakeUpdatesPost[i].stake,
1346- deregOperatorStakes[i].stake,
1347- "invalid operator stake "
1348- );
1349- assertEq (
1350- operatorStakeUpdatesPost[i].updateBlockNumber,
1351- deregOperatorStakes[i].updateBlockNumber,
1352- "invalid operator stake update block number "
1353- );
1354- assertEq (
1355- operatorStakeUpdatesPost[i].nextUpdateBlockNumber,
1356- deregOperatorStakes[i].nextUpdateBlockNumber,
1357- "invalid operator stake next update block number "
1358- );
1391+ {
1392+ IStakeRegistry.StakeUpdate[] memory stakeUpdates =
1393+ _getLatestStakeUpdates (setup.operatorId, setup.quorumsToRemove);
1394+ IStakeRegistry.StakeUpdate[] memory operatorStakeUpdatesPost =
1395+ _getOperatorStakeUpdatesAtIndex (setup.operatorId, setup.quorumsToRemove, 0 );
1396+ for (uint256 i = 0 ; i < setup.quorumsToRemove.length ; i++ ) {
1397+ assertEq (
1398+ operatorStakeUpdatesPost[i].stake,
1399+ stakeUpdates[i].stake,
1400+ "invalid operator stake "
1401+ );
1402+ assertEq (
1403+ operatorStakeUpdatesPost[i].updateBlockNumber,
1404+ blockNum,
1405+ "invalid operator stake update block number "
1406+ );
1407+ assertEq (
1408+ operatorStakeUpdatesPost[i].nextUpdateBlockNumber,
1409+ stakeUpdates[i].nextUpdateBlockNumber,
1410+ "invalid operator stake next update block number "
1411+ );
1412+ }
13591413 }
13601414 }
13611415}
0 commit comments