@chainsafe/lodestar-config
Version:
Chain configuration required for lodestar
57 lines • 2 kB
JavaScript
import { GENESIS_EPOCH, ForkName, SLOTS_PER_EPOCH, ForkSeq } from "@chainsafe/lodestar-params";
import { ssz } from "@chainsafe/lodestar-types";
export * from "./types.js";
export function createIForkConfig(config) {
const phase0 = {
name: ForkName.phase0,
seq: ForkSeq.phase0,
epoch: GENESIS_EPOCH,
version: config.GENESIS_FORK_VERSION,
};
const altair = {
name: ForkName.altair,
seq: ForkSeq.altair,
epoch: config.ALTAIR_FORK_EPOCH,
version: config.ALTAIR_FORK_VERSION,
};
const bellatrix = {
name: ForkName.bellatrix,
seq: ForkSeq.bellatrix,
epoch: config.BELLATRIX_FORK_EPOCH,
version: config.BELLATRIX_FORK_VERSION,
};
/** Forks in order order of occurence, `phase0` first */
// Note: Downstream code relies on proper ordering.
const forks = { phase0, altair, bellatrix };
// Prevents allocating an array on every getForkInfo() call
const forksAscendingEpochOrder = Object.values(forks);
const forksDescendingEpochOrder = Object.values(forks).reverse();
return {
forks,
forksAscendingEpochOrder,
forksDescendingEpochOrder,
// Fork convenience methods
getForkInfo(slot) {
const epoch = Math.floor(slot / SLOTS_PER_EPOCH);
// NOTE: forks must be sorted by descending epoch, latest fork first
for (const fork of forksDescendingEpochOrder) {
if (epoch >= fork.epoch)
return fork;
}
return phase0;
},
getForkName(slot) {
return this.getForkInfo(slot).name;
},
getForkSeq(slot) {
return this.getForkInfo(slot).seq;
},
getForkVersion(slot) {
return this.getForkInfo(slot).version;
},
getForkTypes(slot) {
return ssz.allForks[this.getForkName(slot)];
},
};
}
//# sourceMappingURL=index.js.map