Skip to content

Commit

Permalink
Merge pull request #432 from gobitfly/NOBIDS/data-access-rewards-add-…
Browse files Browse the repository at this point in the history
…el-rewards

NOBIDS/ data access rewards add el rewards
  • Loading branch information
remoterami authored Jun 11, 2024
2 parents adf3842 + 99d937d commit 17e237d
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions backend/pkg/api/data_access/vdb_rewards.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,10 @@ func (d *DataAccessService) GetValidatorDashboardRewards(dashboardId t.VDBId, cu

groupIdSearchMap := make(map[uint64]bool, 0)

// TODO: El rewards data (blocks_el_reward) will be provided at a later point
rewardsDataQuery := `
SUM(COALESCE(e.attestations_reward, 0) + COALESCE(e.blocks_cl_reward, 0) +
COALESCE(e.sync_rewards, 0) + COALESCE(e.slasher_reward, 0)) AS cl_rewards,
SUM(COALESCE(e.blocks_el_reward, 0)) AS el_rewards,
COALESCE(SUM(COALESCE(r.value, ep.fee_recipient_reward * 1e18)), 0) AS el_rewards,
SUM(COALESCE(e.attestations_scheduled, 0)) AS attestations_scheduled,
SUM(COALESCE(e.attestations_executed, 0)) AS attestations_executed,
SUM(COALESCE(e.blocks_scheduled, 0)) AS blocks_scheduled,
Expand Down Expand Up @@ -185,6 +184,9 @@ func (d *DataAccessService) GetValidatorDashboardRewards(dashboardId t.VDBId, cu
FROM validator_dashboard_data_epoch e
INNER JOIN users_val_dashboards_validators v ON e.validator_index = v.validator_index
LEFT JOIN validator_dashboard_data_epoch_slashedby_count s ON e.epoch = s.epoch AND e.validator_index = s.slashed_by
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
%s
GROUP BY e.epoch, v.group_id
%s`, rewardsDataQuery, whereQuery, orderQuery)
Expand Down Expand Up @@ -229,6 +231,9 @@ func (d *DataAccessService) GetValidatorDashboardRewards(dashboardId t.VDBId, cu
%s
FROM validator_dashboard_data_epoch e
LEFT JOIN validator_dashboard_data_epoch_slashedby_count s ON e.epoch = s.epoch AND e.validator_index = s.slashed_by
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
%s
GROUP BY e.epoch
%s`, len(queryParams), rewardsDataQuery, whereQuery, orderQuery)
Expand Down Expand Up @@ -443,7 +448,7 @@ func (d *DataAccessService) GetValidatorDashboardGroupRewards(dashboardId t.VDBI
COALESCE(e.blocks_scheduled, 0) AS blocks_scheduled,
COALESCE(e.blocks_proposed, 0) AS blocks_proposed,
COALESCE(e.blocks_cl_reward, 0) AS blocks_cl_reward,
COALESCE(e.blocks_el_reward, 0) AS blocks_el_reward,
COALESCE(r.value, ep.fee_recipient_reward * 1e18, 0) AS blocks_el_reward,
COALESCE(e.sync_scheduled, 0) AS sync_scheduled,
COALESCE(e.sync_executed, 0) AS sync_executed,
COALESCE(e.sync_rewards, 0) AS sync_rewards,
Expand All @@ -461,6 +466,9 @@ func (d *DataAccessService) GetValidatorDashboardGroupRewards(dashboardId t.VDBI
whereClause := `
FROM validator_dashboard_data_epoch e
LEFT JOIN validator_dashboard_data_epoch_slashedby_count s ON e.epoch = s.epoch AND e.validator_index = s.slashed_by
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
WHERE e.validator_index = any($1) AND e.epoch = $2
`
query = fmt.Sprintf("%s %s", query, whereClause)
Expand All @@ -474,6 +482,9 @@ func (d *DataAccessService) GetValidatorDashboardGroupRewards(dashboardId t.VDBI
FROM users_val_dashboards_validators v
INNER JOIN validator_dashboard_data_epoch e ON e.validator_index = v.validator_index
LEFT JOIN validator_dashboard_data_epoch_slashedby_count s ON e.epoch = s.epoch AND e.validator_index = s.slashed_by
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
WHERE (v.dashboard_id = $1 AND (v.group_id = $2 OR $2 = -1) AND e.epoch = $3)
`
query = fmt.Sprintf("%s %s", query, joinAndWhereClause)
Expand Down Expand Up @@ -520,6 +531,8 @@ func (d *DataAccessService) GetValidatorDashboardGroupRewards(dashboardId t.VDBI
ret.Slashing.StatusCount.Failed++
}

ret.ProposalElReward = ret.ProposalElReward.Add(row.BlocksElReward)

ret.ProposalClAttIncReward = ret.ProposalClAttIncReward.Add(row.BlocksClAttestationsReward.Mul(gWei))
ret.ProposalClSyncIncReward = ret.ProposalClSyncIncReward.Add(row.BlockClSyncAggregateReward.Mul(gWei))
ret.ProposalClSlashingIncReward = ret.ProposalClSlashingIncReward.Add(row.SlasherRewards.Mul(gWei))
Expand All @@ -545,9 +558,8 @@ func (d *DataAccessService) GetValidatorDashboardRewardsChart(dashboardId t.VDBI
queryParams := []interface{}{}
rewardsQuery := ""

// TODO: El rewards data (blocks_el_reward) will be provided at a later point
rewardsDataQuery := `
SUM(COALESCE(e.blocks_el_reward, 0)) AS el_rewards,
COALESCE(SUM(COALESCE(r.value, ep.fee_recipient_reward * 1e18)), 0) AS el_rewards,
SUM(COALESCE(e.attestations_reward, 0) + COALESCE(e.blocks_cl_reward, 0) +
COALESCE(e.sync_rewards, 0) + COALESCE(e.slasher_reward, 0)) AS cl_rewards
`
Expand All @@ -561,6 +573,9 @@ func (d *DataAccessService) GetValidatorDashboardRewardsChart(dashboardId t.VDBI
%s
FROM validator_dashboard_data_epoch e
INNER JOIN users_val_dashboards_validators v ON e.validator_index = v.validator_index
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
WHERE v.dashboard_id = $%d AND e.epoch > $%d
GROUP BY e.epoch, v.group_id
ORDER BY e.epoch, v.group_id`, rewardsDataQuery, len(queryParams)-1, len(queryParams))
Expand All @@ -573,6 +588,9 @@ func (d *DataAccessService) GetValidatorDashboardRewardsChart(dashboardId t.VDBI
$%d::smallint AS group_id,
%s
FROM validator_dashboard_data_epoch e
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
WHERE e.validator_index = ANY($%d) AND e.epoch > $%d
GROUP BY e.epoch
ORDER BY e.epoch`, len(queryParams)-2, rewardsDataQuery, len(queryParams)-1, len(queryParams))
Expand Down Expand Up @@ -775,6 +793,12 @@ func (d *DataAccessService) GetValidatorDashboardDuties(dashboardId t.VDBId, epo
`, len(queryParams))
}

joinSubquery += `
LEFT JOIN blocks b ON e.epoch = b.epoch AND e.validator_index = b.proposer AND b.status = '1'
LEFT JOIN execution_payloads ep ON ep.block_hash = b.exec_block_hash
LEFT JOIN relays_blocks r ON r.exec_block_hash = b.exec_block_hash
`

if colSort.Column == enums.VDBDutiesColumns.Validator {
if currentCursor.IsValid() {
// If we have a valid cursor only check the results before/after it
Expand All @@ -797,14 +821,13 @@ func (d *DataAccessService) GetValidatorDashboardDuties(dashboardId t.VDBId, epo
}

// Use a subquery to allow access to total_reward in the where clause
// TODO: El rewards data (blocks_el_reward) will be provided at a later point
rewardsQuery := fmt.Sprintf(`
SELECT *
FROM (
SELECT
e.validator_index,
(
COALESCE(e.blocks_el_reward, 0) +
COALESCE(r.value, ep.fee_recipient_reward * 1e18, 0) +
CAST((
COALESCE(e.attestations_reward, 0) +
COALESCE(e.blocks_cl_reward, 0) +
Expand All @@ -827,7 +850,7 @@ func (d *DataAccessService) GetValidatorDashboardDuties(dashboardId t.VDBId, epo
COALESCE(e.slasher_reward, 0) AS slasher_reward,
COALESCE(e.blocks_scheduled, 0) AS blocks_scheduled,
COALESCE(e.blocks_proposed, 0) AS blocks_proposed,
COALESCE(e.blocks_el_reward, 0) AS blocks_el_reward,
COALESCE(r.value, ep.fee_recipient_reward * 1e18, 0) AS blocks_el_reward,
COALESCE(e.blocks_cl_attestations_reward, 0) AS blocks_cl_attestations_reward,
COALESCE(e.blocks_cl_sync_aggregate_reward, 0) AS blocks_cl_sync_aggregate_reward
FROM validator_dashboard_data_epoch e
Expand Down

0 comments on commit 17e237d

Please sign in to comment.