@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
60 lines (53 loc) • 2.43 kB
text/typescript
import {routes} from "@lodestar/api";
import {ApplicationMethods} from "@lodestar/api/server";
import {ChainConfig, chainConfigToJson, specValuesToJson} from "@lodestar/config";
import {activePreset, presetToJson} from "@lodestar/params";
import {ApiModules} from "../types.js";
import {specConstants} from "./constants.js";
/**
* Retrieve specification configuration used on this node. The configuration should include:
* - Constants for all hard forks known by the beacon node, for example the
* [phase 0](https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/beacon-chain.md#constants) and
* [altair](https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/altair/beacon-chain.md#constants) values
* - Presets for all hard forks supplied to the beacon node, for example the
* [phase 0](https://github.com/ethereum/consensus-specs/blob/v1.1.10/presets/mainnet/phase0.yaml) and
* [altair](https://github.com/ethereum/consensus.0-specs/blob/v1.1.10/presets/mainnet/altair.yaml) values
* - Configuration for the beacon node, for example the [mainnet](https://github.com/ethereum/consensus-specs/blob/v1.1.10/configs/mainnet.yaml) values
*/
export function renderJsonSpec(config: ChainConfig): routes.config.Spec {
const configJson = chainConfigToJson(config);
const presetJson = presetToJson(activePreset);
const constantsJson = specValuesToJson(specConstants);
// TODO Fulu: remove this check once interop issues are resolved
// see https://github.com/attestantio/go-eth2-client/issues/230
if (config.FULU_FORK_EPOCH === Infinity) {
delete configJson.BLOB_SCHEDULE;
}
return {...configJson, ...presetJson, ...constantsJson};
}
export function getConfigApi({config}: Pick<ApiModules, "config">): ApplicationMethods<routes.config.Endpoints> {
return {
async getForkSchedule() {
const forkInfos = Object.values(config.forks);
const forks = forkInfos.map((fi, ix) => ({
previousVersion: ix === 0 ? fi.version : forkInfos[ix - 1].version,
currentVersion: fi.version,
epoch: fi.epoch,
}));
return {data: forks};
},
async getDepositContract() {
return {
data: {
chainId: config.DEPOSIT_CHAIN_ID,
address: config.DEPOSIT_CONTRACT_ADDRESS,
},
};
},
async getSpec() {
return {
data: renderJsonSpec(config),
};
},
};
}