From c8ee2e5291201c83b2f8938079c48efed1dc2775 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Mon, 24 Feb 2025 20:24:48 +0100 Subject: [PATCH 1/3] Merge `GOSSIP_MAX_SIZE` and `MAX_CHUNK_SIZE` into `MAX_PAYLOAD_SIZE` In upstream specs the preset values for indicating max payload sizes have been merged into a single `MAX_PAYLOAD_SIZE` constant. --- beacon_chain/beacon_chain_file.nim | 2 +- beacon_chain/networking/eth2_network.nim | 20 +++++----- beacon_chain/spec/datatypes/constants.nim | 5 +-- beacon_chain/spec/presets.nim | 27 +++++-------- ncli/resttest-rules.json | 2 +- scripts/mainnet-non-overriden-config.yaml | 47 ++++++++++++++++++----- scripts/minimal-non-overriden-config.yaml | 46 +++++++++++++++++----- 7 files changed, 97 insertions(+), 52 deletions(-) diff --git a/beacon_chain/beacon_chain_file.nim b/beacon_chain/beacon_chain_file.nim index f19d4cf84c..17d119cef2 100644 --- a/beacon_chain/beacon_chain_file.nim +++ b/beacon_chain/beacon_chain_file.nim @@ -71,7 +71,7 @@ const ChainFileVersion = 1'u32 ChainFileHeaderValue = 0x424D494E'u32 ChainFileBufferSize* = 4096 - MaxChunkSize = int(GOSSIP_MAX_SIZE) + MaxChunkSize = int(MAX_PAYLOAD_SIZE) ChainFileHeaderArray = ChainFileHeaderValue.toBytesLE() IncompleteWriteError = "Unable to write data to file, disk full?" MaxForksCount* = 16384 diff --git a/beacon_chain/networking/eth2_network.nim b/beacon_chain/networking/eth2_network.nim index 43de82ff3c..a1fcb3a773 100644 --- a/beacon_chain/networking/eth2_network.nim +++ b/beacon_chain/networking/eth2_network.nim @@ -845,8 +845,8 @@ func chunkMaxSize[T](): uint32 = when isFixedSize(T): uint32 fixedPortionSize(T) else: - static: doAssert MAX_CHUNK_SIZE < high(uint32).uint64 - MAX_CHUNK_SIZE.uint32 + static: doAssert MAX_PAYLOAD_SIZE < high(uint32).uint64 + MAX_PAYLOAD_SIZE.uint32 template gossipMaxSize(T: untyped): uint32 = const maxSize = static: @@ -855,20 +855,20 @@ template gossipMaxSize(T: untyped): uint32 = elif T is bellatrix.SignedBeaconBlock or T is capella.SignedBeaconBlock or T is deneb.SignedBeaconBlock or T is electra.SignedBeaconBlock or T is fulu.SignedBeaconBlock: - GOSSIP_MAX_SIZE + MAX_PAYLOAD_SIZE # TODO https://github.com/status-im/nim-ssz-serialization/issues/20 for # Attestation, AttesterSlashing, and SignedAggregateAndProof, which all # have lists bounded at MAX_VALIDATORS_PER_COMMITTEE (2048) items, thus - # having max sizes significantly smaller than GOSSIP_MAX_SIZE. + # having max sizes significantly smaller than MAX_PAYLOAD_SIZE. elif T is phase0.Attestation or T is phase0.AttesterSlashing or T is phase0.SignedAggregateAndProof or T is phase0.SignedBeaconBlock or T is electra.SignedAggregateAndProof or T is electra.Attestation or T is electra.AttesterSlashing or T is altair.SignedBeaconBlock or T is SomeForkyLightClientObject: - GOSSIP_MAX_SIZE + MAX_PAYLOAD_SIZE else: {.fatal: "unknown type " & name(T).} - static: doAssert maxSize <= GOSSIP_MAX_SIZE + static: doAssert maxSize <= MAX_PAYLOAD_SIZE maxSize.uint32 proc readVarint2(conn: Connection): Future[NetRes[uint64]] {. @@ -902,7 +902,7 @@ proc readChunkPayload*(conn: Connection, peer: Peer, if size == 0: return neterr ZeroSizePrefix - # The `size.int` conversion is safe because `size` is bounded to `MAX_CHUNK_SIZE` + # The `size.int` conversion is safe because `size` is bounded to `MAX_PAYLOAD_SIZE` let dataRes = await conn.uncompressFramedStream(size.int) data = dataRes.valueOr: @@ -2417,7 +2417,7 @@ proc createEth2Node*(rng: ref HmacDrbgContext, try: # This doesn't have to be a tight bound, just enough to avoid denial of # service attacks. - let decoded = snappy.decode(m.data, static(GOSSIP_MAX_SIZE.uint32)) + let decoded = snappy.decode(m.data, static(MAX_PAYLOAD_SIZE.uint32)) ok(gossipId(decoded, phase0Prefix, m.topic)) except CatchableError: err(ValidationResult.Reject) @@ -2464,7 +2464,7 @@ proc createEth2Node*(rng: ref HmacDrbgContext, sign = false, verifySignature = false, anonymize = true, - maxMessageSize = static(GOSSIP_MAX_SIZE.int), + maxMessageSize = static(MAX_PAYLOAD_SIZE.int), parameters = params) switch.mount(pubsub) @@ -2604,7 +2604,7 @@ func gossipEncode(msg: auto): seq[byte] = let uncompressed = SSZ.encode(msg) # This function only for messages we create. A message this large amounts to # an internal logic error. - doAssert uncompressed.lenu64 <= GOSSIP_MAX_SIZE + doAssert uncompressed.lenu64 <= MAX_PAYLOAD_SIZE snappy.encode(uncompressed) diff --git a/beacon_chain/spec/datatypes/constants.nim b/beacon_chain/spec/datatypes/constants.nim index 23e0391473..5465e686fe 100644 --- a/beacon_chain/spec/datatypes/constants.nim +++ b/beacon_chain/spec/datatypes/constants.nim @@ -73,9 +73,8 @@ const ATTESTATION_PROPAGATION_SLOT_RANGE*: uint64 = 32 MAXIMUM_GOSSIP_CLOCK_DISPARITY* = 500.millis - # https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/bellatrix/p2p-interface.md#configuration - GOSSIP_MAX_SIZE* = 10'u64 * 1024 * 1024 # bytes - MAX_CHUNK_SIZE* = 10'u64 * 1024 * 1024 # bytes + # https://github.com/ethereum/consensus-specs/blob/v1.5.0-beta.2/specs/phase0/p2p-interface.md#configuration + MAX_PAYLOAD_SIZE* = 10'u64 * 1024 * 1024 # bytes # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.8/specs/deneb/p2p-interface.md#configuration MAX_REQUEST_BLOCKS_DENEB*: uint64 = 128 # TODO Make use of in request code diff --git a/beacon_chain/spec/presets.nim b/beacon_chain/spec/presets.nim index a2fe2b4a4f..34055a0e54 100644 --- a/beacon_chain/spec/presets.nim +++ b/beacon_chain/spec/presets.nim @@ -92,11 +92,10 @@ type DEPOSIT_CONTRACT_ADDRESS*: Eth1Address # Networking - # TODO GOSSIP_MAX_SIZE*: uint64 + # TODO MAX_PAYLOAD_SIZE*: uint64 # TODO MAX_REQUEST_BLOCKS*: uint64 # TODO EPOCHS_PER_SUBNET_SUBSCRIPTION*: uint64 MIN_EPOCHS_FOR_BLOCK_REQUESTS*: uint64 - # TODO MAX_CHUNK_SIZE*: uint64 # TODO TTFB_TIMEOUT*: uint64 # TODO RESP_TIMEOUT*: uint64 # TODO ATTESTATION_PROPAGATION_SLOT_RANGE*: uint64 @@ -249,15 +248,13 @@ when const_preset == "mainnet": # Networking # --------------------------------------------------------------- # `10 * 2**20` (= 10485760, 10 MiB) - # TODO GOSSIP_MAX_SIZE: 10485760, + # TODO MAX_PAYLOAD_SIZE: 10485760, # `2**10` (= 1024) # TODO MAX_REQUEST_BLOCKS: 1024, # `2**8` (= 256) # TODO EPOCHS_PER_SUBNET_SUBSCRIPTION: 256, # `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 33024, ~5 months) MIN_EPOCHS_FOR_BLOCK_REQUESTS: 33024, - # `10 * 2**20` (=10485760, 10 MiB) - # TODO MAX_CHUNK_SIZE: 10485760, # 5s # TODO TTFB_TIMEOUT: 5, # 10s @@ -312,9 +309,6 @@ elif const_preset == "gnosis": # such as `CONFIG_NAME`, `TERMINAL_TOTAL_DIFFICULTY`, `*_FORK_EPOCH`, etc # which must be effectively overriden in all network (including mainnet). const defaultRuntimeConfig* = RuntimeConfig( - # Mainnet config - - # Extends the mainnet preset PRESET_BASE: "gnosis", # Free-form short name of the network that this configuration applies to - known @@ -372,8 +366,8 @@ elif const_preset == "gnosis": # Time parameters # --------------------------------------------------------------- - # 12 seconds - # TODO SECONDS_PER_SLOT: 12, + # 5 seconds + # TODO SECONDS_PER_SLOT: 5, # 14 (estimate from Eth1 mainnet) SECONDS_PER_ETH1_BLOCK: 5, # 2**8 (= 256) epochs ~27 hours @@ -409,15 +403,13 @@ elif const_preset == "gnosis": # Networking # --------------------------------------------------------------- # `10 * 2**20` (= 10485760, 10 MiB) - # TODO GOSSIP_MAX_SIZE: 10485760, + # TODO MAX_PAYLOAD_SIZE: 10485760, # `2**10` (= 1024) # TODO MAX_REQUEST_BLOCKS: 1024, # `2**8` (= 256) # TODO EPOCHS_PER_SUBNET_SUBSCRIPTION: 256, # `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 33024, ~5 months) MIN_EPOCHS_FOR_BLOCK_REQUESTS: 33024, - # `10 * 2**20` (=10485760, 10 MiB) - # TODO MAX_CHUNK_SIZE: 10485760, # 5s # TODO TTFB_TIMEOUT: 5, # 10s @@ -566,15 +558,13 @@ elif const_preset == "minimal": # Networking # --------------------------------------------------------------- # `10 * 2**20` (= 10485760, 10 MiB) - # TODO GOSSIP_MAX_SIZE: 10485760, + # TODO MAX_PAYLOAD_SIZE: 10485760, # `2**10` (= 1024) # TODO MAX_REQUEST_BLOCKS: 1024, # `2**8` (= 256) # TODO EPOCHS_PER_SUBNET_SUBSCRIPTION: 256, # [customized] `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 272) MIN_EPOCHS_FOR_BLOCK_REQUESTS: 272, - # `10 * 2**20` (=10485760, 10 MiB) - # TODO MAX_CHUNK_SIZE: 10485760, # 5s # TODO TTFB_TIMEOUT: 5, # 10s @@ -804,10 +794,11 @@ proc readRuntimeConfig*( checkCompatibility DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF checkCompatibility DOMAIN_CONTRIBUTION_AND_PROOF - checkCompatibility GOSSIP_MAX_SIZE + checkCompatibility MAX_PAYLOAD_SIZE + checkCompatibility MAX_PAYLOAD_SIZE, "GOSSIP_MAX_SIZE" + checkCompatibility MAX_PAYLOAD_SIZE, "MAX_CHUNK_SIZE" checkCompatibility MAX_REQUEST_BLOCKS checkCompatibility EPOCHS_PER_SUBNET_SUBSCRIPTION - checkCompatibility MAX_CHUNK_SIZE checkCompatibility TTFB_TIMEOUT checkCompatibility RESP_TIMEOUT checkCompatibility ATTESTATION_PROPAGATION_SLOT_RANGE diff --git a/ncli/resttest-rules.json b/ncli/resttest-rules.json index f925140ed0..ece1cbdbf7 100644 --- a/ncli/resttest-rules.json +++ b/ncli/resttest-rules.json @@ -4180,7 +4180,7 @@ "response": { "status": {"operator": "equals", "value": "200"}, "headers": [{"key": "Content-Type", "value": "application/json", "operator": "equals"}], - "body": [{"operator": "jstructcmps", "start": ["data"], "value": {"MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","SHUFFLE_ROUND_COUNT":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","MAX_EFFECTIVE_BALANCE_ELECTRA":"","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":"","UPDATE_TIMEOUT":"","INACTIVITY_PENALTY_QUOTIENT_BELLATRIX":"","MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX":"","PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX":"","MAX_BYTES_PER_TRANSACTION":"","MAX_TRANSACTIONS_PER_PAYLOAD":"","BYTES_PER_LOGS_BLOOM":"","MAX_EXTRA_DATA_BYTES":"","MAX_BLS_TO_EXECUTION_CHANGES":"","MAX_WITHDRAWALS_PER_PAYLOAD":"","MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP":"","PRESET_BASE":"","CONFIG_NAME":"","TERMINAL_TOTAL_DIFFICULTY":"","TERMINAL_BLOCK_HASH":"","TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","GENESIS_FORK_VERSION":"","GENESIS_DELAY":"","ALTAIR_FORK_VERSION":"","ALTAIR_FORK_EPOCH":"","BELLATRIX_FORK_VERSION":"","BELLATRIX_FORK_EPOCH":"","CAPELLA_FORK_VERSION":"","CAPELLA_FORK_EPOCH":"","DENEB_FORK_VERSION":"","DENEB_FORK_EPOCH":"","ELECTRA_FORK_VERSION":"","ELECTRA_FORK_EPOCH":"","SECONDS_PER_SLOT":"","SECONDS_PER_ETH1_BLOCK":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","FIELD_ELEMENTS_PER_BLOB":"","MAX_BLOB_COMMITMENTS_PER_BLOCK":"","MAX_BLOBS_PER_BLOCK":"","MAX_BLOBS_PER_BLOCK_ELECTRA":"","MAX_REQUEST_BLOB_SIDECARS_ELECTRA":"","KZG_COMMITMENT_INCLUSION_PROOF_DEPTH":"","SHARD_COMMITTEE_PERIOD":"","ETH1_FOLLOW_DISTANCE":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","EJECTION_BALANCE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT":"","PROPOSER_SCORE_BOOST":"","REORG_HEAD_WEIGHT_THRESHOLD":"","REORG_PARENT_WEIGHT_THRESHOLD":"","REORG_MAX_EPOCHS_SINCE_FINALIZATION":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","GOSSIP_MAX_SIZE":"","MAX_REQUEST_BLOCKS":"","EPOCHS_PER_SUBNET_SUBSCRIPTION":"","MIN_EPOCHS_FOR_BLOCK_REQUESTS":"","MAX_CHUNK_SIZE":"","TTFB_TIMEOUT":"","RESP_TIMEOUT":"","ATTESTATION_PROPAGATION_SLOT_RANGE":"","MAXIMUM_GOSSIP_CLOCK_DISPARITY":"","MESSAGE_DOMAIN_INVALID_SNAPPY":"","MESSAGE_DOMAIN_VALID_SNAPPY":"","SUBNETS_PER_NODE":"","ATTESTATION_SUBNET_COUNT":"","ATTESTATION_SUBNET_EXTRA_BITS":"","ATTESTATION_SUBNET_PREFIX_BITS":"","MAX_REQUEST_BLOCKS_DENEB":"","MAX_REQUEST_BLOB_SIDECARS":"","MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS":"","BLOB_SIDECAR_SUBNET_COUNT":"","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":"","DOMAIN_BLS_TO_EXECUTION_CHANGE":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","SYNC_COMMITTEE_SUBNET_COUNT":"", "UNSET_DEPOSIT_REQUESTS_START_INDEX":"", "FULL_EXIT_REQUEST_AMOUNT": "", "COMPOUNDING_WITHDRAWAL_PREFIX": "", "DEPOSIT_REQUEST_TYPE": "", "WITHDRAWAL_REQUEST_TYPE": "", "CONSOLIDATION_REQUEST_TYPE": "", "MIN_ACTIVATION_BALANCE": "", "MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA": "", "WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA": "", "PENDING_DEPOSITS_LIMIT": "", "PENDING_PARTIAL_WITHDRAWALS_LIMIT": "", "PENDING_CONSOLIDATIONS_LIMIT": "", "MAX_ATTESTER_SLASHINGS_ELECTRA": "", "MAX_ATTESTATIONS_ELECTRA": "", "MAX_DEPOSIT_REQUESTS_PER_PAYLOAD": "", "MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD": "", "MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD": "", "MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP": "", "MAX_PENDING_DEPOSITS_PER_EPOCH": "", "MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA": "", "MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT": ""}}] + "body": [{"operator": "jstructcmps", "start": ["data"], "value": {"MAX_COMMITTEES_PER_SLOT":"","TARGET_COMMITTEE_SIZE":"","MAX_VALIDATORS_PER_COMMITTEE":"","SHUFFLE_ROUND_COUNT":"","HYSTERESIS_QUOTIENT":"","HYSTERESIS_DOWNWARD_MULTIPLIER":"","HYSTERESIS_UPWARD_MULTIPLIER":"","MIN_DEPOSIT_AMOUNT":"","MAX_EFFECTIVE_BALANCE":"","MAX_EFFECTIVE_BALANCE_ELECTRA":"","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":"","UPDATE_TIMEOUT":"","INACTIVITY_PENALTY_QUOTIENT_BELLATRIX":"","MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX":"","PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX":"","MAX_BYTES_PER_TRANSACTION":"","MAX_TRANSACTIONS_PER_PAYLOAD":"","BYTES_PER_LOGS_BLOOM":"","MAX_EXTRA_DATA_BYTES":"","MAX_BLS_TO_EXECUTION_CHANGES":"","MAX_WITHDRAWALS_PER_PAYLOAD":"","MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP":"","PRESET_BASE":"","CONFIG_NAME":"","TERMINAL_TOTAL_DIFFICULTY":"","TERMINAL_BLOCK_HASH":"","TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH":"","MIN_GENESIS_ACTIVE_VALIDATOR_COUNT":"","MIN_GENESIS_TIME":"","GENESIS_FORK_VERSION":"","GENESIS_DELAY":"","ALTAIR_FORK_VERSION":"","ALTAIR_FORK_EPOCH":"","BELLATRIX_FORK_VERSION":"","BELLATRIX_FORK_EPOCH":"","CAPELLA_FORK_VERSION":"","CAPELLA_FORK_EPOCH":"","DENEB_FORK_VERSION":"","DENEB_FORK_EPOCH":"","ELECTRA_FORK_VERSION":"","ELECTRA_FORK_EPOCH":"","SECONDS_PER_SLOT":"","SECONDS_PER_ETH1_BLOCK":"","MIN_VALIDATOR_WITHDRAWABILITY_DELAY":"","FIELD_ELEMENTS_PER_BLOB":"","MAX_BLOB_COMMITMENTS_PER_BLOCK":"","MAX_BLOBS_PER_BLOCK":"","MAX_BLOBS_PER_BLOCK_ELECTRA":"","MAX_REQUEST_BLOB_SIDECARS_ELECTRA":"","KZG_COMMITMENT_INCLUSION_PROOF_DEPTH":"","SHARD_COMMITTEE_PERIOD":"","ETH1_FOLLOW_DISTANCE":"","INACTIVITY_SCORE_BIAS":"","INACTIVITY_SCORE_RECOVERY_RATE":"","EJECTION_BALANCE":"","MIN_PER_EPOCH_CHURN_LIMIT":"","CHURN_LIMIT_QUOTIENT":"","MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT":"","PROPOSER_SCORE_BOOST":"","REORG_HEAD_WEIGHT_THRESHOLD":"","REORG_PARENT_WEIGHT_THRESHOLD":"","REORG_MAX_EPOCHS_SINCE_FINALIZATION":"","DEPOSIT_CHAIN_ID":"","DEPOSIT_NETWORK_ID":"","DEPOSIT_CONTRACT_ADDRESS":"","MAX_PAYLOAD_SIZE":"","MAX_REQUEST_BLOCKS":"","EPOCHS_PER_SUBNET_SUBSCRIPTION":"","MIN_EPOCHS_FOR_BLOCK_REQUESTS":"","TTFB_TIMEOUT":"","RESP_TIMEOUT":"","ATTESTATION_PROPAGATION_SLOT_RANGE":"","MAXIMUM_GOSSIP_CLOCK_DISPARITY":"","MESSAGE_DOMAIN_INVALID_SNAPPY":"","MESSAGE_DOMAIN_VALID_SNAPPY":"","SUBNETS_PER_NODE":"","ATTESTATION_SUBNET_COUNT":"","ATTESTATION_SUBNET_EXTRA_BITS":"","ATTESTATION_SUBNET_PREFIX_BITS":"","MAX_REQUEST_BLOCKS_DENEB":"","MAX_REQUEST_BLOB_SIDECARS":"","MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS":"","BLOB_SIDECAR_SUBNET_COUNT":"","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":"","DOMAIN_BLS_TO_EXECUTION_CHANGE":"","TARGET_AGGREGATORS_PER_COMMITTEE":"","TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE":"","SYNC_COMMITTEE_SUBNET_COUNT":"", "UNSET_DEPOSIT_REQUESTS_START_INDEX":"", "FULL_EXIT_REQUEST_AMOUNT": "", "COMPOUNDING_WITHDRAWAL_PREFIX": "", "DEPOSIT_REQUEST_TYPE": "", "WITHDRAWAL_REQUEST_TYPE": "", "CONSOLIDATION_REQUEST_TYPE": "", "MIN_ACTIVATION_BALANCE": "", "MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA": "", "WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA": "", "PENDING_DEPOSITS_LIMIT": "", "PENDING_PARTIAL_WITHDRAWALS_LIMIT": "", "PENDING_CONSOLIDATIONS_LIMIT": "", "MAX_ATTESTER_SLASHINGS_ELECTRA": "", "MAX_ATTESTATIONS_ELECTRA": "", "MAX_DEPOSIT_REQUESTS_PER_PAYLOAD": "", "MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD": "", "MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD": "", "MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP": "", "MAX_PENDING_DEPOSITS_PER_EPOCH": "", "MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA": "", "MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT": ""}}] } }, { diff --git a/scripts/mainnet-non-overriden-config.yaml b/scripts/mainnet-non-overriden-config.yaml index 07dd383cd8..b6ccbfeed8 100644 --- a/scripts/mainnet-non-overriden-config.yaml +++ b/scripts/mainnet-non-overriden-config.yaml @@ -53,13 +53,16 @@ BELLATRIX_FORK_VERSION: 0x02000000 # (overriden in launch_local_testnet.sh) BELLATRIX_FORK_EPOCH: 144896 # Sept 6, 2022, 11:34:47am UTC # Capella CAPELLA_FORK_VERSION: 0x03000000 -# (overriden in launch_local_testnet.sh) CAPELLA_FORK_EPOCH: 18446744073709551615 +# (overriden in launch_local_testnet.sh) CAPELLA_FORK_EPOCH: 194048 # April 12, 2023, 10:27:35pm UTC # Deneb DENEB_FORK_VERSION: 0x04000000 -# (overriden in launch_local_testnet.sh) DENEB_FORK_EPOCH: 18446744073709551615 +# (overriden in launch_local_testnet.sh) DENEB_FORK_EPOCH: 269568 # March 13, 2024, 01:55:35pm UTC # Electra ELECTRA_FORK_VERSION: 0x05000000 -# (overriden in launch_local_testnet.sh) ELECTRA_FORK_EPOCH: 18446744073709551615 +# (overriden in launch_local_testnet.sh) ELECTRA_FORK_EPOCH: 18446744073709551615 # temporary stub +# Fulu +FULU_FORK_VERSION: 0x06000000 +# (overriden in launch_local_testnet.sh) FULU_FORK_EPOCH: 18446744073709551615 # temporary stub # Time parameters # --------------------------------------------------------------- @@ -87,7 +90,6 @@ EJECTION_BALANCE: 16000000000 MIN_PER_EPOCH_CHURN_LIMIT: 4 # 2**16 (= 65,536) CHURN_LIMIT_QUOTIENT: 65536 - # [New in Deneb:EIP7514] 2**3 (= 8) MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8 @@ -95,7 +97,6 @@ MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8 # --------------------------------------------------------------- # 40% PROPOSER_SCORE_BOOST: 40 - # 20% REORG_HEAD_WEIGHT_THRESHOLD: 20 # 160% @@ -103,6 +104,7 @@ REORG_PARENT_WEIGHT_THRESHOLD: 160 # `2` epochs REORG_MAX_EPOCHS_SINCE_FINALIZATION: 2 + # Deposit contract # --------------------------------------------------------------- # Ethereum PoW Mainnet @@ -110,18 +112,17 @@ DEPOSIT_CHAIN_ID: 1 DEPOSIT_NETWORK_ID: 1 # (overriden in launch_local_testnet.sh) DEPOSIT_CONTRACT_ADDRESS: 0x00000000219ab540356cBB839Cbe05303d7705Fa + # Networking # --------------------------------------------------------------- # `10 * 2**20` (= 10485760, 10 MiB) -GOSSIP_MAX_SIZE: 10485760 +MAX_PAYLOAD_SIZE: 10485760 # `2**10` (= 1024) MAX_REQUEST_BLOCKS: 1024 # `2**8` (= 256) EPOCHS_PER_SUBNET_SUBSCRIPTION: 256 # `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 33024, ~5 months) MIN_EPOCHS_FOR_BLOCK_REQUESTS: 33024 -# `10 * 2**20` (=10485760, 10 MiB) -MAX_CHUNK_SIZE: 10485760 # 5s TTFB_TIMEOUT: 5 # 10s @@ -142,9 +143,35 @@ ATTESTATION_SUBNET_PREFIX_BITS: 6 # Deneb # `2**7` (=128) MAX_REQUEST_BLOCKS_DENEB: 128 -# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK -MAX_REQUEST_BLOB_SIDECARS: 768 # `2**12` (= 4096 epochs, ~18 days) MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 4096 # `6` BLOB_SIDECAR_SUBNET_COUNT: 6 +# `uint64(6)` +MAX_BLOBS_PER_BLOCK: 6 +# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK +MAX_REQUEST_BLOB_SIDECARS: 768 + +# Electra +# 2**7 * 10**9 (= 128,000,000,000) +MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: 128000000000 +# 2**8 * 10**9 (= 256,000,000,000) +MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: 256000000000 +# `9` +BLOB_SIDECAR_SUBNET_COUNT_ELECTRA: 9 +# `uint64(9)` +MAX_BLOBS_PER_BLOCK_ELECTRA: 9 +# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA +MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152 + +# Fulu +NUMBER_OF_COLUMNS: 128 +NUMBER_OF_CUSTODY_GROUPS: 128 +DATA_COLUMN_SIDECAR_SUBNET_COUNT: 128 +MAX_REQUEST_DATA_COLUMN_SIDECARS: 16384 +SAMPLES_PER_SLOT: 8 +CUSTODY_REQUIREMENT: 4 +VALIDATOR_CUSTODY_REQUIREMENT: 8 +BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: 32000000000 +MAX_BLOBS_PER_BLOCK_FULU: 12 +MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS: 4096 diff --git a/scripts/minimal-non-overriden-config.yaml b/scripts/minimal-non-overriden-config.yaml index 8acd453784..b264220897 100644 --- a/scripts/minimal-non-overriden-config.yaml +++ b/scripts/minimal-non-overriden-config.yaml @@ -59,6 +59,9 @@ DENEB_FORK_VERSION: 0x04000001 # Electra ELECTRA_FORK_VERSION: 0x05000001 # (overriden in launch_local_testnet.sh) ELECTRA_FORK_EPOCH: 18446744073709551615 +# Fulu +FULU_FORK_VERSION: 0x06000001 +# (overriden in launch_local_testnet.sh) FULU_FORK_EPOCH: 18446744073709551615 # Time parameters # --------------------------------------------------------------- @@ -82,19 +85,18 @@ INACTIVITY_SCORE_BIAS: 4 INACTIVITY_SCORE_RECOVERY_RATE: 16 # 2**4 * 10**9 (= 16,000,000,000) Gwei EJECTION_BALANCE: 16000000000 -# 2**2 (= 4) -MIN_PER_EPOCH_CHURN_LIMIT: 4 +# [customized] more easily demonstrate the difference between this value and the activation churn limit +MIN_PER_EPOCH_CHURN_LIMIT: 2 # [customized] scale queue churn at much lower validator counts for testing CHURN_LIMIT_QUOTIENT: 32 - # [New in Deneb:EIP7514] [customized] MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 4 + # Fork choice # --------------------------------------------------------------- # 40% PROPOSER_SCORE_BOOST: 40 - # 20% REORG_HEAD_WEIGHT_THRESHOLD: 20 # 160% @@ -102,6 +104,7 @@ REORG_PARENT_WEIGHT_THRESHOLD: 160 # `2` epochs REORG_MAX_EPOCHS_SINCE_FINALIZATION: 2 + # Deposit contract # --------------------------------------------------------------- # Ethereum Goerli testnet @@ -110,18 +113,17 @@ DEPOSIT_NETWORK_ID: 5 # Configured on a per testnet basis # (overriden in launch_local_testnet.sh) DEPOSIT_CONTRACT_ADDRESS: 0x1234567890123456789012345678901234567890 + # Networking # --------------------------------------------------------------- # `10 * 2**20` (= 10485760, 10 MiB) -GOSSIP_MAX_SIZE: 10485760 +MAX_PAYLOAD_SIZE: 10485760 # `2**10` (= 1024) MAX_REQUEST_BLOCKS: 1024 # `2**8` (= 256) EPOCHS_PER_SUBNET_SUBSCRIPTION: 256 # [customized] `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 272) MIN_EPOCHS_FOR_BLOCK_REQUESTS: 272 -# `10 * 2**20` (=10485760, 10 MiB) -MAX_CHUNK_SIZE: 10485760 # 5s TTFB_TIMEOUT: 5 # 10s @@ -142,9 +144,35 @@ ATTESTATION_SUBNET_PREFIX_BITS: 6 # Deneb # `2**7` (=128) MAX_REQUEST_BLOCKS_DENEB: 128 -# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK -MAX_REQUEST_BLOB_SIDECARS: 768 # `2**12` (= 4096 epochs, ~18 days) MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 4096 # `6` BLOB_SIDECAR_SUBNET_COUNT: 6 +## `uint64(6)` +MAX_BLOBS_PER_BLOCK: 6 +# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK +MAX_REQUEST_BLOB_SIDECARS: 768 + +# Electra +# [customized] 2**6 * 10**9 (= 64,000,000,000) +MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: 64000000000 +# [customized] 2**7 * 10**9 (= 128,000,000,000) +MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: 128000000000 +# `9` +BLOB_SIDECAR_SUBNET_COUNT_ELECTRA: 9 +# `uint64(9)` +MAX_BLOBS_PER_BLOCK_ELECTRA: 9 +# MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA +MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152 + +# Fulu +NUMBER_OF_COLUMNS: 128 +NUMBER_OF_CUSTODY_GROUPS: 128 +DATA_COLUMN_SIDECAR_SUBNET_COUNT: 128 +MAX_REQUEST_DATA_COLUMN_SIDECARS: 16384 +SAMPLES_PER_SLOT: 8 +CUSTODY_REQUIREMENT: 4 +VALIDATOR_CUSTODY_REQUIREMENT: 8 +BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: 32000000000 +MAX_BLOBS_PER_BLOCK_FULU: 12 +MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS: 4096 From 991d09935928287d31f9cec5b957439618081697 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Mon, 24 Feb 2025 20:34:21 +0100 Subject: [PATCH 2/3] Lint --- beacon_chain/beacon_chain_file.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon_chain/beacon_chain_file.nim b/beacon_chain/beacon_chain_file.nim index 17d119cef2..46b7a4bc31 100644 --- a/beacon_chain/beacon_chain_file.nim +++ b/beacon_chain/beacon_chain_file.nim @@ -1,5 +1,5 @@ # beacon_chain -# Copyright (c) 2018-2024 Status Research & Development GmbH +# Copyright (c) 2018-2025 Status Research & Development GmbH # Licensed and distributed under either of # * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0). From c6ff0657ab776e2bd7e1c7444fb945703bb49ef8 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Mon, 24 Feb 2025 20:44:48 +0100 Subject: [PATCH 3/3] Update config endpoint --- beacon_chain/rpc/rest_config_api.nim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/beacon_chain/rpc/rest_config_api.nim b/beacon_chain/rpc/rest_config_api.nim index 36d8f8b122..fe97332aac 100644 --- a/beacon_chain/rpc/rest_config_api.nim +++ b/beacon_chain/rpc/rest_config_api.nim @@ -209,22 +209,22 @@ proc installConfigApiHandlers*(router: var RestRouter, node: BeaconNode) = Base10.toString(REORG_PARENT_WEIGHT_THRESHOLD), REORG_MAX_EPOCHS_SINCE_FINALIZATION: Base10.toString(uint64(REORG_MAX_EPOCHS_SINCE_FINALIZATION)), + DEPOSIT_CHAIN_ID: Base10.toString(cfg.DEPOSIT_CHAIN_ID), DEPOSIT_NETWORK_ID: Base10.toString(cfg.DEPOSIT_NETWORK_ID), DEPOSIT_CONTRACT_ADDRESS: $cfg.DEPOSIT_CONTRACT_ADDRESS, - GOSSIP_MAX_SIZE: - Base10.toString(GOSSIP_MAX_SIZE), + + MAX_PAYLOAD_SIZE: + Base10.toString(MAX_PAYLOAD_SIZE), MAX_REQUEST_BLOCKS: Base10.toString(MAX_REQUEST_BLOCKS), EPOCHS_PER_SUBNET_SUBSCRIPTION: Base10.toString(EPOCHS_PER_SUBNET_SUBSCRIPTION), MIN_EPOCHS_FOR_BLOCK_REQUESTS: Base10.toString(cfg.MIN_EPOCHS_FOR_BLOCK_REQUESTS), - MAX_CHUNK_SIZE: - Base10.toString(MAX_CHUNK_SIZE), TTFB_TIMEOUT: Base10.toString(TTFB_TIMEOUT), RESP_TIMEOUT: