@lodestar/api
Version:
A Typescript REST client for the Ethereum Consensus API
554 lines • 27.2 kB
TypeScript
import { ContainerType, Type, ValueOf } from "@chainsafe/ssz";
import { ChainForkConfig } from "@lodestar/config";
import { Attestation, BLSSignature, BeaconBlockOrContents, BlindedBeaconBlock, CommitteeIndex, Epoch, ProducedBlockSource, Root, Slot, UintBn64, ValidatorIndex, altair, phase0 } from "@lodestar/types";
import { EmptyMeta, EmptyResponseData } from "../../utils/codecs.js";
import { Endpoint, RouteDefinitions } from "../../utils/index.js";
import { ExecutionOptimisticAndDependentRootMeta, ExecutionOptimisticMeta, MetaHeader, VersionMeta } from "../../utils/metadata.js";
export declare enum BuilderSelection {
Default = "default",
BuilderAlways = "builderalways",
ExecutionAlways = "executionalways",
MaxProfit = "maxprofit",
/** Only activate builder flow for DVT block proposal protocols */
BuilderOnly = "builderonly",
/** Only builds execution block*/
ExecutionOnly = "executiononly"
}
/** Lodestar-specific (non-standardized) options */
export type ExtraProduceBlockOpts = {
feeRecipient?: string;
builderSelection?: BuilderSelection;
strictFeeRecipientCheck?: boolean;
blindedLocal?: boolean;
};
export declare const ProduceBlockV3MetaType: ContainerType<{
/** Specifies whether the response contains full or blinded block */
executionPayloadBlinded: import("@chainsafe/ssz").BooleanType;
/** Execution payload value in Wei */
executionPayloadValue: import("@chainsafe/ssz").UintBigintType;
/** Consensus rewards paid to the proposer for this block, in Wei */
consensusBlockValue: import("@chainsafe/ssz").UintBigintType;
version: import("@lodestar/types").StringType<import("@lodestar/params").ForkName>;
}>;
export type ProduceBlockV3Meta = ValueOf<typeof ProduceBlockV3MetaType> & {
/** Lodestar-specific (non-standardized) value */
executionPayloadSource: ProducedBlockSource;
};
export declare const AttesterDutyType: ContainerType<{
/** The validator's public key, uniquely identifying them */
pubkey: import("@chainsafe/ssz").ByteVectorType;
/** Index of validator in validator registry */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** Index of the committee */
committeeIndex: import("@chainsafe/ssz").UintNumberType;
/** Number of validators in committee */
committeeLength: import("@chainsafe/ssz").UintNumberType;
/** Number of committees at the provided slot */
committeesAtSlot: import("@chainsafe/ssz").UintNumberType;
/** Index of validator in committee */
validatorCommitteeIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which the validator must attest */
slot: import("@chainsafe/ssz").UintNumberType;
}>;
export declare const ProposerDutyType: ContainerType<{
slot: import("@chainsafe/ssz").UintNumberType;
validatorIndex: import("@chainsafe/ssz").UintNumberType;
pubkey: import("@chainsafe/ssz").ByteVectorType;
}>;
/**
* From https://github.com/ethereum/beacon-APIs/pull/134
*/
export declare const SyncDutyType: ContainerType<{
pubkey: import("@chainsafe/ssz").ByteVectorType;
/** Index of validator in validator registry. */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The indices of the validator in the sync committee. */
validatorSyncCommitteeIndices: import("@chainsafe/ssz").ArrayType<Type<number>, unknown, unknown>;
}>;
export declare const BeaconCommitteeSubscriptionType: ContainerType<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
committeeIndex: import("@chainsafe/ssz").UintNumberType;
committeesAtSlot: import("@chainsafe/ssz").UintNumberType;
slot: import("@chainsafe/ssz").UintNumberType;
isAggregator: import("@chainsafe/ssz").BooleanType;
}>;
/**
* From https://github.com/ethereum/beacon-APIs/pull/136
*/
export declare const SyncCommitteeSubscriptionType: ContainerType<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
syncCommitteeIndices: import("@chainsafe/ssz").ArrayType<Type<number>, unknown, unknown>;
untilEpoch: import("@chainsafe/ssz").UintNumberType;
}>;
export declare const ProposerPreparationDataType: ContainerType<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
feeRecipient: import("@lodestar/types").StringType<string>;
}>;
/**
* From https://github.com/ethereum/beacon-APIs/pull/224
*/
export declare const BeaconCommitteeSelectionType: ContainerType<{
/** Index of the validator */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which a validator is assigned to attest */
slot: import("@chainsafe/ssz").UintNumberType;
/** The `slot_signature` calculated by the validator for the upcoming attestation slot */
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>;
/**
* From https://github.com/ethereum/beacon-APIs/pull/224
*/
export declare const SyncCommitteeSelectionType: ContainerType<{
/** Index of the validator */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which validator is assigned to produce a sync committee contribution */
slot: import("@chainsafe/ssz").UintNumberType;
/** SubcommitteeIndex to which the validator is assigned */
subcommitteeIndex: import("@chainsafe/ssz").UintNumberType;
/** The `slot_signature` calculated by the validator for the upcoming sync committee slot */
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>;
export declare const LivenessResponseDataType: ContainerType<{
index: import("@chainsafe/ssz").UintNumberType;
isLive: import("@chainsafe/ssz").BooleanType;
}>;
export declare const ValidatorIndicesType: import("@chainsafe/ssz").ArrayType<Type<number>, unknown, unknown>;
export declare const AttesterDutyListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
/** The validator's public key, uniquely identifying them */
pubkey: import("@chainsafe/ssz").ByteVectorType;
/** Index of validator in validator registry */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** Index of the committee */
committeeIndex: import("@chainsafe/ssz").UintNumberType;
/** Number of validators in committee */
committeeLength: import("@chainsafe/ssz").UintNumberType;
/** Number of committees at the provided slot */
committeesAtSlot: import("@chainsafe/ssz").UintNumberType;
/** Index of validator in committee */
validatorCommitteeIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which the validator must attest */
slot: import("@chainsafe/ssz").UintNumberType;
}>>, unknown, unknown>;
export declare const ProposerDutyListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
slot: import("@chainsafe/ssz").UintNumberType;
validatorIndex: import("@chainsafe/ssz").UintNumberType;
pubkey: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const SyncDutyListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
pubkey: import("@chainsafe/ssz").ByteVectorType;
/** Index of validator in validator registry. */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The indices of the validator in the sync committee. */
validatorSyncCommitteeIndices: import("@chainsafe/ssz").ArrayType<Type<number>, unknown, unknown>;
}>>, unknown, unknown>;
export declare const SignedAggregateAndProofListPhase0Type: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
message: ContainerType<{
aggregatorIndex: import("@chainsafe/ssz").UintNumberType;
aggregate: ContainerType<{
aggregationBits: import("@chainsafe/ssz").BitListType;
data: ContainerType<{
slot: import("@chainsafe/ssz").UintNumberType;
index: import("@chainsafe/ssz").UintNumberType;
beaconBlockRoot: import("@chainsafe/ssz").ByteVectorType;
source: ContainerType<{
epoch: import("@chainsafe/ssz").UintNumberType;
root: import("@chainsafe/ssz").ByteVectorType;
}>;
target: ContainerType<{
epoch: import("@chainsafe/ssz").UintNumberType;
root: import("@chainsafe/ssz").ByteVectorType;
}>;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
}>;
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const SignedAggregateAndProofListElectraType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
message: ContainerType<{
aggregatorIndex: import("@chainsafe/ssz").UintNumberType;
aggregate: ContainerType<{
aggregationBits: import("@chainsafe/ssz").BitListType;
data: ContainerType<{
slot: import("@chainsafe/ssz").UintNumberType;
index: import("@chainsafe/ssz").UintNumberType;
beaconBlockRoot: import("@chainsafe/ssz").ByteVectorType;
source: ContainerType<{
epoch: import("@chainsafe/ssz").UintNumberType;
root: import("@chainsafe/ssz").ByteVectorType;
}>;
target: ContainerType<{
epoch: import("@chainsafe/ssz").UintNumberType;
root: import("@chainsafe/ssz").ByteVectorType;
}>;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
committeeBits: import("@chainsafe/ssz").BitVectorType;
}>;
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const SignedContributionAndProofListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
message: ContainerType<{
aggregatorIndex: import("@chainsafe/ssz").UintNumberType;
contribution: ContainerType<{
slot: import("@chainsafe/ssz").UintNumberType;
beaconBlockRoot: import("@chainsafe/ssz").ByteVectorType;
subcommitteeIndex: import("@chainsafe/ssz").UintNumberType;
aggregationBits: import("@chainsafe/ssz").BitVectorType;
signature: import("@chainsafe/ssz").ByteVectorType;
}>;
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const BeaconCommitteeSubscriptionListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
committeeIndex: import("@chainsafe/ssz").UintNumberType;
committeesAtSlot: import("@chainsafe/ssz").UintNumberType;
slot: import("@chainsafe/ssz").UintNumberType;
isAggregator: import("@chainsafe/ssz").BooleanType;
}>>, unknown, unknown>;
export declare const SyncCommitteeSubscriptionListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
syncCommitteeIndices: import("@chainsafe/ssz").ArrayType<Type<number>, unknown, unknown>;
untilEpoch: import("@chainsafe/ssz").UintNumberType;
}>>, unknown, unknown>;
export declare const ProposerPreparationDataListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
validatorIndex: import("@chainsafe/ssz").UintNumberType;
feeRecipient: import("@lodestar/types").StringType<string>;
}>>, unknown, unknown>;
export declare const BeaconCommitteeSelectionListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
/** Index of the validator */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which a validator is assigned to attest */
slot: import("@chainsafe/ssz").UintNumberType;
/** The `slot_signature` calculated by the validator for the upcoming attestation slot */
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const SyncCommitteeSelectionListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
/** Index of the validator */
validatorIndex: import("@chainsafe/ssz").UintNumberType;
/** The slot at which validator is assigned to produce a sync committee contribution */
slot: import("@chainsafe/ssz").UintNumberType;
/** SubcommitteeIndex to which the validator is assigned */
subcommitteeIndex: import("@chainsafe/ssz").UintNumberType;
/** The `slot_signature` calculated by the validator for the upcoming sync committee slot */
selectionProof: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export declare const LivenessResponseDataListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
index: import("@chainsafe/ssz").UintNumberType;
isLive: import("@chainsafe/ssz").BooleanType;
}>>, unknown, unknown>;
export declare const SignedValidatorRegistrationV1ListType: import("@chainsafe/ssz").ArrayType<Type<import("@chainsafe/ssz").ValueOfFields<{
message: ContainerType<{
feeRecipient: import("@lodestar/types/lib/utils/executionAddress.js").ExecutionAddressType;
gasLimit: import("@chainsafe/ssz").UintNumberType;
timestamp: import("@chainsafe/ssz").UintNumberType;
pubkey: import("@chainsafe/ssz").ByteVectorType;
}>;
signature: import("@chainsafe/ssz").ByteVectorType;
}>>, unknown, unknown>;
export type ValidatorIndices = ValueOf<typeof ValidatorIndicesType>;
export type AttesterDuty = ValueOf<typeof AttesterDutyType>;
export type AttesterDutyList = ValueOf<typeof AttesterDutyListType>;
export type ProposerDuty = ValueOf<typeof ProposerDutyType>;
export type ProposerDutyList = ValueOf<typeof ProposerDutyListType>;
export type SyncDuty = ValueOf<typeof SyncDutyType>;
export type SyncDutyList = ValueOf<typeof SyncDutyListType>;
export type SignedAggregateAndProofListPhase0 = ValueOf<typeof SignedAggregateAndProofListPhase0Type>;
export type SignedAggregateAndProofListElectra = ValueOf<typeof SignedAggregateAndProofListElectraType>;
export type SignedAggregateAndProofList = SignedAggregateAndProofListPhase0 | SignedAggregateAndProofListElectra;
export type SignedContributionAndProofList = ValueOf<typeof SignedContributionAndProofListType>;
export type BeaconCommitteeSubscription = ValueOf<typeof BeaconCommitteeSubscriptionType>;
export type BeaconCommitteeSubscriptionList = ValueOf<typeof BeaconCommitteeSubscriptionListType>;
export type SyncCommitteeSubscription = ValueOf<typeof SyncCommitteeSubscriptionType>;
export type SyncCommitteeSubscriptionList = ValueOf<typeof SyncCommitteeSubscriptionListType>;
export type ProposerPreparationData = ValueOf<typeof ProposerPreparationDataType>;
export type ProposerPreparationDataList = ValueOf<typeof ProposerPreparationDataListType>;
export type BeaconCommitteeSelection = ValueOf<typeof BeaconCommitteeSelectionType>;
export type BeaconCommitteeSelectionList = ValueOf<typeof BeaconCommitteeSelectionListType>;
export type SyncCommitteeSelection = ValueOf<typeof SyncCommitteeSelectionType>;
export type SyncCommitteeSelectionList = ValueOf<typeof SyncCommitteeSelectionListType>;
export type LivenessResponseData = ValueOf<typeof LivenessResponseDataType>;
export type LivenessResponseDataList = ValueOf<typeof LivenessResponseDataListType>;
export type SignedValidatorRegistrationV1List = ValueOf<typeof SignedValidatorRegistrationV1ListType>;
export type Endpoints = {
/**
* Get attester duties
* Requests the beacon node to provide a set of attestation duties, which should be performed by validators, for a particular epoch.
* Duties should only need to be checked once per epoch, however a chain reorganization (of > MIN_SEED_LOOKAHEAD epochs) could occur, resulting in a change of duties. For full safety, you should monitor head events and confirm the dependent root in this response matches:
* - event.previous_duty_dependent_root when `compute_epoch_at_slot(event.slot) == epoch`
* - event.current_duty_dependent_root when `compute_epoch_at_slot(event.slot) + 1 == epoch`
* - event.block otherwise
* The dependent_root value is `get_block_root_at_slot(state, compute_start_slot_at_epoch(epoch - 1) - 1)` or the genesis block root in the case of underflow.
*/
getAttesterDuties: Endpoint<"POST", {
/** Should only be allowed 1 epoch ahead */
epoch: Epoch;
/** An array of the validator indices for which to obtain the duties */
indices: ValidatorIndices;
}, {
params: {
epoch: Epoch;
};
body: unknown;
}, AttesterDutyList, ExecutionOptimisticAndDependentRootMeta>;
/**
* Get block proposers duties
* Request beacon node to provide all validators that are scheduled to propose a block in the given epoch.
* Duties should only need to be checked once per epoch, however a chain reorganization could occur that results in a change of duties. For full safety, you should monitor head events and confirm the dependent root in this response matches:
* - event.current_duty_dependent_root when `compute_epoch_at_slot(event.slot) == epoch`
* - event.block otherwise
* The dependent_root value is `get_block_root_at_slot(state, compute_start_slot_at_epoch(epoch) - 1)` or the genesis block root in the case of underflow.
*/
getProposerDuties: Endpoint<"GET", {
epoch: Epoch;
}, {
params: {
epoch: Epoch;
};
}, ProposerDutyList, ExecutionOptimisticAndDependentRootMeta>;
getSyncCommitteeDuties: Endpoint<"POST", {
epoch: number;
indices: ValidatorIndices;
}, {
params: {
epoch: Epoch;
};
body: unknown;
}, SyncDutyList, ExecutionOptimisticMeta>;
/**
* Requests a beacon node to produce a valid block, which can then be signed by a validator.
* Metadata in the response indicates the type of block produced, and the supported types of block
* will be added to as forks progress.
*/
produceBlockV2: Endpoint<"GET", {
/** The slot for which the block should be proposed */
slot: Slot;
/** The validator's randao reveal value */
randaoReveal: BLSSignature;
/** Arbitrary data validator wants to include in block */
graffiti?: string;
} & Omit<ExtraProduceBlockOpts, "blindedLocal">, {
params: {
slot: number;
};
query: {
randao_reveal: string;
graffiti?: string;
fee_recipient?: string;
builder_selection?: string;
strict_fee_recipient_check?: boolean;
};
}, BeaconBlockOrContents, VersionMeta>;
/**
* Requests a beacon node to produce a valid block, which can then be signed by a validator.
* Metadata in the response indicates the type of block produced, and the supported types of block
* will be added to as forks progress.
*/
produceBlockV3: Endpoint<"GET", {
/** The slot for which the block should be proposed */
slot: Slot;
/** The validator's randao reveal value */
randaoReveal: BLSSignature;
/** Arbitrary data validator wants to include in block */
graffiti?: string;
skipRandaoVerification?: boolean;
builderBoostFactor?: UintBn64;
} & ExtraProduceBlockOpts, {
params: {
slot: number;
};
query: {
randao_reveal: string;
graffiti?: string;
skip_randao_verification?: string;
fee_recipient?: string;
builder_selection?: string;
builder_boost_factor?: string;
strict_fee_recipient_check?: boolean;
blinded_local?: boolean;
};
}, BeaconBlockOrContents | BlindedBeaconBlock, ProduceBlockV3Meta>;
produceBlindedBlock: Endpoint<"GET", {
slot: Slot;
randaoReveal: BLSSignature;
graffiti?: string;
}, {
params: {
slot: number;
};
query: {
randao_reveal: string;
graffiti?: string;
};
}, BlindedBeaconBlock, VersionMeta>;
/**
* Produce an attestation data
* Requests that the beacon node produce an AttestationData.
*/
produceAttestationData: Endpoint<"GET", {
/** The committee index for which an attestation data should be created */
committeeIndex: CommitteeIndex;
/** The slot for which an attestation data should be created */
slot: Slot;
}, {
query: {
slot: number;
committee_index: number;
};
}, phase0.AttestationData, EmptyMeta>;
produceSyncCommitteeContribution: Endpoint<"GET", {
slot: Slot;
subcommitteeIndex: number;
beaconBlockRoot: Root;
}, {
query: {
slot: number;
subcommittee_index: number;
beacon_block_root: string;
};
}, altair.SyncCommitteeContribution, EmptyMeta>;
/**
* Get aggregated attestation
* Aggregates all attestations matching given attestation data root and slot
* Returns an aggregated `Attestation` object with same `AttestationData` root.
*/
getAggregatedAttestation: Endpoint<"GET", {
/** HashTreeRoot of AttestationData that validator want's aggregated */
attestationDataRoot: Root;
slot: Slot;
}, {
query: {
attestation_data_root: string;
slot: number;
};
}, phase0.Attestation, EmptyMeta>;
/**
* Get aggregated attestation
* Aggregates all attestations matching given attestation data root, slot and committee index
* Returns an aggregated `Attestation` object with same `AttestationData` root.
*/
getAggregatedAttestationV2: Endpoint<"GET", {
/** HashTreeRoot of AttestationData that validator want's aggregated */
attestationDataRoot: Root;
slot: Slot;
committeeIndex: number;
}, {
query: {
attestation_data_root: string;
slot: number;
committee_index: number;
};
}, Attestation, VersionMeta>;
/**
* Publish multiple aggregate and proofs
* Verifies given aggregate and proofs and publishes them on appropriate gossipsub topic.
*/
publishAggregateAndProofs: Endpoint<"POST", {
signedAggregateAndProofs: SignedAggregateAndProofListPhase0;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
/**
* Publish multiple aggregate and proofs
* Verifies given aggregate and proofs and publishes them on appropriate gossipsub topic.
*/
publishAggregateAndProofsV2: Endpoint<"POST", {
signedAggregateAndProofs: SignedAggregateAndProofList;
}, {
body: unknown;
headers: {
[MetaHeader.Version]: string;
};
}, EmptyResponseData, EmptyMeta>;
publishContributionAndProofs: Endpoint<"POST", {
contributionAndProofs: SignedContributionAndProofList;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
/**
* Signal beacon node to prepare for a committee subnet
* After beacon node receives this request,
* search using discv5 for peers related to this subnet
* and replace current peers with those ones if necessary
* If validator `is_aggregator`, beacon node must:
* - announce subnet topic subscription on gossipsub
* - aggregate attestations received on that subnet
*
* Returns if slot signature is valid and beacon node has prepared the attestation subnet.
*
* Note that we cannot be certain the Beacon node will find peers for that subnet for various reasons.
*/
prepareBeaconCommitteeSubnet: Endpoint<"POST", {
subscriptions: BeaconCommitteeSubscriptionList;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
prepareSyncCommitteeSubnets: Endpoint<"POST", {
subscriptions: SyncCommitteeSubscriptionList;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
prepareBeaconProposer: Endpoint<"POST", {
proposers: ProposerPreparationDataList;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
/**
* Determine if a distributed validator has been selected to aggregate attestations
*
* This endpoint is implemented by a distributed validator middleware client to exchange
* partial beacon committee selection proofs for combined/aggregated selection proofs to allow
* a validator client to correctly determine if one of its validators has been selected to
* perform an aggregation duty in this slot.
*
* Note that this endpoint is not implemented by the beacon node and will return a 501 error
*
* Returns an array of threshold aggregated beacon committee selection proofs
*/
submitBeaconCommitteeSelections: Endpoint<"POST", {
/** An array of partial beacon committee selection proofs */
selections: BeaconCommitteeSelectionList;
}, {
body: unknown;
}, BeaconCommitteeSelectionList, EmptyMeta>;
/**
* Determine if a distributed validator has been selected to make a sync committee contribution
*
* This endpoint is implemented by a distributed validator middleware client to exchange
* partial sync committee selection proofs for combined/aggregated selection proofs to allow
* a validator client to correctly determine if one of its validators has been selected to
* perform a sync committee contribution (sync aggregation) duty in this slot.
*
* Note that this endpoint is not implemented by the beacon node and will return a 501 error
*
* Returns an array of threshold aggregated sync committee selection proofs
*/
submitSyncCommitteeSelections: Endpoint<"POST", {
/** An array of partial sync committee selection proofs */
selections: SyncCommitteeSelectionList;
}, {
body: unknown;
}, SyncCommitteeSelectionList, EmptyMeta>;
/** Returns validator indices that have been observed to be active on the network */
getLiveness: Endpoint<"POST", {
epoch: Epoch;
indices: ValidatorIndex[];
}, {
params: {
epoch: Epoch;
};
body: unknown;
}, LivenessResponseDataList, EmptyMeta>;
registerValidator: Endpoint<"POST", {
registrations: SignedValidatorRegistrationV1List;
}, {
body: unknown;
}, EmptyResponseData, EmptyMeta>;
};
export declare function getDefinitions(config: ChainForkConfig): RouteDefinitions<Endpoints>;
//# sourceMappingURL=validator.d.ts.map