mirror of
https://github.com/vacp2p/linea-besu.git
synced 2026-01-08 15:13:58 -05:00
Move the core of qbft into a qbft core module (#8043)
Move the core of QBFT into a qbft core module so it can be reused outside Besu Signed-off-by: Jason Frame <jason.frame@consensys.net>
This commit is contained in:
@@ -39,6 +39,7 @@ dependencies {
|
||||
implementation project(':consensus:ibft')
|
||||
implementation project(':consensus:merge')
|
||||
implementation project(':consensus:qbft')
|
||||
implementation project(':consensus:qbft-core')
|
||||
implementation project(':crypto:services')
|
||||
implementation project(':datatypes')
|
||||
implementation project(':enclave')
|
||||
|
||||
@@ -47,20 +47,20 @@ import org.hyperledger.besu.consensus.common.validator.ValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.common.validator.blockbased.BlockValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftForksSchedulesFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftGossip;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftProtocolScheduleBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.blockcreation.QbftBlockCreatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftGossip;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftBlockHeightManagerFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftController;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftRoundFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.consensus.qbft.jsonrpc.QbftJsonRpcMethods;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.protocol.Istanbul100SubProtocol;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftBlockHeightManagerFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftController;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftRoundFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ForkingValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.TransactionValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ValidatorContractController;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.methods.JsonRpcMethods;
|
||||
|
||||
@@ -73,12 +73,20 @@ public class BftContextBuilder {
|
||||
final Class<T> contextClazz,
|
||||
final Collection<Address> validators,
|
||||
final BftExtraDataCodec bftExtraDataCodec) {
|
||||
return setupContextWithBftBlockInterface(
|
||||
contextClazz, validators, new BftBlockInterface(bftExtraDataCodec));
|
||||
}
|
||||
|
||||
public static <T extends BftContext> T setupContextWithBftBlockInterface(
|
||||
final Class<T> contextClazz,
|
||||
final Collection<Address> validators,
|
||||
final BftBlockInterface bftBlockInterface) {
|
||||
final T bftContext = mock(contextClazz, withSettings().strictness(Strictness.LENIENT));
|
||||
final ValidatorProvider mockValidatorProvider =
|
||||
mock(ValidatorProvider.class, withSettings().strictness(Strictness.LENIENT));
|
||||
when(bftContext.getValidatorProvider()).thenReturn(mockValidatorProvider);
|
||||
when(mockValidatorProvider.getValidatorsAfterBlock(any())).thenReturn(validators);
|
||||
when(bftContext.getBlockInterface()).thenReturn(new BftBlockInterface(bftExtraDataCodec));
|
||||
when(bftContext.getBlockInterface()).thenReturn(bftBlockInterface);
|
||||
when(bftContext.as(any())).thenReturn(bftContext);
|
||||
|
||||
return bftContext;
|
||||
|
||||
82
consensus/qbft-core/build.gradle
Normal file
82
consensus/qbft-core/build.gradle
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright Besu Contributors.
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
apply plugin: 'java-library'
|
||||
|
||||
jar {
|
||||
archiveBaseName = 'besu-qbft-core'
|
||||
manifest {
|
||||
attributes(
|
||||
'Specification-Title': archiveBaseName,
|
||||
'Specification-Version': project.version,
|
||||
'Implementation-Title': archiveBaseName,
|
||||
'Implementation-Version': calculateVersion(),
|
||||
'Commit-Hash': getGitCommitDetails(40).hash
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':config')
|
||||
implementation project(':consensus:common')
|
||||
implementation project(':crypto:services')
|
||||
implementation project(':datatypes')
|
||||
implementation project(':ethereum:blockcreation')
|
||||
implementation project(':ethereum:core')
|
||||
implementation project(':ethereum:eth')
|
||||
implementation project(':ethereum:p2p')
|
||||
implementation project(':ethereum:rlp')
|
||||
implementation project(':evm')
|
||||
|
||||
implementation 'com.google.guava:guava'
|
||||
implementation 'io.tmio:tuweni-bytes'
|
||||
|
||||
integrationTestImplementation project(path: ':config', configuration: 'testSupportArtifacts')
|
||||
integrationTestImplementation project(path: ':ethereum:core', configuration: 'testSupportArtifacts')
|
||||
|
||||
testImplementation project(path: ':crypto:services', configuration: 'testSupportArtifacts')
|
||||
testImplementation project(path: ':config', configuration: 'testSupportArtifacts')
|
||||
testImplementation project(path: ':consensus:common', configuration: 'testArtifacts')
|
||||
testImplementation project(path: ':consensus:common', configuration: 'testSupportArtifacts')
|
||||
testImplementation project(':ethereum:core')
|
||||
testImplementation project(path: ':ethereum:core', configuration: 'testSupportArtifacts')
|
||||
testImplementation project(':crypto:algorithms')
|
||||
testImplementation project(':evm')
|
||||
testImplementation project(':metrics:core')
|
||||
testImplementation project(':testutil')
|
||||
|
||||
testImplementation 'org.assertj:assertj-core'
|
||||
testImplementation 'org.awaitility:awaitility'
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||
testImplementation 'org.mockito:mockito-core'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter'
|
||||
|
||||
integrationTestImplementation project(':crypto:algorithms')
|
||||
integrationTestImplementation project(path: ':crypto:services', configuration: 'testSupportArtifacts')
|
||||
integrationTestImplementation project(path: ':consensus:common', configuration: 'testSupportArtifacts')
|
||||
integrationTestImplementation project(':consensus:qbft')
|
||||
integrationTestImplementation project(':evm')
|
||||
integrationTestImplementation project(':metrics:core')
|
||||
integrationTestImplementation project(':testutil')
|
||||
|
||||
integrationTestImplementation 'org.assertj:assertj-core'
|
||||
integrationTestImplementation 'org.junit.jupiter:junit-jupiter-api'
|
||||
integrationTestImplementation 'org.mockito:mockito-core'
|
||||
integrationTestImplementation 'org.mockito:mockito-junit-jupiter'
|
||||
|
||||
integrationTestRuntimeOnly 'org.junit.jupiter:junit-jupiter'
|
||||
|
||||
testSupportImplementation 'org.mockito:mockito-core'
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.support;
|
||||
package org.hyperledger.besu.consensus.qbft.core.support;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHashing;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions;
|
||||
@@ -20,9 +20,9 @@ import org.hyperledger.besu.consensus.common.bft.BftBlockInterface;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.CommitPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.CommitPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.support;
|
||||
package org.hyperledger.besu.consensus.qbft.core.support;
|
||||
|
||||
import static java.util.Optional.empty;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -23,15 +23,15 @@ import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.support;
|
||||
package org.hyperledger.besu.consensus.qbft.core.support;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExecutors;
|
||||
@@ -23,7 +23,7 @@ import org.hyperledger.besu.consensus.common.bft.inttest.NodeParams;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftEventHandler;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.common.validator.ValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.chain.MutableBlockchain;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.support;
|
||||
package org.hyperledger.besu.consensus.qbft.core.support;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.hyperledger.besu.ethereum.core.InMemoryKeyValueStorageProvider.createInMemoryBlockchain;
|
||||
@@ -64,18 +64,18 @@ import org.hyperledger.besu.consensus.common.validator.blockbased.BlockValidator
|
||||
import org.hyperledger.besu.consensus.qbft.MutableQbftConfigOptions;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftForksSchedulesFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftGossip;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftProtocolScheduleBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.blockcreation.QbftBlockCreatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftBlockHeightManagerFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftController;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftRoundFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftGossip;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftBlockHeightManagerFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftController;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftRoundFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ForkingValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.TransactionValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ValidatorContractController;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
@@ -12,27 +12,27 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.support;
|
||||
package org.hyperledger.besu.consensus.qbft.core.support;
|
||||
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createCommitBlockFromProposalBlock;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createCommitBlockFromProposalBlock;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.EventMultiplexer;
|
||||
import org.hyperledger.besu.consensus.common.bft.inttest.DefaultValidatorPeer;
|
||||
import org.hyperledger.besu.consensus.common.bft.inttest.NodeParams;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,23 +12,23 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.util.Lists.emptyList;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
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.ethereum.core.Block;
|
||||
|
||||
import java.time.Clock;
|
||||
@@ -12,22 +12,22 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createCommitBlockFromProposalBlock;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createCommitBlockFromProposalBlock;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
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.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
|
||||
@@ -20,16 +20,16 @@ import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.support.ValidatorPeer;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
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.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
@@ -12,22 +12,22 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.BlockTimerExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
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.ethereum.core.Block;
|
||||
|
||||
import java.time.Clock;
|
||||
@@ -12,18 +12,18 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
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.ethereum.core.Block;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -12,23 +12,23 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createValidPreparedCertificate;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createValidPreparedCertificate;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.support.ValidatorPeer;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers;
|
||||
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.ethereum.core.Block;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -12,27 +12,27 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Optional.empty;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createValidPreparedCertificate;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createValidPreparedCertificate;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.BlockTimerExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.support.ValidatorPeer;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
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.ethereum.core.Block;
|
||||
|
||||
import java.time.Clock;
|
||||
@@ -12,21 +12,21 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.qbft.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.support.IntegrationTestHelpers.createSignedCommitPayload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.inttest.NodeParams;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.support.ValidatorPeer;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
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.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -21,8 +21,8 @@ import org.hyperledger.besu.config.JsonUtil;
|
||||
import org.hyperledger.besu.config.QbftFork;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftEventQueue;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.core.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.core.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.testutil.TestClock;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test;
|
||||
|
||||
import static java.time.temporal.ChronoUnit.SECONDS;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -27,10 +27,10 @@ import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.common.bft.inttest.NodeParams;
|
||||
import org.hyperledger.besu.consensus.common.validator.ValidatorProvider;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.support.RoundSpecificPeers;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContext;
|
||||
import org.hyperledger.besu.consensus.qbft.support.TestContextBuilder;
|
||||
import org.hyperledger.besu.consensus.qbft.support.ValidatorPeer;
|
||||
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.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.test.round;
|
||||
package org.hyperledger.besu.consensus.qbft.core.test.round;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Optional.empty;
|
||||
@@ -32,11 +32,11 @@ import org.hyperledger.besu.consensus.common.bft.RoundTimer;
|
||||
import org.hyperledger.besu.consensus.common.bft.blockcreation.BftBlockCreator;
|
||||
import org.hyperledger.besu.consensus.common.bft.inttest.StubValidatorMulticaster;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.QbftRound;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.RoundState;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.QbftRound;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.RoundState;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagedata;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagedata;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.messagedata.AbstractBftMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagedata;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagedata;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.messagedata.AbstractBftMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagedata;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagedata;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagedata.AbstractBftMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagedata;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagedata;
|
||||
|
||||
/** Message codes for QBFT v1 messages */
|
||||
public interface QbftV1 {
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagedata;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagedata;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagedata.AbstractBftMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.CommitPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.CommitPayload;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLP;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLP;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPInput;
|
||||
@@ -12,14 +12,14 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
import org.hyperledger.besu.ethereum.rlp.BytesValueRLPOutput;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLP;
|
||||
@@ -12,15 +12,15 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
import org.hyperledger.besu.ethereum.rlp.BytesValueRLPOutput;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLP;
|
||||
@@ -12,17 +12,17 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft;
|
||||
package org.hyperledger.besu.consensus.qbft.core.network;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.Gossiper;
|
||||
import org.hyperledger.besu.consensus.common.bft.network.ValidatorMulticaster;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Authored;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Message;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
@@ -12,23 +12,23 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.network;
|
||||
package org.hyperledger.besu.consensus.qbft.core.network;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.network.ValidatorMulticaster;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
@@ -12,16 +12,16 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPInput;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPOutput;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPInput;
|
||||
@@ -12,12 +12,12 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPInput;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPOutput;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPInput;
|
||||
import org.hyperledger.besu.ethereum.rlp.RLPOutput;
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BaseBlockHeightManager;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
|
||||
/** The interface Base qbft block height manager. */
|
||||
public interface BaseQbftBlockHeightManager extends BaseBlockHeightManager {
|
||||
@@ -12,14 +12,14 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
|
||||
/** The type NoOp block height manager. */
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
import java.util.List;
|
||||
@@ -12,21 +12,21 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.FutureRoundProposalMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.FutureRoundProposalMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.Gossiper;
|
||||
@@ -22,11 +22,11 @@ import org.hyperledger.besu.consensus.common.bft.statemachine.BaseBftController;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BaseBlockHeightManager;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.FutureMessageBuffer;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Message;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
|
||||
@@ -26,13 +26,13 @@ import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.RoundTimer;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
@@ -12,16 +12,16 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftProtocolSchedule;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.blockcreation.BftBlockCreatorFactory;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.blockcreation.BlockCreator;
|
||||
import org.hyperledger.besu.ethereum.chain.MinedBlockObserver;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.RoundChangeMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.RoundChangeMessageValidator;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.CommitPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.CommitPayload;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Util;
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
|
||||
/** The Future round proposal message validator. */
|
||||
@@ -12,15 +12,15 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockHeaderFunctions;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockInterface;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftBlockInterface;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftContext;
|
||||
@@ -21,7 +21,7 @@ import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftProtocolSchedule;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.blockcreation.ProposerSelector;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator.SubsequentMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator.SubsequentMessageValidator;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
@@ -12,12 +12,12 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.BlockValidator;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static org.hyperledger.besu.consensus.common.bft.validation.ValidationHelpers.hasDuplicateAuthors;
|
||||
import static org.hyperledger.besu.consensus.common.bft.validation.ValidationHelpers.hasSufficientEntries;
|
||||
@@ -24,10 +24,10 @@ import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.Payload;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.BlockValidator;
|
||||
@@ -12,16 +12,16 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static org.hyperledger.besu.consensus.common.bft.validation.ValidationHelpers.hasDuplicateAuthors;
|
||||
import static org.hyperledger.besu.consensus.common.bft.validation.ValidationHelpers.hasSufficientEntries;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.BlockValidator;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
@@ -12,11 +12,11 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validator;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validator;
|
||||
|
||||
import org.hyperledger.besu.config.QbftConfigOptions;
|
||||
import org.hyperledger.besu.consensus.common.ForkSpec;
|
||||
@@ -12,14 +12,14 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.CommitPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.CommitPayload;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
@@ -12,14 +12,14 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
@@ -12,20 +12,18 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
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.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.ProposalPayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
@@ -38,19 +36,18 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes32;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
public class ProposalTest {
|
||||
private static final BftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
|
||||
private static final BftExtraData extraData =
|
||||
new BftExtraData(
|
||||
Bytes32.ZERO, Collections.emptyList(), Optional.empty(), 1, Collections.emptyList());
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
|
||||
private static final Block BLOCK =
|
||||
new Block(
|
||||
new BlockHeaderTestFixture().extraData(bftExtraDataCodec.encode(extraData)).buildHeader(),
|
||||
new BlockHeaderTestFixture().buildHeader(),
|
||||
new BlockBody(
|
||||
Collections.emptyList(),
|
||||
Collections.emptyList(),
|
||||
@@ -12,19 +12,17 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.messagewrappers;
|
||||
package org.hyperledger.besu.consensus.qbft.core.messagewrappers;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
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.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
@@ -37,20 +35,18 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes32;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
public class RoundChangeTest {
|
||||
private static final BftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
private static final BftExtraData extraData =
|
||||
new BftExtraData(
|
||||
Bytes32.ZERO, Collections.emptyList(), Optional.empty(), 1, Collections.emptyList());
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
|
||||
private static final Block BLOCK =
|
||||
new Block(
|
||||
new BlockHeaderTestFixture()
|
||||
.extraData(new QbftExtraDataCodec().encode(extraData))
|
||||
.buildHeader(),
|
||||
new BlockHeaderTestFixture().buildHeader(),
|
||||
new BlockBody(Collections.emptyList(), Collections.emptyList()));
|
||||
|
||||
@Test
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.payload;
|
||||
package org.hyperledger.besu.consensus.qbft.core.payload;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Collections.singletonList;
|
||||
@@ -43,17 +43,16 @@ import org.hyperledger.besu.consensus.common.bft.blockcreation.BftBlockCreator;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.network.ValidatorMulticaster;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.FutureRoundProposalMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.FutureRoundProposalMessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidatorFactory;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
@@ -107,7 +106,6 @@ public class QbftBlockHeightManagerTest {
|
||||
private final NodeKey nodeKey = NodeKeyUtils.generate();
|
||||
private final MessageFactory messageFactory = new MessageFactory(nodeKey);
|
||||
private final BlockHeaderTestFixture headerTestFixture = new BlockHeaderTestFixture();
|
||||
private final BftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
|
||||
@Mock private BftFinalState finalState;
|
||||
@Mock private QbftMessageTransmitter messageTransmitter;
|
||||
@@ -122,6 +120,7 @@ public class QbftBlockHeightManagerTest {
|
||||
@Mock private FutureRoundProposalMessageValidator futureRoundProposalMessageValidator;
|
||||
@Mock private ValidatorMulticaster validatorMulticaster;
|
||||
@Mock private BlockHeader parentHeader;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
|
||||
@Captor private ArgumentCaptor<MessageData> sentMessageArgCaptor;
|
||||
|
||||
@@ -133,11 +132,6 @@ public class QbftBlockHeightManagerTest {
|
||||
private Block createdBlock;
|
||||
|
||||
private void buildCreatedBlock() {
|
||||
|
||||
final BftExtraData extraData =
|
||||
new BftExtraData(Bytes.wrap(new byte[32]), emptyList(), Optional.empty(), 0, validators);
|
||||
|
||||
headerTestFixture.extraData(bftExtraDataCodec.encode(extraData));
|
||||
final BlockHeader header = headerTestFixture.buildHeader();
|
||||
createdBlock = new Block(header, new BlockBody(emptyList(), emptyList()));
|
||||
}
|
||||
@@ -175,8 +169,7 @@ public class QbftBlockHeightManagerTest {
|
||||
new ProtocolContext(
|
||||
blockchain,
|
||||
null,
|
||||
setupContextWithBftExtraDataEncoder(
|
||||
BftContext.class, validators, new QbftExtraDataCodec()),
|
||||
setupContextWithBftExtraDataEncoder(BftContext.class, validators, bftExtraDataCodec),
|
||||
new BadBlockManager());
|
||||
|
||||
final ProtocolScheduleBuilder protocolScheduleBuilder =
|
||||
@@ -234,6 +227,12 @@ public class QbftBlockHeightManagerTest {
|
||||
bftExtraDataCodec,
|
||||
parentHeader);
|
||||
});
|
||||
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(
|
||||
new BftExtraData(
|
||||
Bytes.wrap(new byte[32]), emptyList(), Optional.empty(), 0, validators));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import static org.assertj.core.util.Lists.newArrayList;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
@@ -35,17 +35,16 @@ import org.hyperledger.besu.consensus.common.bft.events.NewChainHead;
|
||||
import org.hyperledger.besu.consensus.common.bft.events.RoundExpiry;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.BftFinalState;
|
||||
import org.hyperledger.besu.consensus.common.bft.statemachine.FutureMessageBuffer;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftGossip;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.CommitMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.PrepareMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.ProposalMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.RoundChangeMessageData;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftGossip;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
@@ -68,14 +67,13 @@ import org.mockito.quality.Strictness;
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||
public class QbftControllerTest {
|
||||
private static final BftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
|
||||
@Mock private Blockchain blockChain;
|
||||
@Mock private BftFinalState bftFinalState;
|
||||
@Mock private QbftBlockHeightManagerFactory blockHeightManagerFactory;
|
||||
@Mock private BlockHeader chainHeadBlockHeader;
|
||||
@Mock private BlockHeader nextBlock;
|
||||
@Mock private BaseQbftBlockHeightManager blockHeightManager;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
|
||||
@Mock private Proposal proposal;
|
||||
private Message proposalMessage;
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Collections.singletonList;
|
||||
import static java.util.Optional.empty;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.common.bft.BftContextBuilder.setupContextWithBftExtraDataEncoder;
|
||||
import static org.hyperledger.besu.consensus.common.bft.BftContextBuilder.setupContextWithBftBlockInterface;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
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.BftExtraData;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
@@ -37,12 +38,11 @@ import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.RoundTimer;
|
||||
import org.hyperledger.besu.consensus.common.bft.blockcreation.BftBlockCreator;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.network.QbftMessageTransmitter;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
@@ -91,7 +91,6 @@ public class QbftRoundTest {
|
||||
private final MessageFactory messageFactory = new MessageFactory(nodeKey);
|
||||
private final MessageFactory messageFactory2 = new MessageFactory(nodeKey2);
|
||||
private final Subscribers<MinedBlockObserver> subscribers = Subscribers.create();
|
||||
private final BftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
private ProtocolContext protocolContext;
|
||||
|
||||
@Mock private BftProtocolSchedule protocolSchedule;
|
||||
@@ -105,11 +104,12 @@ public class QbftRoundTest {
|
||||
@Mock private ProtocolSpec protocolSpec;
|
||||
@Mock private BlockImporter blockImporter;
|
||||
@Mock private BlockHeader parentHeader;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
@Mock private BftBlockInterface bftBlockInteface;
|
||||
|
||||
@Captor private ArgumentCaptor<Block> blockCaptor;
|
||||
|
||||
private Block proposedBlock;
|
||||
private BftExtraData proposedExtraData;
|
||||
|
||||
private final SECPSignature remoteCommitSeal =
|
||||
SignatureAlgorithmFactory.getInstance()
|
||||
@@ -121,18 +121,14 @@ public class QbftRoundTest {
|
||||
new ProtocolContext(
|
||||
blockChain,
|
||||
worldStateArchive,
|
||||
setupContextWithBftExtraDataEncoder(
|
||||
BftContext.class, emptyList(), new QbftExtraDataCodec()),
|
||||
setupContextWithBftBlockInterface(BftContext.class, emptyList(), bftBlockInteface),
|
||||
new BadBlockManager());
|
||||
|
||||
when(messageValidator.validateProposal(any())).thenReturn(true);
|
||||
when(messageValidator.validatePrepare(any())).thenReturn(true);
|
||||
when(messageValidator.validateCommit(any())).thenReturn(true);
|
||||
|
||||
proposedExtraData =
|
||||
new BftExtraData(Bytes.wrap(new byte[32]), emptyList(), empty(), 0, emptyList());
|
||||
final BlockHeaderTestFixture headerTestFixture = new BlockHeaderTestFixture();
|
||||
headerTestFixture.extraData(new QbftExtraDataCodec().encode(proposedExtraData));
|
||||
headerTestFixture.number(1);
|
||||
|
||||
final BlockHeader header = headerTestFixture.buildHeader();
|
||||
@@ -149,6 +145,16 @@ public class QbftRoundTest {
|
||||
when(blockImporter.importBlock(any(), any(), any()))
|
||||
.thenReturn(new BlockImportResult(BlockImportResult.BlockImportStatus.IMPORTED));
|
||||
|
||||
BftExtraData bftExtraData =
|
||||
new BftExtraData(Bytes.wrap(new byte[32]), emptyList(), empty(), 0, emptyList());
|
||||
when(bftExtraDataCodec.decode(any())).thenReturn(bftExtraData);
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSealsAndRoundNumber(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftBlockInteface.replaceRoundInBlock(
|
||||
eq(proposedBlock), eq(roundIdentifier.getRoundNumber()), any()))
|
||||
.thenReturn(proposedBlock);
|
||||
|
||||
subscribers.subscribe(minedBlockObserver);
|
||||
}
|
||||
|
||||
@@ -187,6 +193,9 @@ public class QbftRoundTest {
|
||||
bftExtraDataCodec,
|
||||
parentHeader);
|
||||
|
||||
when(bftBlockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0), any()))
|
||||
.thenReturn(proposedBlock);
|
||||
|
||||
round.handleProposalMessage(
|
||||
messageFactory.createProposal(
|
||||
roundIdentifier, proposedBlock, Collections.emptyList(), Collections.emptyList()));
|
||||
@@ -256,10 +265,6 @@ public class QbftRoundTest {
|
||||
verify(transmitter, times(1))
|
||||
.multicastPrepare(eq(roundIdentifier), eq(blockCaptor.getValue().getHash()));
|
||||
|
||||
final BftExtraData proposedExtraData =
|
||||
new QbftExtraDataCodec().decode(blockCaptor.getValue().getHeader());
|
||||
assertThat(proposedExtraData.getRound()).isEqualTo(roundIdentifier.getRoundNumber());
|
||||
|
||||
// Inject a single Prepare message, and confirm the roundState has gone to Prepared (which
|
||||
// indicates the block has entered the roundState (note: all msgs are deemed valid due to mocks)
|
||||
round.handlePrepareMessage(
|
||||
@@ -326,6 +331,9 @@ public class QbftRoundTest {
|
||||
bftExtraDataCodec,
|
||||
parentHeader);
|
||||
|
||||
when(bftBlockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0), any()))
|
||||
.thenReturn(proposedBlock);
|
||||
|
||||
round.handleCommitMessage(
|
||||
messageFactory.createCommit(roundIdentifier, proposedBlock.getHash(), remoteCommitSeal));
|
||||
|
||||
@@ -352,6 +360,9 @@ public class QbftRoundTest {
|
||||
bftExtraDataCodec,
|
||||
parentHeader);
|
||||
|
||||
when(bftBlockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0), any()))
|
||||
.thenReturn(proposedBlock);
|
||||
|
||||
round.handleCommitMessage(
|
||||
messageFactory.createCommit(roundIdentifier, proposedBlock.getHash(), remoteCommitSeal));
|
||||
|
||||
@@ -382,6 +393,9 @@ public class QbftRoundTest {
|
||||
bftExtraDataCodec,
|
||||
parentHeader);
|
||||
|
||||
when(bftBlockInteface.replaceRoundInBlock(eq(proposedBlock), eq(0), any()))
|
||||
.thenReturn(proposedBlock);
|
||||
|
||||
round.handleProposalMessage(
|
||||
messageFactory.createProposal(
|
||||
roundIdentifier, proposedBlock, Collections.emptyList(), Collections.emptyList()));
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.statemachine;
|
||||
package org.hyperledger.besu.consensus.qbft.core.statemachine;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
@@ -23,12 +23,12 @@ import static org.mockito.Mockito.when;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.messagewrappers.BftMessage;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.validation.MessageValidator;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validation.MessageValidator;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithm;
|
||||
import org.hyperledger.besu.crypto.SignatureAlgorithmFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Commit;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -12,22 +12,23 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.common.bft.BftContextBuilder.setupContextWithBftExtraDataEncoder;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftContext;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.ProposedBlockHelpers;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
@@ -43,6 +44,7 @@ import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -55,6 +57,7 @@ public class ProposalPayloadValidatorTest {
|
||||
@Mock private BlockValidator blockValidator;
|
||||
@Mock private MutableBlockchain blockChain;
|
||||
@Mock private WorldStateArchive worldStateArchive;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
private ProtocolContext protocolContext;
|
||||
|
||||
private static final int CHAIN_HEIGHT = 3;
|
||||
@@ -66,7 +69,6 @@ public class ProposalPayloadValidatorTest {
|
||||
private final MessageFactory messageFactory = new MessageFactory(nodeKey);
|
||||
final ConsensusRoundIdentifier roundIdentifier =
|
||||
ConsensusRoundHelpers.createFrom(targetRound, 1, 0);
|
||||
final QbftExtraDataCodec bftExtraDataCodec = new QbftExtraDataCodec();
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
@@ -80,6 +82,7 @@ public class ProposalPayloadValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationPassesWhenProposerAndRoundMatchAndBlockIsValid() {
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
final ProposalPayloadValidator payloadValidator =
|
||||
new ProposalPayloadValidator(
|
||||
expectedProposer, roundIdentifier, blockValidator, protocolContext);
|
||||
@@ -101,6 +104,7 @@ public class ProposalPayloadValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationPassesWhenBlockRoundDoesNotMatchProposalRound() {
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
final ProposalPayloadValidator payloadValidator =
|
||||
new ProposalPayloadValidator(
|
||||
expectedProposer, roundIdentifier, blockValidator, protocolContext);
|
||||
@@ -126,6 +130,7 @@ public class ProposalPayloadValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsWhenBlockFailsValidation() {
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
final ConsensusRoundIdentifier roundIdentifier =
|
||||
ConsensusRoundHelpers.createFrom(targetRound, 1, 0);
|
||||
|
||||
@@ -199,6 +204,8 @@ public class ProposalPayloadValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsForBlockWithIncorrectHeight() {
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
|
||||
final ProposalPayloadValidator payloadValidator =
|
||||
new ProposalPayloadValidator(
|
||||
expectedProposer, roundIdentifier, blockValidator, protocolContext);
|
||||
@@ -12,32 +12,33 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.common.bft.BftContextBuilder.setupContextWithBftExtraDataEncoder;
|
||||
import static org.hyperledger.besu.consensus.qbft.validation.ValidationTestHelpers.createEmptyRoundChangePayloads;
|
||||
import static org.hyperledger.besu.consensus.qbft.validation.ValidationTestHelpers.createPreparePayloads;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.validation.ValidationTestHelpers.createEmptyRoundChangePayloads;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.validation.ValidationTestHelpers.createPreparePayloads;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.BftContext;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraData;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.BftProtocolSchedule;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.ProposedBlockHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Prepare;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.Proposal;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.BlockProcessingResult;
|
||||
import org.hyperledger.besu.ethereum.BlockValidator;
|
||||
@@ -54,6 +55,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -91,10 +93,10 @@ public class ProposalValidatorTest {
|
||||
@Mock private WorldStateArchive worldStateArchive;
|
||||
@Mock private BftProtocolSchedule protocolSchedule;
|
||||
@Mock private ProtocolSpec protocolSpec;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
private ProtocolContext protocolContext;
|
||||
|
||||
private final Map<ROUND_ID, RoundSpecificItems> roundItems = new HashMap<>();
|
||||
final QbftExtraDataCodec bftExtraDataEncoder = new QbftExtraDataCodec();
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
@@ -102,7 +104,7 @@ public class ProposalValidatorTest {
|
||||
new ProtocolContext(
|
||||
blockChain,
|
||||
worldStateArchive,
|
||||
setupContextWithBftExtraDataEncoder(BftContext.class, emptyList(), bftExtraDataEncoder),
|
||||
setupContextWithBftExtraDataEncoder(BftContext.class, emptyList(), bftExtraDataCodec),
|
||||
new BadBlockManager());
|
||||
|
||||
// typically tests require the blockValidation to be successful
|
||||
@@ -118,6 +120,7 @@ public class ProposalValidatorTest {
|
||||
|
||||
when(protocolSpec.getBlockValidator()).thenReturn(blockValidator);
|
||||
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
roundItems.put(ROUND_ID.ZERO, createRoundSpecificItems(0));
|
||||
roundItems.put(ROUND_ID.ONE, createRoundSpecificItems(1));
|
||||
}
|
||||
@@ -127,7 +130,7 @@ public class ProposalValidatorTest {
|
||||
|
||||
return new RoundSpecificItems(
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
validators.getNodeAddresses(), roundIdentifier, bftExtraDataEncoder),
|
||||
validators.getNodeAddresses(), roundIdentifier, bftExtraDataCodec),
|
||||
roundIdentifier,
|
||||
new ProposalValidator(
|
||||
protocolContext,
|
||||
@@ -136,7 +139,7 @@ public class ProposalValidatorTest {
|
||||
validators.getNodeAddresses(),
|
||||
roundIdentifier,
|
||||
validators.getNode(0).getAddress(),
|
||||
bftExtraDataEncoder));
|
||||
bftExtraDataCodec));
|
||||
}
|
||||
|
||||
// NOTE: tests herein assume the ProposalPayloadValidator works as expected, so other than
|
||||
@@ -177,6 +180,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfRoundZeroHasNonEmptyPrepares() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final Prepare prepareMsg =
|
||||
validators
|
||||
.getMessageFactory(1)
|
||||
@@ -350,6 +357,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
roundChanges.add(preparedRoundChange);
|
||||
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final Proposal proposal =
|
||||
validators
|
||||
.getMessageFactory(0)
|
||||
@@ -395,6 +406,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfPiggybackedPreparePayloadIsFromNonValidator() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -418,6 +433,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfPiggybackedPreparePayloadHasDuplicatedAuthors() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -440,6 +459,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfInsufficientPiggybackedPreparePayloads() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -461,6 +484,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfPreparePayloadsDoNotMatchMetadataInRoundChanges() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -483,6 +510,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfPreparePayloadsDoNotMatchBlockHashInRoundChanges() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -505,6 +536,10 @@ public class ProposalValidatorTest {
|
||||
|
||||
@Test
|
||||
public void validationFailsIfTwoRoundChangesArePreparedOnSameRoundDifferentBlock() {
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.decode(any()))
|
||||
.thenReturn(new BftExtraData(Bytes.EMPTY, emptyList(), Optional.empty(), 0, emptyList()));
|
||||
|
||||
final RoundSpecificItems roundItem = roundItems.get(ROUND_ID.ONE);
|
||||
final List<SignedData<RoundChangePayload>> roundChanges = createPreparedRoundZeroRoundChanges();
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
@@ -12,9 +12,9 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.qbft.payload.MessageFactory;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.MessageFactory;
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -12,30 +12,30 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static com.google.common.collect.Iterables.toArray;
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.consensus.common.bft.BftContextBuilder.setupContextWithBftExtraDataEncoder;
|
||||
import static org.hyperledger.besu.consensus.qbft.validation.ValidationTestHelpers.createPreparePayloads;
|
||||
import static org.hyperledger.besu.consensus.qbft.validation.ValidationTestHelpers.createPreparedCertificate;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.validation.ValidationTestHelpers.createPreparePayloads;
|
||||
import static org.hyperledger.besu.consensus.qbft.core.validation.ValidationTestHelpers.createPreparedCertificate;
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
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.BftProtocolSchedule;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.ProposedBlockHelpers;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.QbftExtraDataCodec;
|
||||
import org.hyperledger.besu.consensus.qbft.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagewrappers.RoundChange;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.BlockProcessingResult;
|
||||
@@ -51,6 +51,7 @@ import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.tuweni.bytes.Bytes;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
@@ -66,6 +67,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
@Mock private BftProtocolSchedule protocolSchedule;
|
||||
@Mock private BlockValidator blockValidator;
|
||||
@Mock private ProtocolSpec protocolSpec;
|
||||
@Mock private BftExtraDataCodec bftExtraDataCodec;
|
||||
private ProtocolContext protocolContext;
|
||||
|
||||
private RoundChangeMessageValidator messageValidator;
|
||||
@@ -76,7 +78,6 @@ public class RoundChangeMessageValidatorTest {
|
||||
new ConsensusRoundIdentifier(CHAIN_HEIGHT, 3);
|
||||
private final ConsensusRoundIdentifier roundIdentifier =
|
||||
ConsensusRoundHelpers.createFrom(targetRound, 0, -1);
|
||||
private final QbftExtraDataCodec bftExtraDataEncoder = new QbftExtraDataCodec();
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
@@ -84,7 +85,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
new ProtocolContext(
|
||||
blockChain,
|
||||
worldStateArchive,
|
||||
setupContextWithBftExtraDataEncoder(BftContext.class, emptyList(), bftExtraDataEncoder),
|
||||
setupContextWithBftExtraDataEncoder(BftContext.class, emptyList(), bftExtraDataCodec),
|
||||
new BadBlockManager());
|
||||
|
||||
lenient().when(protocolSchedule.getByBlockHeader(any())).thenReturn(protocolSpec);
|
||||
@@ -116,6 +117,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -127,7 +130,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
createPreparedCertificate(
|
||||
block, roundIdentifier, toArray(validators.getNodes(), QbftNode.class));
|
||||
@@ -142,6 +145,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -153,7 +158,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
createPreparedCertificate(
|
||||
block,
|
||||
@@ -212,6 +217,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -223,7 +230,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
createPreparedCertificate(
|
||||
block, roundIdentifier, validators.getNode(0), validators.getNode(1));
|
||||
@@ -238,6 +245,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -251,7 +260,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
createPreparedCertificate(
|
||||
block, roundIdentifier, validators.getNode(0), validators.getNode(1), nonValidator);
|
||||
@@ -266,6 +275,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -277,7 +288,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
new PreparedCertificate(
|
||||
block,
|
||||
@@ -300,6 +311,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -311,7 +324,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
new PreparedCertificate(
|
||||
block,
|
||||
@@ -336,6 +349,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -347,7 +362,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
new PreparedCertificate(
|
||||
block,
|
||||
@@ -372,6 +387,8 @@ public class RoundChangeMessageValidatorTest {
|
||||
when(payloadValidator.validate(any())).thenReturn(true);
|
||||
when(blockValidator.validateAndProcessBlock(any(), any(), any(), any()))
|
||||
.thenReturn(new BlockProcessingResult(Optional.empty()));
|
||||
when(bftExtraDataCodec.encode(any())).thenReturn(Bytes.EMPTY);
|
||||
when(bftExtraDataCodec.encodeWithoutCommitSeals(any())).thenReturn(Bytes.EMPTY);
|
||||
messageValidator =
|
||||
new RoundChangeMessageValidator(
|
||||
payloadValidator,
|
||||
@@ -383,7 +400,7 @@ public class RoundChangeMessageValidatorTest {
|
||||
|
||||
final Block block =
|
||||
ProposedBlockHelpers.createProposalBlock(
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataEncoder);
|
||||
Collections.emptyList(), roundIdentifier, bftExtraDataCodec);
|
||||
final PreparedCertificate prepCert =
|
||||
createPreparedCertificate(
|
||||
block,
|
||||
@@ -12,14 +12,14 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparedRoundMetadata;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.crypto.SECPSignature;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKey;
|
||||
import org.hyperledger.besu.cryptoservices.NodeKeyUtils;
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.validation;
|
||||
package org.hyperledger.besu.consensus.qbft.core.validation;
|
||||
|
||||
import org.hyperledger.besu.consensus.common.bft.ConsensusRoundIdentifier;
|
||||
import org.hyperledger.besu.consensus.common.bft.payload.SignedData;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.PreparePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.payload.RoundChangePayload;
|
||||
import org.hyperledger.besu.consensus.qbft.core.statemachine.PreparedCertificate;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
@@ -31,6 +31,7 @@ jar {
|
||||
dependencies {
|
||||
implementation project(':config')
|
||||
implementation project(':consensus:common')
|
||||
implementation project(':consensus:qbft-core')
|
||||
implementation project(':crypto:services')
|
||||
implementation project(':datatypes')
|
||||
implementation project(':ethereum:api')
|
||||
@@ -67,20 +68,4 @@ dependencies {
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||
testImplementation 'org.mockito:mockito-core'
|
||||
testImplementation 'org.mockito:mockito-junit-jupiter'
|
||||
|
||||
integrationTestImplementation project(':crypto:algorithms')
|
||||
integrationTestImplementation project(path: ':crypto:services', configuration: 'testSupportArtifacts')
|
||||
integrationTestImplementation project(path: ':consensus:common', configuration: 'testSupportArtifacts')
|
||||
integrationTestImplementation project(':evm')
|
||||
integrationTestImplementation project(':metrics:core')
|
||||
integrationTestImplementation project(':testutil')
|
||||
|
||||
integrationTestImplementation 'org.assertj:assertj-core'
|
||||
integrationTestImplementation 'org.junit.jupiter:junit-jupiter-api'
|
||||
integrationTestImplementation 'org.mockito:mockito-core'
|
||||
integrationTestImplementation 'org.mockito:mockito-junit-jupiter'
|
||||
|
||||
integrationTestRuntimeOnly 'org.junit.jupiter:junit-jupiter'
|
||||
|
||||
testSupportImplementation 'org.mockito:mockito-core'
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
*/
|
||||
package org.hyperledger.besu.consensus.qbft.protocol;
|
||||
|
||||
import org.hyperledger.besu.consensus.qbft.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.consensus.qbft.core.messagedata.QbftV1;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.SubProtocol;
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright ConsenSys AG.
|
||||
*
|
||||
* 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.statemachine;
|
||||
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
|
||||
/** The functional interface Create block for proposal behaviour. */
|
||||
@FunctionalInterface
|
||||
public interface CreateBlockForProposalBehaviour {
|
||||
|
||||
/**
|
||||
* Create block.
|
||||
*
|
||||
* @param headerTimeStampSeconds the header time stamp seconds
|
||||
* @return the block
|
||||
*/
|
||||
Block create(long headerTimeStampSeconds);
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import org.hyperledger.besu.config.QbftConfigOptions;
|
||||
import org.hyperledger.besu.consensus.common.ForkSpec;
|
||||
import org.hyperledger.besu.consensus.common.ForksSchedule;
|
||||
import org.hyperledger.besu.consensus.qbft.MutableQbftConfigOptions;
|
||||
import org.hyperledger.besu.consensus.qbft.core.validator.ValidatorModeTransitionLogger;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ include 'consensus:common'
|
||||
include 'consensus:ibft'
|
||||
include 'consensus:merge'
|
||||
include 'consensus:qbft'
|
||||
include 'consensus:qbft-core'
|
||||
include 'datatypes'
|
||||
include 'crypto:algorithms'
|
||||
include 'crypto:services'
|
||||
|
||||
Reference in New Issue
Block a user