Expand `should_optimistically_import_block`
This commit is contained in:
parent
6eba269e9b
commit
6c13e2ecdb
|
@ -29,14 +29,23 @@ optimistically imported blocks which have yet to receive an `INVALID` or
|
||||||
`VALID` designation from an execution engine.
|
`VALID` designation from an execution engine.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def is_optimistic(block: BeaconBlock, optimistic_roots: Set[Root]) -> bool:
|
@dataclass
|
||||||
return hash_tree_root(block) in optimistic_roots
|
class Store(object):
|
||||||
|
optimistic_roots: Set[Root]
|
||||||
|
head_block_root: Root
|
||||||
|
blocks: Dict[Root, BeaconBlock]
|
||||||
|
block_states: Dict[Root, BeaconState]
|
||||||
```
|
```
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def latest_verified_ancestor(block: BeaconBlock) -> BeaconBlock:
|
def is_optimistic(store: Store, block: BeaconBlock) -> bool:
|
||||||
|
return hash_tree_root(block) in store.optimistic_roots
|
||||||
|
```
|
||||||
|
|
||||||
|
```python
|
||||||
|
def latest_verified_ancestor(store: Store, block: BeaconBlock) -> BeaconBlock:
|
||||||
while True:
|
while True:
|
||||||
if not is_optimistic(block) or block.parent_root == Root():
|
if not is_optimistic(store, block) or block.parent_root == Root():
|
||||||
return block
|
return block
|
||||||
block = get_block(block.parent_root)
|
block = get_block(block.parent_root)
|
||||||
```
|
```
|
||||||
|
@ -47,8 +56,11 @@ def is_execution_block(block: BeaconBlock) -> BeaconBlock:
|
||||||
```
|
```
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def should_optimistically_import_block(current_slot: Slot, block: BeaconBlock) -> bool:
|
def should_optimistically_import_block(store: Store, current_slot: Slot, block: BeaconBlock) -> bool:
|
||||||
return block.slot + SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY <= current_slot
|
justified_root = store.block_states[store.head_block_root].current_justified_checkpoint.root
|
||||||
|
justifed_is_verified = is_execution_block(store.blocks[justified_root])
|
||||||
|
block_is_deep = block.slot + SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY <= current_slot
|
||||||
|
return justified_is_verified or block_is_deep
|
||||||
```
|
```
|
||||||
|
|
||||||
Let only a node which returns `is_optimistic(head) is True` be an *optimistic
|
Let only a node which returns `is_optimistic(head) is True` be an *optimistic
|
||||||
|
@ -105,7 +117,7 @@ When a block transitions from `SYNCING` -> `INVALID`, all *descendants* of the
|
||||||
block MUST also transition from `SYNCING` -> `INVALID`.
|
block MUST also transition from `SYNCING` -> `INVALID`.
|
||||||
|
|
||||||
When a block transitions from the `SYNCING` state it is removed from the set of
|
When a block transitions from the `SYNCING` state it is removed from the set of
|
||||||
`optimistic_roots`.
|
`store.optimistic_roots`.
|
||||||
|
|
||||||
### Execution Engine Errors
|
### Execution Engine Errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue