diff --git a/WORKSPACE b/WORKSPACE index fbead3591c..f30ff74777 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -243,7 +243,7 @@ filegroup( url = "https://github.com/ethereum/EIPs/archive/5480440fe51742ed23342b68cf106cefd427e39d.tar.gz", ) -consensus_spec_version = "v1.4.0" +consensus_spec_version = "v1.5.0-alpha.0" bls_test_version = "v0.1.1" @@ -259,7 +259,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - sha256 = "c282c0f86f23f3d2e0f71f5975769a4077e62a7e3c7382a16bd26a7e589811a0", + sha256 = "33c5547772b6d8d6f041dff7e7d26b0358c2392daed34394a3aa81147812a81c", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/general.tar.gz" % consensus_spec_version, ) @@ -275,7 +275,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - sha256 = "4649c35aa3b8eb0cfdc81bee7c05649f90ef36bede5b0513e1f2e8baf37d6033", + sha256 = "06f286199cf2fedd4700487fb8feb0904e0ae18daaa4b3f70ea430ca9c388167", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/minimal.tar.gz" % consensus_spec_version, ) @@ -291,7 +291,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - sha256 = "c5a03f724f757456ffaabd2a899992a71d2baf45ee4db65ca3518f2b7ee928c8", + sha256 = "5f2a4452b323075eba6bf950003f7d91fd04ebcbde5bd087beafb5d6f6325ad4", url = "https://github.com/ethereum/consensus-spec-tests/releases/download/%s/mainnet.tar.gz" % consensus_spec_version, ) @@ -306,7 +306,7 @@ filegroup( visibility = ["//visibility:public"], ) """, - sha256 = "cd1c9d97baccbdde1d2454a7dceb8c6c61192a3b581eee12ffc94969f2db8453", + sha256 = "fd7e83e8cbeb3e297f2aeb93776305f7d606272c97834d8d9be673984501ed36", strip_prefix = "consensus-specs-" + consensus_spec_version[1:], url = "https://github.com/ethereum/consensus-specs/archive/refs/tags/%s.tar.gz" % consensus_spec_version, ) diff --git a/beacon-chain/rpc/eth/config/handlers_test.go b/beacon-chain/rpc/eth/config/handlers_test.go index 521ba62d5d..d4d4f7d18c 100644 --- a/beacon-chain/rpc/eth/config/handlers_test.go +++ b/beacon-chain/rpc/eth/config/handlers_test.go @@ -78,6 +78,8 @@ func TestGetSpec(t *testing.T) { config.CapellaForkEpoch = 103 config.DenebForkVersion = []byte("DenebForkVersion") config.DenebForkEpoch = 105 + config.ElectraForkVersion = []byte("ElectraForkVersion") + config.ElectraForkEpoch = 107 config.BLSWithdrawalPrefixByte = byte('b') config.ETH1AddressWithdrawalPrefixByte = byte('c') config.GenesisDelay = 24 @@ -170,293 +172,309 @@ func TestGetSpec(t *testing.T) { data, ok := resp.Data.(map[string]interface{}) require.Equal(t, true, ok) - assert.Equal(t, 129, len(data)) + assert.Equal(t, 136, len(data)) for k, v := range data { - switch k { - case "CONFIG_NAME": - assert.Equal(t, "ConfigName", v) - case "PRESET_BASE": - assert.Equal(t, "PresetBase", v) - case "MAX_COMMITTEES_PER_SLOT": - assert.Equal(t, "1", v) - case "TARGET_COMMITTEE_SIZE": - assert.Equal(t, "2", v) - case "MAX_VALIDATORS_PER_COMMITTEE": - assert.Equal(t, "3", v) - case "MIN_PER_EPOCH_CHURN_LIMIT": - assert.Equal(t, "4", v) - case "CHURN_LIMIT_QUOTIENT": - assert.Equal(t, "5", v) - case "SHUFFLE_ROUND_COUNT": - assert.Equal(t, "6", v) - case "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": - assert.Equal(t, "7", v) - case "MIN_GENESIS_TIME": - assert.Equal(t, "8", v) - case "HYSTERESIS_QUOTIENT": - assert.Equal(t, "9", v) - case "HYSTERESIS_DOWNWARD_MULTIPLIER": - assert.Equal(t, "10", v) - case "HYSTERESIS_UPWARD_MULTIPLIER": - assert.Equal(t, "11", v) - case "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": - assert.Equal(t, "0", v) - case "ETH1_FOLLOW_DISTANCE": - assert.Equal(t, "13", v) - case "TARGET_AGGREGATORS_PER_COMMITTEE": - assert.Equal(t, "14", v) - case "RANDOM_SUBNETS_PER_VALIDATOR": - assert.Equal(t, "15", v) - case "EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION": - assert.Equal(t, "16", v) - case "SECONDS_PER_ETH1_BLOCK": - assert.Equal(t, "17", v) - case "DEPOSIT_CHAIN_ID": - assert.Equal(t, "18", v) - case "DEPOSIT_NETWORK_ID": - assert.Equal(t, "19", v) - case "DEPOSIT_CONTRACT_ADDRESS": - assert.Equal(t, "DepositContractAddress", v) - case "MIN_DEPOSIT_AMOUNT": - assert.Equal(t, "20", v) - case "MAX_EFFECTIVE_BALANCE": - assert.Equal(t, "21", v) - case "EJECTION_BALANCE": - assert.Equal(t, "22", v) - case "EFFECTIVE_BALANCE_INCREMENT": - assert.Equal(t, "23", v) - case "GENESIS_FORK_VERSION": - assert.Equal(t, "0x"+hex.EncodeToString([]byte("GenesisForkVersion")), v) - case "ALTAIR_FORK_VERSION": - assert.Equal(t, "0x"+hex.EncodeToString([]byte("AltairForkVersion")), v) - case "ALTAIR_FORK_EPOCH": - assert.Equal(t, "100", v) - case "BELLATRIX_FORK_VERSION": - assert.Equal(t, "0x"+hex.EncodeToString([]byte("BellatrixForkVersion")), v) - case "BELLATRIX_FORK_EPOCH": - assert.Equal(t, "101", v) - case "CAPELLA_FORK_VERSION": - assert.Equal(t, "0x"+hex.EncodeToString([]byte("CapellaForkVersion")), v) - case "CAPELLA_FORK_EPOCH": - assert.Equal(t, "103", v) - case "DENEB_FORK_VERSION": - assert.Equal(t, "0x"+hex.EncodeToString([]byte("DenebForkVersion")), v) - case "DENEB_FORK_EPOCH": - assert.Equal(t, "105", v) - case "MIN_ANCHOR_POW_BLOCK_DIFFICULTY": - assert.Equal(t, "1000", v) - case "BLS_WITHDRAWAL_PREFIX": - assert.Equal(t, "0x62", v) - case "ETH1_ADDRESS_WITHDRAWAL_PREFIX": - assert.Equal(t, "0x63", v) - case "GENESIS_DELAY": - assert.Equal(t, "24", v) - case "SECONDS_PER_SLOT": - assert.Equal(t, "25", v) - case "MIN_ATTESTATION_INCLUSION_DELAY": - assert.Equal(t, "26", v) - case "SLOTS_PER_EPOCH": - assert.Equal(t, "27", v) - case "MIN_SEED_LOOKAHEAD": - assert.Equal(t, "28", v) - case "MAX_SEED_LOOKAHEAD": - assert.Equal(t, "29", v) - case "EPOCHS_PER_ETH1_VOTING_PERIOD": - assert.Equal(t, "30", v) - case "SLOTS_PER_HISTORICAL_ROOT": - assert.Equal(t, "31", v) - case "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": - assert.Equal(t, "32", v) - case "SHARD_COMMITTEE_PERIOD": - assert.Equal(t, "33", v) - case "MIN_EPOCHS_TO_INACTIVITY_PENALTY": - assert.Equal(t, "34", v) - case "EPOCHS_PER_HISTORICAL_VECTOR": - assert.Equal(t, "35", v) - case "EPOCHS_PER_SLASHINGS_VECTOR": - assert.Equal(t, "36", v) - case "HISTORICAL_ROOTS_LIMIT": - assert.Equal(t, "37", v) - case "VALIDATOR_REGISTRY_LIMIT": - assert.Equal(t, "38", v) - case "BASE_REWARD_FACTOR": - assert.Equal(t, "39", v) - case "WHISTLEBLOWER_REWARD_QUOTIENT": - assert.Equal(t, "40", v) - case "PROPOSER_REWARD_QUOTIENT": - assert.Equal(t, "41", v) - case "INACTIVITY_PENALTY_QUOTIENT": - assert.Equal(t, "42", v) - case "HF1_INACTIVITY_PENALTY_QUOTIENT": - assert.Equal(t, "43", v) - case "MIN_SLASHING_PENALTY_QUOTIENT": - assert.Equal(t, "44", v) - case "HF1_MIN_SLASHING_PENALTY_QUOTIENT": - assert.Equal(t, "45", v) - case "PROPORTIONAL_SLASHING_MULTIPLIER": - assert.Equal(t, "46", v) - case "HF1_PROPORTIONAL_SLASHING_MULTIPLIER": - assert.Equal(t, "47", v) - case "MAX_PROPOSER_SLASHINGS": - assert.Equal(t, "48", v) - case "MAX_ATTESTER_SLASHINGS": - assert.Equal(t, "49", v) - case "MAX_ATTESTATIONS": - assert.Equal(t, "50", v) - case "MAX_DEPOSITS": - assert.Equal(t, "51", v) - case "MAX_VOLUNTARY_EXITS": - assert.Equal(t, "52", v) - case "MAX_BLOBS_PER_BLOCK": - assert.Equal(t, "4", v) - case "TIMELY_HEAD_FLAG_INDEX": - assert.Equal(t, "0x35", v) - case "TIMELY_SOURCE_FLAG_INDEX": - assert.Equal(t, "0x36", v) - case "TIMELY_TARGET_FLAG_INDEX": - assert.Equal(t, "0x37", v) - case "TIMELY_HEAD_WEIGHT": - assert.Equal(t, "56", v) - case "TIMELY_SOURCE_WEIGHT": - assert.Equal(t, "57", v) - case "TIMELY_TARGET_WEIGHT": - assert.Equal(t, "58", v) - case "SYNC_REWARD_WEIGHT": - assert.Equal(t, "59", v) - case "WEIGHT_DENOMINATOR": - assert.Equal(t, "60", v) - case "TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE": - assert.Equal(t, "61", v) - case "SYNC_COMMITTEE_SUBNET_COUNT": - assert.Equal(t, "62", v) - case "SYNC_COMMITTEE_SIZE": - assert.Equal(t, "63", v) - case "SYNC_PUBKEYS_PER_AGGREGATE": - assert.Equal(t, "64", v) - case "INACTIVITY_SCORE_BIAS": - assert.Equal(t, "65", v) - case "EPOCHS_PER_SYNC_COMMITTEE_PERIOD": - assert.Equal(t, "66", v) - case "INACTIVITY_PENALTY_QUOTIENT_ALTAIR": - assert.Equal(t, "67", v) - case "MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR": - assert.Equal(t, "68", v) - case "PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR": - assert.Equal(t, "69", v) - case "INACTIVITY_SCORE_RECOVERY_RATE": - assert.Equal(t, "70", v) - case "MIN_SYNC_COMMITTEE_PARTICIPANTS": - assert.Equal(t, "71", v) - case "PROPOSER_WEIGHT": - assert.Equal(t, "8", v) - case "DOMAIN_BEACON_PROPOSER": - assert.Equal(t, "0x30303031", v) - case "DOMAIN_BEACON_ATTESTER": - assert.Equal(t, "0x30303032", v) - case "DOMAIN_RANDAO": - assert.Equal(t, "0x30303033", v) - case "DOMAIN_DEPOSIT": - assert.Equal(t, "0x30303034", v) - case "DOMAIN_VOLUNTARY_EXIT": - assert.Equal(t, "0x30303035", v) - case "DOMAIN_SELECTION_PROOF": - assert.Equal(t, "0x30303036", v) - case "DOMAIN_AGGREGATE_AND_PROOF": - assert.Equal(t, "0x30303037", v) - case "DOMAIN_APPLICATION_MASK": - assert.Equal(t, "0x31303030", v) - case "DOMAIN_SYNC_COMMITTEE": - assert.Equal(t, "0x07000000", v) - case "DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF": - assert.Equal(t, "0x08000000", v) - case "DOMAIN_CONTRIBUTION_AND_PROOF": - assert.Equal(t, "0x09000000", v) - case "DOMAIN_BLS_TO_EXECUTION_CHANGE": - assert.Equal(t, "0x0a000000", v) - case "DOMAIN_APPLICATION_BUILDER": - assert.Equal(t, "0x00000001", v) - case "DOMAIN_BLOB_SIDECAR": - assert.Equal(t, "0x00000000", v) - case "TRANSITION_TOTAL_DIFFICULTY": - assert.Equal(t, "0", v) - case "TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH": - assert.Equal(t, "72", v) - case "TERMINAL_BLOCK_HASH": - s, ok := v.(string) - require.Equal(t, true, ok) - assert.Equal(t, common.HexToHash("TerminalBlockHash"), common.HexToHash(s)) - case "TERMINAL_TOTAL_DIFFICULTY": - assert.Equal(t, "73", v) - case "DefaultFeeRecipient": - assert.Equal(t, common.HexToAddress("DefaultFeeRecipient"), v) - case "PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX": - assert.Equal(t, "3", v) - case "MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX": - assert.Equal(t, "32", v) - case "INACTIVITY_PENALTY_QUOTIENT_BELLATRIX": - assert.Equal(t, "16777216", v) - case "PROPOSER_SCORE_BOOST": - assert.Equal(t, "40", v) - case "INTERVALS_PER_SLOT": - assert.Equal(t, "3", v) - case "MAX_WITHDRAWALS_PER_PAYLOAD": - assert.Equal(t, "74", v) - case "MAX_BLS_TO_EXECUTION_CHANGES": - assert.Equal(t, "75", v) - case "MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP": - assert.Equal(t, "76", v) - case "REORG_MAX_EPOCHS_SINCE_FINALIZATION": - assert.Equal(t, "2", v) - case "REORG_WEIGHT_THRESHOLD": - assert.Equal(t, "20", v) - case "REORG_PARENT_WEIGHT_THRESHOLD": - assert.Equal(t, "160", v) - case "MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT": - assert.Equal(t, "8", v) - case "MAX_REQUEST_LIGHT_CLIENT_UPDATES": - assert.Equal(t, "128", v) - case "SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY": - case "NODE_ID_BITS": - assert.Equal(t, "256", v) - case "ATTESTATION_SUBNET_EXTRA_BITS": - assert.Equal(t, "0", v) - case "ATTESTATION_SUBNET_PREFIX_BITS": - assert.Equal(t, "6", v) - case "SUBNETS_PER_NODE": - assert.Equal(t, "2", v) - case "EPOCHS_PER_SUBNET_SUBSCRIPTION": - assert.Equal(t, "256", v) - case "MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS": - assert.Equal(t, "4096", v) - case "MAX_REQUEST_BLOB_SIDECARS": - assert.Equal(t, "768", v) - case "MESSAGE_DOMAIN_INVALID_SNAPPY": - assert.Equal(t, "0x00000000", v) - case "MESSAGE_DOMAIN_VALID_SNAPPY": - assert.Equal(t, "0x01000000", v) - case "ATTESTATION_PROPAGATION_SLOT_RANGE": - assert.Equal(t, "32", v) - case "RESP_TIMEOUT": - assert.Equal(t, "10", v) - case "TTFB_TIMEOUT": - assert.Equal(t, "5", v) - case "MIN_EPOCHS_FOR_BLOCK_REQUESTS": - assert.Equal(t, "33024", v) - case "GOSSIP_MAX_SIZE": - assert.Equal(t, "10485760", v) - case "MAX_CHUNK_SIZE": - assert.Equal(t, "10485760", v) - case "ATTESTATION_SUBNET_COUNT": - assert.Equal(t, "64", v) - case "MAXIMUM_GOSSIP_CLOCK_DISPARITY": - assert.Equal(t, "500", v) - case "MAX_REQUEST_BLOCKS": - assert.Equal(t, "1024", v) - case "MAX_REQUEST_BLOCKS_DENEB": - assert.Equal(t, "128", v) - default: - t.Errorf("Incorrect key: %s", k) - } + t.Run(k, func(t *testing.T) { + switch k { + case "CONFIG_NAME": + assert.Equal(t, "ConfigName", v) + case "PRESET_BASE": + assert.Equal(t, "PresetBase", v) + case "MAX_COMMITTEES_PER_SLOT": + assert.Equal(t, "1", v) + case "TARGET_COMMITTEE_SIZE": + assert.Equal(t, "2", v) + case "MAX_VALIDATORS_PER_COMMITTEE": + assert.Equal(t, "3", v) + case "MIN_PER_EPOCH_CHURN_LIMIT": + assert.Equal(t, "4", v) + case "CHURN_LIMIT_QUOTIENT": + assert.Equal(t, "5", v) + case "SHUFFLE_ROUND_COUNT": + assert.Equal(t, "6", v) + case "MIN_GENESIS_ACTIVE_VALIDATOR_COUNT": + assert.Equal(t, "7", v) + case "MIN_GENESIS_TIME": + assert.Equal(t, "8", v) + case "HYSTERESIS_QUOTIENT": + assert.Equal(t, "9", v) + case "HYSTERESIS_DOWNWARD_MULTIPLIER": + assert.Equal(t, "10", v) + case "HYSTERESIS_UPWARD_MULTIPLIER": + assert.Equal(t, "11", v) + case "SAFE_SLOTS_TO_UPDATE_JUSTIFIED": + assert.Equal(t, "0", v) + case "ETH1_FOLLOW_DISTANCE": + assert.Equal(t, "13", v) + case "TARGET_AGGREGATORS_PER_COMMITTEE": + assert.Equal(t, "14", v) + case "RANDOM_SUBNETS_PER_VALIDATOR": + assert.Equal(t, "15", v) + case "EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION": + assert.Equal(t, "16", v) + case "SECONDS_PER_ETH1_BLOCK": + assert.Equal(t, "17", v) + case "DEPOSIT_CHAIN_ID": + assert.Equal(t, "18", v) + case "DEPOSIT_NETWORK_ID": + assert.Equal(t, "19", v) + case "DEPOSIT_CONTRACT_ADDRESS": + assert.Equal(t, "DepositContractAddress", v) + case "MIN_DEPOSIT_AMOUNT": + assert.Equal(t, "20", v) + case "MAX_EFFECTIVE_BALANCE": + assert.Equal(t, "21", v) + case "EJECTION_BALANCE": + assert.Equal(t, "22", v) + case "EFFECTIVE_BALANCE_INCREMENT": + assert.Equal(t, "23", v) + case "GENESIS_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("GenesisForkVersion")), v) + case "ALTAIR_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("AltairForkVersion")), v) + case "ALTAIR_FORK_EPOCH": + assert.Equal(t, "100", v) + case "BELLATRIX_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("BellatrixForkVersion")), v) + case "BELLATRIX_FORK_EPOCH": + assert.Equal(t, "101", v) + case "CAPELLA_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("CapellaForkVersion")), v) + case "CAPELLA_FORK_EPOCH": + assert.Equal(t, "103", v) + case "DENEB_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("DenebForkVersion")), v) + case "DENEB_FORK_EPOCH": + assert.Equal(t, "105", v) + case "ELECTRA_FORK_VERSION": + assert.Equal(t, "0x"+hex.EncodeToString([]byte("ElectraForkVersion")), v) + case "ELECTRA_FORK_EPOCH": + assert.Equal(t, "107", v) + case "MIN_ANCHOR_POW_BLOCK_DIFFICULTY": + assert.Equal(t, "1000", v) + case "BLS_WITHDRAWAL_PREFIX": + assert.Equal(t, "0x62", v) + case "ETH1_ADDRESS_WITHDRAWAL_PREFIX": + assert.Equal(t, "0x63", v) + case "GENESIS_DELAY": + assert.Equal(t, "24", v) + case "SECONDS_PER_SLOT": + assert.Equal(t, "25", v) + case "MIN_ATTESTATION_INCLUSION_DELAY": + assert.Equal(t, "26", v) + case "SLOTS_PER_EPOCH": + assert.Equal(t, "27", v) + case "MIN_SEED_LOOKAHEAD": + assert.Equal(t, "28", v) + case "MAX_SEED_LOOKAHEAD": + assert.Equal(t, "29", v) + case "EPOCHS_PER_ETH1_VOTING_PERIOD": + assert.Equal(t, "30", v) + case "SLOTS_PER_HISTORICAL_ROOT": + assert.Equal(t, "31", v) + case "MIN_VALIDATOR_WITHDRAWABILITY_DELAY": + assert.Equal(t, "32", v) + case "SHARD_COMMITTEE_PERIOD": + assert.Equal(t, "33", v) + case "MIN_EPOCHS_TO_INACTIVITY_PENALTY": + assert.Equal(t, "34", v) + case "EPOCHS_PER_HISTORICAL_VECTOR": + assert.Equal(t, "35", v) + case "EPOCHS_PER_SLASHINGS_VECTOR": + assert.Equal(t, "36", v) + case "HISTORICAL_ROOTS_LIMIT": + assert.Equal(t, "37", v) + case "VALIDATOR_REGISTRY_LIMIT": + assert.Equal(t, "38", v) + case "BASE_REWARD_FACTOR": + assert.Equal(t, "39", v) + case "WHISTLEBLOWER_REWARD_QUOTIENT": + assert.Equal(t, "40", v) + case "PROPOSER_REWARD_QUOTIENT": + assert.Equal(t, "41", v) + case "INACTIVITY_PENALTY_QUOTIENT": + assert.Equal(t, "42", v) + case "HF1_INACTIVITY_PENALTY_QUOTIENT": + assert.Equal(t, "43", v) + case "MIN_SLASHING_PENALTY_QUOTIENT": + assert.Equal(t, "44", v) + case "HF1_MIN_SLASHING_PENALTY_QUOTIENT": + assert.Equal(t, "45", v) + case "PROPORTIONAL_SLASHING_MULTIPLIER": + assert.Equal(t, "46", v) + case "HF1_PROPORTIONAL_SLASHING_MULTIPLIER": + assert.Equal(t, "47", v) + case "MAX_PROPOSER_SLASHINGS": + assert.Equal(t, "48", v) + case "MAX_ATTESTER_SLASHINGS": + assert.Equal(t, "49", v) + case "MAX_ATTESTATIONS": + assert.Equal(t, "50", v) + case "MAX_DEPOSITS": + assert.Equal(t, "51", v) + case "MAX_VOLUNTARY_EXITS": + assert.Equal(t, "52", v) + case "MAX_BLOBS_PER_BLOCK": + assert.Equal(t, "4", v) + case "TIMELY_HEAD_FLAG_INDEX": + assert.Equal(t, "0x35", v) + case "TIMELY_SOURCE_FLAG_INDEX": + assert.Equal(t, "0x36", v) + case "TIMELY_TARGET_FLAG_INDEX": + assert.Equal(t, "0x37", v) + case "TIMELY_HEAD_WEIGHT": + assert.Equal(t, "56", v) + case "TIMELY_SOURCE_WEIGHT": + assert.Equal(t, "57", v) + case "TIMELY_TARGET_WEIGHT": + assert.Equal(t, "58", v) + case "SYNC_REWARD_WEIGHT": + assert.Equal(t, "59", v) + case "WEIGHT_DENOMINATOR": + assert.Equal(t, "60", v) + case "TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE": + assert.Equal(t, "61", v) + case "SYNC_COMMITTEE_SUBNET_COUNT": + assert.Equal(t, "62", v) + case "SYNC_COMMITTEE_SIZE": + assert.Equal(t, "63", v) + case "SYNC_PUBKEYS_PER_AGGREGATE": + assert.Equal(t, "64", v) + case "INACTIVITY_SCORE_BIAS": + assert.Equal(t, "65", v) + case "EPOCHS_PER_SYNC_COMMITTEE_PERIOD": + assert.Equal(t, "66", v) + case "INACTIVITY_PENALTY_QUOTIENT_ALTAIR": + assert.Equal(t, "67", v) + case "MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR": + assert.Equal(t, "68", v) + case "PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR": + assert.Equal(t, "69", v) + case "INACTIVITY_SCORE_RECOVERY_RATE": + assert.Equal(t, "70", v) + case "MIN_SYNC_COMMITTEE_PARTICIPANTS": + assert.Equal(t, "71", v) + case "PROPOSER_WEIGHT": + assert.Equal(t, "8", v) + case "DOMAIN_BEACON_PROPOSER": + assert.Equal(t, "0x30303031", v) + case "DOMAIN_BEACON_ATTESTER": + assert.Equal(t, "0x30303032", v) + case "DOMAIN_RANDAO": + assert.Equal(t, "0x30303033", v) + case "DOMAIN_DEPOSIT": + assert.Equal(t, "0x30303034", v) + case "DOMAIN_VOLUNTARY_EXIT": + assert.Equal(t, "0x30303035", v) + case "DOMAIN_SELECTION_PROOF": + assert.Equal(t, "0x30303036", v) + case "DOMAIN_AGGREGATE_AND_PROOF": + assert.Equal(t, "0x30303037", v) + case "DOMAIN_APPLICATION_MASK": + assert.Equal(t, "0x31303030", v) + case "DOMAIN_SYNC_COMMITTEE": + assert.Equal(t, "0x07000000", v) + case "DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF": + assert.Equal(t, "0x08000000", v) + case "DOMAIN_CONTRIBUTION_AND_PROOF": + assert.Equal(t, "0x09000000", v) + case "DOMAIN_BLS_TO_EXECUTION_CHANGE": + assert.Equal(t, "0x0a000000", v) + case "DOMAIN_APPLICATION_BUILDER": + assert.Equal(t, "0x00000001", v) + case "DOMAIN_BLOB_SIDECAR": + assert.Equal(t, "0x00000000", v) + case "TRANSITION_TOTAL_DIFFICULTY": + assert.Equal(t, "0", v) + case "TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH": + assert.Equal(t, "72", v) + case "TERMINAL_BLOCK_HASH": + s, ok := v.(string) + require.Equal(t, true, ok) + assert.Equal(t, common.HexToHash("TerminalBlockHash"), common.HexToHash(s)) + case "TERMINAL_TOTAL_DIFFICULTY": + assert.Equal(t, "73", v) + case "DefaultFeeRecipient": + assert.Equal(t, common.HexToAddress("DefaultFeeRecipient"), v) + case "PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX": + assert.Equal(t, "3", v) + case "MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX": + assert.Equal(t, "32", v) + case "INACTIVITY_PENALTY_QUOTIENT_BELLATRIX": + assert.Equal(t, "16777216", v) + case "PROPOSER_SCORE_BOOST": + assert.Equal(t, "40", v) + case "INTERVALS_PER_SLOT": + assert.Equal(t, "3", v) + case "MAX_WITHDRAWALS_PER_PAYLOAD": + assert.Equal(t, "74", v) + case "MAX_BLS_TO_EXECUTION_CHANGES": + assert.Equal(t, "75", v) + case "MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP": + assert.Equal(t, "76", v) + case "REORG_MAX_EPOCHS_SINCE_FINALIZATION": + assert.Equal(t, "2", v) + case "REORG_WEIGHT_THRESHOLD": + assert.Equal(t, "20", v) + case "REORG_PARENT_WEIGHT_THRESHOLD": + assert.Equal(t, "160", v) + case "MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT": + assert.Equal(t, "8", v) + case "MAX_REQUEST_LIGHT_CLIENT_UPDATES": + assert.Equal(t, "128", v) + case "SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY": + case "NODE_ID_BITS": + assert.Equal(t, "256", v) + case "ATTESTATION_SUBNET_EXTRA_BITS": + assert.Equal(t, "0", v) + case "ATTESTATION_SUBNET_PREFIX_BITS": + assert.Equal(t, "6", v) + case "SUBNETS_PER_NODE": + assert.Equal(t, "2", v) + case "EPOCHS_PER_SUBNET_SUBSCRIPTION": + assert.Equal(t, "256", v) + case "MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS": + assert.Equal(t, "4096", v) + case "MAX_REQUEST_BLOB_SIDECARS": + assert.Equal(t, "768", v) + case "MESSAGE_DOMAIN_INVALID_SNAPPY": + assert.Equal(t, "0x00000000", v) + case "MESSAGE_DOMAIN_VALID_SNAPPY": + assert.Equal(t, "0x01000000", v) + case "ATTESTATION_PROPAGATION_SLOT_RANGE": + assert.Equal(t, "32", v) + case "RESP_TIMEOUT": + assert.Equal(t, "10", v) + case "TTFB_TIMEOUT": + assert.Equal(t, "5", v) + case "MIN_EPOCHS_FOR_BLOCK_REQUESTS": + assert.Equal(t, "33024", v) + case "GOSSIP_MAX_SIZE": + assert.Equal(t, "10485760", v) + case "MAX_CHUNK_SIZE": + assert.Equal(t, "10485760", v) + case "ATTESTATION_SUBNET_COUNT": + assert.Equal(t, "64", v) + case "MAXIMUM_GOSSIP_CLOCK_DISPARITY": + assert.Equal(t, "500", v) + case "MAX_REQUEST_BLOCKS": + assert.Equal(t, "1024", v) + case "MAX_REQUEST_BLOCKS_DENEB": + assert.Equal(t, "128", v) + case "NUMBER_OF_COLUMNS": + assert.Equal(t, "128", v) + case "MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA": + assert.Equal(t, "128000000000", v) + case "MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT": + assert.Equal(t, "256000000000", v) + case "DATA_COLUMN_SIDECAR_SUBNET_COUNT": + assert.Equal(t, "32", v) + case "MAX_REQUEST_DATA_COLUMN_SIDECARS": + assert.Equal(t, "16384", v) + default: + t.Errorf("Incorrect key: %s", k) + } + }) } } diff --git a/config/params/config.go b/config/params/config.go index 7a140be77c..75817b273c 100644 --- a/config/params/config.go +++ b/config/params/config.go @@ -157,6 +157,8 @@ type BeaconChainConfig struct { CapellaForkEpoch primitives.Epoch `yaml:"CAPELLA_FORK_EPOCH" spec:"true"` // CapellaForkEpoch is used to represent the assigned fork epoch for capella. DenebForkVersion []byte `yaml:"DENEB_FORK_VERSION" spec:"true"` // DenebForkVersion is used to represent the fork version for deneb. DenebForkEpoch primitives.Epoch `yaml:"DENEB_FORK_EPOCH" spec:"true"` // DenebForkEpoch is used to represent the assigned fork epoch for deneb. + ElectraForkVersion []byte `yaml:"ELECTRA_FORK_VERSION" spec:"true"` // ElectraForkVersion is used to represent the fork version for deneb. + ElectraForkEpoch primitives.Epoch `yaml:"ELECTRA_FORK_EPOCH" spec:"true"` // ElectraForkEpoch is used to represent the assigned fork epoch for deneb. ForkVersionSchedule map[[fieldparams.VersionLength]byte]primitives.Epoch // Schedule of fork epochs by version. ForkVersionNames map[[fieldparams.VersionLength]byte]string // Human-readable names of fork versions. @@ -226,6 +228,13 @@ type BeaconChainConfig struct { MaxRequestBlobSidecars uint64 `yaml:"MAX_REQUEST_BLOB_SIDECARS" spec:"true"` // MaxRequestBlobSidecars is the maximum number of blobs to request in a single request. MaxRequestBlocksDeneb uint64 `yaml:"MAX_REQUEST_BLOCKS_DENEB" spec:"true"` // MaxRequestBlocksDeneb is the maximum number of blocks in a single request after the deneb epoch. + // Values introduce in Electra upgrade + NumberOfColumns uint64 `yaml:"NUMBER_OF_COLUMNS" spec:"true"` // NumberOfColumns in the extended data matrix. + DataColumnSidecarSubnetCount uint64 `yaml:"DATA_COLUMN_SIDECAR_SUBNET_COUNT" spec:"true"` // DataColumnSidecarSubnetCount is the number of data column sidecar subnets used in the gossipsub protocol + MaxPerEpochActivationExitChurnLimit uint64 `yaml:"MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT" spec:"true"` // MaxPerEpochActivationExitChurnLimit represents the maximum combined activation and exit churn. + MinPerEpochChurnLimitElectra uint64 `yaml:"MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA" spec:"true"` // MinPerEpochChurnLimitElectra is the minimum amount of churn allotted for validator rotations for electra. + MaxRequestDataColumnSidecars uint64 `yaml:"MAX_REQUEST_DATA_COLUMN_SIDECARS" spec:"true"` // MaxRequestDataColumnSidecars is the maximum number of data column sidecars in a single request + // Networking Specific Parameters GossipMaxSize uint64 `yaml:"GOSSIP_MAX_SIZE" spec:"true"` // GossipMaxSize is the maximum allowed size of uncompressed gossip messages. MaxChunkSize uint64 `yaml:"MAX_CHUNK_SIZE" spec:"true"` // MaxChunkSize is the maximum allowed size of uncompressed req/resp chunked responses. diff --git a/config/params/mainnet_config.go b/config/params/mainnet_config.go index 48e9060721..8f22c974d1 100644 --- a/config/params/mainnet_config.go +++ b/config/params/mainnet_config.go @@ -27,6 +27,8 @@ const ( mainnetCapellaForkEpoch = 194048 // April 12, 2023, 22:27:35 UTC // Deneb Fork Epoch for mainnet config. mainnetDenebForkEpoch = 269568 // March 13, 2024, 13:55:35 UTC + // Electra Fork Epoch for mainnet config + mainnetElectraForkEpoch = math.MaxUint64 // Far future / to be defined ) var mainnetNetworkConfig = &NetworkConfig{ @@ -207,6 +209,8 @@ var mainnetBeaconConfig = &BeaconChainConfig{ CapellaForkEpoch: mainnetCapellaForkEpoch, DenebForkVersion: []byte{4, 0, 0, 0}, DenebForkEpoch: mainnetDenebForkEpoch, + ElectraForkVersion: []byte{5, 0, 0, 0}, + ElectraForkEpoch: mainnetElectraForkEpoch, // New values introduced in Altair hard fork 1. // Participation flag indices. @@ -265,6 +269,13 @@ var mainnetBeaconConfig = &BeaconChainConfig{ MaxRequestBlobSidecars: 768, MaxRequestBlocksDeneb: 128, + // Values related to electra + NumberOfColumns: 128, + MaxRequestDataColumnSidecars: 16384, + DataColumnSidecarSubnetCount: 32, + MinPerEpochChurnLimitElectra: 128000000000, + MaxPerEpochActivationExitChurnLimit: 256000000000, + // Values related to networking parameters. GossipMaxSize: 10 * 1 << 20, // 10 MiB MaxChunkSize: 10 * 1 << 20, // 10 MiB diff --git a/config/params/minimal_config.go b/config/params/minimal_config.go index 72cd7e2da3..7f4eb0273f 100644 --- a/config/params/minimal_config.go +++ b/config/params/minimal_config.go @@ -91,12 +91,18 @@ func MinimalSpecConfig() *BeaconChainConfig { minimalConfig.CapellaForkEpoch = math.MaxUint64 minimalConfig.DenebForkVersion = []byte{4, 0, 0, 1} minimalConfig.DenebForkEpoch = math.MaxUint64 + minimalConfig.ElectraForkVersion = []byte{5, 0, 0, 1} + minimalConfig.AltairForkEpoch = math.MaxUint64 minimalConfig.SyncCommitteeSize = 32 minimalConfig.InactivityScoreBias = 4 minimalConfig.EpochsPerSyncCommitteePeriod = 8 minimalConfig.MinEpochsForBlockRequests = 272 + // New Electra params + minimalConfig.MinPerEpochChurnLimitElectra = 64000000000 + minimalConfig.MaxPerEpochActivationExitChurnLimit = 128000000000 + // Ethereum PoW parameters. minimalConfig.DepositChainID = 5 // Chain ID of eth1 goerli. minimalConfig.DepositNetworkID = 5 // Network ID of eth1 goerli.