From 18d83e0ecee0015a0e19a3e69c9463fdcad404bb Mon Sep 17 00:00:00 2001 From: tersec Date: Sat, 8 Jan 2022 09:07:44 +0000 Subject: [PATCH] rm spec_block_processing/test_process_attestation (#3258) --- AllTests-mainnet.md | 8 +- tests/all_tests.nim | 1 - tests/mocking/mock_attestations.nim | 113 ------------------ .../test_process_attestation.nim | 91 -------------- 4 files changed, 1 insertion(+), 212 deletions(-) delete mode 100644 tests/mocking/mock_attestations.nim delete mode 100644 tests/spec_block_processing/test_process_attestation.nim diff --git a/AllTests-mainnet.md b/AllTests-mainnet.md index a7a900b60..f447cf856 100644 --- a/AllTests-mainnet.md +++ b/AllTests-mainnet.md @@ -373,12 +373,6 @@ OK: 18/18 Fail: 0/18 Skip: 0/18 + default initialization of signatures OK ``` OK: 3/3 Fail: 0/3 Skip: 0/3 -## [Unit - Spec - Block processing] Attestations [Preset: mainnet] -```diff -+ Valid attestation OK -+ Valid attestation from previous epoch OK -``` -OK: 2/2 Fail: 0/2 Skip: 0/2 ## [Unit - Spec - Block processing] Deposits [Preset: mainnet] ```diff + Deposit at MAX_EFFECTIVE_BALANCE balance (32 ETH) OK @@ -442,4 +436,4 @@ OK: 1/1 Fail: 0/1 Skip: 0/1 OK: 1/1 Fail: 0/1 Skip: 0/1 ---TOTAL--- -OK: 238/240 Fail: 0/240 Skip: 2/240 +OK: 236/238 Fail: 0/238 Skip: 2/238 diff --git a/tests/all_tests.nim b/tests/all_tests.nim index bba32b7c9..d96c83493 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -45,7 +45,6 @@ import # Unit test import # Refactor state transition unit tests # In mainnet these take 2 minutes and are empty TODOs ./spec_block_processing/test_process_deposits, - ./spec_block_processing/test_process_attestation, ./spec_epoch_processing/test_process_justification_and_finalization when not defined(i386): diff --git a/tests/mocking/mock_attestations.nim b/tests/mocking/mock_attestations.nim deleted file mode 100644 index 42c6a0543..000000000 --- a/tests/mocking/mock_attestations.nim +++ /dev/null @@ -1,113 +0,0 @@ -# beacon_chain -# Copyright (c) 2018-2021 Status Research & Development GmbH -# Licensed and distributed under either of -# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). -# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -# Mocking attestations -# --------------------------------------------------------------- - -import - # Status - chronicles, - # Specs - ../../beacon_chain/spec/datatypes/phase0, - ../../beacon_chain/spec/[beaconstate, forks, helpers, validator, signatures], - # Test utilities - ./mock_blocks, - ../testblockutil - -proc mockAttestationData( - state: phase0.BeaconState, - slot: Slot, - index: uint64): AttestationData = - doAssert state.slot >= slot - - if slot == state.slot: - let forkedState = (ref ForkedHashedBeaconState)(kind: BeaconStateFork.Phase0, - phase0Data: phase0.HashedBeaconState(root: hash_tree_root(state), data: state)) - result.beacon_block_root = mockBlockForNextSlot(forkedState[]).phase0Data.message.parent_root - else: - result.beacon_block_root = get_block_root_at_slot(state, slot) - - let current_epoch_start_slot = state.get_current_epoch().compute_start_slot_at_epoch() - let epoch_boundary_root = block: - if slot < current_epoch_start_slot: - get_block_root(state, get_previous_epoch(state)) - elif slot == current_epoch_start_slot: - result.beacon_block_root - else: - get_block_root(state, get_current_epoch(state)) - - if slot < current_epoch_start_slot: - result.source = state.previous_justified_checkpoint - else: - result.source = state.current_justified_checkpoint - - let target_epoch = compute_epoch_at_slot(slot) - - result.slot = slot - result.index = index - - result.target = Checkpoint( - epoch: target_epoch, root: epoch_boundary_root - ) - -proc signMockAttestation(state: phase0.BeaconState, attestation: var Attestation) = - var cache = StateCache() - - var agg {.noInit.}: AggregateSignature - var first_iter = true # Can't do while loop on hashset - for validator_index in get_attesting_indices( - state, - attestation.data, - attestation.aggregation_bits, - cache - ): - let sig = get_attestation_signature( - state.fork, state.genesis_validators_root, attestation.data, - MockPrivKeys[validator_index] - ) - if first_iter: - agg.init(sig) - first_iter = false - else: - agg.aggregate(sig) - - if first_iter != true: - attestation.signature = agg.finish().toValidatorSig() - # Otherwise no participants so zero sig - -proc mockAttestationImpl( - state: phase0.BeaconState, - slot: Slot): Attestation = - - var cache = StateCache() - - let - beacon_committee = get_beacon_committee( - state, - result.data.slot, - result.data.index.CommitteeIndex, - cache - ) - committee_size = beacon_committee.len - - result.data = mockAttestationData(state, slot, 0) - result.aggregation_bits = init(CommitteeValidatorsBits, committee_size) - - # fillAggregateAttestation - for i in 0 ..< beacon_committee.len: - result.aggregation_bits[i] = true - - signMockAttestation(state, result) - -proc mockAttestation*( - state: phase0.BeaconState): Attestation = - mockAttestationImpl(state, state.slot) - -proc mockAttestation*( - state: phase0.BeaconState, - slot: Slot): Attestation = - mockAttestationImpl(state, slot) diff --git a/tests/spec_block_processing/test_process_attestation.nim b/tests/spec_block_processing/test_process_attestation.nim deleted file mode 100644 index 2051d18ff..000000000 --- a/tests/spec_block_processing/test_process_attestation.nim +++ /dev/null @@ -1,91 +0,0 @@ -# beacon_chain -# Copyright (c) 2018-2021 Status Research & Development GmbH -# Licensed and distributed under either of -# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). -# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -# process_attestation (beaconstate.nim) -# https://github.com/ethereum/consensus-specs/blob/v1.1.8/specs/phase0/beacon-chain.md#attestations -# --------------------------------------------------------------- - -{.used.} - -import - stew/results, - # Specs - ../../beacon_chain/spec/[beaconstate, forks, helpers], - ../../beacon_chain/spec/datatypes/base, - # Mock helpers - ../mocking/[mock_genesis, mock_attestations, mock_state], - ../testutil - -suite "[Unit - Spec - Block processing] Attestations " & preset(): - - const NumValidators = uint64(8) * SLOTS_PER_EPOCH - let genesisState = initGenesisState(NumValidators) - - doAssert getStateField(genesisState[], validators).lenu64 == NumValidators - - template valid_attestation(name: string, body: untyped): untyped {.dirty.}= - # Process a valid attestation - # - # The BeaconState is exposed as "state" in the calling context - # The attestation to process must be named "attestation" in the calling context - - test name: - var state {.inject.} = newClone(genesisState[]) - - # Attestation setup body - # ---------------------------------------- - body - - # Params for sanity checks - # ---------------------------------------- - let - current_epoch_count = - state.phase0Data.data.current_epoch_attestations.len - previous_epoch_count = - state.phase0Data.data.previous_epoch_attestations.len - - # State transition - # ---------------------------------------- - var cache = StateCache() - check process_attestation( - state.phase0Data.data, attestation, flags = {}, 0.Gwei, cache - ).isOk - - # Check that the attestation was processed - if attestation.data.target.epoch == get_current_epoch(state[]): - check(state.phase0Data.data.current_epoch_attestations.len == - current_epoch_count + 1) - else: - check(state.phase0Data.data.previous_epoch_attestations.len == - previous_epoch_count + 1) - - valid_attestation("Valid attestation"): - let attestation = mockAttestation(state.phase0Data.data) - getStateField(state[], slot) += MIN_ATTESTATION_INCLUSION_DELAY - - valid_attestation("Valid attestation from previous epoch"): - nextSlot(state[]) - let attestation = mockAttestation(state.phase0Data.data) - getStateField(state[], slot) = Slot(SLOTS_PER_EPOCH - 1) - nextEpoch(state[]) - -# TODO - invalid attestations -# - Empty aggregation bit -# - Wrong end epoch -# - Invalid signature -# - Before inclusion delay -# - past last inclusion slot -# - before oldest known source epoch -# - wrong shard -# - invalid shard -# - target epoch too old -# - target epoch too far in the future -# - source epoch in the future -# - invalid current source root -# - bad source root -# - inconsistent custody bits length -# - non-empty custody bits in phase 0