Merge branch 'phase0-simplify' into naive-aggregation
This commit is contained in:
commit
f63c122ddc
|
@ -55,7 +55,7 @@ BLS_WITHDRAWAL_PREFIX: 0x00
|
||||||
SECONDS_PER_SLOT: 12
|
SECONDS_PER_SLOT: 12
|
||||||
# 2**0 (= 1) slots 6 seconds
|
# 2**0 (= 1) slots 6 seconds
|
||||||
MIN_ATTESTATION_INCLUSION_DELAY: 1
|
MIN_ATTESTATION_INCLUSION_DELAY: 1
|
||||||
# 2**6 (= 32) slots 6.4 minutes
|
# 2**5 (= 32) slots 6.4 minutes
|
||||||
SLOTS_PER_EPOCH: 32
|
SLOTS_PER_EPOCH: 32
|
||||||
# 2**0 (= 1) epochs 6.4 minutes
|
# 2**0 (= 1) epochs 6.4 minutes
|
||||||
MIN_SEED_LOOKAHEAD: 1
|
MIN_SEED_LOOKAHEAD: 1
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
- [`compute_proposer_index`](#compute_proposer_index)
|
- [`compute_proposer_index`](#compute_proposer_index)
|
||||||
- [`compute_committee`](#compute_committee)
|
- [`compute_committee`](#compute_committee)
|
||||||
- [`compute_epoch_at_slot`](#compute_epoch_at_slot)
|
- [`compute_epoch_at_slot`](#compute_epoch_at_slot)
|
||||||
- [`compute_start_slot_of_epoch`](#compute_start_slot_of_epoch)
|
- [`compute_start_slot_at_epoch`](#compute_start_slot_at_epoch)
|
||||||
- [`compute_activation_exit_epoch`](#compute_activation_exit_epoch)
|
- [`compute_activation_exit_epoch`](#compute_activation_exit_epoch)
|
||||||
- [`compute_domain`](#compute_domain)
|
- [`compute_domain`](#compute_domain)
|
||||||
- [Beacon state accessors](#beacon-state-accessors)
|
- [Beacon state accessors](#beacon-state-accessors)
|
||||||
|
@ -739,10 +739,10 @@ def compute_epoch_at_slot(slot: Slot) -> Epoch:
|
||||||
return Epoch(slot // SLOTS_PER_EPOCH)
|
return Epoch(slot // SLOTS_PER_EPOCH)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `compute_start_slot_of_epoch`
|
#### `compute_start_slot_at_epoch`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def compute_start_slot_of_epoch(epoch: Epoch) -> Slot:
|
def compute_start_slot_at_epoch(epoch: Epoch) -> Slot:
|
||||||
"""
|
"""
|
||||||
Return the start slot of ``epoch``.
|
Return the start slot of ``epoch``.
|
||||||
"""
|
"""
|
||||||
|
@ -799,7 +799,7 @@ def get_block_root(state: BeaconState, epoch: Epoch) -> Hash:
|
||||||
"""
|
"""
|
||||||
Return the block root at the start of a recent ``epoch``.
|
Return the block root at the start of a recent ``epoch``.
|
||||||
"""
|
"""
|
||||||
return get_block_root_at_slot(state, compute_start_slot_of_epoch(epoch))
|
return get_block_root_at_slot(state, compute_start_slot_at_epoch(epoch))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `get_block_root_at_slot`
|
#### `get_block_root_at_slot`
|
||||||
|
|
|
@ -118,7 +118,7 @@ def get_latest_attesting_balance(store: Store, root: Hash) -> Gwei:
|
||||||
def get_head(store: Store) -> Hash:
|
def get_head(store: Store) -> Hash:
|
||||||
# Execute the LMD-GHOST fork choice
|
# Execute the LMD-GHOST fork choice
|
||||||
head = store.justified_checkpoint.root
|
head = store.justified_checkpoint.root
|
||||||
justified_slot = compute_start_slot_of_epoch(store.justified_checkpoint.epoch)
|
justified_slot = compute_start_slot_at_epoch(store.justified_checkpoint.epoch)
|
||||||
while True:
|
while True:
|
||||||
children = [
|
children = [
|
||||||
root for root in store.blocks.keys()
|
root for root in store.blocks.keys()
|
||||||
|
@ -156,7 +156,7 @@ def on_block(store: Store, block: BeaconBlock) -> None:
|
||||||
store.finalized_checkpoint.root
|
store.finalized_checkpoint.root
|
||||||
)
|
)
|
||||||
# Check that block is later than the finalized epoch slot
|
# Check that block is later than the finalized epoch slot
|
||||||
assert block.slot > compute_start_slot_of_epoch(store.finalized_checkpoint.epoch)
|
assert block.slot > compute_start_slot_at_epoch(store.finalized_checkpoint.epoch)
|
||||||
# Check the block is valid and compute the post-state
|
# Check the block is valid and compute the post-state
|
||||||
state = state_transition(pre_state, block)
|
state = state_transition(pre_state, block)
|
||||||
# Add new state for this block to the store
|
# Add new state for this block to the store
|
||||||
|
@ -182,11 +182,11 @@ def on_attestation(store: Store, attestation: Attestation) -> None:
|
||||||
|
|
||||||
# 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_of_epoch(target.epoch) * SECONDS_PER_SLOT
|
assert store.time >= base_state.genesis_time + compute_start_slot_at_epoch(target.epoch) * SECONDS_PER_SLOT
|
||||||
|
|
||||||
# Store target checkpoint state if not yet seen
|
# Store target checkpoint state if not yet seen
|
||||||
if target not in store.checkpoint_states:
|
if target not in store.checkpoint_states:
|
||||||
process_slots(base_state, compute_start_slot_of_epoch(target.epoch))
|
process_slots(base_state, compute_start_slot_at_epoch(target.epoch))
|
||||||
store.checkpoint_states[target] = base_state
|
store.checkpoint_states[target] = base_state
|
||||||
target_state = store.checkpoint_states[target]
|
target_state = store.checkpoint_states[target]
|
||||||
|
|
||||||
|
|
|
@ -203,7 +203,7 @@ class BeaconState(Container):
|
||||||
```
|
```
|
||||||
|
|
||||||
`period_committee_roots` values are initialized to `Bytes32()` (empty bytes value).
|
`period_committee_roots` values are initialized to `Bytes32()` (empty bytes value).
|
||||||
`next_shard_receipt_period` values are initialized to `compute_epoch_of_slot(PHASE_1_FORK_SLOT) // EPOCHS_PER_SHARD_PERIOD`.
|
`next_shard_receipt_period` values are initialized to `compute_epoch_at_slot(PHASE_1_FORK_SLOT) // EPOCHS_PER_SHARD_PERIOD`.
|
||||||
|
|
||||||
#### `BeaconBlockBody`
|
#### `BeaconBlockBody`
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ def get_persistent_committee_pubkeys_and_balances(memory: LightClientMemory,
|
||||||
"""
|
"""
|
||||||
Return pubkeys and balances for the persistent committee at ``epoch``.
|
Return pubkeys and balances for the persistent committee at ``epoch``.
|
||||||
"""
|
"""
|
||||||
current_period = compute_epoch_of_slot(memory.header.slot) // EPOCHS_PER_SHARD_PERIOD
|
current_period = compute_epoch_at_slot(memory.header.slot) // EPOCHS_PER_SHARD_PERIOD
|
||||||
next_period = epoch // EPOCHS_PER_SHARD_PERIOD
|
next_period = epoch // EPOCHS_PER_SHARD_PERIOD
|
||||||
assert next_period in (current_period, current_period + 1)
|
assert next_period in (current_period, current_period + 1)
|
||||||
if next_period == current_period:
|
if next_period == current_period:
|
||||||
|
@ -114,7 +114,7 @@ The state of a light client is stored in a `memory` object of type `LightClientM
|
||||||
```python
|
```python
|
||||||
def update_memory(memory: LightClientMemory, update: LightClientUpdate) -> None:
|
def update_memory(memory: LightClientMemory, update: LightClientUpdate) -> None:
|
||||||
# Verify the update does not skip a period
|
# Verify the update does not skip a period
|
||||||
current_period = compute_epoch_of_slot(memory.header.slot) // EPOCHS_PER_SHARD_PERIOD
|
current_period = compute_epoch_at_slot(memory.header.slot) // EPOCHS_PER_SHARD_PERIOD
|
||||||
next_epoch = compute_epoch_of_shard_slot(update.header.slot)
|
next_epoch = compute_epoch_of_shard_slot(update.header.slot)
|
||||||
next_period = next_epoch // EPOCHS_PER_SHARD_PERIOD
|
next_period = next_epoch // EPOCHS_PER_SHARD_PERIOD
|
||||||
assert next_period in (current_period, current_period + 1)
|
assert next_period in (current_period, current_period + 1)
|
||||||
|
|
|
@ -156,7 +156,7 @@ def get_committee_assignment(state: BeaconState,
|
||||||
next_epoch = get_current_epoch(state) + 1
|
next_epoch = get_current_epoch(state) + 1
|
||||||
assert epoch <= next_epoch
|
assert epoch <= next_epoch
|
||||||
|
|
||||||
start_slot = compute_start_slot_of_epoch(epoch)
|
start_slot = compute_start_slot_at_epoch(epoch)
|
||||||
for slot in range(start_slot, start_slot + SLOTS_PER_EPOCH):
|
for slot in range(start_slot, start_slot + SLOTS_PER_EPOCH):
|
||||||
for index in range(get_committee_count_at_slot(state, Slot(slot))):
|
for index in range(get_committee_count_at_slot(state, Slot(slot))):
|
||||||
committee = get_beacon_committee(state, Slot(slot), CommitteeIndex(index))
|
committee = get_beacon_committee(state, Slot(slot), CommitteeIndex(index))
|
||||||
|
@ -310,7 +310,7 @@ Set `attestation_data.beacon_block_root = signing_root(head_block)`.
|
||||||
|
|
||||||
*Note*: `epoch_boundary_block_root` can be looked up in the state using:
|
*Note*: `epoch_boundary_block_root` can be looked up in the state using:
|
||||||
|
|
||||||
- Let `start_slot = compute_start_slot_of_epoch(get_current_epoch(head_state))`.
|
- Let `start_slot = compute_start_slot_at_epoch(get_current_epoch(head_state))`.
|
||||||
- Let `epoch_boundary_block_root = signing_root(head_block) if start_slot == head_state.slot else get_block_root(state, start_slot)`.
|
- Let `epoch_boundary_block_root = signing_root(head_block) if start_slot == head_state.slot else get_block_root(state, start_slot)`.
|
||||||
|
|
||||||
#### Construct attestation
|
#### Construct attestation
|
||||||
|
|
|
@ -14,7 +14,7 @@ def build_attestation_data(spec, state, slot, index):
|
||||||
else:
|
else:
|
||||||
block_root = spec.get_block_root_at_slot(state, slot)
|
block_root = spec.get_block_root_at_slot(state, slot)
|
||||||
|
|
||||||
current_epoch_start_slot = spec.compute_start_slot_of_epoch(spec.get_current_epoch(state))
|
current_epoch_start_slot = spec.compute_start_slot_at_epoch(spec.get_current_epoch(state))
|
||||||
if slot < current_epoch_start_slot:
|
if slot < current_epoch_start_slot:
|
||||||
epoch_boundary_root = spec.get_block_root(state, spec.get_previous_epoch(state))
|
epoch_boundary_root = spec.get_block_root(state, spec.get_previous_epoch(state))
|
||||||
elif slot == current_epoch_start_slot:
|
elif slot == current_epoch_start_slot:
|
||||||
|
|
|
@ -53,7 +53,7 @@ def next_epoch_with_attestations(spec,
|
||||||
if fill_cur_epoch and post_state.slot >= spec.MIN_ATTESTATION_INCLUSION_DELAY:
|
if fill_cur_epoch and post_state.slot >= spec.MIN_ATTESTATION_INCLUSION_DELAY:
|
||||||
slot_to_attest = post_state.slot - spec.MIN_ATTESTATION_INCLUSION_DELAY + 1
|
slot_to_attest = post_state.slot - spec.MIN_ATTESTATION_INCLUSION_DELAY + 1
|
||||||
committees_per_slot = spec.get_committee_count_at_slot(state, slot_to_attest)
|
committees_per_slot = spec.get_committee_count_at_slot(state, slot_to_attest)
|
||||||
if slot_to_attest >= spec.compute_start_slot_of_epoch(spec.get_current_epoch(post_state)):
|
if slot_to_attest >= spec.compute_start_slot_at_epoch(spec.get_current_epoch(post_state)):
|
||||||
for index in range(committees_per_slot):
|
for index in range(committees_per_slot):
|
||||||
cur_attestation = get_valid_attestation(spec, post_state, slot_to_attest, index=index)
|
cur_attestation = get_valid_attestation(spec, post_state, slot_to_attest, index=index)
|
||||||
block.body.attestations.append(cur_attestation)
|
block.body.attestations.append(cur_attestation)
|
||||||
|
|
|
@ -25,7 +25,7 @@ def add_mock_attestations(spec, state, epoch, source, target, sufficient_support
|
||||||
total_balance = spec.get_total_active_balance(state)
|
total_balance = spec.get_total_active_balance(state)
|
||||||
remaining_balance = total_balance * 2 // 3
|
remaining_balance = total_balance * 2 // 3
|
||||||
|
|
||||||
start_slot = spec.compute_start_slot_of_epoch(epoch)
|
start_slot = spec.compute_start_slot_at_epoch(epoch)
|
||||||
for slot in range(start_slot, start_slot + spec.SLOTS_PER_EPOCH):
|
for slot in range(start_slot, start_slot + spec.SLOTS_PER_EPOCH):
|
||||||
committees_per_slot = spec.get_committee_count_at_slot(state, slot)
|
committees_per_slot = spec.get_committee_count_at_slot(state, slot)
|
||||||
for index in range(committees_per_slot):
|
for index in range(committees_per_slot):
|
||||||
|
@ -74,7 +74,7 @@ def get_checkpoints(spec, epoch):
|
||||||
|
|
||||||
def put_checkpoints_in_block_roots(spec, state, checkpoints):
|
def put_checkpoints_in_block_roots(spec, state, checkpoints):
|
||||||
for c in checkpoints:
|
for c in checkpoints:
|
||||||
state.block_roots[spec.compute_start_slot_of_epoch(c.epoch) % spec.SLOTS_PER_HISTORICAL_ROOT] = c.root
|
state.block_roots[spec.compute_start_slot_at_epoch(c.epoch) % spec.SLOTS_PER_HISTORICAL_ROOT] = c.root
|
||||||
|
|
||||||
|
|
||||||
def finalize_on_234(spec, state, epoch, sufficient_support):
|
def finalize_on_234(spec, state, epoch, sufficient_support):
|
||||||
|
|
Loading…
Reference in New Issue