From 9fb2dd16c15279a53e0b9b3f51b7f7293a9293e0 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Fri, 11 Feb 2022 17:12:13 +0100 Subject: [PATCH] Ignore attestations voting for the wrong finalized checkpoint When nodes are syncing but have not yet reached the canonical `head`, they cannot determine whether nodes they are connected to serve a valid history or are making bogus claims in their `Status` advertisement. Thus, the best course of action that a client can take is to vote for its "current" best synced head, regardless of whether it's connected to peers that claim to have other heads or not. However, in the p2p spec, we penalize such peers with a `REJECT` - this should be an `IGNORE` instead because this vote is correct per the spec, albeit "late" according to the validating clients' view of the chain. --- specs/phase0/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/phase0/p2p-interface.md b/specs/phase0/p2p-interface.md index 4532feac8..344b417cf 100644 --- a/specs/phase0/p2p-interface.md +++ b/specs/phase0/p2p-interface.md @@ -424,7 +424,7 @@ The following validations MUST pass before forwarding the `attestation` on the s - _[REJECT]_ The block being voted for (`attestation.data.beacon_block_root`) passes validation. - _[REJECT]_ The attestation's target block is an ancestor of the block named in the LMD vote -- i.e. `get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(attestation.data.target.epoch)) == attestation.data.target.root` -- _[REJECT]_ The current `finalized_checkpoint` is an ancestor of the `block` defined by `attestation.data.beacon_block_root` -- i.e. +- _[IGNORE]_ The current `finalized_checkpoint` is an ancestor of the `block` defined by `attestation.data.beacon_block_root` -- i.e. `get_ancestor(store, attestation.data.beacon_block_root, compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)) == store.finalized_checkpoint.root`