mirror of
https://github.com/vacp2p/status-linea-besu.git
synced 2026-01-09 13:58:02 -05:00
Merge branch 'main' into zkbesu
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
### Breaking Changes
|
||||
- `--host-whitelist` has been deprecated since 2020 and this option is removed. Use the equivalent `--host-allowlist` instead.
|
||||
- Changed tracer API to include the mining beneficiary in BlockAwareOperationTracer::traceStartBlock [#8096](https://github.com/hyperledger/besu/pull/8096)
|
||||
|
||||
### Upcoming Breaking Changes
|
||||
- `MetricSystem::createLabelledGauge` is deprecated and will be removed in a future release, replace it with `MetricSystem::createLabelledSuppliedGauge`
|
||||
@@ -17,11 +18,14 @@
|
||||
### Additions and Improvements
|
||||
- Add RPC HTTP options to specify custom truststore and its password [#7978](https://github.com/hyperledger/besu/pull/7978)
|
||||
- Retrieve all transaction receipts for a block in one request [#6646](https://github.com/hyperledger/besu/pull/6646)
|
||||
|
||||
- Implement EIP-7840: Add blob schedule to config files [#8042](https://github.com/hyperledger/besu/pull/8042)
|
||||
- Allow gasPrice (legacy) and 1559 gasPrice params to be specified simultaneously for `eth_call`, `eth_createAccessList`, and `eth_estimateGas` [#8059](https://github.com/hyperledger/besu/pull/8059)
|
||||
- Add support for EIP-7702 transaction in the txpool [#8018](https://github.com/hyperledger/besu/pull/8018) [#7984](https://github.com/hyperledger/besu/pull/7984)
|
||||
|
||||
### Bug fixes
|
||||
- Fix serialization of state overrides when `movePrecompileToAddress` is present [#8204](https://github.com/hyperledger/besu/pull/8024)
|
||||
- Revise the approach for setting level_compaction_dynamic_level_bytes RocksDB configuration option [#8037](https://github.com/hyperledger/besu/pull/8037)
|
||||
- Fix possible incomplete txpool restore from dump file [#7991](https://github.com/hyperledger/besu/pull/7991)
|
||||
|
||||
## 24.12.2 Hotfix
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@ public class BlockUtils {
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
blockHeaderFunctions);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,20 @@
|
||||
"terminalTotalDifficulty":0,
|
||||
"cancunTime":0,
|
||||
"pragueTime":0,
|
||||
"blobSchedule": {
|
||||
"cancun": {
|
||||
"target": 3,
|
||||
"max": 6
|
||||
},
|
||||
"prague": {
|
||||
"target": 6,
|
||||
"max": 9
|
||||
},
|
||||
"osaka": {
|
||||
"target": 9,
|
||||
"max": 12
|
||||
}
|
||||
},
|
||||
"clique": {
|
||||
"period": 5,
|
||||
"epoch": 30000
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -1816,11 +1816,9 @@ public class BesuCommand implements DefaultCommandValues, Runnable {
|
||||
if (DataStorageFormat.BONSAI.equals(getDataStorageConfiguration().getDataStorageFormat())) {
|
||||
final DiffBasedSubStorageConfiguration subStorageConfiguration =
|
||||
getDataStorageConfiguration().getDiffBasedSubStorageConfiguration();
|
||||
if (subStorageConfiguration.getLimitTrieLogsEnabled()) {
|
||||
besuControllerBuilder.isParallelTxProcessingEnabled(
|
||||
subStorageConfiguration.getUnstable().isParallelTxProcessingEnabled());
|
||||
}
|
||||
}
|
||||
return besuControllerBuilder;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
*/
|
||||
package org.hyperledger.besu.services;
|
||||
|
||||
import org.hyperledger.besu.datatypes.AccountOverrideMap;
|
||||
import org.hyperledger.besu.datatypes.StateOverrideMap;
|
||||
import org.hyperledger.besu.datatypes.Transaction;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
@@ -69,7 +69,7 @@ public class BlockSimulatorServiceImpl implements BlockSimulationService {
|
||||
* @param blockNumber the block number
|
||||
* @param transactions the transactions to include in the block
|
||||
* @param blockOverrides the blockSimulationOverride of the block
|
||||
* @param accountOverrides state overrides of the block
|
||||
* @param stateOverrides state overrides of the block
|
||||
* @return the block context
|
||||
*/
|
||||
@Override
|
||||
@@ -77,8 +77,8 @@ public class BlockSimulatorServiceImpl implements BlockSimulationService {
|
||||
final long blockNumber,
|
||||
final List<? extends Transaction> transactions,
|
||||
final BlockOverrides blockOverrides,
|
||||
final AccountOverrideMap accountOverrides) {
|
||||
return processSimulation(blockNumber, transactions, blockOverrides, accountOverrides, false);
|
||||
final StateOverrideMap stateOverrides) {
|
||||
return processSimulation(blockNumber, transactions, blockOverrides, stateOverrides, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,7 +88,7 @@ public class BlockSimulatorServiceImpl implements BlockSimulationService {
|
||||
* @param blockNumber the block number
|
||||
* @param transactions the transactions to include in the block
|
||||
* @param blockOverrides block overrides for the block
|
||||
* @param accountOverrides state overrides of the block
|
||||
* @param stateOverrides state overrides of the block
|
||||
* @return the PluginBlockSimulationResult
|
||||
*/
|
||||
@Unstable
|
||||
@@ -97,21 +97,21 @@ public class BlockSimulatorServiceImpl implements BlockSimulationService {
|
||||
final long blockNumber,
|
||||
final List<? extends Transaction> transactions,
|
||||
final BlockOverrides blockOverrides,
|
||||
final AccountOverrideMap accountOverrides) {
|
||||
return processSimulation(blockNumber, transactions, blockOverrides, accountOverrides, true);
|
||||
final StateOverrideMap stateOverrides) {
|
||||
return processSimulation(blockNumber, transactions, blockOverrides, stateOverrides, true);
|
||||
}
|
||||
|
||||
private PluginBlockSimulationResult processSimulation(
|
||||
final long blockNumber,
|
||||
final List<? extends Transaction> transactions,
|
||||
final BlockOverrides blockOverrides,
|
||||
final AccountOverrideMap accountOverrides,
|
||||
final StateOverrideMap stateOverrides,
|
||||
final boolean persistWorldState) {
|
||||
BlockHeader header = getBlockHeader(blockNumber);
|
||||
List<CallParameter> callParameters =
|
||||
transactions.stream().map(CallParameter::fromTransaction).toList();
|
||||
BlockStateCall blockStateCall =
|
||||
new BlockStateCall(callParameters, blockOverrides, accountOverrides, true);
|
||||
new BlockStateCall(callParameters, blockOverrides, stateOverrides, true);
|
||||
try (final MutableWorldState ws = getWorldState(header, persistWorldState)) {
|
||||
List<BlockSimulationResult> results =
|
||||
blockSimulator.process(header, List.of(blockStateCall), ws);
|
||||
|
||||
@@ -17,9 +17,11 @@ package org.hyperledger.besu.services;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static org.hyperledger.besu.ethereum.mainnet.feemarket.ExcessBlobGasCalculator.calculateExcessBlobGasForParent;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.BlobGas;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.datatypes.Wei;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.TraceBlock.ChainUpdater;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.processor.Tracer;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
@@ -30,7 +32,6 @@ import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionProcessor;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
|
||||
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
|
||||
import org.hyperledger.besu.ethereum.vm.CachingBlockHashLookup;
|
||||
import org.hyperledger.besu.evm.worldstate.WorldUpdater;
|
||||
import org.hyperledger.besu.plugin.Unstable;
|
||||
import org.hyperledger.besu.plugin.data.BlockTraceResult;
|
||||
@@ -152,17 +153,14 @@ public class TraceServiceImpl implements TraceService {
|
||||
.toList();
|
||||
Tracer.processTracing(
|
||||
blockchainQueries,
|
||||
blocks.get(0).getHash(),
|
||||
blocks.getFirst().getHash(),
|
||||
traceableState -> {
|
||||
final WorldUpdater worldStateUpdater = traceableState.updater();
|
||||
final ChainUpdater chainUpdater = new ChainUpdater(traceableState, worldStateUpdater);
|
||||
beforeTracing.accept(worldStateUpdater);
|
||||
final List<TransactionProcessingResult> results = new ArrayList<>();
|
||||
blocks.forEach(
|
||||
block -> {
|
||||
results.addAll(trace(blockchain, block, worldStateUpdater, tracer));
|
||||
worldStateUpdater.commit();
|
||||
});
|
||||
afterTracing.accept(worldStateUpdater);
|
||||
blocks.forEach(block -> results.addAll(trace(blockchain, block, chainUpdater, tracer)));
|
||||
afterTracing.accept(chainUpdater.getNextUpdater());
|
||||
return Optional.of(results);
|
||||
});
|
||||
}
|
||||
@@ -177,7 +175,7 @@ public class TraceServiceImpl implements TraceService {
|
||||
blockchainQueries,
|
||||
block.getHash(),
|
||||
traceableState ->
|
||||
Optional.of(trace(blockchain, block, traceableState.updater(), tracer)));
|
||||
Optional.of(trace(blockchain, block, new ChainUpdater(traceableState), tracer)));
|
||||
|
||||
return results;
|
||||
}
|
||||
@@ -185,13 +183,15 @@ public class TraceServiceImpl implements TraceService {
|
||||
private List<TransactionProcessingResult> trace(
|
||||
final Blockchain blockchain,
|
||||
final Block block,
|
||||
final WorldUpdater worldUpdater,
|
||||
final ChainUpdater chainUpdater,
|
||||
final BlockAwareOperationTracer tracer) {
|
||||
final List<TransactionProcessingResult> results = new ArrayList<>();
|
||||
final ProtocolSpec protocolSpec = protocolSchedule.getByBlockHeader(block.getHeader());
|
||||
final MainnetTransactionProcessor transactionProcessor = protocolSpec.getTransactionProcessor();
|
||||
final BlockHeader header = block.getHeader();
|
||||
tracer.traceStartBlock(block.getHeader(), block.getBody());
|
||||
final Address miningBeneficiary =
|
||||
protocolSpec.getMiningBeneficiaryCalculator().calculateBeneficiary(block.getHeader());
|
||||
tracer.traceStartBlock(block.getHeader(), block.getBody(), miningBeneficiary);
|
||||
|
||||
block
|
||||
.getBody()
|
||||
@@ -208,6 +208,7 @@ public class TraceServiceImpl implements TraceService {
|
||||
.map(parent -> calculateExcessBlobGasForParent(protocolSpec, parent))
|
||||
.orElse(BlobGas.ZERO));
|
||||
|
||||
final WorldUpdater worldUpdater = chainUpdater.getNextUpdater();
|
||||
final TransactionProcessingResult result =
|
||||
transactionProcessor.processTransaction(
|
||||
worldUpdater,
|
||||
@@ -215,7 +216,9 @@ public class TraceServiceImpl implements TraceService {
|
||||
transaction,
|
||||
protocolSpec.getMiningBeneficiaryCalculator().calculateBeneficiary(header),
|
||||
tracer,
|
||||
new CachingBlockHashLookup(header, blockchain),
|
||||
protocolSpec
|
||||
.getBlockHashProcessor()
|
||||
.createBlockHashLookup(blockchain, header),
|
||||
false,
|
||||
blobGasPrice);
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
*/
|
||||
package org.hyperledger.besu.services;
|
||||
|
||||
import org.hyperledger.besu.datatypes.AccountOverrideMap;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.datatypes.StateOverrideMap;
|
||||
import org.hyperledger.besu.datatypes.Transaction;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
import org.hyperledger.besu.ethereum.mainnet.TransactionValidationParams;
|
||||
@@ -54,7 +54,7 @@ public class TransactionSimulationServiceImpl implements TransactionSimulationSe
|
||||
@Override
|
||||
public Optional<TransactionSimulationResult> simulate(
|
||||
final Transaction transaction,
|
||||
final Optional<AccountOverrideMap> maybeAccountOverrides,
|
||||
final Optional<StateOverrideMap> maybeStateOverrides,
|
||||
final Optional<Hash> maybeBlockHash,
|
||||
final OperationTracer operationTracer,
|
||||
final boolean isAllowExceedingBalance) {
|
||||
@@ -89,7 +89,7 @@ public class TransactionSimulationServiceImpl implements TransactionSimulationSe
|
||||
return transactionSimulator
|
||||
.processOnPending(
|
||||
callParameter,
|
||||
maybeAccountOverrides,
|
||||
maybeStateOverrides,
|
||||
isAllowExceedingBalance
|
||||
? TransactionValidationParams.transactionSimulatorAllowExceedingBalance()
|
||||
: TransactionValidationParams.transactionSimulator(),
|
||||
|
||||
@@ -195,7 +195,6 @@ public abstract class AbstractBftBesuControllerBuilderTest {
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
getBlockHeaderFunctions());
|
||||
final Block block1 = new Block(header1, BlockBody.empty());
|
||||
|
||||
|
||||
@@ -224,7 +224,6 @@ public class CliqueBesuControllerBuilderTest {
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
new CliqueBlockHeaderFunctions());
|
||||
final Block block1 = new Block(header1, BlockBody.empty());
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ public class BesuEventsImplTest {
|
||||
mock(EthPeer.class),
|
||||
new org.hyperledger.besu.ethereum.core.BlockHeader(
|
||||
null, null, null, null, null, null, null, null, 1, 1, 1, 1, null, null, null, 1, null,
|
||||
null, null, null, null, null, null));
|
||||
null, null, null, null, null));
|
||||
}
|
||||
|
||||
private void clearSyncTarget() {
|
||||
|
||||
@@ -114,7 +114,9 @@ class TraceServiceImplTest {
|
||||
|
||||
final Block tracedBlock = blockchain.getBlockByNumber(blockNumber).get();
|
||||
|
||||
verify(opTracer).traceStartBlock(tracedBlock.getHeader(), tracedBlock.getBody());
|
||||
verify(opTracer)
|
||||
.traceStartBlock(
|
||||
tracedBlock.getHeader(), tracedBlock.getBody(), tracedBlock.getHeader().getCoinbase());
|
||||
|
||||
tracedBlock
|
||||
.getBody()
|
||||
@@ -163,7 +165,11 @@ class TraceServiceImplTest {
|
||||
.map(Optional::get)
|
||||
.forEach(
|
||||
tracedBlock -> {
|
||||
verify(opTracer).traceStartBlock(tracedBlock.getHeader(), tracedBlock.getBody());
|
||||
verify(opTracer)
|
||||
.traceStartBlock(
|
||||
tracedBlock.getHeader(),
|
||||
tracedBlock.getBody(),
|
||||
tracedBlock.getHeader().getCoinbase());
|
||||
tracedBlock
|
||||
.getBody()
|
||||
.getTransactions()
|
||||
@@ -312,7 +318,8 @@ class TraceServiceImplTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void traceStartBlock(final BlockHeader blockHeader, final BlockBody blockBody) {
|
||||
public void traceStartBlock(
|
||||
final BlockHeader blockHeader, final BlockBody blockBody, final Address miningBeneficiary) {
|
||||
if (!traceStartBlockCalled.add(blockHeader.getBlockHash())) {
|
||||
fail("traceStartBlock already called for block " + blockHeader);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright contributors to Hyperledger Besu.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.config;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
/** The Blob Schedule config options. */
|
||||
public class BlobScheduleOptions {
|
||||
|
||||
private final ObjectNode blobScheduleOptionsConfigRoot;
|
||||
|
||||
private static final String CANCUN_KEY = "cancun";
|
||||
private static final String PRAGUE_KEY = "prague";
|
||||
private static final String OSAKA_KEY = "osaka";
|
||||
|
||||
/**
|
||||
* Instantiates a new Blob Schedule config options.
|
||||
*
|
||||
* @param blobScheduleConfigRoot the blob schedule config root
|
||||
*/
|
||||
public BlobScheduleOptions(final ObjectNode blobScheduleConfigRoot) {
|
||||
this.blobScheduleOptionsConfigRoot = blobScheduleConfigRoot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets cancun blob schedule.
|
||||
*
|
||||
* @return the cancun blob schedule
|
||||
*/
|
||||
public Optional<BlobSchedule> getCancun() {
|
||||
return JsonUtil.getObjectNode(blobScheduleOptionsConfigRoot, CANCUN_KEY).map(BlobSchedule::new);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets prague blob schedule.
|
||||
*
|
||||
* @return the prague blob schedule
|
||||
*/
|
||||
public Optional<BlobSchedule> getPrague() {
|
||||
return JsonUtil.getObjectNode(blobScheduleOptionsConfigRoot, PRAGUE_KEY).map(BlobSchedule::new);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets osaka blob schedule.
|
||||
*
|
||||
* @return the osaka blob schedule
|
||||
*/
|
||||
public Optional<BlobSchedule> getOsaka() {
|
||||
return JsonUtil.getObjectNode(blobScheduleOptionsConfigRoot, OSAKA_KEY).map(BlobSchedule::new);
|
||||
}
|
||||
|
||||
/**
|
||||
* As map.
|
||||
*
|
||||
* @return the map
|
||||
*/
|
||||
public Map<String, Object> asMap() {
|
||||
final ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
|
||||
getCancun().ifPresent(bs -> builder.put(CANCUN_KEY, bs.asMap()));
|
||||
getPrague().ifPresent(bs -> builder.put(PRAGUE_KEY, bs.asMap()));
|
||||
getOsaka().ifPresent(bs -> builder.put(OSAKA_KEY, bs.asMap()));
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/** The Blob schedule for a particular fork. */
|
||||
public static class BlobSchedule {
|
||||
private final int target;
|
||||
private final int max;
|
||||
|
||||
/** The constant CANCUN_DEFAULT. */
|
||||
public static final BlobSchedule CANCUN_DEFAULT = new BlobSchedule(3, 6);
|
||||
|
||||
/** The constant PRAGUE_DEFAULT. */
|
||||
public static final BlobSchedule PRAGUE_DEFAULT = new BlobSchedule(6, 9);
|
||||
|
||||
/** The constant OSAKA_DEFAULT. */
|
||||
public static final BlobSchedule OSAKA_DEFAULT = new BlobSchedule(9, 12);
|
||||
|
||||
/**
|
||||
* Instantiates a new Blob schedule.
|
||||
*
|
||||
* @param blobScheduleConfigRoot the blob schedule config root
|
||||
*/
|
||||
public BlobSchedule(final ObjectNode blobScheduleConfigRoot) {
|
||||
this.target = JsonUtil.getInt(blobScheduleConfigRoot, "target").orElseThrow();
|
||||
this.max = JsonUtil.getInt(blobScheduleConfigRoot, "max").orElseThrow();
|
||||
}
|
||||
|
||||
private BlobSchedule(final int target, final int max) {
|
||||
this.target = target;
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets target.
|
||||
*
|
||||
* @return the target
|
||||
*/
|
||||
public int getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets max.
|
||||
*
|
||||
* @return the max
|
||||
*/
|
||||
public int getMax() {
|
||||
return max;
|
||||
}
|
||||
|
||||
/**
|
||||
* As map.
|
||||
*
|
||||
* @return the map
|
||||
*/
|
||||
Map<String, Object> asMap() {
|
||||
return Map.of("target", target, "max", max);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -265,17 +265,6 @@ public class GenesisConfig {
|
||||
"0x0000000000000000000000000000000000000000000000000000000000000000");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets target blobs per block.
|
||||
*
|
||||
* @return the target blobs per block
|
||||
*/
|
||||
public Optional<String> getTargetBlobsPerBlock() {
|
||||
// TODO SLD EIP-7742 not sure if we should use a default value here or enforce any
|
||||
// "pragueAtGenesis" genesis file (used in devnets) to have this value
|
||||
return JsonUtil.getValueAsString(genesisRoot, "targetblobsperblock");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets coinbase.
|
||||
*
|
||||
|
||||
@@ -560,4 +560,11 @@ public interface GenesisConfigOptions {
|
||||
* @return the consolidation request contract address
|
||||
*/
|
||||
Optional<Address> getConsolidationRequestContractAddress();
|
||||
|
||||
/**
|
||||
* The blob schedule is a list of hardfork names and their associated target and max blob values.
|
||||
*
|
||||
* @return the blob schedule
|
||||
*/
|
||||
Optional<BlobScheduleOptions> getBlobScheduleOptions();
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions {
|
||||
private static final String TRANSITIONS_CONFIG_KEY = "transitions";
|
||||
private static final String DISCOVERY_CONFIG_KEY = "discovery";
|
||||
private static final String CHECKPOINT_CONFIG_KEY = "checkpoint";
|
||||
private static final String BLOB_SCHEDULE_CONFIG_KEY = "blobschedule";
|
||||
private static final String ZERO_BASE_FEE_KEY = "zerobasefee";
|
||||
private static final String FIXED_BASE_FEE_KEY = "fixedbasefee";
|
||||
private static final String WITHDRAWAL_REQUEST_CONTRACT_ADDRESS_KEY =
|
||||
@@ -199,6 +200,12 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions {
|
||||
.orElse(EthashConfigOptions.DEFAULT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<BlobScheduleOptions> getBlobScheduleOptions() {
|
||||
return JsonUtil.getObjectNode(configRoot, BLOB_SCHEDULE_CONFIG_KEY)
|
||||
.map(BlobScheduleOptions::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransitionsConfigOptions getTransitions() {
|
||||
return transitions;
|
||||
@@ -550,6 +557,10 @@ public class JsonGenesisConfigOptions implements GenesisConfigOptions {
|
||||
builder.put("fixedBaseFee", true);
|
||||
}
|
||||
|
||||
if (getBlobScheduleOptions().isPresent()) {
|
||||
builder.put("blobSchedule", getBlobScheduleOptions().get().asMap());
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
||||
@@ -488,6 +488,11 @@ public class StubGenesisConfigOptions implements GenesisConfigOptions, Cloneable
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<BlobScheduleOptions> getBlobScheduleOptions() {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Homestead block stub genesis config options.
|
||||
*
|
||||
|
||||
@@ -16,6 +16,16 @@
|
||||
"terminalTotalDifficulty": 58750000000000000000000,
|
||||
"shanghaiTime": 1681338455,
|
||||
"cancunTime": 1710338135,
|
||||
"blobSchedule": {
|
||||
"cancun": {
|
||||
"target": 3,
|
||||
"max": 6
|
||||
},
|
||||
"prague": {
|
||||
"target": 6,
|
||||
"max": 9
|
||||
}
|
||||
},
|
||||
"ethash": {
|
||||
},
|
||||
"discovery": {
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright contributors to Hyperledger Besu.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.config;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class BlobScheduleOptionsTest {
|
||||
|
||||
@Test
|
||||
public void blobScheduleIsParsed() {
|
||||
final GenesisConfig genesisConfigFile =
|
||||
GenesisConfig.fromResource("/mainnet_with_blob_schedule.json");
|
||||
final GenesisConfigOptions configOptions = genesisConfigFile.getConfigOptions();
|
||||
|
||||
assertThat(configOptions.getBlobScheduleOptions()).isNotEmpty();
|
||||
final BlobScheduleOptions blobScheduleOptions = configOptions.getBlobScheduleOptions().get();
|
||||
assertThat(blobScheduleOptions.getCancun()).isNotEmpty();
|
||||
assertThat(blobScheduleOptions.getCancun().get().getTarget()).isEqualTo(4);
|
||||
assertThat(blobScheduleOptions.getCancun().get().getMax()).isEqualTo(7);
|
||||
assertThat(blobScheduleOptions.getPrague()).isNotEmpty();
|
||||
assertThat(blobScheduleOptions.getPrague().get().getTarget()).isEqualTo(7);
|
||||
assertThat(blobScheduleOptions.getPrague().get().getMax()).isEqualTo(10);
|
||||
assertThat(blobScheduleOptions.getOsaka()).isNotEmpty();
|
||||
assertThat(blobScheduleOptions.getOsaka().get().getTarget()).isEqualTo(10);
|
||||
assertThat(blobScheduleOptions.getOsaka().get().getMax()).isEqualTo(13);
|
||||
}
|
||||
}
|
||||
@@ -408,6 +408,46 @@ class GenesisConfigOptionsTest {
|
||||
.containsValue(Address.ZERO);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
void asMapIncludesBlobFeeSchedule() {
|
||||
final GenesisConfigOptions config =
|
||||
GenesisConfig.fromConfig(
|
||||
"{\n"
|
||||
+ " \"config\": {\n"
|
||||
+ " \"blobSchedule\": {\n"
|
||||
+ " \"cancun\": {\n"
|
||||
+ " \"target\": 1,\n"
|
||||
+ " \"max\": 2\n"
|
||||
+ " },\n"
|
||||
+ " \"prague\": {\n"
|
||||
+ " \"target\": 3,\n"
|
||||
+ " \"max\": 4\n"
|
||||
+ " },\n"
|
||||
+ " \"osaka\": {\n"
|
||||
+ " \"target\": 4,\n"
|
||||
+ " \"max\": 5\n"
|
||||
+ " }\n"
|
||||
+ " }\n"
|
||||
+ " }\n"
|
||||
+ "}")
|
||||
.getConfigOptions();
|
||||
|
||||
final Map<String, Object> map = config.asMap();
|
||||
assertThat(map).containsOnlyKeys("blobSchedule");
|
||||
final Map<String, Object> blobSchedule = (Map<String, Object>) map.get("blobSchedule");
|
||||
assertThat(blobSchedule).containsOnlyKeys("cancun", "prague", "osaka");
|
||||
assertThat((Map<String, Object>) blobSchedule.get("cancun"))
|
||||
.containsOnlyKeys("target", "max")
|
||||
.containsValues(1, 2);
|
||||
assertThat((Map<String, Object>) blobSchedule.get("prague"))
|
||||
.containsOnlyKeys("target", "max")
|
||||
.containsValues(3, 4);
|
||||
assertThat((Map<String, Object>) blobSchedule.get("osaka"))
|
||||
.containsOnlyKeys("target", "max")
|
||||
.containsValues(4, 5);
|
||||
}
|
||||
|
||||
private GenesisConfigOptions fromConfigOptions(final Map<String, Object> configOptions) {
|
||||
final ObjectNode rootNode = JsonUtil.createEmptyObjectNode();
|
||||
final ObjectNode options = JsonUtil.objectNodeFromMap(configOptions);
|
||||
|
||||
@@ -41,7 +41,7 @@ public class GenesisReaderTest {
|
||||
final var configNode = mapper.createObjectNode();
|
||||
configNode.put("londonBlock", 1);
|
||||
final var allocNode = mapper.createObjectNode();
|
||||
allocNode.put(Address.BLS12_G2MUL.toUnprefixedHexString(), generateAllocation(Wei.ONE));
|
||||
allocNode.put(Address.BLS12_G2MULTIEXP.toUnprefixedHexString(), generateAllocation(Wei.ONE));
|
||||
final var rootNode = mapper.createObjectNode();
|
||||
rootNode.put("chainId", 12);
|
||||
rootNode.put(CONFIG_FIELD, configNode);
|
||||
@@ -52,7 +52,8 @@ public class GenesisReaderTest {
|
||||
assertThat(genesisReader.getRoot().has(ALLOCATION_FIELD)).isFalse();
|
||||
assertThat(genesisReader.getConfig().get("londonblock").asInt()).isEqualTo(1);
|
||||
assertThat(genesisReader.streamAllocations())
|
||||
.containsExactly(new GenesisAccount(Address.BLS12_G2MUL, 0, Wei.ONE, null, Map.of(), null));
|
||||
.containsExactly(
|
||||
new GenesisAccount(Address.BLS12_G2MULTIEXP, 0, Wei.ONE, null, Map.of(), null));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -60,7 +61,7 @@ public class GenesisReaderTest {
|
||||
final var configNode = mapper.createObjectNode();
|
||||
configNode.put("londonBlock", 1);
|
||||
final var allocNode = mapper.createObjectNode();
|
||||
allocNode.put(Address.BLS12_G2MUL.toUnprefixedHexString(), generateAllocation(Wei.ONE));
|
||||
allocNode.put(Address.BLS12_G2MULTIEXP.toUnprefixedHexString(), generateAllocation(Wei.ONE));
|
||||
final var rootNode = mapper.createObjectNode();
|
||||
rootNode.put("chainId", 12);
|
||||
rootNode.put(CONFIG_FIELD, configNode);
|
||||
|
||||
37
config/src/test/resources/mainnet_with_blob_schedule.json
Normal file
37
config/src/test/resources/mainnet_with_blob_schedule.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"config": {
|
||||
"chainId": 3151908,
|
||||
"homesteadBlock": 0,
|
||||
"eip150Block": 0,
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 0,
|
||||
"petersburgBlock": 0,
|
||||
"istanbulBlock": 0,
|
||||
"berlinBlock": 0,
|
||||
"londonBlock": 0,
|
||||
"preMergeForkBlock": 0,
|
||||
"terminalTotalDifficulty": 0,
|
||||
"ethash": {},
|
||||
"shanghaiTime": 0,
|
||||
"cancunTime": 0,
|
||||
"blobSchedule": {
|
||||
"cancun": {
|
||||
"target": 4,
|
||||
"max": 7
|
||||
},
|
||||
"prague": {
|
||||
"target": 7,
|
||||
"max": 10
|
||||
},
|
||||
"osaka": {
|
||||
"target": 10,
|
||||
"max": 13
|
||||
}
|
||||
},
|
||||
"depositContractAddress": "0x4242424242424242424242424242424242424242",
|
||||
"pragueTime": 1734106711,
|
||||
"osakaTime": 1734107095
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user