From 8ae2f68d3234a9f3c917a8ebeee188edeea311a6 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Fri, 18 Jul 2025 10:22:58 +0200 Subject: [PATCH 1/3] fix: allow BLOB_SCHEDULE: [] field Now empty blob schedules from config.yaml (like BLOB_SCHEDULE: []) will be preserved and included in the /eth/v1/config/spec beacon API endpoint response instead of being omitted. --- consensus/types/src/chain_spec.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/consensus/types/src/chain_spec.rs b/consensus/types/src/chain_spec.rs index 49537073b44..d41d411605d 100644 --- a/consensus/types/src/chain_spec.rs +++ b/consensus/types/src/chain_spec.rs @@ -1744,7 +1744,6 @@ pub struct Config { #[serde(with = "serde_utils::quoted_u64")] custody_requirement: u64, #[serde(default = "BlobSchedule::default")] - #[serde(skip_serializing_if = "BlobSchedule::is_empty")] blob_schedule: BlobSchedule, #[serde(default = "default_validator_custody_requirement")] #[serde(with = "serde_utils::quoted_u64")] From 408e5b5b068545e23d89ec63f67dba2e4b96a1c3 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 22 Jul 2025 11:26:20 +0200 Subject: [PATCH 2/3] Update config_and_preset.rs --- consensus/types/src/config_and_preset.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/consensus/types/src/config_and_preset.rs b/consensus/types/src/config_and_preset.rs index 235bf202382..abb60f60445 100644 --- a/consensus/types/src/config_and_preset.rs +++ b/consensus/types/src/config_and_preset.rs @@ -106,7 +106,8 @@ pub fn get_extra_fields(spec: &ChainSpec) -> HashMap { let hex_string = |value: &[u8]| format!("0x{}", hex::encode(value)).into(); let u32_hex = |v: u32| hex_string(&v.to_le_bytes()); let u8_hex = |v: u8| hex_string(&v.to_le_bytes()); - hashmap! { + + let mut fields = hashmap! { "bls_withdrawal_prefix".to_uppercase() => u8_hex(spec.bls_withdrawal_prefix_byte), "eth1_address_withdrawal_prefix".to_uppercase() => u8_hex(spec.eth1_address_withdrawal_prefix_byte), "domain_beacon_proposer".to_uppercase() => u32_hex(spec.domain_beacon_proposer), @@ -134,7 +135,16 @@ pub fn get_extra_fields(spec: &ChainSpec) -> HashMap { "compounding_withdrawal_prefix".to_uppercase() => u8_hex(spec.compounding_withdrawal_prefix_byte), "unset_deposit_requests_start_index".to_uppercase() => spec.unset_deposit_requests_start_index.to_string().into(), "full_exit_request_amount".to_uppercase() => spec.full_exit_request_amount.to_string().into(), + }; + + // Only include BLOB_SCHEDULE if FULU_FORK_EPOCH is not FAR_FUTURE_EPOCH + if spec.fulu_fork_epoch.is_some_and(|fulu_fork_epoch| fulu_fork_epoch != spec.far_future_epoch) { + if let Ok(blob_schedule_json) = serde_json::to_value(&spec.blob_schedule) { + fields.insert("BLOB_SCHEDULE".to_string(), blob_schedule_json); + } } + + fields } #[cfg(test)] From 19bec4dd7a16b3613ae5479cf65a10403b6874a0 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 22 Jul 2025 12:02:47 +0200 Subject: [PATCH 3/3] revert --- consensus/types/src/config_and_preset.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/consensus/types/src/config_and_preset.rs b/consensus/types/src/config_and_preset.rs index abb60f60445..235bf202382 100644 --- a/consensus/types/src/config_and_preset.rs +++ b/consensus/types/src/config_and_preset.rs @@ -106,8 +106,7 @@ pub fn get_extra_fields(spec: &ChainSpec) -> HashMap { let hex_string = |value: &[u8]| format!("0x{}", hex::encode(value)).into(); let u32_hex = |v: u32| hex_string(&v.to_le_bytes()); let u8_hex = |v: u8| hex_string(&v.to_le_bytes()); - - let mut fields = hashmap! { + hashmap! { "bls_withdrawal_prefix".to_uppercase() => u8_hex(spec.bls_withdrawal_prefix_byte), "eth1_address_withdrawal_prefix".to_uppercase() => u8_hex(spec.eth1_address_withdrawal_prefix_byte), "domain_beacon_proposer".to_uppercase() => u32_hex(spec.domain_beacon_proposer), @@ -135,16 +134,7 @@ pub fn get_extra_fields(spec: &ChainSpec) -> HashMap { "compounding_withdrawal_prefix".to_uppercase() => u8_hex(spec.compounding_withdrawal_prefix_byte), "unset_deposit_requests_start_index".to_uppercase() => spec.unset_deposit_requests_start_index.to_string().into(), "full_exit_request_amount".to_uppercase() => spec.full_exit_request_amount.to_string().into(), - }; - - // Only include BLOB_SCHEDULE if FULU_FORK_EPOCH is not FAR_FUTURE_EPOCH - if spec.fulu_fork_epoch.is_some_and(|fulu_fork_epoch| fulu_fork_epoch != spec.far_future_epoch) { - if let Ok(blob_schedule_json) = serde_json::to_value(&spec.blob_schedule) { - fields.insert("BLOB_SCHEDULE".to_string(), blob_schedule_json); - } } - - fields } #[cfg(test)]