Skip to content

Commit 654b73f

Browse files
committed
Improve pendConsolidations checks, update map to use struct
1 parent 41c514b commit 654b73f

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

metrics/beaconstate.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -492,36 +492,38 @@ func isBitSet(input uint8, n int) bool {
492492
func GetProcessedConsolidations(
493493
prevBeaconState *spec.VersionedBeaconState,
494494
currentBeaconState *spec.VersionedBeaconState,
495-
) map[uint64][]*electra.PendingConsolidation {
495+
) (map[uint64][]*electra.PendingConsolidation, error) {
496496
consolidations := make(map[uint64][]*electra.PendingConsolidation)
497497

498498
validators := GetValidators(currentBeaconState)
499499
prevPendingConsolidations := GetPendingConsolidations(prevBeaconState)
500500
currPendingConsolidations := GetPendingConsolidations(currentBeaconState)
501501

502-
if prevPendingConsolidations == nil {
503-
return consolidations
502+
if prevPendingConsolidations == nil || currPendingConsolidations == nil {
503+
return nil, errors.New("state with nil pending consolidations found")
504+
}
505+
506+
if len(validators) == 0 {
507+
return consolidations, nil
504508
}
505509

506510
// Set of current pending consolidations
507-
currPendingConsolidationsSet := make(map[string]bool)
511+
currPendingConsolidationsSet := make(map[electra.PendingConsolidation]bool)
508512
for _, consolidation := range currPendingConsolidations {
509-
key := fmt.Sprintf("%d-%d", consolidation.SourceIndex, consolidation.TargetIndex)
510-
currPendingConsolidationsSet[key] = true
513+
currPendingConsolidationsSet[*consolidation] = true
511514
}
512515

513516
// If the consolidation is not in the current set, it was processed or source slashed
514517
for _, consolidation := range prevPendingConsolidations {
515-
key := fmt.Sprintf("%d-%d", consolidation.SourceIndex, consolidation.TargetIndex)
516-
if _, ok := currPendingConsolidationsSet[key]; !ok {
518+
if _, ok := currPendingConsolidationsSet[*consolidation]; !ok {
517519
sourceValidator := validators[consolidation.SourceIndex]
518520
if sourceValidator.Slashed {
519521
continue
520522
}
521523
consolidations[uint64(consolidation.TargetIndex)] = append(consolidations[uint64(consolidation.TargetIndex)], consolidation)
522524
}
523525
}
524-
return consolidations
526+
return consolidations, nil
525527
}
526528

527529
func logMetrics(

metrics/beaconstate_test.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,10 +281,27 @@ func Test_GetProcessedConsolidations(t *testing.T) {
281281
},
282282
},
283283
}
284-
processedConsolidations := GetProcessedConsolidations(prevBeaconState, currentBeaconState)
284+
processedConsolidations, err := GetProcessedConsolidations(prevBeaconState, currentBeaconState)
285+
require.NoError(t, err)
285286

286287
require.Equal(t, len(processedConsolidations), 1)
287288
require.Equal(t, len(processedConsolidations[1]), 1)
288289
require.Equal(t, processedConsolidations[1][0].SourceIndex, phase0.ValidatorIndex(0))
289290
require.Equal(t, processedConsolidations[1][0].TargetIndex, phase0.ValidatorIndex(1))
290291
}
292+
293+
func Test_GetProcessedConsolidations_NilPendingConsolidations(t *testing.T) {
294+
prevBeaconState := &spec.VersionedBeaconState{
295+
Electra: &electra.BeaconState{
296+
PendingConsolidations: nil,
297+
},
298+
}
299+
currentBeaconState := &spec.VersionedBeaconState{
300+
Electra: &electra.BeaconState{
301+
PendingConsolidations: nil,
302+
},
303+
}
304+
processedConsolidations, err := GetProcessedConsolidations(prevBeaconState, currentBeaconState)
305+
require.Error(t, err)
306+
require.Nil(t, processedConsolidations)
307+
}

metrics/metrics.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,10 @@ func (a *Metrics) ProcessEpoch(
358358
// Map to quickly convert public keys to index
359359
valKeyToIndex := PopulateKeysToIndexesMap(currentBeaconState)
360360

361-
processedConsolidations := GetProcessedConsolidations(prevBeaconState, currentBeaconState)
361+
processedConsolidations, err := GetProcessedConsolidations(prevBeaconState, currentBeaconState)
362+
if err != nil {
363+
return nil, errors.Wrap(err, "error getting processed consolidations")
364+
}
362365

363366
relayRewardsPerPool, slotsWithMEVRewards, err := a.relayRewards.GetRelayRewards(currentEpoch)
364367
if err != nil {

0 commit comments

Comments
 (0)