Merge pull request #1510 from ethereum/genesis-slot-time
explicit use of GENESIS_SLOT in fork choice
This commit is contained in:
commit
4636b3e824
|
@ -13,9 +13,15 @@
|
||||||
- [`LatestMessage`](#latestmessage)
|
- [`LatestMessage`](#latestmessage)
|
||||||
- [`Store`](#store)
|
- [`Store`](#store)
|
||||||
- [`get_genesis_store`](#get_genesis_store)
|
- [`get_genesis_store`](#get_genesis_store)
|
||||||
|
- [`get_slots_since_genesis`](#get_slots_since_genesis)
|
||||||
|
- [`get_current_slot`](#get_current_slot)
|
||||||
|
- [`compute_slots_since_epoch_start`](#compute_slots_since_epoch_start)
|
||||||
- [`get_ancestor`](#get_ancestor)
|
- [`get_ancestor`](#get_ancestor)
|
||||||
- [`get_latest_attesting_balance`](#get_latest_attesting_balance)
|
- [`get_latest_attesting_balance`](#get_latest_attesting_balance)
|
||||||
|
- [`filter_block_tree`](#filter_block_tree)
|
||||||
|
- [`get_filtered_block_tree`](#get_filtered_block_tree)
|
||||||
- [`get_head`](#get_head)
|
- [`get_head`](#get_head)
|
||||||
|
- [`should_update_justified_checkpoint`](#should_update_justified_checkpoint)
|
||||||
- [Handlers](#handlers)
|
- [Handlers](#handlers)
|
||||||
- [`on_tick`](#on_tick)
|
- [`on_tick`](#on_tick)
|
||||||
- [`on_block`](#on_block)
|
- [`on_block`](#on_block)
|
||||||
|
@ -96,11 +102,18 @@ def get_genesis_store(genesis_state: BeaconState) -> Store:
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `get_slots_since_genesis`
|
||||||
|
|
||||||
|
```python
|
||||||
|
def get_slots_since_genesis(store: Store) -> int:
|
||||||
|
return (store.time - store.genesis_time) // SECONDS_PER_SLOT
|
||||||
|
```
|
||||||
|
|
||||||
#### `get_current_slot`
|
#### `get_current_slot`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def get_current_slot(store: Store) -> Slot:
|
def get_current_slot(store: Store) -> Slot:
|
||||||
return Slot((store.time - store.genesis_time) // SECONDS_PER_SLOT)
|
return Slot(GENESIS_SLOT + get_slots_since_genesis(store))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `compute_slots_since_epoch_start`
|
#### `compute_slots_since_epoch_start`
|
||||||
|
@ -264,7 +277,7 @@ def on_block(store: Store, signed_block: SignedBeaconBlock) -> None:
|
||||||
assert block.parent_root in store.block_states
|
assert block.parent_root in store.block_states
|
||||||
pre_state = store.block_states[block.parent_root].copy()
|
pre_state = store.block_states[block.parent_root].copy()
|
||||||
# Blocks cannot be in the future. If they are, their consideration must be delayed until the are in the past.
|
# Blocks cannot be in the future. If they are, their consideration must be delayed until the are in the past.
|
||||||
assert store.time >= pre_state.genesis_time + block.slot * SECONDS_PER_SLOT
|
assert get_current_slot(store) >= block.slot
|
||||||
# Add new block to the store
|
# Add new block to the store
|
||||||
store.blocks[hash_tree_root(block)] = block
|
store.blocks[hash_tree_root(block)] = block
|
||||||
# Check block is a descendant of the finalized block
|
# Check block is a descendant of the finalized block
|
||||||
|
@ -312,7 +325,7 @@ def on_attestation(store: Store, attestation: Attestation) -> None:
|
||||||
assert target.root in store.blocks
|
assert target.root in store.blocks
|
||||||
# Attestations cannot be from future epochs. If they are, delay consideration until the epoch arrives
|
# Attestations cannot be from future epochs. If they are, delay consideration until the epoch arrives
|
||||||
base_state = store.block_states[target.root].copy()
|
base_state = store.block_states[target.root].copy()
|
||||||
assert store.time >= base_state.genesis_time + compute_start_slot_at_epoch(target.epoch) * SECONDS_PER_SLOT
|
assert get_current_slot(store) >= compute_start_slot_at_epoch(target.epoch)
|
||||||
|
|
||||||
# Attestations must be for a known block. If block is unknown, delay consideration until the block is found
|
# Attestations must be for a known block. If block is unknown, delay consideration until the block is found
|
||||||
assert attestation.data.beacon_block_root in store.blocks
|
assert attestation.data.beacon_block_root in store.blocks
|
||||||
|
@ -327,7 +340,7 @@ def on_attestation(store: Store, attestation: Attestation) -> None:
|
||||||
|
|
||||||
# Attestations can only affect the fork choice of subsequent slots.
|
# Attestations can only affect the fork choice of subsequent slots.
|
||||||
# Delay consideration in the fork choice until their slot is in the past.
|
# Delay consideration in the fork choice until their slot is in the past.
|
||||||
assert store.time >= (attestation.data.slot + 1) * SECONDS_PER_SLOT
|
assert get_current_slot(store) >= attestation.data.slot + 1
|
||||||
|
|
||||||
# Get state at the `target` to validate attestation and calculate the committees
|
# Get state at the `target` to validate attestation and calculate the committees
|
||||||
indexed_attestation = get_indexed_attestation(target_state, attestation)
|
indexed_attestation = get_indexed_attestation(target_state, attestation)
|
||||||
|
|
Loading…
Reference in New Issue