Skip to content

Commit

Permalink
Merge pull request #2844 from sigp/opt-import
Browse files Browse the repository at this point in the history
Optimistically import any post-merge block
  • Loading branch information
djrtwo authored Mar 3, 2022
2 parents 72d4597 + bf25d32 commit 0b883a8
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions sync/optimistic.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,17 @@ def is_execution_block(block: BeaconBlock) -> bool:

```python
def is_optimistic_candidate_block(opt_store: OptimisticStore, current_slot: Slot, block: BeaconBlock) -> bool:
if is_execution_block(opt_store.blocks[block.parent_root]):
return True

justified_root = opt_store.block_states[opt_store.head_block_root].current_justified_checkpoint.root
justified_is_execution_block = is_execution_block(opt_store.blocks[justified_root])
block_is_deep = block.slot + SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY <= current_slot
return justified_is_execution_block or block_is_deep
if is_execution_block(opt_store.blocks[justified_root]):
return True

if block.slot + SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY <= current_slot:
return True

return False
```

Let only a node which returns `is_optimistic(opt_store, head) is True` be an *optimistic
Expand All @@ -99,14 +106,21 @@ behaviours without regard for optimistic sync.
### When to optimistically import blocks

A block MAY be optimistically imported when
`is_optimistic_candidate_block(opt_store, current_slot, block)` returns
`True`. This ensures that blocks are only optimistically imported if either:
`is_optimistic_candidate_block(opt_store, current_slot, block)` returns `True`.
This ensures that blocks are only optimistically imported if one or more of the
following are true:

1. The parent of the block has execution enabled.
1. The justified checkpoint has execution enabled.
1. The current slot (as per the system clock) is at least
`SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY` ahead of the slot of the block being
imported.

In effect, there are restrictions on when a *merge block* can be optimistically
imported. The merge block is the first block in any chain where
`is_execution_block(block) == True`. Any descendant of a merge block may be
imported optimistically at any time.

*See [Fork Choice Poisoning](#fork-choice-poisoning) for the motivations behind
these conditions.*

Expand Down

0 comments on commit 0b883a8

Please sign in to comment.