From d31d63fb6aba097b8f1d43bdc8f5cd729b5ab374 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Fri, 25 Nov 2022 12:32:31 +1100 Subject: [PATCH 01/49] Add validations of new experimental flag Signed-off-by: Gabriel Fukushima --- .../org/hyperledger/besu/cli/BesuCommand.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java index 708e92cf03a..248c4e03747 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1423,6 +1423,7 @@ public void run() { // set merge config on the basis of genesis config setMergeConfigOptions(); + validateNearHearCheckPointSyncRequirements(); instantiateSignatureAlgorithmFactory(); @@ -2003,6 +2004,12 @@ private void issueOptionWarnings() { !SyncMode.isFullSync(getDefaultSyncModeIfNotSet(syncMode)), singletonList("--fast-sync-min-peers")); + CommandLineUtils.failIfOptionDoesntMeetRequirement( + commandLine, + "--Xnear-head-checkpoint-sync-enabled can only be used with X_CHECKPOINT sync-mode", + SyncMode.X_CHECKPOINT.equals(getDefaultSyncModeIfNotSet(syncMode)), + singletonList("--Xnear-head-checkpoint-sync-enabled")); + if (!securityModuleName.equals(DEFAULT_SECURITY_MODULE) && nodePrivateKeyFileOption.getNodePrivateKeyFile() != null) { logger.warn( @@ -3344,6 +3351,28 @@ private void setMergeConfigOptions() { .isPresent()); } + private void validateNearHearCheckPointSyncRequirements() { + final GenesisConfigOptions genesisOptions = + Optional.ofNullable(genesisConfigOptions) + .orElseGet( + () -> + GenesisConfigFile.fromConfig( + genesisConfig(Optional.ofNullable(network).orElse(MAINNET))) + .getConfigOptions(genesisConfigOverrides)); + final SynchronizerConfiguration synchronizerConfiguration = unstableSynchronizerOptions.toDomainObject().build(); + final OptionalLong mergeNetSplitBlockNumber = genesisOptions.getMergeNetSplitBlockNumber(); + + if(synchronizerConfiguration.isNearHeadCheckpointSyncEnabled() + && mergeNetSplitBlockNumber.isEmpty()){ + throw new InvalidConfigurationException("Near head checkpoint sync requires the mergeNetSplitBlock in the genesis file"); + } + if (synchronizerConfiguration.isNearHeadCheckpointSyncEnabled() + && (genesisOptions.getCheckpointOptions().getNumber().getAsLong() + < mergeNetSplitBlockNumber.getAsLong())) + throw new InvalidConfigurationException( + "Near head checkpoint sync requires a pivot block after the MergeSplitBlock"); + } + private boolean isMergeEnabled() { return MergeConfigOptions.isMergeEnabled(); } From 5e73c6bbce2293bf41c4136ca9279fdb9892dd55 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Fri, 25 Nov 2022 12:34:11 +1100 Subject: [PATCH 02/49] Add check to call MergeController without the using the TransitionController Signed-off-by: Gabriel Fukushima --- .../java/org/hyperledger/besu/controller/BesuController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/besu/src/main/java/org/hyperledger/besu/controller/BesuController.java b/besu/src/main/java/org/hyperledger/besu/controller/BesuController.java index b8e11b58690..c033c5624cf 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuController.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuController.java @@ -211,6 +211,11 @@ BesuControllerBuilder fromGenesisConfig( throw new IllegalArgumentException("Unknown consensus mechanism defined"); } + if (configOptions.getCheckpointOptions().getNumber().getAsLong() + > configOptions.getMergeNetSplitBlockNumber().getAsLong()) { + return new MergeBesuControllerBuilder().genesisConfigFile(genesisConfig); + } + // wrap with TransitionBesuControllerBuilder if we have a terminal total difficulty: if (configOptions.getTerminalTotalDifficulty().isPresent()) { // TODO this should be changed to vanilla MergeBesuControllerBuilder and the Transition* From 1bf75c03c2c91067dbaf415249f13126d7728a6a Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Fri, 25 Nov 2022 12:36:29 +1100 Subject: [PATCH 03/49] Add experimental flag Signed-off-by: Gabriel Fukushima --- .../cli/options/unstable/SynchronizerOptions.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java index 4b125c4c445..c8469eb59ab 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java @@ -72,6 +72,8 @@ public class SynchronizerOptions implements CLIOptions