diff --git a/beacon_node/genesis/src/eth1_genesis_service.rs b/beacon_node/genesis/src/eth1_genesis_service.rs index 3e91504951..7015705027 100644 --- a/beacon_node/genesis/src/eth1_genesis_service.rs +++ b/beacon_node/genesis/src/eth1_genesis_service.rs @@ -439,7 +439,7 @@ impl Eth1GenesisService { None }; - apply_deposit(&mut state, data, proof, spec) + apply_deposit(&mut state, data, proof, true, spec) .map_err(|e| format!("Error whilst processing deposit: {:?}", e)) })?; diff --git a/consensus/state_processing/src/genesis.rs b/consensus/state_processing/src/genesis.rs index 38006b83ca..c73417077a 100644 --- a/consensus/state_processing/src/genesis.rs +++ b/consensus/state_processing/src/genesis.rs @@ -38,7 +38,7 @@ pub fn initialize_beacon_state_from_eth1( .map_err(BlockProcessingError::MerkleTreeError)?; state.eth1_data_mut().deposit_root = deposit_tree.root(); let Deposit { proof, data } = deposit; - apply_deposit(&mut state, data, Some(proof), spec)?; + apply_deposit(&mut state, data, Some(proof), true, spec)?; } process_activations(&mut state, spec)?; diff --git a/consensus/state_processing/src/per_block_processing/process_operations.rs b/consensus/state_processing/src/per_block_processing/process_operations.rs index 0fbb82ed1d..9d2235e2d4 100644 --- a/consensus/state_processing/src/per_block_processing/process_operations.rs +++ b/consensus/state_processing/src/per_block_processing/process_operations.rs @@ -417,7 +417,7 @@ pub fn process_deposits( // Update the state in series. for deposit in deposits { - apply_deposit(state, deposit.data.clone(), None, spec)?; + apply_deposit(state, deposit.data.clone(), None, true, spec)?; } Ok(()) @@ -428,6 +428,7 @@ pub fn apply_deposit( state: &mut BeaconState, deposit_data: DepositData, proof: Option>, + increment_eth1_deposit_index: bool, spec: &ChainSpec, ) -> Result<(), BlockProcessingError> { let deposit_index = state.eth1_deposit_index() as usize; @@ -440,7 +441,9 @@ pub fn apply_deposit( .map_err(|e| e.into_with_index(deposit_index))?; } - state.eth1_deposit_index_mut().safe_add_assign(1)?; + if increment_eth1_deposit_index { + state.eth1_deposit_index_mut().safe_add_assign(1)?; + } // Get an `Option` where `u64` is the validator index if this deposit public key // already exists in the beacon_state. @@ -641,7 +644,7 @@ pub fn process_deposit_receipts( amount: receipt.amount, signature: receipt.signature.clone().into(), }; - apply_deposit(state, deposit_data, None, spec)? + apply_deposit(state, deposit_data, None, false, spec)? } Ok(())