From a1d8c11f8b82a9afeca37ff5ab41a9821a820882 Mon Sep 17 00:00:00 2001 From: Karim TAAM Date: Sat, 17 Dec 2022 12:36:22 +0100 Subject: [PATCH] Use safe block as pivot block suring snapsync Signed-off-by: Karim TAAM --- .../besu/controller/BesuControllerBuilder.java | 4 ++-- .../besu/consensus/merge/ForkchoiceEvent.java | 4 ++++ ...ock.java => PivotSelectorFromSafeBlock.java} | 17 ++++++++--------- .../eth/sync/fastsync/FastSyncActionsTest.java | 12 ++++++++---- 4 files changed, 22 insertions(+), 15 deletions(-) rename ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/{PivotSelectorFromFinalizedBlock.java => PivotSelectorFromSafeBlock.java} (92%) diff --git a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java index 2482591f9d6..9d594406172 100644 --- a/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/besu/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -61,8 +61,8 @@ import org.hyperledger.besu.ethereum.eth.sync.PivotBlockSelector; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; -import org.hyperledger.besu.ethereum.eth.sync.fastsync.PivotSelectorFromFinalizedBlock; import org.hyperledger.besu.ethereum.eth.sync.fastsync.PivotSelectorFromPeers; +import org.hyperledger.besu.ethereum.eth.sync.fastsync.PivotSelectorFromSafeBlock; import org.hyperledger.besu.ethereum.eth.sync.fastsync.checkpoint.Checkpoint; import org.hyperledger.besu.ethereum.eth.sync.fastsync.checkpoint.ImmutableCheckpoint; import org.hyperledger.besu.ethereum.eth.sync.fullsync.SyncTerminationCondition; @@ -523,7 +523,7 @@ private PivotBlockSelector createPivotSelector( LOG.info("Initial sync done, unsubscribe forkchoice supplier"); }; - return new PivotSelectorFromFinalizedBlock( + return new PivotSelectorFromSafeBlock( protocolContext, protocolSchedule, ethContext, diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/consensus/merge/ForkchoiceEvent.java b/ethereum/eth/src/main/java/org/hyperledger/besu/consensus/merge/ForkchoiceEvent.java index c492b912008..5e778e16739 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/consensus/merge/ForkchoiceEvent.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/consensus/merge/ForkchoiceEvent.java @@ -33,6 +33,10 @@ public boolean hasValidFinalizedBlockHash() { return !finalizedBlockHash.equals(Hash.ZERO); } + public boolean hasValidSafeBlockHash() { + return !safeBlockHash.equals(Hash.ZERO); + } + public Hash getHeadBlockHash() { return headBlockHash; } diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromFinalizedBlock.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromSafeBlock.java similarity index 92% rename from ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromFinalizedBlock.java rename to ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromSafeBlock.java index 10f27292b33..e107437a9d2 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromFinalizedBlock.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/PivotSelectorFromSafeBlock.java @@ -35,9 +35,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PivotSelectorFromFinalizedBlock implements PivotBlockSelector { +public class PivotSelectorFromSafeBlock implements PivotBlockSelector { - private static final Logger LOG = LoggerFactory.getLogger(PivotSelectorFromFinalizedBlock.class); + private static final Logger LOG = LoggerFactory.getLogger(PivotSelectorFromSafeBlock.class); private final ProtocolContext protocolContext; private final ProtocolSchedule protocolSchedule; private final EthContext ethContext; @@ -48,7 +48,7 @@ public class PivotSelectorFromFinalizedBlock implements PivotBlockSelector { private volatile Optional maybeCachedHeadBlockHeader = Optional.empty(); - public PivotSelectorFromFinalizedBlock( + public PivotSelectorFromSafeBlock( final ProtocolContext protocolContext, final ProtocolSchedule protocolSchedule, final EthContext ethContext, @@ -68,9 +68,8 @@ public PivotSelectorFromFinalizedBlock( @Override public Optional selectNewPivotBlock() { final Optional maybeForkchoice = forkchoiceStateSupplier.get(); - if (maybeForkchoice.isPresent() && maybeForkchoice.get().hasValidFinalizedBlockHash()) { - return Optional.of( - selectLastFinalizedBlockAsPivot(maybeForkchoice.get().getFinalizedBlockHash())); + if (maybeForkchoice.isPresent() && maybeForkchoice.get().hasValidSafeBlockHash()) { + return Optional.of(selectLastSafeBlockAsPivot(maybeForkchoice.get().getSafeBlockHash())); } LOG.debug("No finalized block hash announced yet"); return Optional.empty(); @@ -82,9 +81,9 @@ public CompletableFuture prepareRetry() { return CompletableFuture.completedFuture(null); } - private FastSyncState selectLastFinalizedBlockAsPivot(final Hash finalizedHash) { - LOG.debug("Returning finalized block hash {} as pivot", finalizedHash); - return new FastSyncState(finalizedHash); + private FastSyncState selectLastSafeBlockAsPivot(final Hash safeHash) { + LOG.debug("Returning safe block hash {} as pivot", safeHash); + return new FastSyncState(safeHash); } @Override diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/FastSyncActionsTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/FastSyncActionsTest.java index 10d880fb428..9ef97f07792 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/FastSyncActionsTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/fastsync/FastSyncActionsTest.java @@ -454,12 +454,16 @@ public void downloadPivotBlockHeaderShouldRetrievePivotBlockHash() { when(genesisConfig.getTerminalBlockNumber()).thenReturn(OptionalLong.of(10L)); final Optional finalizedEvent = - Optional.of(new ForkchoiceEvent(null, null, blockchain.getBlockHashByNumber(2L).get())); + Optional.of( + new ForkchoiceEvent( + null, + blockchain.getBlockHashByNumber(3L).get(), + blockchain.getBlockHashByNumber(2L).get())); fastSyncActions = createFastSyncActions( syncConfig, - new PivotSelectorFromFinalizedBlock( + new PivotSelectorFromSafeBlock( blockchainSetupUtil.getProtocolContext(), blockchainSetupUtil.getProtocolSchedule(), ethContext, @@ -471,13 +475,13 @@ public void downloadPivotBlockHeaderShouldRetrievePivotBlockHash() { final RespondingEthPeer peer = EthProtocolManagerTestUtil.createPeer(ethProtocolManager, 1001); final CompletableFuture result = fastSyncActions.downloadPivotBlockHeader( - new FastSyncState(finalizedEvent.get().getFinalizedBlockHash())); + new FastSyncState(finalizedEvent.get().getSafeBlockHash())); assertThat(result).isNotCompleted(); final RespondingEthPeer.Responder responder = RespondingEthPeer.blockchainResponder(blockchain); peer.respond(responder); - assertThat(result).isCompletedWithValue(new FastSyncState(blockchain.getBlockHeader(2).get())); + assertThat(result).isCompletedWithValue(new FastSyncState(blockchain.getBlockHeader(3).get())); } private FastSyncActions createFastSyncActions(