Skip to content

Commit 7c4a91f

Browse files
committed
Implement rolling v9
1 parent 21bb899 commit 7c4a91f

2 files changed

Lines changed: 27 additions & 15 deletions

File tree

shared/services/rewards/generator-impl-v9-rolling.go

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type treeGeneratorImpl_v9_rolling struct {
2828
networkState *state.NetworkState
2929
rewardsFile *RewardsFile_v3
3030
elSnapshotHeader *types.Header
31+
snapshotEnd *SnapshotEnd
3132
log *log.ColorLogger
3233
logPrefix string
3334
rp *rocketpool.RocketPool
@@ -50,17 +51,13 @@ type treeGeneratorImpl_v9_rolling struct {
5051
}
5152

5253
// Create a new tree generator
53-
func newTreeGeneratorImpl_v9_rolling(log *log.ColorLogger, logPrefix string, index uint64, startTime time.Time, endTime time.Time, consensusBlock uint64, elSnapshotHeader *types.Header, intervalsPassed uint64, state *state.NetworkState, rollingRecord *RollingRecord) *treeGeneratorImpl_v9_rolling {
54+
func newTreeGeneratorImpl_v9_rolling(log *log.ColorLogger, logPrefix string, index uint64, snapshotEnd *SnapshotEnd, elSnapshotHeader *types.Header, intervalsPassed uint64, state *state.NetworkState, rollingRecord *RollingRecord) *treeGeneratorImpl_v9_rolling {
5455
return &treeGeneratorImpl_v9_rolling{
5556
rewardsFile: &RewardsFile_v3{
5657
RewardsFileHeader: &RewardsFileHeader{
5758
RewardsFileVersion: 3,
5859
RulesetVersion: 9,
5960
Index: index,
60-
StartTime: startTime.UTC(),
61-
EndTime: endTime.UTC(),
62-
ConsensusEndBlock: consensusBlock,
63-
ExecutionEndBlock: elSnapshotHeader.Number.Uint64(),
6461
IntervalsPassed: intervalsPassed,
6562
TotalRewards: &TotalRewards{
6663
ProtocolDaoRpl: NewQuotedBigInt(0),
@@ -75,15 +72,12 @@ func newTreeGeneratorImpl_v9_rolling(log *log.ColorLogger, logPrefix string, ind
7572
NodeRewards: map[common.Address]*NodeRewardsInfo_v2{},
7673
MinipoolPerformanceFile: MinipoolPerformanceFile_v2{
7774
Index: index,
78-
StartTime: startTime.UTC(),
79-
EndTime: endTime.UTC(),
80-
ConsensusEndBlock: consensusBlock,
81-
ExecutionEndBlock: elSnapshotHeader.Number.Uint64(),
8275
MinipoolPerformance: map[common.Address]*SmoothingPoolMinipoolPerformance_v2{},
8376
},
8477
},
8578
validatorIndexMap: map[string]*MinipoolInfo{},
8679
elSnapshotHeader: elSnapshotHeader,
80+
snapshotEnd: snapshotEnd,
8781
log: log,
8882
logPrefix: logPrefix,
8983
networkState: state,
@@ -593,8 +587,7 @@ func (r *treeGeneratorImpl_v9_rolling) calculateEthRewards(checkBeaconPerformanc
593587
return nil
594588
}
595589

596-
// Get the EL block for the start of this interval
597-
startElBlockHeader, err := r.getStartBlocksForInterval()
590+
startElBlockHeader, err := r.getBlocksAndTimesForInterval()
598591
if err != nil {
599592
return err
600593
}
@@ -770,16 +763,17 @@ func (r *treeGeneratorImpl_v9_rolling) validateNetwork(network uint64) (bool, er
770763
}
771764

772765
// Gets the EL header for the given interval's start block
773-
func (r *treeGeneratorImpl_v9_rolling) getStartBlocksForInterval() (*types.Header, error) {
766+
func (r *treeGeneratorImpl_v9_rolling) getBlocksAndTimesForInterval() (*types.Header, error) {
767+
774768
// Get the Beacon block for the start slot of the record
775769
r.rewardsFile.ConsensusStartBlock = r.rollingRecord.StartSlot
776770
r.rewardsFile.MinipoolPerformanceFile.ConsensusStartBlock = r.rollingRecord.StartSlot
777771
beaconBlock, exists, err := r.bc.GetBeaconBlock(fmt.Sprint(r.rollingRecord.StartSlot))
778772
if err != nil {
779-
return nil, fmt.Errorf("error verifying block from previous interval: %w", err)
773+
return nil, fmt.Errorf("error verifying block from interval start: %w", err)
780774
}
781775
if !exists {
782-
return nil, fmt.Errorf("couldn't retrieve CL block from previous interval (slot %d); this likely means you checkpoint sync'd your Beacon Node and it has not backfilled to the previous interval yet so it cannot be used for tree generation", r.rollingRecord.StartSlot)
776+
return nil, fmt.Errorf("couldn't retrieve CL block from interval start (slot %d); this likely means you checkpoint sync'd your Beacon Node and it has not backfilled to the previous interval yet so it cannot be used for tree generation", r.rollingRecord.StartSlot)
783777
}
784778

785779
// Get the EL block for that Beacon block
@@ -791,6 +785,24 @@ func (r *treeGeneratorImpl_v9_rolling) getStartBlocksForInterval() (*types.Heade
791785
return nil, fmt.Errorf("error getting EL header for block %d: %w", elBlockNumber, err)
792786
}
793787

788+
r.rewardsFile.ConsensusEndBlock = r.snapshotEnd.ConsensusBlock
789+
r.rewardsFile.MinipoolPerformanceFile.ConsensusEndBlock = r.snapshotEnd.ConsensusBlock
790+
791+
r.rewardsFile.ExecutionEndBlock = r.snapshotEnd.ExecutionBlock
792+
r.rewardsFile.MinipoolPerformanceFile.ExecutionEndBlock = r.snapshotEnd.ExecutionBlock
793+
794+
// rollingRecord.StartSlot is the first non-missing slot, so it isn't suitable for startTime, but can be used for startBlock
795+
// it can safely be assumed to be in the same epoch, due to the implementation of GetStartSlotForInterval.
796+
// Calculate the time of the first slot in that epoch.
797+
startTime := r.beaconConfig.GetSlotTime((r.rollingRecord.StartSlot / r.beaconConfig.SlotsPerEpoch) * r.beaconConfig.SlotsPerEpoch)
798+
799+
r.rewardsFile.StartTime = startTime
800+
r.rewardsFile.MinipoolPerformanceFile.StartTime = startTime
801+
802+
endTime := r.beaconConfig.GetSlotTime(r.snapshotEnd.Slot)
803+
r.rewardsFile.EndTime = endTime
804+
r.rewardsFile.MinipoolPerformanceFile.EndTime = endTime
805+
794806
return startElHeader, nil
795807
}
796808

shared/services/rewards/generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func NewTreeGenerator(logger *log.ColorLogger, logPrefix string, rp *rocketpool.
104104
if rollingRecord == nil {
105105
v9_generator = newTreeGeneratorImpl_v9(t.logger, t.logPrefix, t.index, t.snapshotEnd, t.elSnapshotHeader, t.intervalsPassed, state)
106106
} else {
107-
v9_generator = newTreeGeneratorImpl_v9_rolling(t.logger, t.logPrefix, t.index, t.startTime, t.endTime, t.snapshotEnd.ConsensusBlock, t.elSnapshotHeader, t.intervalsPassed, state, rollingRecord)
107+
v9_generator = newTreeGeneratorImpl_v9_rolling(t.logger, t.logPrefix, t.index, t.snapshotEnd, t.elSnapshotHeader, t.intervalsPassed, state, rollingRecord)
108108
}
109109

110110
// v8

0 commit comments

Comments
 (0)