diff --git a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/MessageValidatorFactory.java b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/MessageValidatorFactory.java index 8484ed5bb5b..b22677410d5 100644 --- a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/MessageValidatorFactory.java +++ b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/MessageValidatorFactory.java @@ -69,6 +69,9 @@ public MessageValidator createMessageValidator( protocolSchedule.getByBlockNumber(roundIdentifier.getSequenceNumber()).getBlockValidator(); final Collection
validators = getValidatorsAfterBlock(parentHeader); + final BftBlockInterface bftBlockInterface = + protocolContext.getConsensusState(BftContext.class).getBlockInterface(); + return new MessageValidator( createSignedDataValidator(roundIdentifier, parentHeader), new ProposalBlockConsistencyValidator(), @@ -79,7 +82,7 @@ public MessageValidator createMessageValidator( (ri) -> createSignedDataValidator(ri, parentHeader), roundIdentifier.getSequenceNumber(), bftExtraDataCodec, - protocolContext)); + bftBlockInterface)); } public RoundChangeMessageValidator createRoundChangeMessageValidator( diff --git a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidator.java b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidator.java index 65ab52d06b3..b5beb7ff3ff 100644 --- a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidator.java +++ b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidator.java @@ -16,7 +16,6 @@ import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions; import org.hyperledger.besu.consensus.common.bft.BftBlockInterface; -import org.hyperledger.besu.consensus.common.bft.BftContext; import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec; import org.hyperledger.besu.consensus.common.bft.BftHelpers; import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier; @@ -25,7 +24,6 @@ import org.hyperledger.besu.consensus.ibft.payload.RoundChangeCertificate; import org.hyperledger.besu.consensus.ibft.payload.RoundChangePayload; import org.hyperledger.besu.consensus.ibft.validation.RoundChangePayloadValidator.MessageValidatorForHeightFactory; -import org.hyperledger.besu.ethereum.ProtocolContext; import org.hyperledger.besu.ethereum.core.Address; import org.hyperledger.besu.ethereum.core.Block; @@ -42,7 +40,7 @@ public class RoundChangeCertificateValidator { private final Collection
validators; private final MessageValidatorForHeightFactory messageValidatorFactory; private final BftExtraDataCodec bftExtraDataCodec; - private final ProtocolContext protocolContext; + private final BftBlockInterface bftBlockInterface; private final long quorum; private final long chainHeight; @@ -51,13 +49,13 @@ public RoundChangeCertificateValidator( final MessageValidatorForHeightFactory messageValidatorFactory, final long chainHeight, final BftExtraDataCodec bftExtraDataCodec, - final ProtocolContext protocolContext) { + final BftBlockInterface bftBlockInterface) { this.validators = validators; this.messageValidatorFactory = messageValidatorFactory; this.quorum = BftHelpers.calculateRequiredValidatorQuorum(validators.size()); this.chainHeight = chainHeight; this.bftExtraDataCodec = bftExtraDataCodec; - this.protocolContext = protocolContext; + this.bftBlockInterface = bftBlockInterface; } public boolean validateRoundChangeMessagesAndEnsureTargetRoundMatchesRoot( @@ -128,8 +126,6 @@ public boolean validateProposalMessageMatchesLatestPrepareCertificate( // Need to check that if we substitute the LatestPrepareCert round number into the supplied // block that we get the SAME hash as PreparedCert. - final BftBlockInterface bftBlockInterface = - protocolContext.getConsensusState(BftContext.class).getBlockInterface(); final Block currentBlockWithOldRound = bftBlockInterface.replaceRoundInBlock( proposedBlock, diff --git a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidatorTest.java b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidatorTest.java index e2adc9a889a..3c58b5044e7 100644 --- a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidatorTest.java +++ b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/validation/RoundChangeCertificateValidatorTest.java @@ -22,7 +22,6 @@ import static org.mockito.Mockito.when; import org.hyperledger.besu.consensus.common.bft.BftBlockInterface; -import org.hyperledger.besu.consensus.common.bft.BftContext; import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers; import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier; import org.hyperledger.besu.consensus.common.bft.ProposedBlockHelpers; @@ -35,13 +34,10 @@ import org.hyperledger.besu.consensus.ibft.validation.RoundChangePayloadValidator.MessageValidatorForHeightFactory; import org.hyperledger.besu.crypto.NodeKey; import org.hyperledger.besu.crypto.NodeKeyUtils; -import org.hyperledger.besu.ethereum.ProtocolContext; -import org.hyperledger.besu.ethereum.chain.MutableBlockchain; import org.hyperledger.besu.ethereum.core.Address; import org.hyperledger.besu.ethereum.core.Block; import org.hyperledger.besu.ethereum.core.Hash; import org.hyperledger.besu.ethereum.core.Util; -import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive; import java.util.Collections; import java.util.List; @@ -63,12 +59,12 @@ public class RoundChangeCertificateValidatorTest { private final ConsensusRoundIdentifier roundIdentifier = new ConsensusRoundIdentifier(chainHeight, 4); private RoundChangeCertificateValidator validator; - private ProtocolContext protocolContext; private final MessageValidatorForHeightFactory validatorFactory = mock(MessageValidatorForHeightFactory.class); private final SignedDataValidator signedDataValidator = mock(SignedDataValidator.class); final IbftExtraDataCodec bftExtraDataEncoder = new IbftExtraDataCodec(); + final BftBlockInterface bftBlockInterface = new BftBlockInterface(bftExtraDataEncoder); private Block proposedBlock; @@ -81,15 +77,9 @@ public void setup() { proposedBlock = ProposedBlockHelpers.createProposalBlock(validators, roundIdentifier, bftExtraDataEncoder); - final BftContext bftContext = mock(BftContext.class); - when(bftContext.getBlockInterface()).thenReturn(new BftBlockInterface(bftExtraDataEncoder)); - protocolContext = - new ProtocolContext( - mock(MutableBlockchain.class), mock(WorldStateArchive.class), bftContext); - validator = new RoundChangeCertificateValidator( - validators, validatorFactory, 5, bftExtraDataEncoder, protocolContext); + validators, validatorFactory, 5, bftExtraDataEncoder, bftBlockInterface); } @Test