Introduces a modification to the consensus layer specification which ensures that slashed validator cannot be elected as block proposer.
Motivation
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.
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.
Backwards Compatibility
This fix changes proposer election mechanism in a backwards incompatible way and requires a hard fork to be deployed.
Test Cases
The following test cases were added to cover this change:
Mikhail Kalinin (@mkalinin), "EIP-6988: Elected block proposer has not been slashed [DRAFT]," Ethereum Improvement Proposals, no. 6988, May 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6988.