Starting on phase 1 misc beacon changes
This commit is contained in:
parent
5808ab3ce7
commit
3dc7430ae9
|
@ -0,0 +1,75 @@
|
|||
# Phase 1 miscellaneous beacon chain changes
|
||||
|
||||
## Table of contents
|
||||
|
||||
<!-- TOC -->
|
||||
|
||||
- [Helpers](#helpers)
|
||||
- [pack_compact_validator](#pack_compact_validator)
|
||||
- [unpack_compact_validator](#unpack_compact_validator)
|
||||
- [committee_to_compact_committee](#committee_to_compact_committee)
|
||||
- [Changes](#changes)
|
||||
- [Persistent committees](#persistent-committees)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## Helpers
|
||||
|
||||
#### `pack_compact_validator`
|
||||
|
||||
```python
|
||||
def pack_compact_validator(index: uint64, slashed: bool, balance_in_increments: uint64) -> uint64:
|
||||
"""
|
||||
Creates a compact validator object representing index, slashed status, and compressed balance.
|
||||
Takes as input balance-in-increments (// EFFECTIVE_BALANCE_INCREMENT) to preserve symmetry with
|
||||
the unpacking function.
|
||||
"""
|
||||
return (index << 16) + (slashed << 15) + balance_in_increments
|
||||
```
|
||||
|
||||
### `unpack_compact_validator`
|
||||
|
||||
```python
|
||||
def unpack_compact_validator(compact_validator: uint64) -> Tuple[uint64, bool, uint64]:
|
||||
"""
|
||||
Returns validator index, slashed, balance // EFFECTIVE_BALANCE_INCREMENT
|
||||
"""
|
||||
return compact_validator >> 16, (compact_validator >> 15) % 2, compact_validator & (2**15 - 1)
|
||||
```
|
||||
|
||||
#### `committee_to_compact_committee`
|
||||
|
||||
```python
|
||||
def committee_to_compact_committee(state: BeaconState, committee: Sequence[ValidatorIndex]) -> CompactCommittee:
|
||||
validators = [state.validators[i] for i in committee]
|
||||
compact_validators = [
|
||||
pack_compact_validator(i, v.slashed, v.effective_balance // EFFECTIVE_BALANCE_INCREMENT)
|
||||
for i, v in zip(committee, validators)
|
||||
]
|
||||
pubkeys = [v.pubkey for v in validators]
|
||||
return CompactCommittee(pubkeys=pubkeys, compact_validators=compact_validators)
|
||||
```
|
||||
|
||||
## Changes
|
||||
|
||||
### Persistent committees
|
||||
|
||||
Add to the beacon state the following fields:
|
||||
|
||||
* `previous_persistent_committee_root: Hash`
|
||||
* `current_persistent_committee_root: Hash`
|
||||
* `next_persistent_committee_root: Hash`
|
||||
|
||||
Process the following function before `process_final_updates`:
|
||||
|
||||
```python
|
||||
def update_persistent_committee(state: BeaconState):
|
||||
if (get_current_epoch(state) + 1) % EPOCHS_PER_SHARD_PERIOD == 0:
|
||||
state.previous_persistent_committee_root = state.current_persistent_committee_root
|
||||
state.current_persistent_committee_root = state.next_persistent_committee_root
|
||||
committees = Vector[CompactCommittee, SHARD_COUNT]([
|
||||
committee_to_compact_committee(state, get_period_committee(state, get_current_epoch(state) + 1, i))
|
||||
for i in range(SHARD_COUNT)
|
||||
])
|
||||
state.next_persistent_committee_root = hash_tree_root(committees)
|
||||
```
|
Loading…
Reference in New Issue