@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
67 lines • 3.56 kB
JavaScript
import { isForkPostAltair } from "@lodestar/params";
import { ssz, sszTypesFor, } from "@lodestar/types";
import { BlobSidecarsByRootRequestType } from "../../util/types.js";
/** ReqResp protocol names or methods. Each ReqRespMethod can have multiple versions and encodings */
export 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["BlobSidecarsByRange"] = "blob_sidecars_by_range";
ReqRespMethod["BlobSidecarsByRoot"] = "blob_sidecars_by_root";
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) => ({
[ReqRespMethod.Status]: ssz.phase0.Status,
[ReqRespMethod.Goodbye]: ssz.phase0.Goodbye,
[ReqRespMethod.Ping]: ssz.phase0.Ping,
[ReqRespMethod.Metadata]: null,
[ReqRespMethod.BeaconBlocksByRange]: ssz.phase0.BeaconBlocksByRangeRequest,
[ReqRespMethod.BeaconBlocksByRoot]: ssz.phase0.BeaconBlocksByRootRequest,
[ReqRespMethod.BlobSidecarsByRange]: ssz.deneb.BlobSidecarsByRangeRequest,
[ReqRespMethod.BlobSidecarsByRoot]: BlobSidecarsByRootRequestType(fork, config),
[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]: () => ssz.phase0.Status,
[ReqRespMethod.Goodbye]: () => ssz.phase0.Goodbye,
[ReqRespMethod.Ping]: () => ssz.phase0.Ping,
[ReqRespMethod.Metadata]: (_, version) => (version === Version.V1 ? ssz.phase0.Metadata : ssz.altair.Metadata),
[ReqRespMethod.BeaconBlocksByRange]: blocksResponseType,
[ReqRespMethod.BeaconBlocksByRoot]: blocksResponseType,
[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.LightClientOptimisticUpdate]: (fork) => sszTypesFor(onlyPostAltairFork(fork)).LightClientOptimisticUpdate,
};
function onlyPostAltairFork(fork) {
if (isForkPostAltair(fork)) {
return fork;
}
throw Error(`Not a post-altair fork ${fork}`);
}
export var Version;
(function (Version) {
Version[Version["V1"] = 1] = "V1";
Version[Version["V2"] = 2] = "V2";
})(Version || (Version = {}));
//# sourceMappingURL=types.js.map