From 97230b0372245f5e96886ca9b0999bee268f1aac Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 16 Dec 2022 08:55:06 +1000 Subject: [PATCH 1/3] Add blockValue to get payload V2 response --- .../ExecutionEngineClient.java | 3 +- .../ThrottlingExecutionEngineClient.java | 3 +- .../MetricRecordingExecutionEngineClient.java | 3 +- .../schema/GetPayloadV2Response.java | 36 +++++++++++++++++++ .../web3j/Web3JExecutionEngineClient.java | 11 +++--- .../CapellaExecutionClientHandler.java | 2 ++ .../CapellaExecutionClientHandlerTest.java | 10 ++++-- 7 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/schema/GetPayloadV2Response.java diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ExecutionEngineClient.java index 8ae2e948221..c36d6e12200 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ExecutionEngineClient.java @@ -20,6 +20,7 @@ import tech.pegasys.teku.ethereum.executionclient.schema.ExecutionPayloadV2; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceStateV1; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceUpdatedResult; +import tech.pegasys.teku.ethereum.executionclient.schema.GetPayloadV2Response; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV1; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV2; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadStatusV1; @@ -38,7 +39,7 @@ public interface ExecutionEngineClient { // engine namespace SafeFuture> getPayloadV1(Bytes8 payloadId); - SafeFuture> getPayloadV2(Bytes8 payloadId); + SafeFuture> getPayloadV2(Bytes8 payloadId); SafeFuture> getBlobsBundleV1(Bytes8 payloadId); diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ThrottlingExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ThrottlingExecutionEngineClient.java index 64cbcddea34..1be5b22dbba 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ThrottlingExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/ThrottlingExecutionEngineClient.java @@ -21,6 +21,7 @@ import tech.pegasys.teku.ethereum.executionclient.schema.ExecutionPayloadV2; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceStateV1; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceUpdatedResult; +import tech.pegasys.teku.ethereum.executionclient.schema.GetPayloadV2Response; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV1; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV2; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadStatusV1; @@ -65,7 +66,7 @@ public SafeFuture> getPayloadV1(final Bytes8 payloa } @Override - public SafeFuture> getPayloadV2(final Bytes8 payloadId) { + public SafeFuture> getPayloadV2(final Bytes8 payloadId) { return taskQueue.queueTask(() -> delegate.getPayloadV2(payloadId)); } diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/metrics/MetricRecordingExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/metrics/MetricRecordingExecutionEngineClient.java index 126434f33d2..f92e3b17b10 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/metrics/MetricRecordingExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/metrics/MetricRecordingExecutionEngineClient.java @@ -24,6 +24,7 @@ import tech.pegasys.teku.ethereum.executionclient.schema.ExecutionPayloadV2; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceStateV1; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceUpdatedResult; +import tech.pegasys.teku.ethereum.executionclient.schema.GetPayloadV2Response; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV1; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV2; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadStatusV1; @@ -87,7 +88,7 @@ public SafeFuture> getPayloadV1(final Bytes8 payloa } @Override - public SafeFuture> getPayloadV2(final Bytes8 payloadId) { + public SafeFuture> getPayloadV2(final Bytes8 payloadId) { return countRequest(() -> delegate.getPayloadV2(payloadId), GET_PAYLOAD_V2_METHOD); } diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/schema/GetPayloadV2Response.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/schema/GetPayloadV2Response.java new file mode 100644 index 00000000000..ff22c686c4d --- /dev/null +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/schema/GetPayloadV2Response.java @@ -0,0 +1,36 @@ +/* + * Copyright ConsenSys Software Inc., 2022 + * + * 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. + */ + +package tech.pegasys.teku.ethereum.executionclient.schema; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.apache.tuweni.units.bigints.UInt256; +import tech.pegasys.teku.ethereum.executionclient.serialization.UInt256AsHexDeserializer; +import tech.pegasys.teku.ethereum.executionclient.serialization.UInt256AsHexSerializer; + +public class GetPayloadV2Response { + public final ExecutionPayloadV2 executionPayload; + + @JsonSerialize(using = UInt256AsHexSerializer.class) + @JsonDeserialize(using = UInt256AsHexDeserializer.class) + public final UInt256 blockValue; + + public GetPayloadV2Response( + @JsonProperty("executionPayload") final ExecutionPayloadV2 executionPayload, + @JsonProperty("blockValue") final UInt256 blockValue) { + this.executionPayload = executionPayload; + this.blockValue = blockValue; + } +} diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java index 3e4cca8cdeb..d5694b620c6 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java @@ -32,6 +32,7 @@ import tech.pegasys.teku.ethereum.executionclient.schema.ExecutionPayloadV2; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceStateV1; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceUpdatedResult; +import tech.pegasys.teku.ethereum.executionclient.schema.GetPayloadV2Response; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV1; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV2; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadStatusV1; @@ -95,13 +96,13 @@ public SafeFuture> getPayloadV1(Bytes8 payloadId) { } @Override - public SafeFuture> getPayloadV2(final Bytes8 payloadId) { - Request web3jRequest = + public SafeFuture> getPayloadV2(final Bytes8 payloadId) { + Request web3jRequest = new Request<>( "engine_getPayloadV2", Collections.singletonList(payloadId.toHexString()), web3JClient.getWeb3jService(), - ExecutionPayloadV2Web3jResponse.class); + GetPayloadV2Web3jResponse.class); return web3JClient.doRequest(web3jRequest, EL_ENGINE_NON_BLOCK_EXECUTION_TIMEOUT); } @@ -179,8 +180,8 @@ public SafeFuture> exchangeTransitionConfigu static class ExecutionPayloadV1Web3jResponse extends org.web3j.protocol.core.Response {} - static class ExecutionPayloadV2Web3jResponse - extends org.web3j.protocol.core.Response {} + static class GetPayloadV2Web3jResponse + extends org.web3j.protocol.core.Response {} static class BlobsBundleV1Web3jResponse extends org.web3j.protocol.core.Response {} diff --git a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandler.java b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandler.java index 153946493fb..6c8deae3a21 100644 --- a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandler.java +++ b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandler.java @@ -55,6 +55,8 @@ public SafeFuture engineGetPayload( return executionEngineClient .getPayloadV2(executionPayloadContext.getPayloadId()) .thenApply(ResponseUnwrapper::unwrapExecutionClientResponseOrThrow) + // Note: Currently ignoring the returned blockValue but will eventually want to use it + .thenApply(response -> response.executionPayload) .thenCombine( SafeFuture.of( () -> diff --git a/ethereum/executionlayer/src/test/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandlerTest.java b/ethereum/executionlayer/src/test/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandlerTest.java index 17aa9876764..6dcca5368fe 100644 --- a/ethereum/executionlayer/src/test/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandlerTest.java +++ b/ethereum/executionlayer/src/test/java/tech/pegasys/teku/ethereum/executionlayer/CapellaExecutionClientHandlerTest.java @@ -18,11 +18,13 @@ import java.util.List; import java.util.Optional; +import org.apache.tuweni.units.bigints.UInt256; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import tech.pegasys.teku.ethereum.executionclient.schema.ExecutionPayloadV2; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceStateV1; import tech.pegasys.teku.ethereum.executionclient.schema.ForkChoiceUpdatedResult; +import tech.pegasys.teku.ethereum.executionclient.schema.GetPayloadV2Response; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadAttributesV2; import tech.pegasys.teku.ethereum.executionclient.schema.PayloadStatusV1; import tech.pegasys.teku.ethereum.executionclient.schema.Response; @@ -55,11 +57,13 @@ void engineGetPayload_shouldCallGetPayloadV2() { dataStructureUtil.randomForkChoiceState(false), dataStructureUtil.randomPayloadBuildingAttributes(false)); - final SafeFuture> dummyResponse = + final SafeFuture> dummyResponse = SafeFuture.completedFuture( new Response<>( - ExecutionPayloadV2.fromInternalExecutionPayload( - dataStructureUtil.randomExecutionPayload()))); + new GetPayloadV2Response( + ExecutionPayloadV2.fromInternalExecutionPayload( + dataStructureUtil.randomExecutionPayload()), + UInt256.MAX_VALUE))); when(executionEngineClient.getPayloadV2(context.getPayloadId())).thenReturn(dummyResponse); handler.engineGetPayload(context, slot); From 5d45a13232530efac253746901af86b026fe98fe Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 16 Dec 2022 09:20:21 +1000 Subject: [PATCH 2/3] Support the old API version with no blockValue by specifying `--Xee-version=NO_BLOCK_VALUE` --- .../web3j/Web3JExecutionEngineClientTest.java | 2 +- .../web3j/Web3JExecutionEngineClient.java | 45 ++++++++++++++----- .../ExecutionLayerManagerImpl.java | 5 ++- .../executionlayer/ExecutionLayerChannel.java | 3 +- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java index ca01ab1a0f6..b6cf8cddaf8 100644 --- a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java +++ b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java @@ -86,7 +86,7 @@ void setUp(SpecContext specContext) throws IOException { .timeProvider(timeProvider) .executionClientEventsPublisher(executionClientEventsPublisher) .build(); - eeClient = new Web3JExecutionEngineClient(web3JClient); + eeClient = new Web3JExecutionEngineClient(web3JClient, true); } @AfterEach diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java index d5694b620c6..9c26016631c 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java @@ -48,9 +48,12 @@ public class Web3JExecutionEngineClient implements ExecutionEngineClient { private static final Duration EXCHANGE_TRANSITION_CONFIGURATION_TIMEOUT = Duration.ofSeconds(8); private final Web3JClient web3JClient; + private final boolean blockValueInPayloadV2; - public Web3JExecutionEngineClient(final Web3JClient web3JClient) { + public Web3JExecutionEngineClient( + final Web3JClient web3JClient, final boolean blockValueInPayloadV2) { this.web3JClient = web3JClient; + this.blockValueInPayloadV2 = blockValueInPayloadV2; } @Override @@ -97,13 +100,32 @@ public SafeFuture> getPayloadV1(Bytes8 payloadId) { @Override public SafeFuture> getPayloadV2(final Bytes8 payloadId) { - Request web3jRequest = - new Request<>( - "engine_getPayloadV2", - Collections.singletonList(payloadId.toHexString()), - web3JClient.getWeb3jService(), - GetPayloadV2Web3jResponse.class); - return web3JClient.doRequest(web3jRequest, EL_ENGINE_NON_BLOCK_EXECUTION_TIMEOUT); + if (blockValueInPayloadV2) { + Request web3jRequest = + new Request<>( + "engine_getPayloadV2", + Collections.singletonList(payloadId.toHexString()), + web3JClient.getWeb3jService(), + GetPayloadV2Web3jResponse.class); + return web3JClient.doRequest(web3jRequest, EL_ENGINE_NON_BLOCK_EXECUTION_TIMEOUT); + } else { + Request web3jRequest = + new Request<>( + "engine_getPayloadV2", + Collections.singletonList(payloadId.toHexString()), + web3JClient.getWeb3jService(), + ExecutionPayloadV2Web3jResponse.class); + return web3JClient + .doRequest(web3jRequest, EL_ENGINE_NON_BLOCK_EXECUTION_TIMEOUT) + .thenApply( + response -> { + if (response.isFailure()) { + return Response.withErrorMessage(response.getErrorMessage()); + } + return new Response<>( + new GetPayloadV2Response(response.getPayload(), UInt256.ZERO)); + }); + } } @Override @@ -183,6 +205,9 @@ static class ExecutionPayloadV1Web3jResponse static class GetPayloadV2Web3jResponse extends org.web3j.protocol.core.Response {} + static class ExecutionPayloadV2Web3jResponse + extends org.web3j.protocol.core.Response {} + static class BlobsBundleV1Web3jResponse extends org.web3j.protocol.core.Response {} static class PayloadStatusV1Web3jResponse @@ -202,9 +227,7 @@ static class TransitionConfigurationV1Web3jResponse */ protected List list(final Object... items) { final List list = new ArrayList<>(); - for (Object item : items) { - list.add(item); - } + Collections.addAll(list, items); return list; } } diff --git a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java index a89bd173ac9..12a9e8d6766 100644 --- a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java +++ b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java @@ -160,10 +160,11 @@ public static ExecutionEngineClient createEngineClient( final MetricsSystem metricsSystem) { checkNotNull(version); LOG.info("Execution Engine version: {}", version); - if (version != Version.KILNV2) { + if (version != Version.KILNV2 && version != Version.NO_BLOCK_VALUE) { throw new InvalidConfigurationException("Unsupported execution engine version: " + version); } - final ExecutionEngineClient engineClient = new Web3JExecutionEngineClient(web3JClient); + final ExecutionEngineClient engineClient = + new Web3JExecutionEngineClient(web3JClient, version != Version.NO_BLOCK_VALUE); final ExecutionEngineClient metricEngineClient = new MetricRecordingExecutionEngineClient(engineClient, timeProvider, metricsSystem); return new ThrottlingExecutionEngineClient( diff --git a/ethereum/spec/src/main/java/tech/pegasys/teku/spec/executionlayer/ExecutionLayerChannel.java b/ethereum/spec/src/main/java/tech/pegasys/teku/spec/executionlayer/ExecutionLayerChannel.java index 07bca8f2934..a67c19df3cf 100644 --- a/ethereum/spec/src/main/java/tech/pegasys/teku/spec/executionlayer/ExecutionLayerChannel.java +++ b/ethereum/spec/src/main/java/tech/pegasys/teku/spec/executionlayer/ExecutionLayerChannel.java @@ -115,7 +115,8 @@ SafeFuture builderGetHeader( SafeFuture builderGetPayload(SignedBeaconBlock signedBlindedBeaconBlock); enum Version { - KILNV2; + KILNV2, + NO_BLOCK_VALUE; public static final Version DEFAULT_VERSION = KILNV2; } From 398cd24bcbfb5db418c49c7aa2ea14db98306f48 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 16 Dec 2022 09:57:14 +1000 Subject: [PATCH 3/3] Pass version all the way down --- .../web3j/Web3JExecutionEngineClientTest.java | 3 ++- .../web3j/Web3JExecutionEngineClient.java | 10 +++++----- .../executionlayer/ExecutionLayerManagerImpl.java | 3 +-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java index b6cf8cddaf8..b070cc3aedc 100644 --- a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java +++ b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClientTest.java @@ -50,6 +50,7 @@ import tech.pegasys.teku.spec.SpecMilestone; import tech.pegasys.teku.spec.TestSpecContext; import tech.pegasys.teku.spec.TestSpecInvocationContextProvider.SpecContext; +import tech.pegasys.teku.spec.executionlayer.ExecutionLayerChannel.Version; import tech.pegasys.teku.spec.executionlayer.PayloadStatus; import tech.pegasys.teku.spec.util.DataStructureUtil; @@ -86,7 +87,7 @@ void setUp(SpecContext specContext) throws IOException { .timeProvider(timeProvider) .executionClientEventsPublisher(executionClientEventsPublisher) .build(); - eeClient = new Web3JExecutionEngineClient(web3JClient, true); + eeClient = new Web3JExecutionEngineClient(web3JClient, Version.DEFAULT_VERSION); } @AfterEach diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java index 9c26016631c..2ad58689ac7 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/web3j/Web3JExecutionEngineClient.java @@ -42,18 +42,18 @@ import tech.pegasys.teku.infrastructure.bytes.Bytes8; import tech.pegasys.teku.infrastructure.unsigned.UInt64; import tech.pegasys.teku.spec.datastructures.execution.PowBlock; +import tech.pegasys.teku.spec.executionlayer.ExecutionLayerChannel.Version; public class Web3JExecutionEngineClient implements ExecutionEngineClient { private static final Duration EXCHANGE_TRANSITION_CONFIGURATION_TIMEOUT = Duration.ofSeconds(8); private final Web3JClient web3JClient; - private final boolean blockValueInPayloadV2; + private final Version engineVersion; - public Web3JExecutionEngineClient( - final Web3JClient web3JClient, final boolean blockValueInPayloadV2) { + public Web3JExecutionEngineClient(final Web3JClient web3JClient, final Version engineVersion) { this.web3JClient = web3JClient; - this.blockValueInPayloadV2 = blockValueInPayloadV2; + this.engineVersion = engineVersion; } @Override @@ -100,7 +100,7 @@ public SafeFuture> getPayloadV1(Bytes8 payloadId) { @Override public SafeFuture> getPayloadV2(final Bytes8 payloadId) { - if (blockValueInPayloadV2) { + if (engineVersion != Version.NO_BLOCK_VALUE) { Request web3jRequest = new Request<>( "engine_getPayloadV2", diff --git a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java index 12a9e8d6766..0c8018bc515 100644 --- a/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java +++ b/ethereum/executionlayer/src/main/java/tech/pegasys/teku/ethereum/executionlayer/ExecutionLayerManagerImpl.java @@ -163,8 +163,7 @@ public static ExecutionEngineClient createEngineClient( if (version != Version.KILNV2 && version != Version.NO_BLOCK_VALUE) { throw new InvalidConfigurationException("Unsupported execution engine version: " + version); } - final ExecutionEngineClient engineClient = - new Web3JExecutionEngineClient(web3JClient, version != Version.NO_BLOCK_VALUE); + final ExecutionEngineClient engineClient = new Web3JExecutionEngineClient(web3JClient, version); final ExecutionEngineClient metricEngineClient = new MetricRecordingExecutionEngineClient(engineClient, timeProvider, metricsSystem); return new ThrottlingExecutionEngineClient(