Generalise `slash_validator` for phase 1
Make `slash_validator` friendly to phase 1. This is a cosmetic change in the context of phase 0.
This commit is contained in:
parent
40aa82beb7
commit
b7441e8ab7
|
@ -251,7 +251,8 @@ Code snippets appearing in `this style` are to be interpreted as Python code.
|
||||||
| Name | Value |
|
| Name | Value |
|
||||||
| - | - |
|
| - | - |
|
||||||
| `BASE_REWARD_QUOTIENT` | `2**5` (= 32) |
|
| `BASE_REWARD_QUOTIENT` | `2**5` (= 32) |
|
||||||
| `WHISTLEBLOWER_REWARD_QUOTIENT` | `2**9` (= 512) |
|
| `WHISTLEBLOWING_REWARD_QUOTIENT` | `2**9` (= 512) |
|
||||||
|
| `PROPOSER_REWARD_QUOTIENT` | `2**4` (= 16) |
|
||||||
| `ATTESTATION_INCLUSION_REWARD_QUOTIENT` | `2**3` (= 8) |
|
| `ATTESTATION_INCLUSION_REWARD_QUOTIENT` | `2**3` (= 8) |
|
||||||
| `INACTIVITY_PENALTY_QUOTIENT` | `2**24` (= 16,777,216) |
|
| `INACTIVITY_PENALTY_QUOTIENT` | `2**24` (= 16,777,216) |
|
||||||
| `MIN_PENALTY_QUOTIENT` | `2**5` (= 32) |
|
| `MIN_PENALTY_QUOTIENT` | `2**5` (= 32) |
|
||||||
|
@ -1448,21 +1449,25 @@ def exit_validator(state: BeaconState, index: ValidatorIndex) -> None:
|
||||||
#### `slash_validator`
|
#### `slash_validator`
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def slash_validator(state: BeaconState, index: ValidatorIndex) -> None:
|
def slash_validator(state: BeaconState, slashed_index: ValidatorIndex, whitleblower_index: ValidatorIndex=None) -> None:
|
||||||
"""
|
"""
|
||||||
Slash the validator with index ``index``.
|
Slash the validator with index ``slashed_index``.
|
||||||
Note that this function mutates ``state``.
|
Note that this function mutates ``state``.
|
||||||
"""
|
"""
|
||||||
validator = state.validator_registry[index]
|
exit_validator(state, slashed_index)
|
||||||
exit_validator(state, index)
|
state.validator_registry[slashed_index].slashed = True
|
||||||
state.latest_slashed_balances[get_current_epoch(state) % LATEST_SLASHED_EXIT_LENGTH] += get_effective_balance(state, index)
|
state.validator_registry[slashed_index].withdrawable_epoch = get_current_epoch(state) + LATEST_SLASHED_EXIT_LENGTH
|
||||||
|
slashed_balance = get_effective_balance(state, slashed_index)
|
||||||
|
state.latest_slashed_balances[get_current_epoch(state) % LATEST_SLASHED_EXIT_LENGTH] += slashed_balance
|
||||||
|
|
||||||
whistleblower_index = get_beacon_proposer_index(state, state.slot)
|
proposer_index = get_beacon_proposer_index(state, state.slot)
|
||||||
whistleblower_reward = get_effective_balance(state, index) // WHISTLEBLOWER_REWARD_QUOTIENT
|
if whileblower_index is None:
|
||||||
increase_balance(state, whistleblower_index, whistleblower_reward)
|
whileblower_index = proposer_index
|
||||||
decrease_balance(state, index, whistleblower_reward)
|
whistleblowing_reward = slashed_balance // WHISTLEBLOWING_REWARD_QUOTIENT
|
||||||
validator.slashed = True
|
proposer_reward = whistleblowing_reward // PROPOSER_REWARD_QUOTIENT
|
||||||
validator.withdrawable_epoch = get_current_epoch(state) + LATEST_SLASHED_EXIT_LENGTH
|
increase_balance(state, proposer_index, proposer_reward)
|
||||||
|
increase_balance(state, whitleblower_index, whistleblowing_reward - proposer_reward)
|
||||||
|
decrease_balance(state, slashed_index, whistleblower_reward)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `prepare_validator_for_withdrawal`
|
#### `prepare_validator_for_withdrawal`
|
||||||
|
|
Loading…
Reference in New Issue