@@ -678,8 +678,13 @@ func (d *DataAccessService) GetValidatorDashboardGroupSummary(ctx context.Contex
678678 totalBlockChance := float64 (0 )
679679 totalInclusionDelaySum := int64 (0 )
680680 totalInclusionDelayDivisor := int64 (0 )
681+
681682 totalSyncExpected := float64 (0 )
682- totalProposals := uint32 (0 )
683+ totalSyncScheduled := uint32 (0 )
684+ totalSyncExecuted := uint32 (0 )
685+
686+ totalBlocksScheduled := uint32 (0 )
687+ totalBlocksProposed := uint32 (0 )
683688
684689 validatorArr := make ([]t.VDBValidator , 0 )
685690 for _ , row := range rows {
@@ -699,15 +704,18 @@ func (d *DataAccessService) GetValidatorDashboardGroupSummary(ctx context.Contex
699704 if row .ValidatorIndex == 0 && row .BlocksProposed > 0 && row .BlocksProposed != row .BlocksScheduled {
700705 row .BlocksProposed -- // subtract the genesis block from validator 0 (TODO: remove when fixed in the dashoard data exporter)
701706 }
702-
703- totalProposals += row .BlocksScheduled
707+ totalBlocksProposed += row . BlocksProposed
708+ totalBlocksScheduled += row .BlocksScheduled
704709 if row .BlocksScheduled > 0 {
705710 if ret .ProposalValidators == nil {
706711 ret .ProposalValidators = make ([]t.VDBValidator , 0 , 10 )
707712 }
708713 ret .ProposalValidators = append (ret .ProposalValidators , t .VDBValidator (row .ValidatorIndex ))
709714 }
710715
716+ totalSyncScheduled += row .SyncScheduled
717+ totalSyncExecuted += row .SyncExecuted
718+
711719 ret .SyncCommittee .StatusCount .Success += uint64 (row .SyncExecuted )
712720 ret .SyncCommittee .StatusCount .Failed += uint64 (row .SyncScheduled ) - uint64 (row .SyncExecuted )
713721
@@ -773,7 +781,7 @@ func (d *DataAccessService) GetValidatorDashboardGroupSummary(ctx context.Contex
773781 }
774782
775783 if totalBlockChance > 0 {
776- ret .Luck .Proposal .Percent = (float64 (totalProposals )) / totalBlockChance * 100
784+ ret .Luck .Proposal .Percent = (float64 (totalBlocksScheduled )) / totalBlockChance * 100
777785
778786 // calculate the average time it takes for the set of validators to propose a single block on average
779787 ret .Luck .Proposal .AverageIntervalSeconds = uint64 (time .Duration ((luckHours / totalBlockChance ) * float64 (time .Hour )).Seconds ())
@@ -825,6 +833,20 @@ func (d *DataAccessService) GetValidatorDashboardGroupSummary(ctx context.Contex
825833 ret .SyncCommittee .Validators = ret .SyncCommittee .Validators [:3 ]
826834 }
827835 }
836+ var attestationEfficiency , proposerEfficiency , syncEfficiency sql.NullFloat64
837+ if totalIdealAttestationRewards > 0 {
838+ attestationEfficiency .Float64 = decimal .NewFromInt (totalAttestationRewards ).Div (decimal .NewFromInt (totalIdealAttestationRewards )).InexactFloat64 ()
839+ attestationEfficiency .Valid = true
840+ }
841+ if totalBlocksScheduled > 0 {
842+ proposerEfficiency .Float64 = float64 (totalBlocksProposed ) / float64 (totalBlocksScheduled )
843+ proposerEfficiency .Valid = true
844+ }
845+ if totalSyncScheduled > 0 {
846+ syncEfficiency .Float64 = float64 (totalSyncExecuted ) / float64 (totalSyncScheduled )
847+ syncEfficiency .Valid = true
848+ }
849+ ret .Efficiency = utils .CalculateTotalEfficiency (attestationEfficiency , proposerEfficiency , syncEfficiency )
828850
829851 return ret , nil
830852}
0 commit comments