diff --git a/besu/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java b/besu/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java index 988440153..4e631dc0e 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java @@ -52,7 +52,6 @@ import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockCodecAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockCreatorFactoryAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockInterfaceAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockchainAdaptor; -import org.hyperledger.besu.consensus.qbft.adaptor.QbftExtraDataProviderAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftFinalStateImpl; import org.hyperledger.besu.consensus.qbft.adaptor.QbftProtocolScheduleAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftValidatorModeTransitionLoggerAdaptor; @@ -283,8 +282,7 @@ public class QbftBesuControllerBuilder extends BesuControllerBuilder { minedBlockObservers, messageValidatorFactory, messageFactory, - qbftExtraDataCodec, - new QbftExtraDataProviderAdaptor(qbftExtraDataCodec)); + qbftExtraDataCodec); QbftBlockHeightManagerFactory qbftBlockHeightManagerFactory = new QbftBlockHeightManagerFactory( finalState, diff --git a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java index 95cd49204..e55e467de 100644 --- a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java +++ b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java @@ -66,7 +66,6 @@ import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockCodecAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockCreatorFactoryAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockInterfaceAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockchainAdaptor; -import org.hyperledger.besu.consensus.qbft.adaptor.QbftExtraDataProviderAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftFinalStateImpl; import org.hyperledger.besu.consensus.qbft.adaptor.QbftProtocolScheduleAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftValidatorModeTransitionLoggerAdaptor; @@ -81,7 +80,6 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockCodec; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockInterface; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; import org.hyperledger.besu.consensus.qbft.core.types.QbftEventHandler; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftFinalState; import org.hyperledger.besu.consensus.qbft.core.types.QbftMinedBlockObserver; import org.hyperledger.besu.consensus.qbft.core.types.QbftValidatorProvider; @@ -560,8 +558,6 @@ public class TestContextBuilder { FUTURE_MESSAGES_MAX_DISTANCE, FUTURE_MESSAGES_LIMIT, blockChain.getChainHeadBlockNumber()); - final QbftExtraDataProvider qbftExtraDataProvider = - new QbftExtraDataProviderAdaptor(BFT_EXTRA_DATA_ENCODER); final QbftValidatorModeTransitionLoggerAdaptor validatorModeTransitionLogger = new QbftValidatorModeTransitionLoggerAdaptor( new ValidatorModeTransitionLogger(forksSchedule)); @@ -579,8 +575,7 @@ public class TestContextBuilder { minedBlockObservers, messageValidatorFactory, messageFactory, - BFT_EXTRA_DATA_ENCODER, - qbftExtraDataProvider), + BFT_EXTRA_DATA_ENCODER), messageValidatorFactory, messageFactory, validatorModeTransitionLogger), diff --git a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ValidatorContractTest.java b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ValidatorContractTest.java index 926523118..c0da9f66e 100644 --- a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ValidatorContractTest.java +++ b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ValidatorContractTest.java @@ -21,18 +21,18 @@ import org.hyperledger.besu.config.BftFork; import org.hyperledger.besu.config.JsonUtil; import org.hyperledger.besu.config.QbftFork; import org.hyperledger.besu.config.QbftFork.VALIDATOR_SELECTION_MODE; +import org.hyperledger.besu.consensus.common.bft.BftExtraData; import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier; import org.hyperledger.besu.consensus.common.bft.events.BlockTimerExpiry; import org.hyperledger.besu.consensus.common.bft.inttest.NodeParams; import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec; -import org.hyperledger.besu.consensus.qbft.adaptor.QbftExtraDataProviderAdaptor; +import org.hyperledger.besu.consensus.qbft.adaptor.BlockUtil; import org.hyperledger.besu.consensus.qbft.core.support.RoundSpecificPeers; import org.hyperledger.besu.consensus.qbft.core.support.TestContext; import org.hyperledger.besu.consensus.qbft.core.support.TestContextBuilder; import org.hyperledger.besu.consensus.qbft.core.support.ValidatorPeer; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlock; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftNewChainHead; import org.hyperledger.besu.consensus.qbft.core.types.QbftValidatorProvider; import org.hyperledger.besu.cryptoservices.NodeKeyUtils; @@ -67,9 +67,7 @@ public class ValidatorContractTest { Address.fromHexString("0x0000000000000000000000000000000000009999"); private TestClock clock; - - private final QbftExtraDataProvider extraDataProvider = - new QbftExtraDataProviderAdaptor(new QbftExtraDataCodec()); + private final QbftExtraDataCodec qbftExtraDataCodec = new QbftExtraDataCodec(); @BeforeEach public void setup() { @@ -252,13 +250,12 @@ public class ValidatorContractTest { final QbftBlockHeader block1 = context.getBlockHeader(1); assertThat(validatorProvider.getValidatorsForBlock(genesisBlock)).isEqualTo(block0Addresses); - assertThat(extraDataProvider.getExtraData(genesisBlock).getValidators()) - .containsExactly(NODE_ADDRESS); + assertThat(getExtraData(genesisBlock).getValidators()).containsExactly(NODE_ADDRESS); // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(block1)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block1).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(block1).getVote()).isEmpty(); + assertThat(getExtraData(block1).getValidators()).isEmpty(); + assertThat(getExtraData(block1).getVote()).isEmpty(); } @Test @@ -292,13 +289,13 @@ public class ValidatorContractTest { // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(genesisBlock)).isEqualTo(block0Addresses); - assertThat(extraDataProvider.getExtraData(genesisBlock).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(genesisBlock).getVote()).isEmpty(); + assertThat(getExtraData(genesisBlock).getValidators()).isEmpty(); + assertThat(getExtraData(genesisBlock).getVote()).isEmpty(); // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(block1)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block1).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(block1).getVote()).isEmpty(); + assertThat(getExtraData(block1).getValidators()).isEmpty(); + assertThat(getExtraData(block1).getVote()).isEmpty(); } @Test @@ -336,18 +333,16 @@ public class ValidatorContractTest { // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(genesisBlock)).isEqualTo(block0Addresses); - assertThat(extraDataProvider.getExtraData(genesisBlock).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(genesisBlock).getVote()).isEmpty(); + assertThat(getExtraData(genesisBlock).getValidators()).isEmpty(); + assertThat(getExtraData(genesisBlock).getVote()).isEmpty(); // uses overridden validators assertThat(validatorProvider.getValidatorsForBlock(block1)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block1).getValidators()) - .containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); + assertThat(getExtraData(block1).getValidators()).containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); // uses cached validators assertThat(validatorProvider.getValidatorsForBlock(block2)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block2).getValidators()) - .containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); + assertThat(getExtraData(block2).getValidators()).containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); } @Test @@ -392,23 +387,20 @@ public class ValidatorContractTest { final QbftBlockHeader block3 = context.getBlockHeader(3); assertThat(validatorProvider.getValidatorsForBlock(genesisBlock)).isEqualTo(block0Addresses); - assertThat(extraDataProvider.getExtraData(genesisBlock).getValidators()) - .containsExactly(NODE_ADDRESS); + assertThat(getExtraData(genesisBlock).getValidators()).containsExactly(NODE_ADDRESS); // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(block1)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block1).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(block1).getVote()).isEmpty(); + assertThat(getExtraData(block1).getValidators()).isEmpty(); + assertThat(getExtraData(block1).getVote()).isEmpty(); // uses overridden validators assertThat(validatorProvider.getValidatorsForBlock(block2)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block2).getValidators()) - .containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); + assertThat(getExtraData(block2).getValidators()).containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); // uses cached validators assertThat(validatorProvider.getValidatorsForBlock(block3)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block3).getValidators()) - .containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); + assertThat(getExtraData(block3).getValidators()).containsExactly(NODE_2_ADDRESS, NODE_ADDRESS); } @Test @@ -450,17 +442,16 @@ public class ValidatorContractTest { // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(genesisBlock)).isEqualTo(block0Addresses); - assertThat(extraDataProvider.getExtraData(genesisBlock).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(genesisBlock).getVote()).isEmpty(); + assertThat(getExtraData(genesisBlock).getValidators()).isEmpty(); + assertThat(getExtraData(genesisBlock).getVote()).isEmpty(); assertThat(validatorProvider.getValidatorsForBlock(block1)).isEqualTo(block1Addresses); - assertThat(extraDataProvider.getExtraData(block1).getValidators()) - .containsExactly(NODE_2_ADDRESS); + assertThat(getExtraData(block1).getValidators()).containsExactly(NODE_2_ADDRESS); // contract block extra data cannot contain validators or vote assertThat(validatorProvider.getValidatorsForBlock(block2)).isEqualTo(block2Addresses); - assertThat(extraDataProvider.getExtraData(block2).getValidators()).isEmpty(); - assertThat(extraDataProvider.getExtraData(block2).getVote()).isEmpty(); + assertThat(getExtraData(block2).getValidators()).isEmpty(); + assertThat(getExtraData(block2).getVote()).isEmpty(); } private void createNewBlockAsProposer(final TestContext context, final long blockNumber) { @@ -545,4 +536,8 @@ public class ValidatorContractTest { BftFork.VALIDATORS_KEY, JsonUtil.getObjectMapper().createArrayNode().addAll(jsonValidators)))); } + + private BftExtraData getExtraData(final QbftBlockHeader blockHeader) { + return qbftExtraDataCodec.decode(BlockUtil.toBesuBlockHeader(blockHeader)); + } } diff --git a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/round/QbftRoundIntegrationTest.java b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/round/QbftRoundIntegrationTest.java index f2383e98b..15f49b470 100644 --- a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/round/QbftRoundIntegrationTest.java +++ b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/round/QbftRoundIntegrationTest.java @@ -30,7 +30,6 @@ import org.hyperledger.besu.consensus.common.bft.RoundTimer; import org.hyperledger.besu.consensus.common.bft.inttest.StubValidatorMulticaster; import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockAdaptor; -import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockHeaderAdaptor; import org.hyperledger.besu.consensus.qbft.adaptor.QbftBlockInterfaceAdaptor; import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter; import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory; @@ -42,10 +41,8 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockCreator; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftMinedBlockObserver; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator; import org.hyperledger.besu.crypto.SECPSignature; import org.hyperledger.besu.crypto.SignatureAlgorithmFactory; @@ -87,7 +84,6 @@ public class QbftRoundIntegrationTest { private ProtocolContext protocolContext; @Mock private QbftProtocolSchedule protocolSchedule; - @Mock private QbftProtocolSpec protocolSpec; @Mock private MutableBlockchain blockChain; @Mock private WorldStateArchive worldStateArchive; @Mock private QbftBlockImporter blockImporter; @@ -101,7 +97,6 @@ public class QbftRoundIntegrationTest { @Mock private StubValidatorMulticaster multicaster; @Mock private QbftBlockHeader parentHeader; @Mock private QbftBlockCodec blockEncoder; - @Mock private QbftExtraDataProvider qbftExtraDataProvider; private QbftBlock proposedBlock; @@ -131,12 +126,9 @@ public class QbftRoundIntegrationTest { headerTestFixture.number(1); final BlockHeader header = headerTestFixture.buildHeader(); final Block block = new Block(header, new BlockBody(emptyList(), emptyList())); - final QbftBlockHeader qbftBlockHeader = new QbftBlockHeaderAdaptor(header); proposedBlock = new QbftBlockAdaptor(block); - when(qbftExtraDataProvider.getExtraData(qbftBlockHeader)).thenReturn(proposedExtraData); - when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - when(protocolSpec.getBlockImporter()).thenReturn(blockImporter); + when(protocolSchedule.getBlockImporter(any())).thenReturn(blockImporter); when(blockImporter.importBlock(any())).thenReturn(true); @@ -165,7 +157,6 @@ public class QbftRoundIntegrationTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); round.handleProposalMessage( @@ -185,7 +176,6 @@ public class QbftRoundIntegrationTest { final Block sealedBesuBlock = new Block(header, new BlockBody(emptyList(), emptyList())); final QbftBlock sealedBlock = new QbftBlockAdaptor(sealedBesuBlock); when(blockCreator.createSealedBlock( - qbftExtraDataProvider, proposedBlock, roundIdentifier.getRoundNumber(), List.of(remoteCommitSeal, remoteCommitSeal))) @@ -205,7 +195,6 @@ public class QbftRoundIntegrationTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); // inject a block first, then a prepare on it. diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRound.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRound.java index 42a400d75..4a895712a 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRound.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRound.java @@ -16,7 +16,6 @@ package org.hyperledger.besu.consensus.qbft.core.statemachine; import static java.util.Collections.emptyList; -import org.hyperledger.besu.consensus.common.bft.BftExtraData; import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec; import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier; import org.hyperledger.besu.consensus.common.bft.RoundTimer; @@ -34,7 +33,6 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockInterface; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftMinedBlockObserver; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; import org.hyperledger.besu.crypto.SECPSignature; @@ -76,9 +74,6 @@ public class QbftRound { /** The Bft extra data codec. */ protected final BftExtraDataCodec bftExtraDataCodec; - /** The Bft extra data provider */ - protected final QbftExtraDataProvider qbftExtraDataProvider; - private final QbftBlockHeader parentHeader; /** @@ -94,7 +89,6 @@ public class QbftRound { * @param transmitter the transmitter * @param roundTimer the round timer * @param bftExtraDataCodec the bft extra data codec - * @param qbftExtraDataProvider the qbft extra data provider * @param parentHeader the parent header */ public QbftRound( @@ -108,7 +102,6 @@ public class QbftRound { final QbftMessageTransmitter transmitter, final RoundTimer roundTimer, final BftExtraDataCodec bftExtraDataCodec, - final QbftExtraDataProvider qbftExtraDataProvider, final QbftBlockHeader parentHeader) { this.roundState = roundState; this.blockCreator = blockCreator; @@ -119,7 +112,6 @@ public class QbftRound { this.messageFactory = messageFactory; this.transmitter = transmitter; this.bftExtraDataCodec = bftExtraDataCodec; - this.qbftExtraDataProvider = qbftExtraDataProvider; this.parentHeader = parentHeader; roundTimer.startTimer(getRoundIdentifier()); } @@ -351,13 +343,11 @@ public class QbftRound { final QbftBlock blockToImport = blockCreator.createSealedBlock( - qbftExtraDataProvider, roundState.getProposedBlock().get(), roundState.getRoundIdentifier().getRoundNumber(), roundState.getCommitSeals()); final long blockNumber = blockToImport.getHeader().getNumber(); - final BftExtraData extraData = qbftExtraDataProvider.getExtraData(blockToImport.getHeader()); if (getRoundIdentifier().getRoundNumber() > 0) { LOG.info( "Importing proposed block to chain. round={}, hash={}", @@ -370,15 +360,13 @@ public class QbftRound { blockToImport.getHash()); } - LOG.trace("Importing proposed block with extraData={}", extraData); final QbftBlockImporter blockImporter = - protocolSchedule.getByBlockHeader(blockToImport.getHeader()).getBlockImporter(); + protocolSchedule.getBlockImporter(blockToImport.getHeader()); final boolean result = blockImporter.importBlock(blockToImport); if (!result) { LOG.error( - "Failed to import proposed block to chain. block={} extraData={} blockHeader={}", + "Failed to import proposed block to chain. block={} blockHeader={}", blockNumber, - extraData, blockToImport.getHeader()); } else { notifyNewBlockListeners(blockToImport); diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundFactory.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundFactory.java index 3eb3f489b..d9731d353 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundFactory.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundFactory.java @@ -21,7 +21,6 @@ import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockCreator; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockCreatorFactory; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftFinalState; import org.hyperledger.besu.consensus.qbft.core.types.QbftMinedBlockObserver; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; @@ -40,7 +39,6 @@ public class QbftRoundFactory { private final MessageValidatorFactory messageValidatorFactory; private final MessageFactory messageFactory; private final BftExtraDataCodec bftExtraDataCodec; - private final QbftExtraDataProvider qbftExtraDataProvider; /** * Instantiates a new Qbft round factory. @@ -52,7 +50,6 @@ public class QbftRoundFactory { * @param messageValidatorFactory the message validator factory * @param messageFactory the message factory * @param bftExtraDataCodec the bft extra data codec - * @param qbftExtraDataProvider the bft extra data codec */ public QbftRoundFactory( final QbftFinalState finalState, @@ -61,8 +58,7 @@ public class QbftRoundFactory { final Subscribers minedBlockObservers, final MessageValidatorFactory messageValidatorFactory, final MessageFactory messageFactory, - final BftExtraDataCodec bftExtraDataCodec, - final QbftExtraDataProvider qbftExtraDataProvider) { + final BftExtraDataCodec bftExtraDataCodec) { this.finalState = finalState; this.blockCreatorFactory = finalState.getBlockCreatorFactory(); this.protocolContext = protocolContext; @@ -71,7 +67,6 @@ public class QbftRoundFactory { this.messageValidatorFactory = messageValidatorFactory; this.messageFactory = messageFactory; this.bftExtraDataCodec = bftExtraDataCodec; - this.qbftExtraDataProvider = qbftExtraDataProvider; } /** @@ -122,7 +117,6 @@ public class QbftRoundFactory { messageTransmitter, finalState.getRoundTimer(), bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); } } diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftBlockCreator.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftBlockCreator.java index 80c06b021..cd640b15f 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftBlockCreator.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftBlockCreator.java @@ -33,15 +33,11 @@ public interface QbftBlockCreator { /** * Create sealed block. * - * @param qbftExtraDataProvider the extra data provider * @param block the block * @param roundNumber the round number * @param commitSeals the commit seals * @return the block */ QbftBlock createSealedBlock( - final QbftExtraDataProvider qbftExtraDataProvider, - final QbftBlock block, - final int roundNumber, - final Collection commitSeals); + final QbftBlock block, final int roundNumber, final Collection commitSeals); } diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSchedule.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSchedule.java index f3016cd0a..e791f487c 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSchedule.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSchedule.java @@ -21,10 +21,18 @@ package org.hyperledger.besu.consensus.qbft.core.types; public interface QbftProtocolSchedule { /** - * Returns the QbftProtocolSpec for the supplied block header. + * Returns the appropriate block importer for the supplied block header. * - * @param header The block header to select the appropriate QbftProtocolSpec for - * @return The QbftProtocolSpec for the supplied block header + * @param header the block header + * @return the block importer */ - QbftProtocolSpec getByBlockHeader(QbftBlockHeader header); + QbftBlockImporter getBlockImporter(QbftBlockHeader header); + + /** + * Returns the appropriate block validator for the supplied block header. + * + * @param header the block header + * @return the block validator + */ + QbftBlockValidator getBlockValidator(QbftBlockHeader header); } diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSpec.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSpec.java deleted file mode 100644 index 2a68c6e0a..000000000 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftProtocolSpec.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright contributors to Besu. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.qbft.core.types; - -/** - * Provides the ability to select the appropriate QbftProtocolSpec containing the validation and - * import for the supplied block header. - */ -public interface QbftProtocolSpec { - /** - * Gets the block importer. - * - * @return the block importer - */ - QbftBlockImporter getBlockImporter(); - - /** - * Gets the block validator. - * - * @return the block validator - */ - QbftBlockValidator getBlockValidator(); -} diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftValidatorProvider.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftValidatorProvider.java index 4109a9f03..4f0c34c8b 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftValidatorProvider.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/types/QbftValidatorProvider.java @@ -14,13 +14,9 @@ */ package org.hyperledger.besu.consensus.qbft.core.types; -import org.hyperledger.besu.consensus.common.validator.VoteProvider; -import org.hyperledger.besu.cryptoservices.NodeKey; import org.hyperledger.besu.datatypes.Address; -import org.hyperledger.besu.ethereum.core.Util; import java.util.Collection; -import java.util.Optional; /** The interface Validator provider. */ public interface QbftValidatorProvider { @@ -47,36 +43,4 @@ public interface QbftValidatorProvider { * @return the validators for block */ Collection
getValidatorsForBlock(QbftBlockHeader header); - - /** - * Gets vote provider at head. - * - * @return the vote provider at head - */ - Optional getVoteProviderAtHead(); - - /** - * Gets vote provider after block. - * - * @param header the header - * @return the vote provider after block - */ - /* - * ForkingValidatorProvider has a specific implementation but we don't want the client code to - * know it's using a ForkingValidatorProvider. ForkingValidatorProvider's voteProvider can be - * different per block. Other ValidatorProviders yield the same voteProvider at every block. - */ - default Optional getVoteProviderAfterBlock(final QbftBlockHeader header) { - return getVoteProviderAtHead(); - } - - /** - * Determines if this node is a validator - * - * @param nodekey our node key - * @return true if this node is a validator - */ - default boolean nodeIsValidator(final NodeKey nodekey) { - return this.getValidatorsAtHead().contains(Util.publicKeyToAddress(nodekey.getPublicKey())); - } } diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidator.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidator.java index be9fd9b3f..a458a6705 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidator.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidator.java @@ -87,7 +87,7 @@ public class ProposalValidator { */ public boolean validate(final Proposal msg) { final QbftBlockValidator blockValidator = - protocolSchedule.getByBlockHeader(msg.getBlock().getHeader()).getBlockValidator(); + protocolSchedule.getBlockValidator(msg.getBlock().getHeader()); final ProposalPayloadValidator payloadValidator = new ProposalPayloadValidator(expectedProposer, roundIdentifier, blockValidator); diff --git a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidator.java b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidator.java index 30320097c..5f7246985 100644 --- a/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidator.java +++ b/consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidator.java @@ -90,8 +90,7 @@ public class RoundChangeMessageValidator { private boolean validateBlock(final QbftBlock block) { - final QbftBlockValidator blockValidator = - protocolSchedule.getByBlockHeader(block.getHeader()).getBlockValidator(); + final QbftBlockValidator blockValidator = protocolSchedule.getBlockValidator(block.getHeader()); final var validationResult = blockValidator.validateBlock(block); diff --git a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftBlockHeightManagerTest.java b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftBlockHeightManagerTest.java index 6d2566bfb..6c6155f18 100644 --- a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftBlockHeightManagerTest.java +++ b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftBlockHeightManagerTest.java @@ -52,10 +52,8 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockInterface; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftFinalState; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.consensus.qbft.core.types.QbftValidatorProvider; import org.hyperledger.besu.consensus.qbft.core.validation.FutureRoundProposalMessageValidator; import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator; @@ -114,10 +112,8 @@ public class QbftBlockHeightManagerTest { @Mock private QbftBlockHeader parentHeader; @Mock private BftExtraDataCodec bftExtraDataCodec; @Mock private QbftBlockCodec blockEncoder; - @Mock private QbftExtraDataProvider qbftExtraDataProvider; @Mock private QbftBlockInterface blockInterface; @Mock private QbftValidatorProvider validatorProvider; - @Mock private QbftProtocolSpec protocolSpec; @Mock private QbftBlockImporter blockImporter; @Captor private ArgumentCaptor sentMessageArgCaptor; @@ -175,7 +171,6 @@ public class QbftBlockHeightManagerTest { messageTransmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); }); @@ -194,14 +189,9 @@ public class QbftBlockHeightManagerTest { messageTransmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); }); - when(qbftExtraDataProvider.getExtraData(any())) - .thenReturn( - new BftExtraData( - Bytes.wrap(new byte[32]), emptyList(), Optional.empty(), 0, validators)); when(bftExtraDataCodec.decode(any())) .thenReturn( new BftExtraData( @@ -402,9 +392,8 @@ public class QbftBlockHeightManagerTest { public void messagesForFutureRoundsAreBufferedAndUsedToPreloadNewRoundWhenItIsStarted() { when(finalState.getQuorum()).thenReturn(1); when(blockInterface.replaceRoundInBlock(eq(createdBlock), eq(2))).thenReturn(createdBlock); - when(blockCreator.createSealedBlock(any(), any(), anyInt(), any())).thenReturn(createdBlock); - when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - when(protocolSpec.getBlockImporter()).thenReturn(blockImporter); + when(blockCreator.createSealedBlock(any(), anyInt(), any())).thenReturn(createdBlock); + when(protocolSchedule.getBlockImporter(any())).thenReturn(blockImporter); final ConsensusRoundIdentifier futureRoundIdentifier = createFrom(roundIdentifier, 0, +2); @@ -451,9 +440,8 @@ public class QbftBlockHeightManagerTest { when(finalState.isLocalNodeProposerForRound(roundIdentifier)).thenReturn(true); when(blockTimer.checkEmptyBlockExpired(any(), eq(0L))).thenReturn(true); when(blockInterface.replaceRoundInBlock(eq(createdBlock), eq(0))).thenReturn(createdBlock); - when(blockCreator.createSealedBlock(any(), any(), anyInt(), any())).thenReturn(createdBlock); - when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - when(protocolSpec.getBlockImporter()).thenReturn(blockImporter); + when(blockCreator.createSealedBlock(any(), anyInt(), any())).thenReturn(createdBlock); + when(protocolSchedule.getBlockImporter(any())).thenReturn(blockImporter); final QbftBlockHeightManager manager = new QbftBlockHeightManager( diff --git a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundTest.java b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundTest.java index 611ced3c3..0877062f5 100644 --- a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundTest.java +++ b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/statemachine/QbftRoundTest.java @@ -46,10 +46,8 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockInterface; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftMinedBlockObserver; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator; import org.hyperledger.besu.consensus.qbft.core.validation.QbftBlockHeaderTestFixture; import org.hyperledger.besu.crypto.SECPSignature; @@ -99,13 +97,11 @@ public class QbftRoundTest { @Mock private QbftBlockCreator blockCreator; @Mock private MessageValidator messageValidator; @Mock private RoundTimer roundTimer; - @Mock private QbftProtocolSpec protocolSpec; @Mock private QbftBlockImporter blockImporter; @Mock private QbftBlockHeader parentHeader; @Mock private BftExtraDataCodec bftExtraDataCodec; @Mock private QbftBlockInterface blockInteface; @Mock private QbftBlockCodec blockEncoder; - @Mock private QbftExtraDataProvider qbftExtraDataProvider; @Captor private ArgumentCaptor blockCaptor; @@ -137,8 +133,7 @@ public class QbftRoundTest { when(blockCreator.createBlock(anyLong(), any())).thenReturn(proposedBlock); - when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - when(protocolSpec.getBlockImporter()).thenReturn(blockImporter); + when(protocolSchedule.getBlockImporter(any())).thenReturn(blockImporter); when(blockImporter.importBlock(any())).thenReturn(true); @@ -166,7 +161,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); verify(roundTimer, times(1)).startTimer(roundIdentifier); } @@ -186,7 +180,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); when(blockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0))).thenReturn(proposedBlock); @@ -218,7 +211,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); round.startRoundWith(new RoundChangeArtifacts(emptyList(), Optional.empty()), 15); @@ -254,7 +246,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); final SignedData preparedPayload = @@ -306,7 +297,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); final RoundChange roundChange = @@ -349,12 +339,10 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); when(blockInteface.replaceRoundInBlock(proposedBlock, 0)).thenReturn(proposedBlock); - when(blockCreator.createSealedBlock(eq(qbftExtraDataProvider), eq(proposedBlock), eq(0), any())) - .thenReturn(proposedBlock); + when(blockCreator.createSealedBlock(eq(proposedBlock), eq(0), any())).thenReturn(proposedBlock); round.handleCommitMessage( messageFactory.createCommit(roundIdentifier, proposedBlock.getHash(), remoteCommitSeal)); @@ -382,12 +370,10 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); when(blockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0))).thenReturn(proposedBlock); - when(blockCreator.createSealedBlock(eq(qbftExtraDataProvider), eq(proposedBlock), eq(0), any())) - .thenReturn(proposedBlock); + when(blockCreator.createSealedBlock(eq(proposedBlock), eq(0), any())).thenReturn(proposedBlock); round.handleCommitMessage( messageFactory.createCommit(roundIdentifier, proposedBlock.getHash(), remoteCommitSeal)); @@ -419,7 +405,6 @@ public class QbftRoundTest { transmitter, roundTimer, bftExtraDataCodec, - qbftExtraDataProvider, parentHeader); when(blockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0))).thenReturn(proposedBlock); diff --git a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidatorTest.java b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidatorTest.java index 4aae038e7..3a7d3a056 100644 --- a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidatorTest.java +++ b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/ProposalValidatorTest.java @@ -41,7 +41,6 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockInterface; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; import org.hyperledger.besu.consensus.qbft.core.types.QbftContext; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.consensus.qbft.core.types.QbftValidatorProvider; import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.ProtocolContext; @@ -84,7 +83,6 @@ public class ProposalValidatorTest { private static final int VALIDATOR_COUNT = 4; @Mock private QbftBlockValidator blockValidator; @Mock private QbftProtocolSchedule protocolSchedule; - @Mock private QbftProtocolSpec protocolSpec; @Mock private QbftBlockCodec blockEncoder; @Mock private QbftBlockInterface blockInterface; @Mock private QbftValidatorProvider validatorProvider; @@ -103,9 +101,7 @@ public class ProposalValidatorTest { QbftContext qbftContext = new QbftContext(validatorProvider, blockInterface); lenient().when(protocolContext.getConsensusContext(QbftContext.class)).thenReturn(qbftContext); - when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - - when(protocolSpec.getBlockValidator()).thenReturn(blockValidator); + when(protocolSchedule.getBlockValidator(any())).thenReturn(blockValidator); roundItems.put(ROUND_ID.ZERO, createRoundSpecificItems(0)); roundItems.put(ROUND_ID.ONE, createRoundSpecificItems(1)); diff --git a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidatorTest.java b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidatorTest.java index 18f33a482..b724392ca 100644 --- a/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidatorTest.java +++ b/consensus/qbft-core/src/test/java/org/hyperledger/besu/consensus/qbft/core/validation/RoundChangeMessageValidatorTest.java @@ -38,7 +38,6 @@ import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator.ValidationResult; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.crypto.SECPSignature; import org.hyperledger.besu.datatypes.Hash; @@ -57,7 +56,6 @@ public class RoundChangeMessageValidatorTest { @Mock private RoundChangePayloadValidator payloadValidator; @Mock private QbftProtocolSchedule protocolSchedule; @Mock private QbftBlockValidator blockValidator; - @Mock private QbftProtocolSpec protocolSpec; @Mock private QbftBlockCodec blockEncoder; private RoundChangeMessageValidator messageValidator; @@ -73,8 +71,7 @@ public class RoundChangeMessageValidatorTest { public void setup() { validators = QbftNodeList.createNodes(VALIDATOR_COUNT, blockEncoder); - lenient().when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec); - lenient().when(protocolSpec.getBlockValidator()).thenReturn(blockValidator); + lenient().when(protocolSchedule.getBlockValidator(any())).thenReturn(blockValidator); } @Test diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptor.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptor.java index 7fed70f58..0c6b4ee95 100644 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptor.java +++ b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptor.java @@ -20,7 +20,6 @@ import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlock; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockCreator; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.crypto.SECPSignature; import org.hyperledger.besu.ethereum.blockcreation.BlockCreator; import org.hyperledger.besu.ethereum.core.Block; @@ -58,13 +57,11 @@ public class QbftBlockCreatorAdaptor implements QbftBlockCreator { @Override public QbftBlock createSealedBlock( - final QbftExtraDataProvider bftQbftExtraDataProvider, - final QbftBlock block, - final int roundNumber, - final Collection commitSeals) { + final QbftBlock block, final int roundNumber, final Collection commitSeals) { final Block besuBlock = BlockUtil.toBesuBlock(block); final QbftBlockHeader initialHeader = block.getHeader(); - final BftExtraData initialExtraData = bftQbftExtraDataProvider.getExtraData(initialHeader); + final BftExtraData initialExtraData = + bftExtraDataCodec.decode(BlockUtil.toBesuBlockHeader(initialHeader)); final BftExtraData sealedExtraData = new BftExtraData( diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptor.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptor.java deleted file mode 100644 index 2386e3779..000000000 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright contributors to Besu. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.qbft.adaptor; - -import org.hyperledger.besu.consensus.common.bft.BftExtraData; -import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec; -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; - -/** - * Adaptor class to allow a {@link BftExtraDataCodec} to be used as a {@link QbftExtraDataProvider}. - */ -public class QbftExtraDataProviderAdaptor implements QbftExtraDataProvider { - private final BftExtraDataCodec bftExtraDataCodec; - - /** - * Constructs a new QbftExtraDataProvider - * - * @param bftExtraDataCodec the bftExtraDataCodec used to decode the extra data from the header - */ - public QbftExtraDataProviderAdaptor(final BftExtraDataCodec bftExtraDataCodec) { - this.bftExtraDataCodec = bftExtraDataCodec; - } - - @Override - public BftExtraData getExtraData(final QbftBlockHeader header) { - return bftExtraDataCodec.decode(BlockUtil.toBesuBlockHeader(header)); - } -} diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptor.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptor.java index 31e25809e..c8a1046cb 100644 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptor.java +++ b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptor.java @@ -15,8 +15,9 @@ package org.hyperledger.besu.consensus.qbft.adaptor; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; +import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; +import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; import org.hyperledger.besu.ethereum.ProtocolContext; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -42,9 +43,18 @@ public class QbftProtocolScheduleAdaptor implements QbftProtocolSchedule { } @Override - public QbftProtocolSpec getByBlockHeader(final QbftBlockHeader header) { - final ProtocolSpec protocolSpec = - besuProtocolSchedule.getByBlockHeader(BlockUtil.toBesuBlockHeader(header)); - return new QbftProtocolSpecAdaptor(protocolSpec, context); + public QbftBlockImporter getBlockImporter(final QbftBlockHeader header) { + return new QbftBlockImporterAdaptor( + getProtocolSpecByBlockHeader(header).getBlockImporter(), context); + } + + @Override + public QbftBlockValidator getBlockValidator(final QbftBlockHeader header) { + return new QbftBlockValidatorAdaptor( + getProtocolSpecByBlockHeader(header).getBlockValidator(), context); + } + + private ProtocolSpec getProtocolSpecByBlockHeader(final QbftBlockHeader header) { + return besuProtocolSchedule.getByBlockHeader(BlockUtil.toBesuBlockHeader(header)); } } diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptor.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptor.java deleted file mode 100644 index 5e158338b..000000000 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptor.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright contributors to Besu. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.qbft.adaptor; - -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; -import org.hyperledger.besu.ethereum.ProtocolContext; -import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; - -/** Adaptor class to allow a {@link ProtocolSpec} to be used as a {@link QbftProtocolSpec}. */ -public class QbftProtocolSpecAdaptor implements QbftProtocolSpec { - private final ProtocolSpec besuProtocolSpec; - private final ProtocolContext context; - - /** - * Constructs a new Qbft protocol spec. - * - * @param besuProtocolSpec The Besu protocol spec. - * @param context The protocol context. - */ - public QbftProtocolSpecAdaptor( - final ProtocolSpec besuProtocolSpec, final ProtocolContext context) { - this.besuProtocolSpec = besuProtocolSpec; - this.context = context; - } - - @Override - public QbftBlockImporter getBlockImporter() { - return new QbftBlockImporterAdaptor(besuProtocolSpec.getBlockImporter(), context); - } - - @Override - public QbftBlockValidator getBlockValidator() { - return new QbftBlockValidatorAdaptor(besuProtocolSpec.getBlockValidator(), context); - } -} diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptor.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptor.java index 80c147ad6..ca741e395 100644 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptor.java +++ b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptor.java @@ -15,13 +15,11 @@ package org.hyperledger.besu.consensus.qbft.adaptor; import org.hyperledger.besu.consensus.common.validator.ValidatorProvider; -import org.hyperledger.besu.consensus.common.validator.VoteProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.consensus.qbft.core.types.QbftValidatorProvider; import org.hyperledger.besu.datatypes.Address; import java.util.Collection; -import java.util.Optional; /** * Adaptor class to allow the {@link ValidatorProvider} to be used as a {@link @@ -54,9 +52,4 @@ public class QbftValidatorProviderAdaptor implements QbftValidatorProvider { public Collection
getValidatorsForBlock(final QbftBlockHeader header) { return validatorProvider.getValidatorsForBlock(BlockUtil.toBesuBlockHeader(header)); } - - @Override - public Optional getVoteProviderAtHead() { - return validatorProvider.getVoteProviderAtHead(); - } } diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptorTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptorTest.java index 1f093bb08..60c5e307b 100644 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptorTest.java +++ b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftBlockCreatorAdaptorTest.java @@ -23,7 +23,6 @@ import org.hyperledger.besu.consensus.common.bft.Vote; import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlock; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.consensus.qbft.core.types.QbftExtraDataProvider; import org.hyperledger.besu.crypto.SECPSignature; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.blockcreation.BlockCreator; @@ -46,7 +45,6 @@ import org.mockito.junit.jupiter.MockitoExtension; class QbftBlockCreatorAdaptorTest { @Mock private BlockCreator blockCreator; @Mock private Block besuBlock; - @Mock private QbftExtraDataProvider qbftExtraDataProvider; private final QbftExtraDataCodec qbftExtraDataCodec = new QbftExtraDataCodec(); @Test @@ -72,17 +70,15 @@ class QbftBlockCreatorAdaptorTest { Optional.of(Vote.authVote(Address.ZERO)), 0, List.of(Address.ZERO)); - BlockHeader header = new BlockHeaderTestFixture().buildHeader(); + Bytes extraDataBytes = qbftExtraDataCodec.encode(bftExtraData); + BlockHeader header = new BlockHeaderTestFixture().extraData(extraDataBytes).buildHeader(); Block besuBlock = new Block(header, BlockBody.empty()); QbftBlock block = new QbftBlockAdaptor(besuBlock); SECPSignature seal = new SECPSignature(BigInteger.ONE, BigInteger.ONE, (byte) 1); - when(qbftExtraDataProvider.getExtraData(new QbftBlockHeaderAdaptor(header))) - .thenReturn(bftExtraData); QbftBlockCreatorAdaptor qbftBlockCreator = new QbftBlockCreatorAdaptor(blockCreator, qbftExtraDataCodec); - QbftBlock sealedBlock = - qbftBlockCreator.createSealedBlock(qbftExtraDataProvider, block, 1, List.of(seal)); + QbftBlock sealedBlock = qbftBlockCreator.createSealedBlock(block, 1, List.of(seal)); BftExtraData sealedExtraData = qbftExtraDataCodec.decode(BlockUtil.toBesuBlockHeader(sealedBlock.getHeader())); assertThat(sealedExtraData.getVanityData()).isEqualTo(Bytes.wrap(new byte[32])); diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptorTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptorTest.java deleted file mode 100644 index 3d1ba2c22..000000000 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftExtraDataProviderAdaptorTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright contributors to Besu. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.qbft.adaptor; - -import static java.util.Collections.emptyList; -import static org.assertj.core.api.Assertions.assertThat; - -import org.hyperledger.besu.consensus.common.bft.BftExtraData; -import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec; -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; -import org.hyperledger.besu.ethereum.core.BlockHeader; -import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; - -import java.util.Optional; - -import org.apache.tuweni.bytes.Bytes; -import org.junit.jupiter.api.Test; - -class QbftExtraDataProviderAdaptorTest { - - @Test - void retrievesExtraDataFromBlockHeader() { - final QbftExtraDataCodec qbftExtraDataCodec = new QbftExtraDataCodec(); - final BftExtraData bftExtraData = - new BftExtraData(Bytes.wrap(new byte[32]), emptyList(), Optional.empty(), 0, emptyList()); - final Bytes encoded = qbftExtraDataCodec.encode(bftExtraData); - final BlockHeader besuHeader = - new BlockHeaderTestFixture().number(1).extraData(encoded).buildHeader(); - final QbftBlockHeader qbftHeader = new QbftBlockHeaderAdaptor(besuHeader); - - final QbftExtraDataProviderAdaptor qbftExtraDataProvider = - new QbftExtraDataProviderAdaptor(new QbftExtraDataCodec()); - final BftExtraData retrievedExtraData = qbftExtraDataProvider.getExtraData(qbftHeader); - assertThat(retrievedExtraData).isEqualToComparingFieldByField(bftExtraData); - } -} diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptorTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptorTest.java index 2f994eb19..a92317137 100644 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptorTest.java +++ b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolScheduleAdaptorTest.java @@ -18,17 +18,21 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; +import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; +import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSchedule; -import org.hyperledger.besu.consensus.qbft.core.types.QbftProtocolSpec; +import org.hyperledger.besu.ethereum.BlockValidator; import org.hyperledger.besu.ethereum.ProtocolContext; import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; +import org.hyperledger.besu.ethereum.core.BlockImporter; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) @@ -38,15 +42,34 @@ class QbftProtocolScheduleAdaptorTest { @Mock private ProtocolContext besuProtocolContext; @Test - void createsAProtocolSpecUsingBesuProtocolSpec() { + void createsBlockValidatorUsingBesuBlockValidator() { final BlockHeader besuHeader = new BlockHeaderTestFixture().number(1).buildHeader(); final QbftBlockHeader qbftHeader = new QbftBlockHeaderAdaptor(besuHeader); + final BlockValidator besuBlockValidator = Mockito.mock(BlockValidator.class); when(besuProtocolSchedule.getByBlockHeader(besuHeader)).thenReturn(besuProtocolSpec); + when(besuProtocolSpec.getBlockValidator()).thenReturn(besuBlockValidator); final QbftProtocolSchedule qbftProtocolSchedule = new QbftProtocolScheduleAdaptor(besuProtocolSchedule, besuProtocolContext); - final QbftProtocolSpec protocolSpec = qbftProtocolSchedule.getByBlockHeader(qbftHeader); - assertThat(protocolSpec).hasFieldOrPropertyWithValue("besuProtocolSpec", besuProtocolSpec); + final QbftBlockValidator qbftBlockValidator = + qbftProtocolSchedule.getBlockValidator(qbftHeader); + assertThat(qbftBlockValidator) + .hasFieldOrPropertyWithValue("blockValidator", besuBlockValidator); + } + + @Test + void createsBlockImporterUsingBesuBlockImporter() { + final BlockHeader besuHeader = new BlockHeaderTestFixture().number(1).buildHeader(); + final QbftBlockHeader qbftHeader = new QbftBlockHeaderAdaptor(besuHeader); + final BlockImporter besuBlockImporter = Mockito.mock(BlockImporter.class); + + when(besuProtocolSchedule.getByBlockHeader(besuHeader)).thenReturn(besuProtocolSpec); + when(besuProtocolSpec.getBlockImporter()).thenReturn(besuBlockImporter); + + final QbftProtocolSchedule qbftProtocolSchedule = + new QbftProtocolScheduleAdaptor(besuProtocolSchedule, besuProtocolContext); + final QbftBlockImporter qbftBlockImporter = qbftProtocolSchedule.getBlockImporter(qbftHeader); + assertThat(qbftBlockImporter).hasFieldOrPropertyWithValue("blockImporter", besuBlockImporter); } } diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptorTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptorTest.java deleted file mode 100644 index 78ad0b25d..000000000 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftProtocolSpecAdaptorTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright contributors to Besu. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.qbft.adaptor; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockImporter; -import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockValidator; -import org.hyperledger.besu.ethereum.BlockValidator; -import org.hyperledger.besu.ethereum.ProtocolContext; -import org.hyperledger.besu.ethereum.core.BlockImporter; -import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class QbftProtocolSpecAdaptorTest { - @Mock private ProtocolSpec besuProtocolSpec; - @Mock private ProtocolContext besuProtocolContext; - - @Test - void createsBlockImporterUsingBesuBlockImporter() { - final BlockImporter besuBlockImporter = Mockito.mock(BlockImporter.class); - when(besuProtocolSpec.getBlockImporter()).thenReturn(besuBlockImporter); - - final QbftProtocolSpecAdaptor qbftProtocolSpec = - new QbftProtocolSpecAdaptor(besuProtocolSpec, besuProtocolContext); - final QbftBlockImporter qbftBlockImporter = qbftProtocolSpec.getBlockImporter(); - assertThat(qbftBlockImporter).hasFieldOrPropertyWithValue("blockImporter", besuBlockImporter); - } - - @Test - void createsBlockValidatorUsingBesuBlockValidator() { - final BlockValidator besuBlockValidator = Mockito.mock(BlockValidator.class); - when(besuProtocolSpec.getBlockValidator()).thenReturn(besuBlockValidator); - - final QbftProtocolSpecAdaptor qbftProtocolSpec = - new QbftProtocolSpecAdaptor(besuProtocolSpec, besuProtocolContext); - final QbftBlockValidator qbftBlockValidator = qbftProtocolSpec.getBlockValidator(); - assertThat(qbftBlockValidator) - .hasFieldOrPropertyWithValue("blockValidator", besuBlockValidator); - } -} diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptorTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptorTest.java index c3b6d6270..bbb045cd3 100644 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptorTest.java +++ b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/adaptor/QbftValidatorProviderAdaptorTest.java @@ -18,14 +18,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import org.hyperledger.besu.consensus.common.validator.ValidatorProvider; -import org.hyperledger.besu.consensus.common.validator.VoteProvider; import org.hyperledger.besu.consensus.qbft.core.types.QbftBlockHeader; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,7 +33,6 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class QbftValidatorProviderAdaptorTest { @Mock private ValidatorProvider validatorProvider; - @Mock private VoteProvider voteProvider; @Test void returnsValidatorsAtHead() { @@ -75,13 +72,4 @@ class QbftValidatorProviderAdaptorTest { assertThat(qbftValidatorProviderAdaptor.getValidatorsForBlock(qbftBlockHeader)) .isEqualTo(validatorsForBlock); } - - @Test - void returnsVoteProviderAtHead() { - when(validatorProvider.getVoteProviderAtHead()).thenReturn(Optional.of(voteProvider)); - - QbftValidatorProviderAdaptor qbftValidatorProviderAdaptor = - new QbftValidatorProviderAdaptor(validatorProvider); - assertThat(qbftValidatorProviderAdaptor.getVoteProviderAtHead()).contains(voteProvider); - } }