@@ -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
0 commit comments