9547ac069c
## Issue Addressed [#3661](https://github.com/sigp/lighthouse/issues/3661) ## Proposed Changes `/eth/v1/beacon/rewards/blocks/{block_id}` ``` { "execution_optimistic": false, "finalized": false, "data": { "proposer_index": "123", "total": "123", "attestations": "123", "sync_aggregate": "123", "proposer_slashings": "123", "attester_slashings": "123" } } ``` The issue contains the implementation of three per-validator reward APIs: * `sync_committee_rewards` * [`attestation_rewards`](https://github.com/sigp/lighthouse/pull/3822) * `block_rewards` This PR only implements the `block_rewards`. The endpoints can be viewed in the Ethereum Beacon nodes API browser: [https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Rewards](https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Rewards) ## Additional Info The implementation of [consensus client reward APIs](https://github.com/eth-protocol-fellows/cohort-three/blob/master/projects/project-ideas.md#consensus-client-reward-apis) is part of the [EPF](https://github.com/eth-protocol-fellows/cohort-three). Co-authored-by: kevinbogner <kevbogner@gmail.com> Co-authored-by: navie <naviechan@gmail.com>
28 lines
1.0 KiB
Rust
28 lines
1.0 KiB
Rust
use crate::sync_committee_rewards::get_state_before_applying_block;
|
|
use crate::BlockId;
|
|
use crate::ExecutionOptimistic;
|
|
use beacon_chain::{BeaconChain, BeaconChainTypes};
|
|
use eth2::lighthouse::StandardBlockReward;
|
|
use std::sync::Arc;
|
|
use warp_utils::reject::beacon_chain_error;
|
|
//// The difference between block_rewards and beacon_block_rewards is the later returns block
|
|
//// reward format that satisfies beacon-api specs
|
|
pub fn compute_beacon_block_rewards<T: BeaconChainTypes>(
|
|
chain: Arc<BeaconChain<T>>,
|
|
block_id: BlockId,
|
|
) -> Result<(StandardBlockReward, ExecutionOptimistic), warp::Rejection> {
|
|
let (block, execution_optimistic) = block_id.blinded_block(&chain)?;
|
|
|
|
let block_ref = block.message();
|
|
|
|
let block_root = block.canonical_root();
|
|
|
|
let mut state = get_state_before_applying_block(chain.clone(), &block)?;
|
|
|
|
let rewards = chain
|
|
.compute_beacon_block_reward(block_ref, block_root, &mut state)
|
|
.map_err(beacon_chain_error)?;
|
|
|
|
Ok((rewards, execution_optimistic))
|
|
}
|