Merge pull request #751 from ethereum/JustinDrake-patch-8

Disallow duplicate voluntary exits
This commit is contained in:
Danny Ryan 2019-03-11 09:09:53 -06:00 committed by GitHub
commit 2c7c48a4e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 2 deletions

View File

@ -2453,14 +2453,16 @@ Verify that `len(block.body.voluntary_exits) <= MAX_VOLUNTARY_EXITS`.
For each `exit` in `block.body.voluntary_exits`, run the following function: For each `exit` in `block.body.voluntary_exits`, run the following function:
```python ```python
def process_exit(state: BeaconState, exit: VoluntaryExit) -> None: def process_voluntary_exit(state: BeaconState, exit: VoluntaryExit) -> None:
""" """
Process ``VoluntaryExit`` transaction. Process ``VoluntaryExit`` transaction.
Note that this function mutates ``state``. Note that this function mutates ``state``.
""" """
validator = state.validator_registry[exit.validator_index] validator = state.validator_registry[exit.validator_index]
# Verify the validator has not yet exited # Verify the validator has not yet exited
assert validator.exit_epoch > get_delayed_activation_exit_epoch(get_current_epoch(state)) assert validator.exit_epoch == FAR_FUTURE_EPOCH
# Verify the validator has not initiated an exit
assert validator.initiated_exit is False
# Exits must specify an epoch when they become valid; they are not valid before then # Exits must specify an epoch when they become valid; they are not valid before then
assert get_current_epoch(state) >= exit.epoch assert get_current_epoch(state) >= exit.epoch
# Verify signature # Verify signature