From c9d88cd9319df6f6a24e9c51d9d5dc6077b2dcc1 Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Mon, 10 Feb 2025 15:26:23 +0000 Subject: [PATCH 1/3] feat: send validator registrations to builder using ssz --- packages/api/src/builder/routes.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/api/src/builder/routes.ts b/packages/api/src/builder/routes.ts index 91042539f96b..aeb8310a45ce 100644 --- a/packages/api/src/builder/routes.ts +++ b/packages/api/src/builder/routes.ts @@ -1,5 +1,5 @@ import {ChainForkConfig} from "@lodestar/config"; -import {ForkName, isForkBlobs} from "@lodestar/params"; +import {ForkName, isForkBlobs, VALIDATOR_REGISTRY_LIMIT} from "@lodestar/params"; import { BLSPubkey, ExecutionPayload, @@ -22,13 +22,13 @@ import { EmptyRequestCodec, EmptyResponseCodec, EmptyResponseData, - JsonOnlyReq, WithVersion, } from "../utils/codecs.js"; import {getBlobsForkTypes, getExecutionForkTypes, toForkName} from "../utils/fork.js"; import {fromHeaders} from "../utils/headers.js"; import {Endpoint, RouteDefinitions, Schema} from "../utils/index.js"; import {MetaHeader, VersionCodec, VersionMeta} from "../utils/metadata.js"; +import {WireFormat} from "../utils/wireFormat.js"; // See /packages/api/src/routes/index.ts for reasoning and instructions to add new routes @@ -38,7 +38,7 @@ import {MetaHeader, VersionCodec, VersionMeta} from "../utils/metadata.js"; // It is important that this type indicates that there might be no value to ensure it is properly handled downstream. export type MaybeSignedBuilderBid = SignedBuilderBid | undefined; -const RegistrationsType = ArrayOf(ssz.bellatrix.SignedValidatorRegistrationV1); +const RegistrationsType = ArrayOf(ssz.bellatrix.SignedValidatorRegistrationV1, VALIDATOR_REGISTRY_LIMIT); export type Endpoints = { status: Endpoint< @@ -90,12 +90,17 @@ export function getDefinitions(config: ChainForkConfig): RouteDefinitions ({body: RegistrationsType.toJson(registrations)}), parseReqJson: ({body}) => ({registrations: RegistrationsType.fromJson(body)}), + writeReqSsz: ({registrations}) => ({body: RegistrationsType.serialize(registrations)}), + parseReqSsz: ({body}) => ({registrations: RegistrationsType.deserialize(body)}), schema: {body: Schema.ObjectArray}, - }), + }, resp: EmptyResponseCodec, + init: { + requestWireFormat: WireFormat.ssz, + }, }, getHeader: { url: "/eth/v1/builder/header/{slot}/{parent_hash}/{pubkey}", From 2a4f004137cf7583fa62bc4b23d809144ed56935 Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Mon, 10 Feb 2025 15:31:59 +0000 Subject: [PATCH 2/3] Organize imports --- packages/api/src/builder/routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/src/builder/routes.ts b/packages/api/src/builder/routes.ts index aeb8310a45ce..b893671169d7 100644 --- a/packages/api/src/builder/routes.ts +++ b/packages/api/src/builder/routes.ts @@ -1,5 +1,5 @@ import {ChainForkConfig} from "@lodestar/config"; -import {ForkName, isForkBlobs, VALIDATOR_REGISTRY_LIMIT} from "@lodestar/params"; +import {ForkName, VALIDATOR_REGISTRY_LIMIT, isForkBlobs} from "@lodestar/params"; import { BLSPubkey, ExecutionPayload, From 388e5dd55455d6d986f16f0c6abe005dee1b793d Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Sat, 26 Apr 2025 17:19:37 +0100 Subject: [PATCH 3/3] Use ssz by default for registerValidator beacon api --- packages/api/src/beacon/routes/validator.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/api/src/beacon/routes/validator.ts b/packages/api/src/beacon/routes/validator.ts index b3855ccaf3a4..2cf697bc8cea 100644 --- a/packages/api/src/beacon/routes/validator.ts +++ b/packages/api/src/beacon/routes/validator.ts @@ -1,6 +1,6 @@ import {ContainerType, Type, ValueOf} from "@chainsafe/ssz"; import {ChainForkConfig} from "@lodestar/config"; -import {isForkPostDeneb, isForkPostElectra} from "@lodestar/params"; +import {VALIDATOR_REGISTRY_LIMIT, isForkPostDeneb, isForkPostElectra} from "@lodestar/params"; import { Attestation, BLSSignature, @@ -44,6 +44,7 @@ import { VersionType, } from "../../utils/metadata.js"; import {fromGraffitiHex, toBoolean, toGraffitiHex} from "../../utils/serdes.js"; +import {WireFormat} from "../../utils/wireFormat.js"; export enum BuilderSelection { Default = "default", @@ -209,7 +210,10 @@ export const ProposerPreparationDataListType = ArrayOf(ProposerPreparationDataTy export const BeaconCommitteeSelectionListType = ArrayOf(BeaconCommitteeSelectionType); export const SyncCommitteeSelectionListType = ArrayOf(SyncCommitteeSelectionType); export const LivenessResponseDataListType = ArrayOf(LivenessResponseDataType); -export const SignedValidatorRegistrationV1ListType = ArrayOf(ssz.bellatrix.SignedValidatorRegistrationV1); +export const SignedValidatorRegistrationV1ListType = ArrayOf( + ssz.bellatrix.SignedValidatorRegistrationV1, + VALIDATOR_REGISTRY_LIMIT +); export type ValidatorIndices = ValueOf; export type AttesterDuty = ValueOf; @@ -1065,6 +1069,9 @@ export function getDefinitions(config: ChainForkConfig): RouteDefinitions