Introduces a modification to the consensus layer specification which ensures that slashed validator cannot be elected as block proposer.
A block proposed by a slashed validator is rejected by the corresponding validity check in the phase0/process_block_header
function as defined in the consensus layer specification.
At the same time the definition of the phase0/compute_proposer_index
allows for a slashed validator to be elected as a proposer. This contradiction effectively leads to a missed proposal if it is supposed to be made by a slashed validator.
The impact of the proposed fix in the case of a single slashing on Ethereum Mainnet is negligible but it becomes significant in the case of correlated slashings. For instance, a correlated slashing of 1/10th
of a validator set can lead to 1/10th
of missed proposals in a number of epochs after the slashing.
Specification of the proposed change can be found in /_features/eip6988/beacon-chain.md
.
get_beacon_proposer_index
This function is modified to read a proposer index from a beacon state if a slot of a latest block header is the same as the state.slot
.
This modification is done to make the function return correct proposer index in the case when the proposer of a given block is being slashed during processing of the block.
This fix changes proposer election mechanism in a backwards incompatible way and requires a hard fork to be deployed.
The following test cases were added to cover this change:
test_slashed_proposer_rewarded_for_sync_aggregate_inclusion
test_slashed_proposer_rewarded_for_attestation_inclusion
test_slashed_validator_not_elected_for_proposal
test_slashed_validator_elected_for_proposal
Reference implementation is in the same place as Specification.
There are no observed security issues introduced by the proposed change.
Copyright and related rights waived via CC0.