---
eip: 6988
title: Elected block proposer has not been slashed
description: Prevents a slashed validator from being elected as a block proposer
author: Mikhail Kalinin (@mkalinin)
discussions-to: https://ethereum-magicians.org/t/eip-6988-elected-block-proposer-has-not-been-slashed/14349
status: Stagnant
type: Standards Track
category: Core
created: 2023-05-04
---

## Abstract

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`](https://github.com/ethereum/consensus-specs/blob/3115d1140b23dd4c9c23fbd9e2428186cf816bde/specs/phase0/beacon-chain.md#block-header) function as defined in the consensus layer specification.

At the same time the definition of the [`phase0/compute_proposer_index`](https://github.com/ethereum/consensus-specs/blob/3115d1140b23dd4c9c23fbd9e2428186cf816bde/specs/phase0/beacon-chain.md#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

Specification of the proposed change can be found in [`/_features/eip6988/beacon-chain.md`](https://github.com/ethereum/consensus-specs/blob/0ad3972725e7c22e8edf3bab2dd7730acbe3c272/specs/_features/eip6988/beacon-chain.md).

## Rationale

### Modifying `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.

## 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:

* [`test_slashed_proposer_rewarded_for_sync_aggregate_inclusion`](https://github.com/ethereum/consensus-specs/blob/0ad3972725e7c22e8edf3bab2dd7730acbe3c272/tests/core/pyspec/eth2spec/test/altair/block_processing/sync_aggregate/test_process_sync_aggregate.py#L712)
* [`test_slashed_proposer_rewarded_for_attestation_inclusion`](https://github.com/ethereum/consensus-specs/blob/0ad3972725e7c22e8edf3bab2dd7730acbe3c272/tests/core/pyspec/eth2spec/test/altair/block_processing/test_process_attestation.py#L17)
* [`test_slashed_validator_not_elected_for_proposal`](https://github.com/ethereum/consensus-specs/blob/0ad3972725e7c22e8edf3bab2dd7730acbe3c272/tests/core/pyspec/eth2spec/test/eip6988/unittests/validator/test_validator.py#L9)
* [`test_slashed_validator_elected_for_proposal`](https://github.com/ethereum/consensus-specs/blob/0ad3972725e7c22e8edf3bab2dd7730acbe3c272/tests/core/pyspec/eth2spec/test/phase0/unittests/validator/test_validator_unittest.py#L520)

## Reference Implementation

Reference implementation is in the same place as [Specification](#specification).

## Security Considerations

There are no observed security issues introduced by the proposed change.

## Copyright

Copyright and related rights waived via [CC0](../LICENSE.md).
