address PR feedback from @protolambda
This commit is contained in:
parent
b2dfb6cebe
commit
4f401133e1
|
@ -1370,8 +1370,8 @@ def get_attestation_component_deltas(state: BeaconState,
|
||||||
"""
|
"""
|
||||||
Helper with shared logic for use by get source, target, and head deltas functions
|
Helper with shared logic for use by get source, target, and head deltas functions
|
||||||
"""
|
"""
|
||||||
rewards = [Gwei(0) for _ in range(len(state.validators))]
|
rewards = [Gwei(0)] * len(state.validators)
|
||||||
penalties = [Gwei(0) for _ in range(len(state.validators))]
|
penalties = [Gwei(0)] * len(state.validators)
|
||||||
total_balance = get_total_active_balance(state)
|
total_balance = get_total_active_balance(state)
|
||||||
unslashed_attesting_indices = get_unslashed_attesting_indices(state, attestations)
|
unslashed_attesting_indices = get_unslashed_attesting_indices(state, attestations)
|
||||||
attesting_balance = get_total_balance(state, unslashed_attesting_indices)
|
attesting_balance = get_total_balance(state, unslashed_attesting_indices)
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
from random import Random
|
from random import Random
|
||||||
|
|
||||||
|
from eth2spec.phase0 import spec as spec_phase0
|
||||||
from eth2spec.test.helpers.attestations import prepare_state_with_full_attestations
|
from eth2spec.test.helpers.attestations import prepare_state_with_full_attestations
|
||||||
from eth2spec.utils.ssz.ssz_typing import Container, uint64, List
|
from eth2spec.utils.ssz.ssz_typing import Container, uint64, List
|
||||||
|
|
||||||
|
|
||||||
# HACK to get the generators outputting correctly
|
|
||||||
class Deltas(Container):
|
class Deltas(Container):
|
||||||
delta_list: List[uint64, 2**30]
|
rewards: List[uint64, spec_phase0.VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
penalties: List[uint64, spec_phase0.VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
|
||||||
|
|
||||||
def has_enough_for_reward(spec, state, index):
|
def has_enough_for_reward(spec, state, index):
|
||||||
|
@ -33,8 +34,7 @@ def run_attestation_component_deltas(spec, state, component_delta_fn, matching_a
|
||||||
|
|
||||||
rewards, penalties = component_delta_fn(state)
|
rewards, penalties = component_delta_fn(state)
|
||||||
|
|
||||||
yield 'rewards', Deltas(delta_list=rewards)
|
yield 'deltas', Deltas(rewards=rewards, penalties=penalties)
|
||||||
yield 'penalties', Deltas(delta_list=penalties)
|
|
||||||
|
|
||||||
matching_attestations = matching_att_fn(state, spec.get_previous_epoch(state))
|
matching_attestations = matching_att_fn(state, spec.get_previous_epoch(state))
|
||||||
matching_indices = spec.get_unslashed_attesting_indices(state, matching_attestations)
|
matching_indices = spec.get_unslashed_attesting_indices(state, matching_attestations)
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
from eth2spec.test.context import with_all_phases, spec_state_test
|
from eth2spec.test.context import with_all_phases, spec_state_test
|
||||||
from eth2spec.test.helpers.rewards import has_enough_for_reward
|
from eth2spec.test.helpers.rewards import has_enough_for_reward
|
||||||
from eth2spec.test.helpers.state import next_epoch
|
from eth2spec.test.helpers.state import next_epoch
|
||||||
|
from eth2spec.test.helpers.rewards import Deltas
|
||||||
import eth2spec.test.helpers.rewards as rewards_helpers
|
import eth2spec.test.helpers.rewards as rewards_helpers
|
||||||
from eth2spec.utils.ssz.ssz_typing import Container, uint64, List
|
|
||||||
|
|
||||||
|
|
||||||
# HACK to get the generators outputting correctly
|
|
||||||
class Deltas(Container):
|
|
||||||
delta_list: List[uint64, 2**30]
|
|
||||||
|
|
||||||
|
|
||||||
def run_get_inactivity_penalty_deltas(spec, state):
|
def run_get_inactivity_penalty_deltas(spec, state):
|
||||||
|
@ -22,8 +17,7 @@ def run_get_inactivity_penalty_deltas(spec, state):
|
||||||
|
|
||||||
rewards, penalties = spec.get_inactivity_penalty_deltas(state)
|
rewards, penalties = spec.get_inactivity_penalty_deltas(state)
|
||||||
|
|
||||||
yield 'rewards', Deltas(delta_list=rewards)
|
yield 'deltas', Deltas(rewards=rewards, penalties=penalties)
|
||||||
yield 'penalties', Deltas(delta_list=penalties)
|
|
||||||
|
|
||||||
matching_attestations = spec.get_matching_target_attestations(state, spec.get_previous_epoch(state))
|
matching_attestations = spec.get_matching_target_attestations(state, spec.get_previous_epoch(state))
|
||||||
matching_attesting_indices = spec.get_unslashed_attesting_indices(state, matching_attestations)
|
matching_attesting_indices = spec.get_unslashed_attesting_indices(state, matching_attestations)
|
||||||
|
|
|
@ -2,14 +2,8 @@ from random import Random
|
||||||
|
|
||||||
from eth2spec.test.context import with_all_phases, spec_state_test
|
from eth2spec.test.context import with_all_phases, spec_state_test
|
||||||
from eth2spec.test.helpers.attestations import prepare_state_with_full_attestations
|
from eth2spec.test.helpers.attestations import prepare_state_with_full_attestations
|
||||||
from eth2spec.test.helpers.rewards import has_enough_for_reward
|
from eth2spec.test.helpers.rewards import Deltas, has_enough_for_reward
|
||||||
import eth2spec.test.helpers.rewards as rewards_helpers
|
import eth2spec.test.helpers.rewards as rewards_helpers
|
||||||
from eth2spec.utils.ssz.ssz_typing import Container, uint64, List
|
|
||||||
|
|
||||||
|
|
||||||
# HACK to get the generators outputting correctly
|
|
||||||
class Deltas(Container):
|
|
||||||
delta_list: List[uint64, 2**30]
|
|
||||||
|
|
||||||
|
|
||||||
def run_get_inclusion_delay_deltas(spec, state):
|
def run_get_inclusion_delay_deltas(spec, state):
|
||||||
|
@ -24,8 +18,7 @@ def run_get_inclusion_delay_deltas(spec, state):
|
||||||
|
|
||||||
rewards, penalties = spec.get_inclusion_delay_deltas(state)
|
rewards, penalties = spec.get_inclusion_delay_deltas(state)
|
||||||
|
|
||||||
yield 'rewards', Deltas(delta_list=rewards)
|
yield 'deltas', Deltas(rewards=rewards, penalties=penalties)
|
||||||
yield 'penalties', Deltas(delta_list=penalties)
|
|
||||||
|
|
||||||
eligible_attestations = spec.get_matching_source_attestations(state, spec.get_previous_epoch(state))
|
eligible_attestations = spec.get_matching_source_attestations(state, spec.get_previous_epoch(state))
|
||||||
attesting_indices = spec.get_unslashed_attesting_indices(state, eligible_attestations)
|
attesting_indices = spec.get_unslashed_attesting_indices(state, eligible_attestations)
|
||||||
|
|
|
@ -4,7 +4,6 @@ The different rewards deltas sub-functions are testing individually with the tes
|
||||||
There is no "change" factor, the rewards/penalties outputs are pure functions with just the pre-state as input.
|
There is no "change" factor, the rewards/penalties outputs are pure functions with just the pre-state as input.
|
||||||
Hence, the format is shared between each test-handler. (See test condition documentation on how to run the tests.)
|
Hence, the format is shared between each test-handler. (See test condition documentation on how to run the tests.)
|
||||||
|
|
||||||
|
|
||||||
## Test case format
|
## Test case format
|
||||||
|
|
||||||
### `meta.yaml`
|
### `meta.yaml`
|
||||||
|
@ -12,23 +11,29 @@ Hence, the format is shared between each test-handler. (See test condition docum
|
||||||
```yaml
|
```yaml
|
||||||
description: string -- Optional description of test case, purely for debugging purposes.
|
description: string -- Optional description of test case, purely for debugging purposes.
|
||||||
Tests should use the directory name of the test case as identifier, not the description.
|
Tests should use the directory name of the test case as identifier, not the description.
|
||||||
bls_setting: int -- see general test-format spec.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
_Note_: No signature verification happens within rewards sub-functions. These
|
||||||
|
tests can safely be run with or without BLS enabled.
|
||||||
|
|
||||||
### `pre.yaml`
|
### `pre.yaml`
|
||||||
|
|
||||||
A YAML-encoded `BeaconState`, the state before running the rewards sub-function.
|
A YAML-encoded `BeaconState`, the state before running the rewards sub-function.
|
||||||
|
|
||||||
Also available as `pre.ssz`.
|
Also available as `pre.ssz`.
|
||||||
|
|
||||||
|
### `deltas.yaml`
|
||||||
|
|
||||||
### `rewards.yaml`
|
A YAML-encoded `Deltas` representing the rewards and penalties returned by the rewards sub-function
|
||||||
|
|
||||||
A YAML-encoded list of integers representing the 0th item in the return value (i.e. the rewards deltas)
|
Where `Deltas` is defined as:
|
||||||
|
```python
|
||||||
|
class Deltas(Container):
|
||||||
|
rewards: List[uint64, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
penalties: List[uint64, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
```
|
||||||
|
|
||||||
### `penalties.yaml`
|
Also available as `rewards.ssz`.
|
||||||
|
|
||||||
A YAML-encoded list of integers representing the 1st item in the return value (i.e. the penalties deltas)
|
|
||||||
|
|
||||||
## Condition
|
## Condition
|
||||||
|
|
||||||
|
@ -38,10 +43,10 @@ This excludes all other parts of `process_rewards_and_penalties`
|
||||||
|
|
||||||
The provided pre-state is ready to be input into the designated handler.
|
The provided pre-state is ready to be input into the designated handler.
|
||||||
|
|
||||||
The resulting `rewards`/`penalties` should match the return values of the
|
The provided `deltas` should match the return values of the
|
||||||
handler. Specifically the following must hold true:
|
handler. Specifically the following must hold true:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
rewards == handler(state)[0]
|
deltas.rewards == handler(state)[0]
|
||||||
penalties == handler(state)[1]
|
deltas.penalties == handler(state)[1]
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in New Issue