From 3f76792ee363643a6a940a9805cc632c7678052d Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Thu, 5 May 2022 11:21:55 +1000 Subject: [PATCH] Require fork choice to run before proposal --- specs/phase0/validator.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/specs/phase0/validator.md b/specs/phase0/validator.md index acffccebc8..4f79c2d9d4 100644 --- a/specs/phase0/validator.md +++ b/specs/phase0/validator.md @@ -276,9 +276,15 @@ A validator has two primary responsibilities to the beacon chain: [proposing blo ### Block proposal A validator is expected to propose a [`SignedBeaconBlock`](./beacon-chain.md#signedbeaconblock) at -the beginning of any slot during which `is_proposer(state, validator_index)` returns `True`. -To propose, the validator selects the `BeaconBlock`, `parent`, -that in their view of the fork choice is the head of the chain during `slot - 1`. +the beginning of any `slot` during which `is_proposer(state, validator_index)` returns `True`. + +To propose, the validator selects the `BeaconBlock`, `parent` which: + +1. In their view of fork choice is the head of the chain at the start of + `slot`, after applying any queued attestations from `slot - 1`. +2. Is from a slot strictly less than the slot of the block about to be proposed, + i.e. `parent.slot < slot`. + The validator creates, signs, and broadcasts a `block` that is a child of `parent` that satisfies a valid [beacon chain state transition](./beacon-chain.md#beacon-chain-state-transition-function).