From b7d196744955bd734a1c7f3f1df4f0fbff91b217 Mon Sep 17 00:00:00 2001 From: tersec Date: Wed, 8 Jul 2020 04:55:23 +0000 Subject: [PATCH] test for correctly skipping, without failure, deposits with invalid signatures (#1288) --- tests/mocking/mock_genesis.nim | 4 +- .../test_process_deposits.nim | 42 ++++++++++++++++--- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/tests/mocking/mock_genesis.nim b/tests/mocking/mock_genesis.nim index 7f827b37c..9c0b3db07 100644 --- a/tests/mocking/mock_genesis.nim +++ b/tests/mocking/mock_genesis.nim @@ -21,11 +21,11 @@ proc initGenesisState*(num_validators: uint64, genesis_time: uint64 = 0): Hashed let deposits = mockGenesisBalancedDeposits( validatorCount = num_validators, amountInEth = 32, # We create canonical validators with 32 Eth - flags = {skipBlsValidation} + flags = {} ) initialize_hashed_beacon_state_from_eth1( - eth1BlockHash, 0, deposits, {skipBlsValidation}) + eth1BlockHash, 0, deposits, {}) when isMainModule: # Smoke test diff --git a/tests/spec_block_processing/test_process_deposits.nim b/tests/spec_block_processing/test_process_deposits.nim index 61b525101..2cac4860b 100644 --- a/tests/spec_block_processing/test_process_deposits.nim +++ b/tests/spec_block_processing/test_process_deposits.nim @@ -30,7 +30,6 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): doAssert genesisState.data.validators.len == int NumValidators template valid_deposit(deposit_amount: uint64, name: string): untyped = - # TODO: BLS signature timedTest "Deposit " & name & " MAX_EFFECTIVE_BALANCE balance (" & $(MAX_EFFECTIVE_BALANCE div 10'u64^9) & " ETH)": var state = assignClone(genesisState[]) @@ -42,7 +41,7 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): state.data, uint64 validator_index, deposit_amount, - flags = {skipBlsValidation} + flags = {} ) # Params for sanity checks @@ -55,7 +54,7 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): # State transition # ---------------------------------------- - check: process_deposit(state.data, deposit, {skipBlsValidation}).isOk + check: process_deposit(state.data, deposit, {}).isOk # Check invariants # ---------------------------------------- @@ -84,7 +83,7 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): state.data, uint64 validator_index, deposit_amount, - flags = {skipBlsValidation} + flags = {} ) # Params for sanity checks @@ -97,7 +96,7 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): # State transition # ---------------------------------------- - check: process_deposit(state.data, deposit, {skipBlsValidation}).isOk + check: process_deposit(state.data, deposit, {}).isOk # Check invariants # ---------------------------------------- @@ -111,8 +110,39 @@ suiteReport "[Unit - Spec - Block processing] Deposits " & preset(): EFFECTIVE_BALANCE_INCREMENT ) + template invalid_signature(deposit_amount: uint64, name: string): untyped = + timedTest "Invalid deposit " & name & " MAX_EFFECTIVE_BALANCE balance (" & + $(MAX_EFFECTIVE_BALANCE div 10'u64^9) & " ETH)": + var state = assignClone(genesisState[]) + + # Test configuration + # ---------------------------------------- + let validator_index = state.data.validators.len + var deposit = mockUpdateStateForNewDeposit( + state.data, + uint64 validator_index, + deposit_amount, + flags = {skipBlsValidation} + ) + + # Params for sanity checks + # ---------------------------------------- + let pre_val_count = state.data.validators.len + + # State transition + # ---------------------------------------- + check: + process_deposit(state.data, deposit, {}).isOk + + # Check invariants + # ---------------------------------------- + check: + state.data.validators.len == pre_val_count + state.data.balances.len == pre_val_count + + invalid_signature(MAX_EFFECTIVE_BALANCE, "at") + # TODO, tests with: - # - invalid BLS signature # - invalid withdrawal credential # - invalid deposit root # - invalid merkle proof