extend REST config with more spec constants (#2962)
So far, the REST config response did not include all spec constants. The spec for `/eth/v1/config/spec` defines that the response should include constants for all hard forks known by the beacon node. This patch extends the corresponding response to include more constants.
This commit is contained in:
parent
233d756518
commit
1943258c66
|
@ -10,12 +10,12 @@ import
|
||||||
stew/[results, base10],
|
stew/[results, base10],
|
||||||
chronicles,
|
chronicles,
|
||||||
nimcrypto/utils as ncrutils,
|
nimcrypto/utils as ncrutils,
|
||||||
|
./rest_utils,
|
||||||
../beacon_node, ../networking/eth2_network,
|
../beacon_node, ../networking/eth2_network,
|
||||||
../consensus_object_pools/[blockchain_dag, exit_pool, spec_cache],
|
../consensus_object_pools/[blockchain_dag, exit_pool, spec_cache],
|
||||||
../validators/validator_duties,
|
../validators/validator_duties,
|
||||||
../spec/[eth2_merkleization, forks, network],
|
../spec/[eth2_merkleization, forks, network],
|
||||||
../spec/datatypes/[phase0, altair],
|
../spec/datatypes/[phase0, altair]
|
||||||
./rest_utils
|
|
||||||
|
|
||||||
export rest_utils
|
export rest_utils
|
||||||
|
|
||||||
|
|
|
@ -22,30 +22,19 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
cachedConfigSpec =
|
cachedConfigSpec =
|
||||||
RestApiResponse.prepareJsonResponse(
|
RestApiResponse.prepareJsonResponse(
|
||||||
(
|
(
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.0.1/configs/mainnet/phase0.yaml
|
||||||
CONFIG_NAME:
|
CONFIG_NAME:
|
||||||
const_preset,
|
const_preset,
|
||||||
PRESET_BASE:
|
|
||||||
node.dag.cfg.PRESET_BASE,
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/presets/mainnet/phase0.yaml
|
||||||
ALTAIR_FORK_EPOCH:
|
|
||||||
Base10.toString(uint64(node.dag.cfg.ALTAIR_FORK_EPOCH)),
|
|
||||||
ALTAIR_FORK_VERSION:
|
|
||||||
"0x" & $node.dag.cfg.ALTAIR_FORK_VERSION,
|
|
||||||
MAX_COMMITTEES_PER_SLOT:
|
MAX_COMMITTEES_PER_SLOT:
|
||||||
Base10.toString(MAX_COMMITTEES_PER_SLOT),
|
Base10.toString(MAX_COMMITTEES_PER_SLOT),
|
||||||
TARGET_COMMITTEE_SIZE:
|
TARGET_COMMITTEE_SIZE:
|
||||||
Base10.toString(TARGET_COMMITTEE_SIZE),
|
Base10.toString(TARGET_COMMITTEE_SIZE),
|
||||||
MAX_VALIDATORS_PER_COMMITTEE:
|
MAX_VALIDATORS_PER_COMMITTEE:
|
||||||
Base10.toString(MAX_VALIDATORS_PER_COMMITTEE),
|
Base10.toString(MAX_VALIDATORS_PER_COMMITTEE),
|
||||||
MIN_PER_EPOCH_CHURN_LIMIT:
|
|
||||||
Base10.toString(node.dag.cfg.MIN_PER_EPOCH_CHURN_LIMIT),
|
|
||||||
CHURN_LIMIT_QUOTIENT:
|
|
||||||
Base10.toString(node.dag.cfg.CHURN_LIMIT_QUOTIENT),
|
|
||||||
SHUFFLE_ROUND_COUNT:
|
SHUFFLE_ROUND_COUNT:
|
||||||
Base10.toString(SHUFFLE_ROUND_COUNT),
|
Base10.toString(SHUFFLE_ROUND_COUNT),
|
||||||
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT:
|
|
||||||
Base10.toString(node.dag.cfg.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT),
|
|
||||||
MIN_GENESIS_TIME:
|
|
||||||
Base10.toString(node.dag.cfg.MIN_GENESIS_TIME),
|
|
||||||
HYSTERESIS_QUOTIENT:
|
HYSTERESIS_QUOTIENT:
|
||||||
Base10.toString(HYSTERESIS_QUOTIENT),
|
Base10.toString(HYSTERESIS_QUOTIENT),
|
||||||
HYSTERESIS_DOWNWARD_MULTIPLIER:
|
HYSTERESIS_DOWNWARD_MULTIPLIER:
|
||||||
|
@ -54,40 +43,12 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
Base10.toString(HYSTERESIS_UPWARD_MULTIPLIER),
|
Base10.toString(HYSTERESIS_UPWARD_MULTIPLIER),
|
||||||
SAFE_SLOTS_TO_UPDATE_JUSTIFIED:
|
SAFE_SLOTS_TO_UPDATE_JUSTIFIED:
|
||||||
Base10.toString(SAFE_SLOTS_TO_UPDATE_JUSTIFIED),
|
Base10.toString(SAFE_SLOTS_TO_UPDATE_JUSTIFIED),
|
||||||
ETH1_FOLLOW_DISTANCE:
|
|
||||||
Base10.toString(node.dag.cfg.ETH1_FOLLOW_DISTANCE),
|
|
||||||
TARGET_AGGREGATORS_PER_COMMITTEE:
|
|
||||||
Base10.toString(TARGET_AGGREGATORS_PER_COMMITTEE),
|
|
||||||
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE:
|
|
||||||
Base10.toString(uint64(TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE)),
|
|
||||||
RANDOM_SUBNETS_PER_VALIDATOR:
|
|
||||||
Base10.toString(RANDOM_SUBNETS_PER_VALIDATOR),
|
|
||||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION:
|
|
||||||
Base10.toString(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION),
|
|
||||||
SECONDS_PER_ETH1_BLOCK:
|
|
||||||
Base10.toString(node.dag.cfg.SECONDS_PER_ETH1_BLOCK),
|
|
||||||
DEPOSIT_CHAIN_ID:
|
|
||||||
Base10.toString(uint64(node.dag.cfg.DEPOSIT_CHAIN_ID)),
|
|
||||||
DEPOSIT_NETWORK_ID:
|
|
||||||
Base10.toString(uint64(node.dag.cfg.DEPOSIT_NETWORK_ID)),
|
|
||||||
DEPOSIT_CONTRACT_ADDRESS:
|
|
||||||
$node.dag.cfg.DEPOSIT_CONTRACT_ADDRESS,
|
|
||||||
MIN_DEPOSIT_AMOUNT:
|
MIN_DEPOSIT_AMOUNT:
|
||||||
Base10.toString(MIN_DEPOSIT_AMOUNT),
|
Base10.toString(MIN_DEPOSIT_AMOUNT),
|
||||||
MAX_EFFECTIVE_BALANCE:
|
MAX_EFFECTIVE_BALANCE:
|
||||||
Base10.toString(MAX_EFFECTIVE_BALANCE),
|
Base10.toString(MAX_EFFECTIVE_BALANCE),
|
||||||
EJECTION_BALANCE:
|
|
||||||
Base10.toString(node.dag.cfg.EJECTION_BALANCE),
|
|
||||||
EFFECTIVE_BALANCE_INCREMENT:
|
EFFECTIVE_BALANCE_INCREMENT:
|
||||||
Base10.toString(EFFECTIVE_BALANCE_INCREMENT),
|
Base10.toString(EFFECTIVE_BALANCE_INCREMENT),
|
||||||
GENESIS_FORK_VERSION:
|
|
||||||
"0x" & $node.dag.cfg.GENESIS_FORK_VERSION,
|
|
||||||
BLS_WITHDRAWAL_PREFIX:
|
|
||||||
"0x" & ncrutils.toHex([BLS_WITHDRAWAL_PREFIX]),
|
|
||||||
GENESIS_DELAY:
|
|
||||||
Base10.toString(node.dag.cfg.GENESIS_DELAY),
|
|
||||||
SECONDS_PER_SLOT:
|
|
||||||
Base10.toString(uint64(SECONDS_PER_SLOT)),
|
|
||||||
MIN_ATTESTATION_INCLUSION_DELAY:
|
MIN_ATTESTATION_INCLUSION_DELAY:
|
||||||
Base10.toString(MIN_ATTESTATION_INCLUSION_DELAY),
|
Base10.toString(MIN_ATTESTATION_INCLUSION_DELAY),
|
||||||
SLOTS_PER_EPOCH:
|
SLOTS_PER_EPOCH:
|
||||||
|
@ -100,22 +61,12 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
Base10.toString(EPOCHS_PER_ETH1_VOTING_PERIOD),
|
Base10.toString(EPOCHS_PER_ETH1_VOTING_PERIOD),
|
||||||
SLOTS_PER_HISTORICAL_ROOT:
|
SLOTS_PER_HISTORICAL_ROOT:
|
||||||
Base10.toString(SLOTS_PER_HISTORICAL_ROOT),
|
Base10.toString(SLOTS_PER_HISTORICAL_ROOT),
|
||||||
SYNC_COMMITTEE_SIZE:
|
|
||||||
Base10.toString(uint64(SYNC_COMMITTEE_SIZE)),
|
|
||||||
SYNC_COMMITTEE_SUBNET_COUNT:
|
|
||||||
Base10.toString(uint64(SYNC_COMMITTEE_SUBNET_COUNT)),
|
|
||||||
MIN_VALIDATOR_WITHDRAWABILITY_DELAY:
|
|
||||||
Base10.toString(node.dag.cfg.MIN_VALIDATOR_WITHDRAWABILITY_DELAY),
|
|
||||||
SHARD_COMMITTEE_PERIOD:
|
|
||||||
Base10.toString(node.dag.cfg.SHARD_COMMITTEE_PERIOD),
|
|
||||||
MIN_EPOCHS_TO_INACTIVITY_PENALTY:
|
MIN_EPOCHS_TO_INACTIVITY_PENALTY:
|
||||||
Base10.toString(MIN_EPOCHS_TO_INACTIVITY_PENALTY),
|
Base10.toString(MIN_EPOCHS_TO_INACTIVITY_PENALTY),
|
||||||
EPOCHS_PER_HISTORICAL_VECTOR:
|
EPOCHS_PER_HISTORICAL_VECTOR:
|
||||||
Base10.toString(EPOCHS_PER_HISTORICAL_VECTOR),
|
Base10.toString(EPOCHS_PER_HISTORICAL_VECTOR),
|
||||||
EPOCHS_PER_SLASHINGS_VECTOR:
|
EPOCHS_PER_SLASHINGS_VECTOR:
|
||||||
Base10.toString(EPOCHS_PER_SLASHINGS_VECTOR),
|
Base10.toString(EPOCHS_PER_SLASHINGS_VECTOR),
|
||||||
EPOCHS_PER_SYNC_COMMITTEE_PERIOD:
|
|
||||||
Base10.toString(EPOCHS_PER_SYNC_COMMITTEE_PERIOD),
|
|
||||||
HISTORICAL_ROOTS_LIMIT:
|
HISTORICAL_ROOTS_LIMIT:
|
||||||
Base10.toString(HISTORICAL_ROOTS_LIMIT),
|
Base10.toString(HISTORICAL_ROOTS_LIMIT),
|
||||||
VALIDATOR_REGISTRY_LIMIT:
|
VALIDATOR_REGISTRY_LIMIT:
|
||||||
|
@ -128,22 +79,10 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
Base10.toString(PROPOSER_REWARD_QUOTIENT),
|
Base10.toString(PROPOSER_REWARD_QUOTIENT),
|
||||||
INACTIVITY_PENALTY_QUOTIENT:
|
INACTIVITY_PENALTY_QUOTIENT:
|
||||||
Base10.toString(INACTIVITY_PENALTY_QUOTIENT),
|
Base10.toString(INACTIVITY_PENALTY_QUOTIENT),
|
||||||
INACTIVITY_PENALTY_QUOTIENT_ALTAIR:
|
|
||||||
Base10.toString(INACTIVITY_PENALTY_QUOTIENT_ALTAIR),
|
|
||||||
INACTIVITY_SCORE_BIAS:
|
|
||||||
Base10.toString(node.dag.cfg.INACTIVITY_SCORE_BIAS),
|
|
||||||
INACTIVITY_SCORE_RECOVERY_RATE:
|
|
||||||
Base10.toString(node.dag.cfg.INACTIVITY_SCORE_RECOVERY_RATE),
|
|
||||||
MIN_SLASHING_PENALTY_QUOTIENT:
|
MIN_SLASHING_PENALTY_QUOTIENT:
|
||||||
Base10.toString(MIN_SLASHING_PENALTY_QUOTIENT),
|
Base10.toString(MIN_SLASHING_PENALTY_QUOTIENT),
|
||||||
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR:
|
|
||||||
Base10.toString(MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR),
|
|
||||||
MIN_SYNC_COMMITTEE_PARTICIPANTS:
|
|
||||||
Base10.toString(uint64(MIN_SYNC_COMMITTEE_PARTICIPANTS)),
|
|
||||||
PROPORTIONAL_SLASHING_MULTIPLIER:
|
PROPORTIONAL_SLASHING_MULTIPLIER:
|
||||||
Base10.toString(PROPORTIONAL_SLASHING_MULTIPLIER),
|
Base10.toString(PROPORTIONAL_SLASHING_MULTIPLIER),
|
||||||
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR:
|
|
||||||
Base10.toString(PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR),
|
|
||||||
MAX_PROPOSER_SLASHINGS:
|
MAX_PROPOSER_SLASHINGS:
|
||||||
Base10.toString(MAX_PROPOSER_SLASHINGS),
|
Base10.toString(MAX_PROPOSER_SLASHINGS),
|
||||||
MAX_ATTESTER_SLASHINGS:
|
MAX_ATTESTER_SLASHINGS:
|
||||||
|
@ -154,6 +93,87 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
Base10.toString(MAX_DEPOSITS),
|
Base10.toString(MAX_DEPOSITS),
|
||||||
MAX_VOLUNTARY_EXITS:
|
MAX_VOLUNTARY_EXITS:
|
||||||
Base10.toString(MAX_VOLUNTARY_EXITS),
|
Base10.toString(MAX_VOLUNTARY_EXITS),
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/presets/mainnet/altair.yaml
|
||||||
|
INACTIVITY_PENALTY_QUOTIENT_ALTAIR:
|
||||||
|
Base10.toString(INACTIVITY_PENALTY_QUOTIENT_ALTAIR),
|
||||||
|
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR:
|
||||||
|
Base10.toString(MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR),
|
||||||
|
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR:
|
||||||
|
Base10.toString(PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR),
|
||||||
|
SYNC_COMMITTEE_SIZE:
|
||||||
|
Base10.toString(uint64(SYNC_COMMITTEE_SIZE)),
|
||||||
|
EPOCHS_PER_SYNC_COMMITTEE_PERIOD:
|
||||||
|
Base10.toString(EPOCHS_PER_SYNC_COMMITTEE_PERIOD),
|
||||||
|
MIN_SYNC_COMMITTEE_PARTICIPANTS:
|
||||||
|
Base10.toString(uint64(MIN_SYNC_COMMITTEE_PARTICIPANTS)),
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/configs/mainnet.yaml
|
||||||
|
PRESET_BASE:
|
||||||
|
node.dag.cfg.PRESET_BASE,
|
||||||
|
TERMINAL_TOTAL_DIFFICULTY:
|
||||||
|
toString(node.dag.cfg.TERMINAL_TOTAL_DIFFICULTY),
|
||||||
|
TERMINAL_BLOCK_HASH:
|
||||||
|
$node.dag.cfg.TERMINAL_BLOCK_HASH,
|
||||||
|
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT:
|
||||||
|
Base10.toString(node.dag.cfg.MIN_GENESIS_ACTIVE_VALIDATOR_COUNT),
|
||||||
|
MIN_GENESIS_TIME:
|
||||||
|
Base10.toString(node.dag.cfg.MIN_GENESIS_TIME),
|
||||||
|
GENESIS_FORK_VERSION:
|
||||||
|
"0x" & $node.dag.cfg.GENESIS_FORK_VERSION,
|
||||||
|
GENESIS_DELAY:
|
||||||
|
Base10.toString(node.dag.cfg.GENESIS_DELAY),
|
||||||
|
ALTAIR_FORK_VERSION:
|
||||||
|
"0x" & $node.dag.cfg.ALTAIR_FORK_VERSION,
|
||||||
|
ALTAIR_FORK_EPOCH:
|
||||||
|
Base10.toString(uint64(node.dag.cfg.ALTAIR_FORK_EPOCH)),
|
||||||
|
MERGE_FORK_VERSION:
|
||||||
|
"0x" & $node.dag.cfg.MERGE_FORK_VERSION,
|
||||||
|
MERGE_FORK_EPOCH:
|
||||||
|
Base10.toString(uint64(node.dag.cfg.MERGE_FORK_EPOCH)),
|
||||||
|
SHARDING_FORK_VERSION:
|
||||||
|
"0x" & $node.dag.cfg.SHARDING_FORK_VERSION,
|
||||||
|
SHARDING_FORK_EPOCH:
|
||||||
|
Base10.toString(uint64(node.dag.cfg.SHARDING_FORK_EPOCH)),
|
||||||
|
SECONDS_PER_SLOT:
|
||||||
|
Base10.toString(SECONDS_PER_SLOT),
|
||||||
|
SECONDS_PER_ETH1_BLOCK:
|
||||||
|
Base10.toString(node.dag.cfg.SECONDS_PER_ETH1_BLOCK),
|
||||||
|
MIN_VALIDATOR_WITHDRAWABILITY_DELAY:
|
||||||
|
Base10.toString(node.dag.cfg.MIN_VALIDATOR_WITHDRAWABILITY_DELAY),
|
||||||
|
SHARD_COMMITTEE_PERIOD:
|
||||||
|
Base10.toString(node.dag.cfg.SHARD_COMMITTEE_PERIOD),
|
||||||
|
ETH1_FOLLOW_DISTANCE:
|
||||||
|
Base10.toString(node.dag.cfg.ETH1_FOLLOW_DISTANCE),
|
||||||
|
INACTIVITY_SCORE_BIAS:
|
||||||
|
Base10.toString(node.dag.cfg.INACTIVITY_SCORE_BIAS),
|
||||||
|
INACTIVITY_SCORE_RECOVERY_RATE:
|
||||||
|
Base10.toString(node.dag.cfg.INACTIVITY_SCORE_RECOVERY_RATE),
|
||||||
|
EJECTION_BALANCE:
|
||||||
|
Base10.toString(node.dag.cfg.EJECTION_BALANCE),
|
||||||
|
MIN_PER_EPOCH_CHURN_LIMIT:
|
||||||
|
Base10.toString(node.dag.cfg.MIN_PER_EPOCH_CHURN_LIMIT),
|
||||||
|
CHURN_LIMIT_QUOTIENT:
|
||||||
|
Base10.toString(node.dag.cfg.CHURN_LIMIT_QUOTIENT),
|
||||||
|
DEPOSIT_CHAIN_ID:
|
||||||
|
Base10.toString(node.dag.cfg.DEPOSIT_CHAIN_ID),
|
||||||
|
DEPOSIT_NETWORK_ID:
|
||||||
|
Base10.toString(node.dag.cfg.DEPOSIT_NETWORK_ID),
|
||||||
|
DEPOSIT_CONTRACT_ADDRESS:
|
||||||
|
$node.dag.cfg.DEPOSIT_CONTRACT_ADDRESS,
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/phase0/beacon-chain.md#constants
|
||||||
|
# GENESIS_SLOT
|
||||||
|
# GENESIS_EPOCH
|
||||||
|
# FAR_FUTURE_EPOCH
|
||||||
|
# BASE_REWARDS_PER_EPOCH
|
||||||
|
# DEPOSIT_CONTRACT_TREE_DEPTH
|
||||||
|
# JUSTIFICATION_BITS_LENGTH
|
||||||
|
# ENDIANNESS
|
||||||
|
BLS_WITHDRAWAL_PREFIX:
|
||||||
|
"0x" & ncrutils.toHex([BLS_WITHDRAWAL_PREFIX]),
|
||||||
|
ETH1_ADDRESS_WITHDRAWAL_PREFIX:
|
||||||
|
"0x" & ncrutils.toHex([ETH1_ADDRESS_WITHDRAWAL_PREFIX]),
|
||||||
DOMAIN_BEACON_PROPOSER:
|
DOMAIN_BEACON_PROPOSER:
|
||||||
"0x" & ncrutils.toHex(
|
"0x" & ncrutils.toHex(
|
||||||
uint32(DOMAIN_BEACON_PROPOSER).toBytesLE()),
|
uint32(DOMAIN_BEACON_PROPOSER).toBytesLE()),
|
||||||
|
@ -175,15 +195,52 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
DOMAIN_AGGREGATE_AND_PROOF:
|
DOMAIN_AGGREGATE_AND_PROOF:
|
||||||
"0x" & ncrutils.toHex(
|
"0x" & ncrutils.toHex(
|
||||||
uint32(DOMAIN_AGGREGATE_AND_PROOF).toBytesLE()),
|
uint32(DOMAIN_AGGREGATE_AND_PROOF).toBytesLE()),
|
||||||
DOMAIN_CONTRIBUTION_AND_PROOF:
|
|
||||||
"0x" & ncrutils.toHex(
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/altair/beacon-chain.md#constants
|
||||||
uint32(DOMAIN_CONTRIBUTION_AND_PROOF).toBytesLE()),
|
TIMELY_SOURCE_FLAG_INDEX:
|
||||||
|
"0x" & ncrutils.toHex([byte(TIMELY_SOURCE_FLAG_INDEX)]),
|
||||||
|
TIMELY_TARGET_FLAG_INDEX:
|
||||||
|
"0x" & ncrutils.toHex([byte(TIMELY_TARGET_FLAG_INDEX)]),
|
||||||
|
TIMELY_HEAD_FLAG_INDEX:
|
||||||
|
"0x" & ncrutils.toHex([byte(TIMELY_HEAD_FLAG_INDEX)]),
|
||||||
|
TIMELY_SOURCE_WEIGHT:
|
||||||
|
Base10.toString(uint64(TIMELY_SOURCE_WEIGHT)),
|
||||||
|
TIMELY_TARGET_WEIGHT:
|
||||||
|
Base10.toString(uint64(TIMELY_TARGET_WEIGHT)),
|
||||||
|
TIMELY_HEAD_WEIGHT:
|
||||||
|
Base10.toString(uint64(TIMELY_HEAD_WEIGHT)),
|
||||||
|
SYNC_REWARD_WEIGHT:
|
||||||
|
Base10.toString(uint64(SYNC_REWARD_WEIGHT)),
|
||||||
|
PROPOSER_WEIGHT:
|
||||||
|
Base10.toString(uint64(PROPOSER_WEIGHT)),
|
||||||
|
WEIGHT_DENOMINATOR:
|
||||||
|
Base10.toString(uint64(WEIGHT_DENOMINATOR)),
|
||||||
DOMAIN_SYNC_COMMITTEE:
|
DOMAIN_SYNC_COMMITTEE:
|
||||||
"0x" & ncrutils.toHex(
|
"0x" & ncrutils.toHex(
|
||||||
uint32(DOMAIN_SYNC_COMMITTEE).toBytesLE()),
|
uint32(DOMAIN_SYNC_COMMITTEE).toBytesLE()),
|
||||||
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF:
|
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF:
|
||||||
"0x" & ncrutils.toHex(
|
"0x" & ncrutils.toHex(
|
||||||
uint32(DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF).toBytesLE())
|
uint32(DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF).toBytesLE()),
|
||||||
|
DOMAIN_CONTRIBUTION_AND_PROOF:
|
||||||
|
"0x" & ncrutils.toHex(
|
||||||
|
uint32(DOMAIN_CONTRIBUTION_AND_PROOF).toBytesLE()),
|
||||||
|
# PARTICIPATION_FLAG_WEIGHTS
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/phase0/validator.md#constants
|
||||||
|
TARGET_AGGREGATORS_PER_COMMITTEE:
|
||||||
|
Base10.toString(TARGET_AGGREGATORS_PER_COMMITTEE),
|
||||||
|
RANDOM_SUBNETS_PER_VALIDATOR:
|
||||||
|
Base10.toString(RANDOM_SUBNETS_PER_VALIDATOR),
|
||||||
|
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION:
|
||||||
|
Base10.toString(EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION),
|
||||||
|
ATTESTATION_SUBNET_COUNT:
|
||||||
|
Base10.toString(uint64(ATTESTATION_SUBNET_COUNT)),
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/altair/validator.md#constants
|
||||||
|
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE:
|
||||||
|
Base10.toString(uint64(TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE)),
|
||||||
|
SYNC_COMMITTEE_SUBNET_COUNT:
|
||||||
|
Base10.toString(uint64(SYNC_COMMITTEE_SUBNET_COUNT)),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
cachedDepositContract =
|
cachedDepositContract =
|
||||||
|
|
|
@ -31,6 +31,9 @@ proc installConfigApiHandlers*(rpcServer: RpcServer, node: BeaconNode) {.
|
||||||
|
|
||||||
rpcServer.rpc("get_v1_config_spec") do () -> JsonNode:
|
rpcServer.rpc("get_v1_config_spec") do () -> JsonNode:
|
||||||
return %*{
|
return %*{
|
||||||
|
# Note: This is intentionally only returning v1.0 config values.
|
||||||
|
# Please use the REST API /eth/v1/config/spec to retrieve the full config.
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.0.1/configs/mainnet/phase0.yaml
|
||||||
"MAX_COMMITTEES_PER_SLOT": $MAX_COMMITTEES_PER_SLOT,
|
"MAX_COMMITTEES_PER_SLOT": $MAX_COMMITTEES_PER_SLOT,
|
||||||
"TARGET_COMMITTEE_SIZE": $TARGET_COMMITTEE_SIZE,
|
"TARGET_COMMITTEE_SIZE": $TARGET_COMMITTEE_SIZE,
|
||||||
"MAX_VALIDATORS_PER_COMMITTEE": $MAX_VALIDATORS_PER_COMMITTEE,
|
"MAX_VALIDATORS_PER_COMMITTEE": $MAX_VALIDATORS_PER_COMMITTEE,
|
||||||
|
|
|
@ -17,6 +17,9 @@ export
|
||||||
results, peerid, common, serialization, json_serialization, options, net, sets,
|
results, peerid, common, serialization, json_serialization, options, net, sets,
|
||||||
eth2_ssz_serialization, rest_types
|
eth2_ssz_serialization, rest_types
|
||||||
|
|
||||||
|
from web3/ethtypes import BlockHash
|
||||||
|
export ethtypes.BlockHash
|
||||||
|
|
||||||
Json.createFlavor RestJson
|
Json.createFlavor RestJson
|
||||||
|
|
||||||
const
|
const
|
||||||
|
@ -330,6 +333,20 @@ proc readValue*(reader: var JsonReader[RestJson], value: var uint64) {.
|
||||||
else:
|
else:
|
||||||
reader.raiseUnexpectedValue($res.error())
|
reader.raiseUnexpectedValue($res.error())
|
||||||
|
|
||||||
|
## UInt256
|
||||||
|
proc writeValue*(w: var JsonWriter[RestJson], value: UInt256) {.
|
||||||
|
raises: [IOError, Defect].} =
|
||||||
|
writeValue(w, toString(value))
|
||||||
|
|
||||||
|
proc readValue*(reader: var JsonReader[RestJson], value: var UInt256) {.
|
||||||
|
raises: [IOError, SerializationError, Defect].} =
|
||||||
|
let svalue = reader.readValue(string)
|
||||||
|
try:
|
||||||
|
value = parse(svalue, UInt256, 10)
|
||||||
|
except ValueError:
|
||||||
|
raiseUnexpectedValue(reader,
|
||||||
|
"UInt256 value should be a valid decimal string")
|
||||||
|
|
||||||
## byte
|
## byte
|
||||||
proc writeValue*(w: var JsonWriter[RestJson], value: byte) {.
|
proc writeValue*(w: var JsonWriter[RestJson], value: byte) {.
|
||||||
raises: [IOError, Defect].} =
|
raises: [IOError, Defect].} =
|
||||||
|
@ -521,6 +538,19 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: BitArray) {.
|
||||||
raises: [IOError, Defect].} =
|
raises: [IOError, Defect].} =
|
||||||
writeValue(writer, hexOriginal(value.bytes))
|
writeValue(writer, hexOriginal(value.bytes))
|
||||||
|
|
||||||
|
## BlockHash
|
||||||
|
proc readValue*(reader: var JsonReader[RestJson], value: var BlockHash) {.
|
||||||
|
raises: [IOError, SerializationError, Defect].} =
|
||||||
|
try:
|
||||||
|
hexToByteArray(reader.readValue(string), distinctBase(value))
|
||||||
|
except ValueError:
|
||||||
|
raiseUnexpectedValue(reader,
|
||||||
|
"BlockHash value should be a valid hex string")
|
||||||
|
|
||||||
|
proc writeValue*(writer: var JsonWriter[RestJson], value: BlockHash) {.
|
||||||
|
raises: [IOError, Defect].} =
|
||||||
|
writeValue(writer, hexOriginal(distinctBase(value)))
|
||||||
|
|
||||||
## Eth2Digest
|
## Eth2Digest
|
||||||
proc readValue*(reader: var JsonReader[RestJson], value: var Eth2Digest) {.
|
proc readValue*(reader: var JsonReader[RestJson], value: var Eth2Digest) {.
|
||||||
raises: [IOError, SerializationError, Defect].} =
|
raises: [IOError, SerializationError, Defect].} =
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
std/[json, typetraits],
|
std/[json, typetraits],
|
||||||
stew/base10,
|
stew/base10, web3/ethtypes,
|
||||||
".."/forks,
|
".."/forks,
|
||||||
".."/datatypes/[phase0, altair]
|
".."/datatypes/[phase0, altair]
|
||||||
|
|
||||||
|
@ -229,72 +229,90 @@ type
|
||||||
metadata*: RestMetadata
|
metadata*: RestMetadata
|
||||||
|
|
||||||
RestSpec* = object
|
RestSpec* = object
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.0.1/configs/mainnet/phase0.yaml
|
||||||
CONFIG_NAME*: string
|
CONFIG_NAME*: string
|
||||||
PRESET_BASE*: string
|
|
||||||
ALTAIR_FORK_EPOCH*: Epoch
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/presets/mainnet/phase0.yaml
|
||||||
ALTAIR_FORK_VERSION*: Version
|
|
||||||
MAX_COMMITTEES_PER_SLOT*: uint64
|
MAX_COMMITTEES_PER_SLOT*: uint64
|
||||||
TARGET_COMMITTEE_SIZE*: uint64
|
TARGET_COMMITTEE_SIZE*: uint64
|
||||||
MAX_VALIDATORS_PER_COMMITTEE*: uint64
|
MAX_VALIDATORS_PER_COMMITTEE*: uint64
|
||||||
MIN_PER_EPOCH_CHURN_LIMIT*: uint64
|
|
||||||
CHURN_LIMIT_QUOTIENT*: uint64
|
|
||||||
SHUFFLE_ROUND_COUNT*: uint64
|
SHUFFLE_ROUND_COUNT*: uint64
|
||||||
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT*: uint64
|
|
||||||
MIN_GENESIS_TIME*: uint64
|
|
||||||
HYSTERESIS_QUOTIENT*: uint64
|
HYSTERESIS_QUOTIENT*: uint64
|
||||||
HYSTERESIS_DOWNWARD_MULTIPLIER*: uint64
|
HYSTERESIS_DOWNWARD_MULTIPLIER*: uint64
|
||||||
HYSTERESIS_UPWARD_MULTIPLIER*: uint64
|
HYSTERESIS_UPWARD_MULTIPLIER*: uint64
|
||||||
SAFE_SLOTS_TO_UPDATE_JUSTIFIED*: uint64
|
SAFE_SLOTS_TO_UPDATE_JUSTIFIED*: uint64
|
||||||
ETH1_FOLLOW_DISTANCE*: uint64
|
|
||||||
TARGET_AGGREGATORS_PER_COMMITTEE*: uint64
|
|
||||||
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE*: uint64
|
|
||||||
RANDOM_SUBNETS_PER_VALIDATOR*: uint64
|
|
||||||
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION*: uint64
|
|
||||||
SECONDS_PER_ETH1_BLOCK*: uint64
|
|
||||||
DEPOSIT_CHAIN_ID*: uint64
|
|
||||||
DEPOSIT_NETWORK_ID*: uint64
|
|
||||||
DEPOSIT_CONTRACT_ADDRESS*: Eth1Address
|
|
||||||
MIN_DEPOSIT_AMOUNT*: uint64
|
MIN_DEPOSIT_AMOUNT*: uint64
|
||||||
MAX_EFFECTIVE_BALANCE*: uint64
|
MAX_EFFECTIVE_BALANCE*: uint64
|
||||||
EJECTION_BALANCE*: uint64
|
|
||||||
EFFECTIVE_BALANCE_INCREMENT*: uint64
|
EFFECTIVE_BALANCE_INCREMENT*: uint64
|
||||||
GENESIS_FORK_VERSION*: Version
|
|
||||||
BLS_WITHDRAWAL_PREFIX*: byte
|
|
||||||
GENESIS_DELAY*: uint64
|
|
||||||
SECONDS_PER_SLOT*: uint64
|
|
||||||
MIN_ATTESTATION_INCLUSION_DELAY*: uint64
|
MIN_ATTESTATION_INCLUSION_DELAY*: uint64
|
||||||
SLOTS_PER_EPOCH*: uint64
|
SLOTS_PER_EPOCH*: uint64
|
||||||
MIN_SEED_LOOKAHEAD*: uint64
|
MIN_SEED_LOOKAHEAD*: uint64
|
||||||
MAX_SEED_LOOKAHEAD*: uint64
|
MAX_SEED_LOOKAHEAD*: uint64
|
||||||
EPOCHS_PER_ETH1_VOTING_PERIOD*: uint64
|
EPOCHS_PER_ETH1_VOTING_PERIOD*: uint64
|
||||||
SLOTS_PER_HISTORICAL_ROOT*: uint64
|
SLOTS_PER_HISTORICAL_ROOT*: uint64
|
||||||
SYNC_COMMITTEE_SIZE*: uint64
|
|
||||||
SYNC_COMMITTEE_SUBNET_COUNT*: uint64
|
|
||||||
MIN_VALIDATOR_WITHDRAWABILITY_DELAY*: uint64
|
|
||||||
SHARD_COMMITTEE_PERIOD*: uint64
|
|
||||||
MIN_EPOCHS_TO_INACTIVITY_PENALTY*: uint64
|
MIN_EPOCHS_TO_INACTIVITY_PENALTY*: uint64
|
||||||
EPOCHS_PER_HISTORICAL_VECTOR*: uint64
|
EPOCHS_PER_HISTORICAL_VECTOR*: uint64
|
||||||
EPOCHS_PER_SLASHINGS_VECTOR*: uint64
|
EPOCHS_PER_SLASHINGS_VECTOR*: uint64
|
||||||
EPOCHS_PER_SYNC_COMMITTEE_PERIOD*: uint64
|
|
||||||
HISTORICAL_ROOTS_LIMIT*: uint64
|
HISTORICAL_ROOTS_LIMIT*: uint64
|
||||||
VALIDATOR_REGISTRY_LIMIT*: uint64
|
VALIDATOR_REGISTRY_LIMIT*: uint64
|
||||||
BASE_REWARD_FACTOR*: uint64
|
BASE_REWARD_FACTOR*: uint64
|
||||||
WHISTLEBLOWER_REWARD_QUOTIENT*: uint64
|
WHISTLEBLOWER_REWARD_QUOTIENT*: uint64
|
||||||
PROPOSER_REWARD_QUOTIENT*: uint64
|
PROPOSER_REWARD_QUOTIENT*: uint64
|
||||||
INACTIVITY_PENALTY_QUOTIENT*: uint64
|
INACTIVITY_PENALTY_QUOTIENT*: uint64
|
||||||
INACTIVITY_PENALTY_QUOTIENT_ALTAIR*: uint64
|
|
||||||
INACTIVITY_SCORE_BIAS*: uint64
|
|
||||||
INACTIVITY_SCORE_RECOVERY_RATE*: uint64
|
|
||||||
MIN_SLASHING_PENALTY_QUOTIENT*: uint64
|
MIN_SLASHING_PENALTY_QUOTIENT*: uint64
|
||||||
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR*: uint64
|
|
||||||
MIN_SYNC_COMMITTEE_PARTICIPANTS*: uint64
|
|
||||||
PROPORTIONAL_SLASHING_MULTIPLIER*: uint64
|
PROPORTIONAL_SLASHING_MULTIPLIER*: uint64
|
||||||
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR*: uint64
|
|
||||||
MAX_PROPOSER_SLASHINGS*: uint64
|
MAX_PROPOSER_SLASHINGS*: uint64
|
||||||
MAX_ATTESTER_SLASHINGS*: uint64
|
MAX_ATTESTER_SLASHINGS*: uint64
|
||||||
MAX_ATTESTATIONS*: uint64
|
MAX_ATTESTATIONS*: uint64
|
||||||
MAX_DEPOSITS*: uint64
|
MAX_DEPOSITS*: uint64
|
||||||
MAX_VOLUNTARY_EXITS*: uint64
|
MAX_VOLUNTARY_EXITS*: uint64
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/presets/mainnet/altair.yaml
|
||||||
|
INACTIVITY_PENALTY_QUOTIENT_ALTAIR*: uint64
|
||||||
|
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR*: uint64
|
||||||
|
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR*: uint64
|
||||||
|
SYNC_COMMITTEE_SIZE*: uint64
|
||||||
|
EPOCHS_PER_SYNC_COMMITTEE_PERIOD*: uint64
|
||||||
|
MIN_SYNC_COMMITTEE_PARTICIPANTS*: uint64
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/configs/mainnet.yaml
|
||||||
|
PRESET_BASE*: string
|
||||||
|
TERMINAL_TOTAL_DIFFICULTY*: UInt256
|
||||||
|
TERMINAL_BLOCK_HASH*: BlockHash
|
||||||
|
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT*: uint64
|
||||||
|
MIN_GENESIS_TIME*: uint64
|
||||||
|
GENESIS_FORK_VERSION*: Version
|
||||||
|
GENESIS_DELAY*: uint64
|
||||||
|
ALTAIR_FORK_VERSION*: Version
|
||||||
|
ALTAIR_FORK_EPOCH*: uint64
|
||||||
|
MERGE_FORK_VERSION*: Version
|
||||||
|
MERGE_FORK_EPOCH*: uint64
|
||||||
|
SHARDING_FORK_VERSION*: Version
|
||||||
|
SHARDING_FORK_EPOCH*: uint64
|
||||||
|
SECONDS_PER_SLOT*: uint64
|
||||||
|
SECONDS_PER_ETH1_BLOCK*: uint64
|
||||||
|
MIN_VALIDATOR_WITHDRAWABILITY_DELAY*: uint64
|
||||||
|
SHARD_COMMITTEE_PERIOD*: uint64
|
||||||
|
ETH1_FOLLOW_DISTANCE*: uint64
|
||||||
|
INACTIVITY_SCORE_BIAS*: uint64
|
||||||
|
INACTIVITY_SCORE_RECOVERY_RATE*: uint64
|
||||||
|
EJECTION_BALANCE*: uint64
|
||||||
|
MIN_PER_EPOCH_CHURN_LIMIT*: uint64
|
||||||
|
CHURN_LIMIT_QUOTIENT*: uint64
|
||||||
|
DEPOSIT_CHAIN_ID*: uint64
|
||||||
|
DEPOSIT_NETWORK_ID*: uint64
|
||||||
|
DEPOSIT_CONTRACT_ADDRESS*: Eth1Address
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/phase0/beacon-chain.md#constants
|
||||||
|
# GENESIS_SLOT
|
||||||
|
# GENESIS_EPOCH
|
||||||
|
# FAR_FUTURE_EPOCH
|
||||||
|
# BASE_REWARDS_PER_EPOCH
|
||||||
|
# DEPOSIT_CONTRACT_TREE_DEPTH
|
||||||
|
# JUSTIFICATION_BITS_LENGTH
|
||||||
|
# ENDIANNESS
|
||||||
|
BLS_WITHDRAWAL_PREFIX*: byte
|
||||||
|
ETH1_ADDRESS_WITHDRAWAL_PREFIX*: byte
|
||||||
DOMAIN_BEACON_PROPOSER*: DomainType
|
DOMAIN_BEACON_PROPOSER*: DomainType
|
||||||
DOMAIN_BEACON_ATTESTER*: DomainType
|
DOMAIN_BEACON_ATTESTER*: DomainType
|
||||||
DOMAIN_RANDAO*: DomainType
|
DOMAIN_RANDAO*: DomainType
|
||||||
|
@ -302,9 +320,31 @@ type
|
||||||
DOMAIN_VOLUNTARY_EXIT*: DomainType
|
DOMAIN_VOLUNTARY_EXIT*: DomainType
|
||||||
DOMAIN_SELECTION_PROOF*: DomainType
|
DOMAIN_SELECTION_PROOF*: DomainType
|
||||||
DOMAIN_AGGREGATE_AND_PROOF*: DomainType
|
DOMAIN_AGGREGATE_AND_PROOF*: DomainType
|
||||||
DOMAIN_CONTRIBUTION_AND_PROOF*: DomainType
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/altair/beacon-chain.md#constants
|
||||||
|
TIMELY_SOURCE_FLAG_INDEX*: byte
|
||||||
|
TIMELY_TARGET_FLAG_INDEX*: byte
|
||||||
|
TIMELY_HEAD_FLAG_INDEX*: byte
|
||||||
|
TIMELY_SOURCE_WEIGHT*: uint64
|
||||||
|
TIMELY_TARGET_WEIGHT*: uint64
|
||||||
|
TIMELY_HEAD_WEIGHT*: uint64
|
||||||
|
SYNC_REWARD_WEIGHT*: uint64
|
||||||
|
PROPOSER_WEIGHT*: uint64
|
||||||
|
WEIGHT_DENOMINATOR*: uint64
|
||||||
DOMAIN_SYNC_COMMITTEE*: DomainType
|
DOMAIN_SYNC_COMMITTEE*: DomainType
|
||||||
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF*: DomainType
|
DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF*: DomainType
|
||||||
|
DOMAIN_CONTRIBUTION_AND_PROOF*: DomainType
|
||||||
|
# PARTICIPATION_FLAG_WEIGHTS
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/phase0/validator.md#constants
|
||||||
|
TARGET_AGGREGATORS_PER_COMMITTEE*: uint64
|
||||||
|
RANDOM_SUBNETS_PER_VALIDATOR*: uint64
|
||||||
|
EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION*: uint64
|
||||||
|
ATTESTATION_SUBNET_COUNT*: uint64
|
||||||
|
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/altair/validator.md#constants
|
||||||
|
TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE*: uint64
|
||||||
|
SYNC_COMMITTEE_SUBNET_COUNT*: uint64
|
||||||
|
|
||||||
# The `RestSpec` is a dynamic dictionary that includes version-specific spec
|
# The `RestSpec` is a dynamic dictionary that includes version-specific spec
|
||||||
# constants. New versions may introduce new constants, and remove old ones.
|
# constants. New versions may introduce new constants, and remove old ones.
|
||||||
|
|
|
@ -15,7 +15,9 @@ export
|
||||||
toBytesBE
|
toBytesBE
|
||||||
|
|
||||||
const
|
const
|
||||||
|
# https://github.com/ethereum/consensus-specs/blob/v1.1.3/specs/phase0/beacon-chain.md#withdrawal-prefixes
|
||||||
BLS_WITHDRAWAL_PREFIX*: byte = 0
|
BLS_WITHDRAWAL_PREFIX*: byte = 0
|
||||||
|
ETH1_ADDRESS_WITHDRAWAL_PREFIX*: byte = 1
|
||||||
|
|
||||||
# Constants from `validator.md` not covered by config/presets in the spec
|
# Constants from `validator.md` not covered by config/presets in the spec
|
||||||
TARGET_AGGREGATORS_PER_COMMITTEE*: uint64 = 16
|
TARGET_AGGREGATORS_PER_COMMITTEE*: uint64 = 16
|
||||||
|
@ -29,7 +31,7 @@ type
|
||||||
Eth1Address* = ethtypes.Address
|
Eth1Address* = ethtypes.Address
|
||||||
|
|
||||||
RuntimeConfig* = object
|
RuntimeConfig* = object
|
||||||
## https://github.com/ethereum/consensus-specs/tree/v1.1.1/configs
|
## https://github.com/ethereum/consensus-specs/tree/v1.1.3/configs
|
||||||
|
|
||||||
PRESET_BASE*: string
|
PRESET_BASE*: string
|
||||||
|
|
||||||
|
|
|
@ -2670,7 +2670,7 @@
|
||||||
"response": {
|
"response": {
|
||||||
"status": {"operator": "equals", "value": "200"},
|
"status": {"operator": "equals", "value": "200"},
|
||||||
"headers": [{"key": "Content-Type", "value": "application/json", "operator": "equals"}],
|
"headers": [{"key": "Content-Type", "value": "application/json", "operator": "equals"}],
|
||||||
"body": [{"operator": "jstructcmps", "start": ["data"], "value": {"CONFIG_NAME":"","PRESET_BASE":"","ALTAIR_FORK_EPOCH":"","ALTAIR_FORK_VERSION":"","MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","SHUFFLE_ROUND_COUNT":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","SAFE_SLOTS_TO_UPDATE_JUSTIFIED":"","ETH1_FOLLOW_DISTANCE":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","RANDOM_SUBNETS_PER_VALIDATOR":"","EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION":"","SECONDS_PER_ETH1_BLOCK":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","EJECTION_BALANCE":"","EFFECTIVE_BALANCE_INCREMENT":"","GENESIS_FORK_VERSION":"","BLS_WITHDRAWAL_PREFIX":"","GENESIS_DELAY":"","SECONDS_PER_SLOT":"","MIN_ATTESTATION_INCLUSION_DELAY":"","SLOTS_PER_EPOCH":"","MIN_SEED_LOOKAHEAD":"","MAX_SEED_LOOKAHEAD":"","EPOCHS_PER_ETH1_VOTING_PERIOD":"","SLOTS_PER_HISTORICAL_ROOT":"","SYNC_COMMITTEE_SIZE":"","SYNC_COMMITTEE_SUBNET_COUNT":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","SHARD_COMMITTEE_PERIOD":"","MIN_EPOCHS_TO_INACTIVITY_PENALTY":"","EPOCHS_PER_HISTORICAL_VECTOR":"","EPOCHS_PER_SLASHINGS_VECTOR":"","EPOCHS_PER_SYNC_COMMITTEE_PERIOD":"","HISTORICAL_ROOTS_LIMIT":"","VALIDATOR_REGISTRY_LIMIT":"","BASE_REWARD_FACTOR":"","WHISTLEBLOWER_REWARD_QUOTIENT":"","PROPOSER_REWARD_QUOTIENT":"","INACTIVITY_PENALTY_QUOTIENT":"","INACTIVITY_PENALTY_QUOTIENT_ALTAIR":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","MIN_SLASHING_PENALTY_QUOTIENT":"","MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR":"","MIN_SYNC_COMMITTEE_PARTICIPANTS":"","PROPORTIONAL_SLASHING_MULTIPLIER":"","PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR":"","MAX_PROPOSER_SLASHINGS":"","MAX_ATTESTER_SLASHINGS":"","MAX_ATTESTATIONS":"","MAX_DEPOSITS":"","MAX_VOLUNTARY_EXITS":"","DOMAIN_BEACON_PROPOSER":"","DOMAIN_BEACON_ATTESTER":"","DOMAIN_RANDAO":"","DOMAIN_DEPOSIT":"","DOMAIN_VOLUNTARY_EXIT":"","DOMAIN_SELECTION_PROOF":"","DOMAIN_AGGREGATE_AND_PROOF":"","DOMAIN_CONTRIBUTION_AND_PROOF":"","DOMAIN_SYNC_COMMITTEE":"","DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF":""}}]
|
"body": [{"operator": "jstructcmps", "start": ["data"], "value": {"CONFIG_NAME":"","MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","SHUFFLE_ROUND_COUNT":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","SAFE_SLOTS_TO_UPDATE_JUSTIFIED":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","EFFECTIVE_BALANCE_INCREMENT":"","MIN_ATTESTATION_INCLUSION_DELAY":"","SLOTS_PER_EPOCH":"","MIN_SEED_LOOKAHEAD":"","MAX_SEED_LOOKAHEAD":"","EPOCHS_PER_ETH1_VOTING_PERIOD":"","SLOTS_PER_HISTORICAL_ROOT":"","MIN_EPOCHS_TO_INACTIVITY_PENALTY":"","EPOCHS_PER_HISTORICAL_VECTOR":"","EPOCHS_PER_SLASHINGS_VECTOR":"","HISTORICAL_ROOTS_LIMIT":"","VALIDATOR_REGISTRY_LIMIT":"","BASE_REWARD_FACTOR":"","WHISTLEBLOWER_REWARD_QUOTIENT":"","PROPOSER_REWARD_QUOTIENT":"","INACTIVITY_PENALTY_QUOTIENT":"","MIN_SLASHING_PENALTY_QUOTIENT":"","PROPORTIONAL_SLASHING_MULTIPLIER":"","MAX_PROPOSER_SLASHINGS":"","MAX_ATTESTER_SLASHINGS":"","MAX_ATTESTATIONS":"","MAX_DEPOSITS":"","MAX_VOLUNTARY_EXITS":"","INACTIVITY_PENALTY_QUOTIENT_ALTAIR":"","MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR":"","PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR":"","SYNC_COMMITTEE_SIZE":"","EPOCHS_PER_SYNC_COMMITTEE_PERIOD":"","MIN_SYNC_COMMITTEE_PARTICIPANTS":"","PRESET_BASE":"","TERMINAL_TOTAL_DIFFICULTY":"","TERMINAL_BLOCK_HASH":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","GENESIS_FORK_VERSION":"","GENESIS_DELAY":"","ALTAIR_FORK_VERSION":"","ALTAIR_FORK_EPOCH":"","MERGE_FORK_VERSION":"","MERGE_FORK_EPOCH":"","SHARDING_FORK_VERSION":"","SHARDING_FORK_EPOCH":"","SECONDS_PER_SLOT":"","SECONDS_PER_ETH1_BLOCK":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","SHARD_COMMITTEE_PERIOD":"","ETH1_FOLLOW_DISTANCE":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","EJECTION_BALANCE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","BLS_WITHDRAWAL_PREFIX":"","ETH1_ADDRESS_WITHDRAWAL_PREFIX":"","DOMAIN_BEACON_PROPOSER":"","DOMAIN_BEACON_ATTESTER":"","DOMAIN_RANDAO":"","DOMAIN_DEPOSIT":"","DOMAIN_VOLUNTARY_EXIT":"","DOMAIN_SELECTION_PROOF":"","DOMAIN_AGGREGATE_AND_PROOF":"","TIMELY_SOURCE_FLAG_INDEX":"","TIMELY_TARGET_FLAG_INDEX":"","TIMELY_HEAD_FLAG_INDEX":"","TIMELY_SOURCE_WEIGHT":"","TIMELY_TARGET_WEIGHT":"","TIMELY_HEAD_WEIGHT":"","SYNC_REWARD_WEIGHT":"","PROPOSER_WEIGHT":"","WEIGHT_DENOMINATOR":"","DOMAIN_SYNC_COMMITTEE":"","DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF":"","DOMAIN_CONTRIBUTION_AND_PROOF":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","RANDOM_SUBNETS_PER_VALIDATOR":"","EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION":"","ATTESTATION_SUBNET_COUNT":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","SYNC_COMMITTEE_SUBNET_COUNT":""}}]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue