diff --git a/beacon_chain/gossip_processing/gossip_validation.nim b/beacon_chain/gossip_processing/gossip_validation.nim index aa606509c5..903a0a0ffc 100644 --- a/beacon_chain/gossip_processing/gossip_validation.nim +++ b/beacon_chain/gossip_processing/gossip_validation.nim @@ -295,6 +295,9 @@ template checkedReject( func getMaxBlobsPerBlock(cfg: RuntimeConfig, wallTime: BeaconTime): uint64 = if min(wallTime, wallTime - MAXIMUM_GOSSIP_CLOCK_DISPARITY).slotOrZero.epoch >= + cfg.FULU_FORK_EPOCH: + cfg.MAX_BLOBS_PER_BLOCK_FULU + elif min(wallTime, wallTime - MAXIMUM_GOSSIP_CLOCK_DISPARITY).slotOrZero.epoch >= cfg.ELECTRA_FORK_EPOCH: cfg.MAX_BLOBS_PER_BLOCK_ELECTRA else: diff --git a/beacon_chain/networking/eth2_network.nim b/beacon_chain/networking/eth2_network.nim index d7172f8588..9a14d569f9 100644 --- a/beacon_chain/networking/eth2_network.nim +++ b/beacon_chain/networking/eth2_network.nim @@ -1573,7 +1573,7 @@ proc getLowSubnets(node: Eth2Node, epoch: Epoch): else: default(SyncnetBits), if epoch >= node.cfg.FULU_FORK_EPOCH: - findLowSubnets(getDataColumnSidecarTopic, uint64, (DATA_COLUMN_SIDECAR_SUBNET_COUNT).int) + findLowSubnets(getDataColumnSidecarTopic, uint64, (fulu.DATA_COLUMN_SIDECAR_SUBNET_COUNT).int) else: default(CgcBits) ) diff --git a/beacon_chain/spec/datatypes/constants.nim b/beacon_chain/spec/datatypes/constants.nim index 4db4ae9d06..d3213c32a0 100644 --- a/beacon_chain/spec/datatypes/constants.nim +++ b/beacon_chain/spec/datatypes/constants.nim @@ -67,6 +67,9 @@ const # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.7/specs/deneb/p2p-interface.md#configuration BLOB_SIDECAR_SUBNET_COUNT*: uint64 = 6 + # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/fulu/p2p-interface.md#configuration + DATA_COLUMN_SIDECAR_SUBNET_COUNT*: uint64 = 128 + # https://github.com/ethereum/consensus-specs/blob/v1.4.0-beta.1/specs/phase0/p2p-interface.md#configuration MAX_REQUEST_BLOCKS* = 1024'u64 RESP_TIMEOUT* = 10'u64 @@ -90,6 +93,13 @@ const # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/electra/beacon-chain.md#execution-1 MAX_BLOBS_PER_BLOCK_ELECTRA* = 9'u64 + # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/fulu/beacon-chain.md#execution + MAX_BLOBS_PER_BLOCK_FULU* = 12'u64 + # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/electra/p2p-interface.md#configuration MAX_REQUEST_BLOB_SIDECARS_ELECTRA* = MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA + + # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/fulu/p2p-interface.md#configuration + MAX_REQUEST_BLOB_SIDECARS_FULU* = + MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_FULU diff --git a/beacon_chain/spec/presets.nim b/beacon_chain/spec/presets.nim index 76b1a9e00b..292b4fdd42 100644 --- a/beacon_chain/spec/presets.nim +++ b/beacon_chain/spec/presets.nim @@ -121,6 +121,12 @@ type MAX_BLOBS_PER_BLOCK_ELECTRA*: uint64 MAX_REQUEST_BLOB_SIDECARS_ELECTRA*: uint64 + # Fulu + DATA_COLUMN_SIDECAR_SUBNET_COUNT*: uint64 + MAX_BLOBS_PER_BLOCK_FULU*: uint64 + MAX_REQUEST_BLOB_SIDECARS_FULU*: uint64 + + PresetFile* = object values*: Table[string, string] missingValues*: seq[string] @@ -295,7 +301,15 @@ when const_preset == "mainnet": # `uint64(9)` MAX_BLOBS_PER_BLOCK_ELECTRA: 9, # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA - MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152 + MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152, + + # Fulu + # `128` + DATA_COLUMN_SIDECAR_SUBNET_COUNT: 128, + # `uint64(12)` + MAX_BLOBS_PER_BLOCK_FULU: 12, + # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_FULU + MAX_REQUEST_BLOB_SIDECARS_FULU: 1536 ) elif const_preset == "gnosis": @@ -455,7 +469,15 @@ elif const_preset == "gnosis": # `uint64(9)` MAX_BLOBS_PER_BLOCK_ELECTRA: 9, # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA - MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152 + MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152, + + # Fulu + # `128` + DATA_COLUMN_SIDECAR_SUBNET_COUNT: 128, + # `uint64(12)` + MAX_BLOBS_PER_BLOCK_FULU: 12, + # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_FULU + MAX_REQUEST_BLOB_SIDECARS_FULU: 1536 ) elif const_preset == "minimal": @@ -613,6 +635,14 @@ elif const_preset == "minimal": MAX_BLOBS_PER_BLOCK_ELECTRA: 9, # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_ELECTRA MAX_REQUEST_BLOB_SIDECARS_ELECTRA: 1152, + + # Fulu + # `128` + DATA_COLUMN_SIDECAR_SUBNET_COUNT: 128, + # `uint64(12)` + MAX_BLOBS_PER_BLOCK_FULU: 12, + # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK_FULU + MAX_REQUEST_BLOB_SIDECARS_FULU: 1536 ) else: @@ -826,6 +856,9 @@ proc readRuntimeConfig*( checkCompatibility BLOB_SIDECAR_SUBNET_COUNT checkCompatibility MAX_BLOBS_PER_BLOCK_ELECTRA checkCompatibility MAX_REQUEST_BLOB_SIDECARS_ELECTRA + checkCompatibility DATA_COLUMN_SIDECAR_SUBNET_COUNT + checkCompatibility MAX_BLOBS_PER_BLOCK_FULU + checkCompatibility MAX_REQUEST_BLOB_SIDECARS_FULU # https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/phase0/fork-choice.md#configuration # Isn't being used as a preset in the usual way: at any time, there's one correct value diff --git a/beacon_chain/spec/state_transition_block.nim b/beacon_chain/spec/state_transition_block.nim index 4140cf19c0..f8cda6a614 100644 --- a/beacon_chain/spec/state_transition_block.nim +++ b/beacon_chain/spec/state_transition_block.nim @@ -1030,7 +1030,7 @@ proc process_execution_payload*( if not (payload.timestamp == compute_timestamp_at_slot(state, state.slot)): return err("process_execution_payload: invalid timestamp") - # [New in Deneb] Verify commitments are under limit + # [New in Electra] Verify commitments are under limit if not (lenu64(body.blob_kzg_commitments) <= cfg.MAX_BLOBS_PER_BLOCK_ELECTRA): return err("process_execution_payload: too many KZG commitments") @@ -1065,7 +1065,7 @@ type SomeFuluBeaconBlockBody = fulu.BeaconBlockBody | fulu.SigVerifiedBeaconBlockBody | fulu.TrustedBeaconBlockBody -# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.3/specs/electra/beacon-chain.md#modified-process_execution_payload +# https://github.com/ethereum/consensus-specs/blob/v1.5.0-alpha.10/specs/fulu/beacon-chain.md#modified-process_execution_payload proc process_execution_payload*( cfg: RuntimeConfig, state: var fulu.BeaconState, body: SomeFuluBeaconBlockBody, @@ -1086,8 +1086,8 @@ proc process_execution_payload*( if not (payload.timestamp == compute_timestamp_at_slot(state, state.slot)): return err("process_execution_payload: invalid timestamp") - # [New in Deneb] Verify commitments are under limit - if not (lenu64(body.blob_kzg_commitments) <= cfg.MAX_BLOBS_PER_BLOCK_ELECTRA): + # [New in Fulu] Verify commitments are under limit + if not (lenu64(body.blob_kzg_commitments) <= cfg.MAX_BLOBS_PER_BLOCK_FULU): return err("process_execution_payload: too many KZG commitments") # Verify the execution payload is valid