Skip to content

Commit eb06fe3

Browse files
authored
Revert "fcu before engine new payload (#10731)" (#10754)
This reverts commit cf7d594. Signed-off-by: Karim Taam <karim.t2am@gmail.com>
1 parent b24cd58 commit eb06fe3

6 files changed

Lines changed: 0 additions & 180 deletions

File tree

consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinator.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -727,27 +727,6 @@ public ForkchoiceResult updateForkChoiceWithoutLegacySkip(
727727
return applyForkChoice(newHead, finalizedBlockHash, safeBlockHash);
728728
}
729729

730-
@Override
731-
public ForkchoiceResult updateHeadForExecution(final BlockHeader newHead) {
732-
final MutableBlockchain blockchain = protocolContext.getBlockchain();
733-
final Optional<Hash> latestValid = getLatestValidAncestor(newHead);
734-
735-
Optional<BlockHeader> parentOfNewHead = blockchain.getBlockHeader(newHead.getParentHash());
736-
if (parentOfNewHead.isPresent()
737-
&& Long.compareUnsigned(newHead.getTimestamp(), parentOfNewHead.get().getTimestamp())
738-
<= 0) {
739-
return ForkchoiceResult.withFailure(
740-
INVALID, "new head timestamp not greater than parent", latestValid);
741-
}
742-
743-
if (!setNewHead(blockchain, newHead)) {
744-
LOG.warn("Failed to move world state to new head {}", newHead.toLogString());
745-
return ForkchoiceResult.withFailure(INVALID, "Failed to set new head", latestValid);
746-
}
747-
748-
return ForkchoiceResult.withResult(Optional.empty(), Optional.of(newHead));
749-
}
750-
751730
private ForkchoiceResult applyForkChoice(
752731
final BlockHeader newHead, final Hash finalizedBlockHash, final Hash safeBlockHash) {
753732
final MutableBlockchain blockchain = protocolContext.getBlockchain();

consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeMiningCoordinator.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,6 @@ ForkchoiceResult updateForkChoice(
125125
ForkchoiceResult updateForkChoiceWithoutLegacySkip(
126126
final BlockHeader newHead, final Hash finalizedBlockHash, final Hash safeBlockHash);
127127

128-
/**
129-
* Move the canonical chain head without updating forkchoice metadata (finalized or safe).
130-
*
131-
* <p>Use this for pre-execution head advancement during {@code engine_newPayload}, when the
132-
* parent block was previously received via {@code newPayload} but the chain head was not moved
133-
* forward yet. Unlike {@link #updateForkChoice}, this does not apply the legacy "ignore update to
134-
* old head" optimization. Unlike {@link #updateForkChoice} and {@link
135-
* #updateForkChoiceWithoutLegacySkip}, this does not persist finalized or safe block markers.
136-
*
137-
* @param newHead the new head
138-
* @return the forkchoice result
139-
*/
140-
ForkchoiceResult updateHeadForExecution(final BlockHeader newHead);
141-
142128
/**
143129
* Returns true if the given block hash is a strict ancestor of the currently finalized block
144130
* (i.e. an older block on the same chain, not finalized itself). Returns false when no finalized

consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/blockcreation/TransitionCoordinator.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,6 @@ public ForkchoiceResult updateForkChoiceWithoutLegacySkip(
161161
newHead, finalizedBlockHash, safeBlockHash);
162162
}
163163

164-
@Override
165-
public ForkchoiceResult updateHeadForExecution(final BlockHeader newHead) {
166-
return mergeCoordinator.updateHeadForExecution(newHead);
167-
}
168-
169164
@Override
170165
public boolean isAncestorOfFinalized(final Hash candidateHeadHash) {
171166
return mergeCoordinator.isAncestorOfFinalized(candidateHeadHash);

consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeCoordinatorTest.java

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,55 +1082,6 @@ public void forkchoiceUpdateShouldIgnoreAncestorOfChainHead() {
10821082
verify(blockchain, never()).rewindToBlock(any());
10831083
}
10841084

1085-
@Test
1086-
public void updateHeadForExecutionShouldMoveHeadWithoutUpdatingFinalizedOrSafe() {
1087-
BlockHeader terminalHeader = terminalPowBlock();
1088-
sendNewPayloadAndForkchoiceUpdate(
1089-
new Block(terminalHeader, BlockBody.empty()), Optional.empty(), Hash.ZERO);
1090-
1091-
BlockHeader parentHeader = nextBlockHeader(terminalHeader);
1092-
Block parent = new Block(parentHeader, BlockBody.empty());
1093-
coordinator.rememberBlock(parent);
1094-
1095-
BlockHeader childHeader = nextBlockHeader(parentHeader);
1096-
Block child = new Block(childHeader, BlockBody.empty());
1097-
sendNewPayloadAndForkchoiceUpdate(child, Optional.empty(), parent.getHash());
1098-
1099-
clearInvocations(blockchain, mergeContext);
1100-
1101-
ForkchoiceResult result = coordinator.updateHeadForExecution(parentHeader);
1102-
1103-
assertThat(result.shouldNotProceedToPayloadBuildProcess()).isFalse();
1104-
assertThat(result.getNewHead()).contains(parentHeader);
1105-
assertThat(blockchain.getChainHeadHash()).isEqualTo(parentHeader.getHash());
1106-
1107-
verify(blockchain, never()).setFinalized(any());
1108-
verify(mergeContext, never()).setFinalized(any());
1109-
verify(blockchain, never()).setSafeBlock(any());
1110-
verify(mergeContext, never()).setSafeBlock(any());
1111-
}
1112-
1113-
@Test
1114-
public void updateHeadForExecutionShouldNotIgnoreAncestorOfChainHead() {
1115-
BlockHeader terminalHeader = terminalPowBlock();
1116-
sendNewPayloadAndForkchoiceUpdate(
1117-
new Block(terminalHeader, BlockBody.empty()), Optional.empty(), Hash.ZERO);
1118-
1119-
BlockHeader parentHeader = nextBlockHeader(terminalHeader);
1120-
Block parent = new Block(parentHeader, BlockBody.empty());
1121-
sendNewPayloadAndForkchoiceUpdate(parent, Optional.empty(), terminalHeader.getHash());
1122-
1123-
BlockHeader childHeader = nextBlockHeader(parentHeader);
1124-
Block child = new Block(childHeader, BlockBody.empty());
1125-
sendNewPayloadAndForkchoiceUpdate(child, Optional.empty(), parent.getHash());
1126-
1127-
ForkchoiceResult result = coordinator.updateHeadForExecution(parentHeader);
1128-
1129-
assertThat(result.getStatus()).isEqualTo(ForkchoiceResult.Status.VALID);
1130-
assertThat(result.getNewHead()).contains(parentHeader);
1131-
assertThat(blockchain.getChainHeadHash()).isEqualTo(parentHeader.getHash());
1132-
}
1133-
11341085
@ParameterizedTest(name = "{index}: {0}")
11351086
@MethodSource("getGasLimits")
11361087
public void shouldSetCorrectTargetGasLimit(final ArgumentsAccessor argumentsAccessor) {

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/engine/AbstractEngineNewPayload.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSuccessResponse;
4545
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType;
4646
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.EnginePayloadStatusResult;
47-
import org.hyperledger.besu.ethereum.chain.MutableBlockchain;
4847
import org.hyperledger.besu.ethereum.core.Block;
4948
import org.hyperledger.besu.ethereum.core.BlockBody;
5049
import org.hyperledger.besu.ethereum.core.BlockHeader;
@@ -72,7 +71,6 @@
7271
import java.util.ArrayList;
7372
import java.util.Collections;
7473
import java.util.List;
75-
import java.util.Objects;
7674
import java.util.Optional;
7775
import java.util.stream.Collectors;
7876

@@ -379,16 +377,6 @@ public JsonRpcResponse syncResponse(final JsonRpcRequestContext requestContext)
379377
return respondWith(reqId, blockParam, null, ACCEPTED);
380378
}
381379

382-
final MutableBlockchain blockchain = protocolContext.getBlockchain();
383-
final Hash chainHeadHash = blockchain.getChainHeadHash();
384-
maybeParentHeader
385-
.filter(
386-
parentHeader ->
387-
chainHeadHash != null
388-
&& !Objects.equals(newBlockHeader.getParentHash(), chainHeadHash)
389-
&& Objects.equals(parentHeader.getParentHash(), chainHeadHash))
390-
.ifPresent(mergeCoordinator::updateHeadForExecution);
391-
392380
// execute block and return result response
393381
final long startTimeNs = System.nanoTime();
394382
final BlockProcessingResult executionResult =

ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/engine/AbstractEngineNewPayloadTest.java

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.ExecutionEngineJsonRpcMethod.EngineStatus.VALID;
2323
import static org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.engine.EngineTestSupport.fromErrorResp;
2424
import static org.mockito.ArgumentMatchers.any;
25-
import static org.mockito.Mockito.inOrder;
2625
import static org.mockito.Mockito.lenient;
2726
import static org.mockito.Mockito.mock;
28-
import static org.mockito.Mockito.never;
2927
import static org.mockito.Mockito.spy;
3028
import static org.mockito.Mockito.times;
3129
import static org.mockito.Mockito.verify;
@@ -73,7 +71,6 @@
7371
import org.junit.jupiter.api.BeforeEach;
7472
import org.junit.jupiter.api.Test;
7573
import org.junit.jupiter.api.extension.ExtendWith;
76-
import org.mockito.InOrder;
7774
import org.mockito.Mock;
7875
import org.mockito.Mockito;
7976
import org.mockito.junit.jupiter.MockitoExtension;
@@ -321,82 +318,6 @@ public void shouldRespondWithSyncingDuringBackwardsSync() {
321318
verify(engineCallListener, times(1)).executionEngineCalled();
322319
}
323320

324-
@Test
325-
public void shouldUpdateHeadForExecutionToParentBeforeExecutionWhenParentIsDirectChildOfHead() {
326-
BlockHeader mockHeader =
327-
setupValidPayload(
328-
new BlockProcessingResult(Optional.of(new BlockProcessingOutputs(null, List.of()))),
329-
Optional.empty());
330-
Hash chainHeadHash =
331-
Hash.fromHexStringLenient(
332-
"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef");
333-
BlockHeader parentHeader = mock(BlockHeader.class);
334-
when(blockchain.getBlockHeader(mockHeader.getParentHash()))
335-
.thenReturn(Optional.of(parentHeader));
336-
when(blockchain.getChainHeadHash()).thenReturn(chainHeadHash);
337-
when(parentHeader.getParentHash()).thenReturn(chainHeadHash);
338-
when(mergeCoordinator.updateHeadForExecution(parentHeader))
339-
.thenReturn(
340-
MergeMiningCoordinator.ForkchoiceResult.withResult(
341-
Optional.empty(), Optional.of(parentHeader)));
342-
343-
var resp = resp(mockEnginePayload(mockHeader, emptyList()));
344-
345-
assertValidResponse(mockHeader, resp);
346-
InOrder inOrder = inOrder(mergeCoordinator);
347-
inOrder.verify(mergeCoordinator).updateHeadForExecution(parentHeader);
348-
inOrder.verify(mergeCoordinator).rememberBlock(any(), any());
349-
verify(mergeCoordinator, never()).updateForkChoice(any(), any(), any());
350-
verify(mergeCoordinator, never()).updateForkChoiceWithoutLegacySkip(any(), any(), any());
351-
}
352-
353-
@Test
354-
public void shouldNotUpdateForkChoiceBeforeExecutionWhenParentIsNotDirectChildOfHead() {
355-
BlockHeader mockHeader =
356-
setupValidPayload(
357-
new BlockProcessingResult(Optional.of(new BlockProcessingOutputs(null, List.of()))),
358-
Optional.empty());
359-
Hash chainHeadHash =
360-
Hash.fromHexStringLenient(
361-
"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef");
362-
Hash grandparentHash =
363-
Hash.fromHexStringLenient(
364-
"0xcafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe");
365-
BlockHeader parentHeader = mock(BlockHeader.class);
366-
when(blockchain.getBlockHeader(mockHeader.getParentHash()))
367-
.thenReturn(Optional.of(parentHeader));
368-
when(blockchain.getChainHeadHash()).thenReturn(chainHeadHash);
369-
when(parentHeader.getParentHash()).thenReturn(grandparentHash);
370-
371-
var resp = resp(mockEnginePayload(mockHeader, emptyList()));
372-
373-
assertValidResponse(mockHeader, resp);
374-
verify(mergeCoordinator, never()).updateHeadForExecution(any());
375-
verify(mergeCoordinator, never()).updateForkChoiceWithoutLegacySkip(any(), any(), any());
376-
verify(mergeCoordinator, never()).updateForkChoice(any(), any(), any());
377-
verify(mergeCoordinator).rememberBlock(any(), any());
378-
}
379-
380-
@Test
381-
public void shouldNotUpdateForkChoiceBeforeExecutionWhenParentIsChainHead() {
382-
BlockHeader mockHeader =
383-
setupValidPayload(
384-
new BlockProcessingResult(Optional.of(new BlockProcessingOutputs(null, List.of()))),
385-
Optional.empty());
386-
BlockHeader parentHeader = mock(BlockHeader.class);
387-
when(blockchain.getBlockHeader(mockHeader.getParentHash()))
388-
.thenReturn(Optional.of(parentHeader));
389-
when(blockchain.getChainHeadHash()).thenReturn(mockHeader.getParentHash());
390-
391-
var resp = resp(mockEnginePayload(mockHeader, emptyList()));
392-
393-
assertValidResponse(mockHeader, resp);
394-
verify(mergeCoordinator, never()).updateHeadForExecution(any());
395-
verify(mergeCoordinator, never()).updateForkChoiceWithoutLegacySkip(any(), any(), any());
396-
verify(mergeCoordinator, never()).updateForkChoice(any(), any(), any());
397-
verify(mergeCoordinator).rememberBlock(any(), any());
398-
}
399-
400321
@Test
401322
public void shouldRespondWithInvalidIfExtraDataIsNull() {
402323
BlockHeader realHeader = createBlockHeader(Optional.empty());

0 commit comments

Comments
 (0)