@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
150 lines (139 loc) • 4.23 kB
text/typescript
import {
ATTESTATION_SUBNET_COUNT,
ATTESTATION_SUBNET_EXTRA_BITS,
ATTESTATION_SUBNET_PREFIX_BITS,
BASE_REWARDS_PER_EPOCH,
BLOB_TX_TYPE,
BLS_WITHDRAWAL_PREFIX,
BUILDER_INDEX_FLAG,
BUILDER_INDEX_SELF_BUILD,
BUILDER_PAYMENT_THRESHOLD_DENOMINATOR,
BUILDER_PAYMENT_THRESHOLD_NUMERATOR,
BUILDER_WITHDRAWAL_PREFIX,
COMPOUNDING_WITHDRAWAL_PREFIX,
CONSOLIDATION_REQUEST_TYPE,
DEPOSIT_CONTRACT_TREE_DEPTH,
DEPOSIT_REQUEST_TYPE,
DOMAIN_AGGREGATE_AND_PROOF,
DOMAIN_APPLICATION_BUILDER,
DOMAIN_APPLICATION_MASK,
DOMAIN_BEACON_ATTESTER,
DOMAIN_BEACON_BUILDER,
DOMAIN_BEACON_PROPOSER,
DOMAIN_BLS_TO_EXECUTION_CHANGE,
DOMAIN_CONTRIBUTION_AND_PROOF,
DOMAIN_DEPOSIT,
DOMAIN_PROPOSER_PREFERENCES,
DOMAIN_PTC_ATTESTER,
DOMAIN_RANDAO,
DOMAIN_SELECTION_PROOF,
DOMAIN_SYNC_COMMITTEE,
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF,
DOMAIN_VOLUNTARY_EXIT,
ETH1_ADDRESS_WITHDRAWAL_PREFIX,
FAR_FUTURE_EPOCH,
FULL_EXIT_REQUEST_AMOUNT,
GENESIS_EPOCH,
GENESIS_SLOT,
JUSTIFICATION_BITS_LENGTH,
MAX_CONCURRENT_REQUESTS,
NODE_ID_BITS,
PROPOSER_WEIGHT,
SYNC_COMMITTEE_SUBNET_COUNT,
SYNC_REWARD_WEIGHT,
TARGET_AGGREGATORS_PER_COMMITTEE,
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE,
TIMELY_HEAD_FLAG_INDEX,
TIMELY_HEAD_WEIGHT,
TIMELY_SOURCE_FLAG_INDEX,
TIMELY_SOURCE_WEIGHT,
TIMELY_TARGET_FLAG_INDEX,
TIMELY_TARGET_WEIGHT,
UNSET_DEPOSIT_REQUESTS_START_INDEX,
VERSIONED_HASH_VERSION_KZG,
WEIGHT_DENOMINATOR,
WITHDRAWAL_REQUEST_TYPE,
} from "@lodestar/params";
/**
* Hand-picked list of constants declared in consensus-spec .md files.
* This list is asserted to be up-to-date with the test `test/e2e/api/impl/config.test.ts`
*/
export const specConstants = {
// phase0/beacon-chain.md
// ## misc
GENESIS_SLOT,
GENESIS_EPOCH,
FAR_FUTURE_EPOCH,
BASE_REWARDS_PER_EPOCH,
DEPOSIT_CONTRACT_TREE_DEPTH,
JUSTIFICATION_BITS_LENGTH,
ENDIANNESS: "little",
// ## Withdrawal prefixes
BLS_WITHDRAWAL_PREFIX: toHexByte(BLS_WITHDRAWAL_PREFIX),
ETH1_ADDRESS_WITHDRAWAL_PREFIX: toHexByte(ETH1_ADDRESS_WITHDRAWAL_PREFIX),
COMPOUNDING_WITHDRAWAL_PREFIX: toHexByte(COMPOUNDING_WITHDRAWAL_PREFIX),
BUILDER_WITHDRAWAL_PREFIX: toHexByte(BUILDER_WITHDRAWAL_PREFIX),
// ## Domain types
DOMAIN_BEACON_PROPOSER,
DOMAIN_BEACON_ATTESTER,
DOMAIN_RANDAO,
DOMAIN_DEPOSIT,
DOMAIN_VOLUNTARY_EXIT,
DOMAIN_SELECTION_PROOF,
DOMAIN_AGGREGATE_AND_PROOF,
DOMAIN_APPLICATION_MASK,
DOMAIN_APPLICATION_BUILDER,
DOMAIN_BEACON_BUILDER,
DOMAIN_PROPOSER_PREFERENCES,
DOMAIN_PTC_ATTESTER,
// phase0/validator.md
TARGET_AGGREGATORS_PER_COMMITTEE,
// phase0/p2p-interface.md
NODE_ID_BITS,
MAX_CONCURRENT_REQUESTS,
ATTESTATION_SUBNET_COUNT,
ATTESTATION_SUBNET_EXTRA_BITS,
ATTESTATION_SUBNET_PREFIX_BITS,
// altair/beacon-chain.md
// ## Participation flag indices
TIMELY_SOURCE_FLAG_INDEX,
TIMELY_TARGET_FLAG_INDEX,
TIMELY_HEAD_FLAG_INDEX,
// ## Incentivization weights
TIMELY_SOURCE_WEIGHT,
TIMELY_TARGET_WEIGHT,
TIMELY_HEAD_WEIGHT,
SYNC_REWARD_WEIGHT,
PROPOSER_WEIGHT,
WEIGHT_DENOMINATOR,
// ## Domain types
DOMAIN_SYNC_COMMITTEE,
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF,
DOMAIN_CONTRIBUTION_AND_PROOF,
// altair/validator.md
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE,
SYNC_COMMITTEE_SUBNET_COUNT,
// ## Capella domain types
DOMAIN_BLS_TO_EXECUTION_CHANGE,
// Deneb types
BLOB_TX_TYPE: toHexByte(BLOB_TX_TYPE),
VERSIONED_HASH_VERSION_KZG: toHexByte(VERSIONED_HASH_VERSION_KZG),
// electra
UNSET_DEPOSIT_REQUESTS_START_INDEX,
FULL_EXIT_REQUEST_AMOUNT,
DEPOSIT_REQUEST_TYPE: toHexByte(DEPOSIT_REQUEST_TYPE),
WITHDRAWAL_REQUEST_TYPE: toHexByte(WITHDRAWAL_REQUEST_TYPE),
CONSOLIDATION_REQUEST_TYPE: toHexByte(CONSOLIDATION_REQUEST_TYPE),
// gloas
BUILDER_INDEX_FLAG,
BUILDER_INDEX_SELF_BUILD,
BUILDER_PAYMENT_THRESHOLD_NUMERATOR,
BUILDER_PAYMENT_THRESHOLD_DENOMINATOR,
};
/** Convert single-byte numbers to hex strings for API spec compliance */
function toHexByte(n: number): string {
if (n < 0 || n > 255 || !Number.isInteger(n)) {
throw new Error("toHexByte expected a single-byte integer, but received " + n);
}
return "0x" + n.toString(16).padStart(2, "0");
}