mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-01-12 19:54:34 +00:00
Update to make @djrtwo happy
This commit is contained in:
parent
0cd41bc578
commit
aacaefbd2b
@ -565,14 +565,14 @@ def add_validator(validators: List[ValidatorRecord],
|
||||
|
||||
```python
|
||||
def exit_validator(index, crystallized_state, penalize, current_slot):
|
||||
v = crystallized_state.validators[index]
|
||||
v.exit_slot = current_slot
|
||||
validator = crystallized_state.validators[index]
|
||||
validator.exit_slot = current_slot
|
||||
if penalize:
|
||||
v.status = PENALIZED
|
||||
crystallized_state.deposits_penalized_in_period[current_slot // WITHDRAWAL_PERIOD] += v.balance
|
||||
validator.status = PENALIZED
|
||||
crystallized_state.deposits_penalized_in_period[current_slot // WITHDRAWAL_PERIOD] += validator.balance
|
||||
else:
|
||||
v.status = PENDING_EXIT
|
||||
add_validator_set_change_record(crystallized_state, index, v.pubkey, EXIT)
|
||||
validator.status = PENDING_EXIT
|
||||
add_validator_set_change_record(crystallized_state, index, validator.pubkey, EXIT)
|
||||
```
|
||||
|
||||
### Per-block processing
|
||||
@ -679,14 +679,14 @@ In addition, validators with `status == PENALIZED` lose `B // reward_quotient +
|
||||
|
||||
For each `SpecialRecord` `obj` in `active_state.pending_specials`:
|
||||
|
||||
* **[covers logouts]**: If `obj.kind == LOGOUT`, interpret `data[0]` as a validator index as an `int32` and `data[1]` as a signature. If `BLSVerify(pubkey=validators[data[0]].pubkey, msg=hash(LOGOUT_MESSAGE), sig=data[1])`, and `validators[i].status == ACTIVE`, run `exit_validator(data[0], crystallized_state, penalize=False, current_slot=current_slot)`
|
||||
* **[covers `NO_DBL_VOTE`, `NO_SURROUND`, `NO_DBL_PROPOSE` slashing conditions]:** If `obj.kind == CASPER_SLASHING`, interpret `data[0]` as a list of concatenated `int32` values where each value represents an index into `validators`, `data[1]` as the data being signed and `data[2]` as an aggregate signature. Interpret `data[3:6]` similarly. Verify that both signatures are valid, that the two signatures are signing distinct data, and that they are either signing the same slot number, or that one surrounds the other (ie. `source1 < source2 < target2 < target1`). Let `indices` be the list of indices in both signatures; verify that its length is at least 1. For each validator index `v` in `indices`, if its `status` does not equal `PENALIZED`, then run `exit_validator(v, crystallized_state, penalize=True, current_slot=current_slot)`
|
||||
* **[covers logouts]**: If `obj.kind == LOGOUT`, interpret `data[0]` as a validator index as an `int32` and `data[1]` as a signature. If `BLSVerify(pubkey=validators[data[0]].pubkey, msg=hash(LOGOUT_MESSAGE), sig=data[1])`, and `validators[i].status == ACTIVE`, run `exit_validator(data[0], crystallized_state, penalize=False, current_slot=block.slot)`
|
||||
* **[covers `NO_DBL_VOTE`, `NO_SURROUND`, `NO_DBL_PROPOSE` slashing conditions]:** If `obj.kind == CASPER_SLASHING`, interpret `data[0]` as a list of concatenated `int32` values where each value represents an index into `validators`, `data[1]` as the data being signed and `data[2]` as an aggregate signature. Interpret `data[3:6]` similarly. Verify that both signatures are valid, that the two signatures are signing distinct data, and that they are either signing the same slot number, or that one surrounds the other (ie. `source1 < source2 < target2 < target1`). Let `indices` be the list of indices in both signatures; verify that its length is at least 1. For each validator index `v` in `indices`, if its `status` does not equal `PENALIZED`, then run `exit_validator(v, crystallized_state, penalize=True, current_slot=block.slot)`
|
||||
|
||||
* **[covers RANDAO updates]**: If `obj.kind == RANDAO_REVEAL`, interpret `data[0]` as an integer and `data[1]` as a hash32. Set `validators[data[0]].randao_commitment = data[1]`.
|
||||
|
||||
#### Finally...
|
||||
|
||||
* If the balance of any validator with index `v` is less than `MIN_ONLINE_DEPOSIT_SIZE`, then run `exit_validator(v, crystallized_state, penalize=False, current_slot=current_slot)`
|
||||
* For any validator with index `v` with balance is less than `MIN_ONLINE_DEPOSIT_SIZE` and status `ACTIVE`, run `exit_validator(v, crystallized_state, penalize=False, current_slot=block.slot)`
|
||||
* Set `crystallized_state.last_state_recalculation_slot += CYCLE_LENGTH`
|
||||
* Remove all attestation records older than slot `crystallized_state.last_state_recalculation_slot`
|
||||
* Empty the `active_state.pending_specials` list
|
||||
|
Loading…
x
Reference in New Issue
Block a user