From 378d24948763af2a4492c2bee33dddf8cea6d94d Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Wed, 10 Jun 2020 11:02:10 +1000 Subject: [PATCH 1/3] Avoid redundant call to get_ancestor --- specs/phase0/fork-choice.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/specs/phase0/fork-choice.md b/specs/phase0/fork-choice.md index b9d8ecd3c..a4d6b6cfa 100644 --- a/specs/phase0/fork-choice.md +++ b/specs/phase0/fork-choice.md @@ -371,15 +371,16 @@ def on_block(store: Store, signed_block: SignedBeaconBlock) -> None: # Update finalized checkpoint if state.finalized_checkpoint.epoch > store.finalized_checkpoint.epoch: store.finalized_checkpoint = state.finalized_checkpoint - finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) - - # Update justified if new justified is later than store justified - # or if store justified is not in chain with finalized checkpoint - if ( - state.current_justified_checkpoint.epoch > store.justified_checkpoint.epoch - or get_ancestor(store, store.justified_checkpoint.root, finalized_slot) != store.finalized_checkpoint.root - ): - store.justified_checkpoint = state.current_justified_checkpoint + + if store.justified_checkpoint != state.current_justified_checkpoint: + finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) + # Update justified if new justified is later than store justified + # or if store justified is not in chain with finalized checkpoint + if ( + state.current_justified_checkpoint.epoch > store.justified_checkpoint.epoch + or get_ancestor(store, store.justified_checkpoint.root, finalized_slot) != store.finalized_checkpoint.root + ): + store.justified_checkpoint = state.current_justified_checkpoint ``` #### `on_attestation` From 479c40450dac7770434d2577499da0c5f63140ce Mon Sep 17 00:00:00 2001 From: Hsiao-Wei Wang Date: Wed, 10 Jun 2020 18:16:26 +0800 Subject: [PATCH 2/3] Friendly lint fix --- specs/phase0/fork-choice.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specs/phase0/fork-choice.md b/specs/phase0/fork-choice.md index a4d6b6cfa..ad1dc540c 100644 --- a/specs/phase0/fork-choice.md +++ b/specs/phase0/fork-choice.md @@ -371,14 +371,15 @@ def on_block(store: Store, signed_block: SignedBeaconBlock) -> None: # Update finalized checkpoint if state.finalized_checkpoint.epoch > store.finalized_checkpoint.epoch: store.finalized_checkpoint = state.finalized_checkpoint - + if store.justified_checkpoint != state.current_justified_checkpoint: finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) # Update justified if new justified is later than store justified # or if store justified is not in chain with finalized checkpoint if ( state.current_justified_checkpoint.epoch > store.justified_checkpoint.epoch - or get_ancestor(store, store.justified_checkpoint.root, finalized_slot) != store.finalized_checkpoint.root + or get_ancestor( + store, store.justified_checkpoint.root, finalized_slot) != store.finalized_checkpoint.root ): store.justified_checkpoint = state.current_justified_checkpoint ``` From 1dc6b55617deb1aabd8801ad412740c9d6adc50d Mon Sep 17 00:00:00 2001 From: Danny Ryan Date: Wed, 10 Jun 2020 09:40:34 -0500 Subject: [PATCH 3/3] rearrange fork choice condition for clarity --- specs/phase0/fork-choice.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/specs/phase0/fork-choice.md b/specs/phase0/fork-choice.md index ad1dc540c..132477ee8 100644 --- a/specs/phase0/fork-choice.md +++ b/specs/phase0/fork-choice.md @@ -372,15 +372,17 @@ def on_block(store: Store, signed_block: SignedBeaconBlock) -> None: if state.finalized_checkpoint.epoch > store.finalized_checkpoint.epoch: store.finalized_checkpoint = state.finalized_checkpoint + # Potentially update justified if different from store if store.justified_checkpoint != state.current_justified_checkpoint: - finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) # Update justified if new justified is later than store justified - # or if store justified is not in chain with finalized checkpoint - if ( - state.current_justified_checkpoint.epoch > store.justified_checkpoint.epoch - or get_ancestor( - store, store.justified_checkpoint.root, finalized_slot) != store.finalized_checkpoint.root - ): + if state.current_justified_checkpoint.epoch > store.justified_checkpoint.epoch: + store.justified_checkpoint = state.current_justified_checkpoint + return + + # Update justified if store justified is not in chain with finalized checkpoint + finalized_slot = compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) + ancestor_at_finalized_slot = get_ancestor(store, store.justified_checkpoint.root, finalized_slot) + if ancestor_at_finalized_slot != store.finalized_checkpoint.root: store.justified_checkpoint = state.current_justified_checkpoint ```