@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
93 lines • 5.58 kB
JavaScript
import { isForkPostAltair, isForkPostFulu } from "@lodestar/params";
import { ssz, sszTypesFor, } from "@lodestar/types";
import { BeaconBlocksByRootRequestType, BlobSidecarsByRootRequestType, DataColumnSidecarsByRootRequestType, ExecutionPayloadEnvelopesByRootRequestType, } from "../../util/types.js";
export { ReqRespMethod };
/** ReqResp protocol names or methods. Each ReqRespMethod can have multiple versions and encodings */
var ReqRespMethod;
(function (ReqRespMethod) {
// Phase 0
ReqRespMethod["Status"] = "status";
ReqRespMethod["Goodbye"] = "goodbye";
ReqRespMethod["Ping"] = "ping";
ReqRespMethod["Metadata"] = "metadata";
ReqRespMethod["BeaconBlocksByRange"] = "beacon_blocks_by_range";
ReqRespMethod["BeaconBlocksByRoot"] = "beacon_blocks_by_root";
ReqRespMethod["BeaconBlocksByHead"] = "beacon_blocks_by_head";
ReqRespMethod["BlobSidecarsByRange"] = "blob_sidecars_by_range";
ReqRespMethod["BlobSidecarsByRoot"] = "blob_sidecars_by_root";
ReqRespMethod["DataColumnSidecarsByRange"] = "data_column_sidecars_by_range";
ReqRespMethod["DataColumnSidecarsByRoot"] = "data_column_sidecars_by_root";
ReqRespMethod["ExecutionPayloadEnvelopesByRoot"] = "execution_payload_envelopes_by_root";
ReqRespMethod["ExecutionPayloadEnvelopesByRange"] = "execution_payload_envelopes_by_range";
ReqRespMethod["LightClientBootstrap"] = "light_client_bootstrap";
ReqRespMethod["LightClientUpdatesByRange"] = "light_client_updates_by_range";
ReqRespMethod["LightClientFinalityUpdate"] = "light_client_finality_update";
ReqRespMethod["LightClientOptimisticUpdate"] = "light_client_optimistic_update";
})(ReqRespMethod || (ReqRespMethod = {}));
/** Request SSZ type for each method and ForkName */
export const requestSszTypeByMethod = (fork, config) => ({
// Status type should ideally be determined by protocol version and not fork but since
// we only start using the new status version after the fork this is not an issue
[ReqRespMethod.Status]: sszTypesFor(fork).Status,
[ReqRespMethod.Goodbye]: ssz.phase0.Goodbye,
[ReqRespMethod.Ping]: ssz.phase0.Ping,
[ReqRespMethod.Metadata]: null,
[ReqRespMethod.BeaconBlocksByRange]: ssz.phase0.BeaconBlocksByRangeRequest,
[ReqRespMethod.BeaconBlocksByRoot]: BeaconBlocksByRootRequestType(fork, config),
[ReqRespMethod.BeaconBlocksByHead]: ssz.fulu.BeaconBlocksByHeadRequest,
[ReqRespMethod.BlobSidecarsByRange]: ssz.deneb.BlobSidecarsByRangeRequest,
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequestType(fork, config),
[ReqRespMethod.DataColumnSidecarsByRange]: ssz.fulu.DataColumnSidecarsByRangeRequest,
[ReqRespMethod.DataColumnSidecarsByRoot]: DataColumnSidecarsByRootRequestType(config),
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: ExecutionPayloadEnvelopesByRootRequestType(config),
[ReqRespMethod.ExecutionPayloadEnvelopesByRange]: ssz.gloas.ExecutionPayloadEnvelopesByRangeRequest,
[ReqRespMethod.LightClientBootstrap]: ssz.Root,
[ReqRespMethod.LightClientUpdatesByRange]: ssz.altair.LightClientUpdatesByRange,
[ReqRespMethod.LightClientFinalityUpdate]: null,
[ReqRespMethod.LightClientOptimisticUpdate]: null,
});
const blocksResponseType = (fork, version) => {
if (version === Version.V1) {
return ssz.phase0.SignedBeaconBlock;
}
return ssz[fork].SignedBeaconBlock;
};
export const responseSszTypeByMethod = {
[ReqRespMethod.Status]: (_, version) => (version === Version.V2 ? ssz.fulu.Status : ssz.phase0.Status),
[ReqRespMethod.Goodbye]: () => ssz.phase0.Goodbye,
[ReqRespMethod.Ping]: () => ssz.phase0.Ping,
[ReqRespMethod.Metadata]: (_, version) => version === Version.V1 ? ssz.phase0.Metadata : version === Version.V2 ? ssz.altair.Metadata : ssz.fulu.Metadata,
[ReqRespMethod.BeaconBlocksByRange]: blocksResponseType,
[ReqRespMethod.BeaconBlocksByRoot]: blocksResponseType,
[ReqRespMethod.BeaconBlocksByHead]: (fork) => ssz[fork].SignedBeaconBlock,
[ReqRespMethod.BlobSidecarsByRange]: () => ssz.deneb.BlobSidecar,
[ReqRespMethod.BlobSidecarsByRoot]: () => ssz.deneb.BlobSidecar,
[ReqRespMethod.LightClientBootstrap]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientBootstrap,
[ReqRespMethod.LightClientUpdatesByRange]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientUpdate,
[ReqRespMethod.LightClientFinalityUpdate]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientFinalityUpdate,
[ReqRespMethod.DataColumnSidecarsByRange]: (fork) => sszTypesFor(onlyPostFuluFork(fork)).DataColumnSidecar,
[ReqRespMethod.DataColumnSidecarsByRoot]: (fork) => sszTypesFor(onlyPostFuluFork(fork)).DataColumnSidecar,
[ReqRespMethod.ExecutionPayloadEnvelopesByRoot]: () => ssz.gloas.SignedExecutionPayloadEnvelope,
[ReqRespMethod.ExecutionPayloadEnvelopesByRange]: () => ssz.gloas.SignedExecutionPayloadEnvelope,
[ReqRespMethod.LightClientOptimisticUpdate]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientOptimisticUpdate,
};
function onlyPostAltairFork(fork) {
if (isForkPostAltair(fork)) {
return fork;
}
throw Error(`Not a post-altair fork ${fork}`);
}
function onlyPostFuluFork(fork) {
if (isForkPostFulu(fork)) {
return fork;
}
throw Error(`Not a post-fulu fork ${fork}`);
}
export { Version };
var Version;
(function (Version) {
Version[Version["V1"] = 1] = "V1";
Version[Version["V2"] = 2] = "V2";
Version[Version["V3"] = 3] = "V3";
})(Version || (Version = {}));
//# sourceMappingURL=types.js.map