Eth2.0-specs: Proposer attestation inclusion reward underspecified

Created on 14 Jan 2019  路  2Comments  路  Source: ethereum/eth2.0-specs

Issue

We currently do not prevent aggregate attestations that have overlap in indices from being included across multiple blocks. This is handled in finality, crosslinks, and attester reward but just taking the set of the indices included to prevent double counting. The reward for the proposers that might have double included is currently underspecified.

For each index in previous_epoch_attester_indices, we determine the proposer proposer_index = get_beacon_proposer_index(state, inclusion_slot(state, index)) and set state.validator_balances[proposer_index] += base_reward(state, index) // INCLUDER_REWARD_QUOTIENT

This could be interpreted in a number of ways:

  • the _first_ proposer to include the index
  • all proposers that included the index
  • maybe even, the _last_ proposer to include the index

I suggest we clarify the above language to specify the reward go to the _first_ proposer to include a given index. This will eliminate the incentive to double include for additional reward. The proposer might only double include at this point because they have additional attestations to add but do not have the requisite data to un-aggregate repeat indices from the aggregate attestation.

bug

Most helpful comment

Proposed fix. Change:

Let inclusion_slot(state, index) = a.slot_included for the attestation a where index is in get_attestation_participants(state, a.data, a.participation_bitfield).

To:

Let inclusion_slot(state, index) = a.slot_included for the attestation a where index is in get_attestation_participants(state, a.data, a.participation_bitfield). If multiple attestations are applicable, the attestation with lowest slot_included is considered.

I think that's the right place in the spec to intervene on this issue, as it could fix other unforeseen issues related to the same problem.

All 2 comments

Proposed fix. Change:

Let inclusion_slot(state, index) = a.slot_included for the attestation a where index is in get_attestation_participants(state, a.data, a.participation_bitfield).

To:

Let inclusion_slot(state, index) = a.slot_included for the attestation a where index is in get_attestation_participants(state, a.data, a.participation_bitfield). If multiple attestations are applicable, the attestation with lowest slot_included is considered.

I think that's the right place in the spec to intervene on this issue, as it could fix other unforeseen issues related to the same problem.

closing in favor of #464

Was this page helpful?
0 / 5 - 0 ratings