## Proposed Changes Implement the consensus changes necessary for the upcoming Altair hard fork. ## Additional Info This is quite a heavy refactor, with pivotal types like the `BeaconState` and `BeaconBlock` changing from structs to enums. This ripples through the whole codebase with field accesses changing to methods, e.g. `state.slot` => `state.slot()`. Co-authored-by: realbigsean <seananderson33@gmail.com>
20 lines
584 B
Rust
20 lines
584 B
Rust
use integer_sqrt::IntegerSquareRoot;
|
|
use safe_arith::SafeArith;
|
|
use types::*;
|
|
|
|
/// Returns the base reward for some validator.
|
|
pub fn get_base_reward<T: EthSpec>(
|
|
state: &BeaconState<T>,
|
|
index: usize,
|
|
// Should be == get_total_active_balance(state, spec)
|
|
total_active_balance: u64,
|
|
spec: &ChainSpec,
|
|
) -> Result<u64, BeaconStateError> {
|
|
state
|
|
.get_effective_balance(index)?
|
|
.safe_mul(spec.base_reward_factor)?
|
|
.safe_div(total_active_balance.integer_sqrt())?
|
|
.safe_div(spec.base_rewards_per_epoch)
|
|
.map_err(Into::into)
|
|
}
|