Skip to content

Commit

Permalink
Fix execution_optimistic issue with some migrated endpoints (Consensy…
Browse files Browse the repository at this point in the history
…s#5592)

* Fix execution_optimistic issue with some migrated endpoints

fixes Consensys#5583

Signed-off-by: Paul Harris <[email protected]>
  • Loading branch information
rolfyone authored May 26, 2022
1 parent e3a3258 commit 504f4c6
Show file tree
Hide file tree
Showing 27 changed files with 64 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static org.assertj.core.api.Assertions.assertThat;
import static tech.pegasys.teku.infrastructure.http.ContentTypes.OCTET_STREAM;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.HEADER_CONSENSUS_VERSION;

import java.io.IOException;
Expand Down Expand Up @@ -100,7 +101,7 @@ private <T extends SszData> DeserializableTypeDefinition<ResponseData<T>> typeDe
ResponseData::getVersion,
ResponseData::setVersion)
.withField(
"execution_optimistic",
EXECUTION_OPTIMISTIC,
CoreTypes.BOOLEAN_TYPE,
ResponseData::isExecutionOptimistic,
ResponseData::setExecutionOptimistic)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
"application/json" : {
"schema" : {
"type" : "object",
"required" : [ "data" ],
"required" : [ "execution_optimistic", "data" ],
"properties" : {
"execution_optimistic" : {
"type" : "boolean"
},
"data" : {
"type" : "object",
"required" : [ "previous_justified", "current_justified", "finalized" ],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
"title" : "GetStateForkResponse",
"description" : "Returns [Fork](https://github.com/ethereum/consensus-specs/blob/v0.11.1/specs/phase0/beacon-chain.md#fork) object for state with given 'stateId'.",
"type" : "object",
"required" : [ "data" ],
"required" : [ "execution_optimistic", "data" ],
"properties" : {
"execution_optimistic" : {
"type" : "boolean"
},
"data" : {
"$ref" : "#/components/schemas/Fork"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
{
"title" : "GetStateRootResponse",
"type" : "object",
"required" : [ "data" ],
"required" : [ "execution_optimistic", "data" ],
"properties" : {
"execution_optimistic" : {
"type" : "boolean"
},
"data" : {
"type" : "object",
"required" : [ "root" ],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_BLOCK_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
Expand Down Expand Up @@ -116,7 +117,7 @@ private static SerializableTypeDefinition<ObjectAndMetaData<List<Attestation>>>

return SerializableTypeDefinition.<ObjectAndMetaData<List<Attestation>>>object()
.name("GetBlockAttestationsResponse")
.withField("execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", listOf(dataSchema.getJsonTypeDefinition()), ObjectAndMetaData::getData)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_BLOCK_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
Expand Down Expand Up @@ -56,7 +57,7 @@ public class GetBlockHeader extends MigratingEndpointAdapter {
SerializableTypeDefinition.object(BlockAndMetaData.class)
.name("GetBlockHeaderResponse")
.withField("data", BlockHeaderData.getJsonTypeDefinition(), BlockHeaderData::new)
.withField("execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.build();

public GetBlockHeader(final DataProvider dataProvider) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARENT_ROOT_PARAMETER;
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.SLOT_PARAMETER;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARENT_ROOT;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_INTERNAL_ERROR;
Expand Down Expand Up @@ -59,7 +60,7 @@ public class GetBlockHeaders extends MigratingEndpointAdapter {
SerializableTypeDefinition.object(BlockHeadersResponse.class)
.name("GetBlockHeadersResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, BlockHeadersResponse::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, BlockHeadersResponse::isExecutionOptimistic)
.withField(
"data",
listOf(BlockHeaderData.getJsonTypeDefinition()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_BLOCK_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_BLOCK_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
Expand Down Expand Up @@ -62,7 +63,7 @@ public class GetBlockRoot extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<Bytes32>>object()
.name("GetBlockRootResponse")
.withField("data", ROOT_TYPE, ObjectAndMetaData::getData)
.withField("execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.build();

public GetBlockRoot(final DataProvider dataProvider) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.COMMITTEE_INDEX_QUERY_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EPOCH;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EPOCH_QUERY_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.INDEX;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
Expand Down Expand Up @@ -79,7 +80,7 @@ public class GetStateCommittees extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<List<CommitteeAssignment>>>object()
.name("GetEpochCommitteesResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", listOf(EPOCH_COMMITTEE_TYPE), ObjectAndMetaData::getData)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_STATE_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_INTERNAL_ERROR;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_NOT_FOUND;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.TAG_BEACON;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BOOLEAN_TYPE;

import io.javalin.http.Context;
import io.javalin.plugin.openapi.annotations.HttpMethod;
Expand All @@ -36,6 +38,7 @@
import tech.pegasys.teku.api.response.v1.beacon.GetStateFinalityCheckpointsResponse;
import tech.pegasys.teku.infrastructure.json.types.SerializableTypeDefinition;
import tech.pegasys.teku.infrastructure.restapi.endpoints.EndpointMetadata;
import tech.pegasys.teku.spec.datastructures.metadata.ObjectAndMetaData;
import tech.pegasys.teku.spec.datastructures.metadata.StateAndMetaData;
import tech.pegasys.teku.spec.datastructures.state.Checkpoint;
import tech.pegasys.teku.spec.datastructures.state.beaconstate.BeaconState;
Expand All @@ -62,6 +65,7 @@ public class GetStateFinalityCheckpoints extends AbstractGetSimpleDataFromState

private static final SerializableTypeDefinition<StateAndMetaData> RESPONSE_TYPE =
SerializableTypeDefinition.object(StateAndMetaData.class)
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", DATA_TYPE, StateAndMetaData::getData)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
Expand All @@ -23,6 +24,7 @@
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.TAG_BEACON;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.TAG_VALIDATOR_REQUIRED;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BOOLEAN_TYPE;

import io.javalin.http.Context;
import io.javalin.plugin.openapi.annotations.HttpMethod;
Expand All @@ -37,6 +39,7 @@
import tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler;
import tech.pegasys.teku.infrastructure.json.types.SerializableTypeDefinition;
import tech.pegasys.teku.infrastructure.restapi.endpoints.EndpointMetadata;
import tech.pegasys.teku.spec.datastructures.metadata.ObjectAndMetaData;
import tech.pegasys.teku.spec.datastructures.metadata.StateAndMetaData;
import tech.pegasys.teku.spec.datastructures.state.Fork;

Expand All @@ -49,6 +52,7 @@ public class GetStateFork extends AbstractGetSimpleDataFromState {
.name("GetStateForkResponse")
.description(
"Returns [Fork](https://github.com/ethereum/consensus-specs/blob/v0.11.1/specs/phase0/beacon-chain.md#fork) object for state with given 'stateId'.")
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(
"data",
Fork.SSZ_SCHEMA.getJsonTypeDefinition(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@

import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_INTERNAL_ERROR;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_NOT_FOUND;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.TAG_BEACON;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BOOLEAN_TYPE;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BYTES32_TYPE;

import io.javalin.http.Context;
Expand All @@ -39,6 +41,7 @@
import tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler;
import tech.pegasys.teku.infrastructure.json.types.SerializableTypeDefinition;
import tech.pegasys.teku.infrastructure.restapi.endpoints.EndpointMetadata;
import tech.pegasys.teku.spec.datastructures.metadata.ObjectAndMetaData;
import tech.pegasys.teku.spec.datastructures.metadata.StateAndMetaData;

public class GetStateRoot extends AbstractGetSimpleDataFromState {
Expand All @@ -53,6 +56,7 @@ public class GetStateRoot extends AbstractGetSimpleDataFromState {
private static final SerializableTypeDefinition<StateAndMetaData> RESPONSE_TYPE =
SerializableTypeDefinition.object(StateAndMetaData.class)
.name("GetStateRootResponse")
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(
"data", ROOT_TYPE, stateAndMetaData -> stateAndMetaData.getData().hashTreeRoot())
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static tech.pegasys.teku.infrastructure.async.SafeFuture.failedFuture;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EPOCH;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EPOCH_QUERY_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.RES_BAD_REQUEST;
Expand Down Expand Up @@ -81,7 +82,7 @@ public class GetStateSyncCommittees extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<StateSyncCommitteesData>>object()
.name("GetEpochSyncCommitteesResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", DATA_TYPE, ObjectAndMetaData::getData)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_VALIDATOR_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_VALIDATOR_DESCRIPTION;
Expand Down Expand Up @@ -81,7 +82,7 @@ public class GetStateValidator extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<StateValidatorData>>object()
.name("GetStateValidatorResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", STATE_VALIDATOR_DATA_TYPE, ObjectAndMetaData::getData)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static tech.pegasys.teku.beaconrestapi.BeaconRestApiTypes.PARAMETER_STATE_ID;
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
Expand Down Expand Up @@ -61,7 +62,7 @@ public class GetStateValidatorBalances extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<List<StateValidatorBalanceData>>>object()
.name("GetStateValidatorBalancesResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField(
"data",
listOf(StateValidatorBalanceData.getJsonTypeDefinition()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static tech.pegasys.teku.beaconrestapi.handlers.AbstractHandler.routeWithBracedParameters;
import static tech.pegasys.teku.beaconrestapi.handlers.v1.beacon.GetStateValidator.STATE_VALIDATOR_DATA_TYPE;
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_OK;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID;
import static tech.pegasys.teku.infrastructure.http.RestApiConstants.PARAM_STATE_ID_DESCRIPTION;
Expand Down Expand Up @@ -69,7 +70,7 @@ public class GetStateValidators extends MigratingEndpointAdapter {
SerializableTypeDefinition.<ObjectAndMetaData<List<StateValidatorData>>>object()
.name("GetStateValidatorsResponse")
.withField(
"execution_optimistic", BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, ObjectAndMetaData::isExecutionOptimistic)
.withField("data", listOf(STATE_VALIDATOR_DATA_TYPE), ObjectAndMetaData::getData)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

package tech.pegasys.teku.beaconrestapi.handlers.v1.events;

import static tech.pegasys.teku.infrastructure.http.RestApiConstants.EXECUTION_OPTIMISTIC;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BOOLEAN_TYPE;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.BYTES32_TYPE;
import static tech.pegasys.teku.infrastructure.json.types.CoreTypes.UINT64_TYPE;
Expand All @@ -28,7 +29,7 @@ public class BlockEvent extends Event<BlockEvent.BlockData> {
.name("BlockEvent")
.withField("slot", UINT64_TYPE, BlockData::getSlot)
.withField("block", BYTES32_TYPE, BlockData::getBlock)
.withField("execution_optimistic", BOOLEAN_TYPE, BlockData::isExecutionOptimistic)
.withField(EXECUTION_OPTIMISTIC, BOOLEAN_TYPE, BlockData::isExecutionOptimistic)
.build();

BlockEvent(final SignedBeaconBlock block, final boolean executionOptimistic) {
Expand Down
Loading

0 comments on commit 504f4c6

Please sign in to comment.