diff --git a/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapella.java b/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapella.java index 1e79ae51d3b..c9fdd002a3d 100644 --- a/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapella.java +++ b/ethereum/spec/src/main/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapella.java @@ -128,7 +128,8 @@ protected BlockValidationResult validateBlockPreProcessing( () -> new BlockProcessingException( "BlsToExecutionChanges was not found during block processing.")), - signatureVerifier); + signatureVerifier, + false); } @Override @@ -155,7 +156,7 @@ public void processBlsToExecutionChanges( throws BlockProcessingException { final BlockValidationResult result = verifyBlsToExecutionChangesPreProcessing( - state, blsToExecutionChanges, BLSSignatureVerifier.SIMPLE); + state, blsToExecutionChanges, BLSSignatureVerifier.SIMPLE, true); if (!result.isValid()) { throw new BlockProcessingException(result.getFailureReason()); } @@ -312,7 +313,8 @@ public static Bytes32 getWithdrawalAddressFromEth1Address(final Bytes20 toExecut BlockValidationResult verifyBlsToExecutionChangesPreProcessing( final BeaconState genericState, final SszList signedBlsToExecutionChanges, - final BLSSignatureVerifier signatureVerifier) { + final BLSSignatureVerifier signatureVerifier, + final boolean executeValidationRules) { final Set validatorsSeenInBlock = new HashSet<>(); for (SignedBlsToExecutionChange signedBlsToExecutionChange : signedBlsToExecutionChanges) { @@ -323,11 +325,13 @@ BlockValidationResult verifyBlsToExecutionChangesPreProcessing( "Duplicated BlsToExecutionChange for validator " + addressChange.getValidatorIndex()); } - final Optional operationInvalidReason = - operationValidator.validateBlsToExecutionChange( - genericState.getFork(), genericState, addressChange); - if (operationInvalidReason.isPresent()) { - return BlockValidationResult.failed(operationInvalidReason.get().describe()); + if (executeValidationRules) { + final Optional operationInvalidReason = + operationValidator.validateBlsToExecutionChange( + genericState.getFork(), genericState, addressChange); + if (operationInvalidReason.isPresent()) { + return BlockValidationResult.failed(operationInvalidReason.get().describe()); + } } boolean signatureValid = diff --git a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapellaTest.java b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapellaTest.java index c4d95a51c0e..b7f014c532a 100644 --- a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapellaTest.java +++ b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/capella/block/BlockProcessorCapellaTest.java @@ -171,7 +171,7 @@ public void shouldRejectBlockWithMoreThanOneBlsExecutionChangesForSameValidator( final BlockValidationResult validationResult = capellaBlockProcessor.verifyBlsToExecutionChangesPreProcessing( - state, blsToExecutionChangesListWithDuplicate, BLSSignatureVerifier.NO_OP); + state, blsToExecutionChangesListWithDuplicate, BLSSignatureVerifier.NO_OP, true); assertThat(validationResult.isValid()).isFalse(); assertThat(validationResult.getFailureReason())