Skip to content

Commit

Permalink
add new config to Config api struct
Browse files Browse the repository at this point in the history
  • Loading branch information
realbigsean committed Oct 16, 2023
1 parent 7b9f51e commit 936af46
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 49 deletions.
8 changes: 4 additions & 4 deletions beacon_node/lighthouse_network/src/rpc/protocol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -364,16 +364,16 @@ impl ProtocolId {
<OldBlocksByRangeRequestV2 as Encode>::ssz_fixed_len(),
),
Protocol::BlocksByRoot => RpcLimits::new(
fork_context.blocks_by_root_request_min,
fork_context.blocks_by_root_request_max,
fork_context.min_blocks_by_root_request(),
fork_context.max_blocks_by_root_request(),
),
Protocol::BlobsByRange => RpcLimits::new(
<BlobsByRangeRequest as Encode>::ssz_fixed_len(),
<BlobsByRangeRequest as Encode>::ssz_fixed_len(),
),
Protocol::BlobsByRoot => RpcLimits::new(
fork_context.blobs_by_root_request_min,
fork_context.blobs_by_root_request_max,
fork_context.min_blobs_by_root_request(),
fork_context.max_blobs_by_root_request(),
),
Protocol::Ping => RpcLimits::new(
<Ping as Encode>::ssz_fixed_len(),
Expand Down
180 changes: 172 additions & 8 deletions consensus/types/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use int_to_bytes::int_to_bytes4;
use serde::Deserialize;
use serde::{Deserializer, Serialize, Serializer};
use serde_utils::quoted_u64::MaybeQuoted;
use ssz::Encode;
use std::fs::File;
use std::path::Path;
use std::time::Duration;
Expand Down Expand Up @@ -174,8 +175,6 @@ pub struct ChainSpec {
*/
pub boot_nodes: Vec<String>,
pub network_id: u8,
pub attestation_propagation_slot_range: u64,
pub maximum_gossip_clock_disparity_millis: u64,
pub target_aggregators_per_committee: u64,
pub gossip_max_size: u64,
pub max_request_blocks: u64,
Expand All @@ -184,6 +183,8 @@ pub struct ChainSpec {
pub max_chunk_size: u64,
pub ttfb_timeout: u64,
pub resp_timeout: u64,
pub attestation_propagation_slot_range: u64,
pub maximum_gossip_clock_disparity_millis: u64,
pub message_domain_invalid_snappy: [u8; 4],
pub message_domain_valid_snappy: [u8; 4],
pub subnets_per_node: u8,
Expand All @@ -199,6 +200,18 @@ pub struct ChainSpec {
pub min_epochs_for_blob_sidecars_requests: u64,
pub blob_sidecar_subnet_count: u64,

/*
* Networking Derived
*
* When adding fields here, make sure any values are derived again during `apply_to_chain_spec`.
*/
pub min_blocks_by_root_request: usize,
pub max_blocks_by_root_request: usize,
pub min_blocks_by_root_request_deneb: usize,
pub max_blocks_by_root_request_deneb: usize,
pub min_blobs_by_root_request: usize,
pub max_blobs_by_root_request: usize,

/*
* Application params
*/
Expand Down Expand Up @@ -661,12 +674,12 @@ impl ChainSpec {
*/
boot_nodes: vec![],
network_id: 1, // mainnet network id
attestation_propagation_slot_range: 32,
attestation_propagation_slot_range: default_attestation_propagation_slot_range(),
attestation_subnet_count: 64,
subnets_per_node: 2,
maximum_gossip_clock_disparity_millis: 500,
maximum_gossip_clock_disparity_millis: default_maximum_gossip_clock_disparity_millis(),
target_aggregators_per_committee: 16,
epochs_per_subnet_subscription: 256,
epochs_per_subnet_subscription: default_epochs_per_subnet_subscription(),
gossip_max_size: default_gossip_max_size(),
min_epochs_for_block_requests: default_min_epochs_for_block_requests(),
max_chunk_size: default_max_chunk_size(),
Expand All @@ -686,6 +699,16 @@ impl ChainSpec {
min_epochs_for_blob_sidecars_requests: default_min_epochs_for_blob_sidecars_requests(),
blob_sidecar_subnet_count: default_blob_sidecar_subnet_count(),

/*
* Derived Deneb Specific
*/
min_blocks_by_root_request: default_min_blocks_by_root_request(),
max_blocks_by_root_request: default_max_blocks_by_root_request(),
min_blocks_by_root_request_deneb: default_min_blocks_by_root_request_deneb(),
max_blocks_by_root_request_deneb: default_max_blocks_by_root_request_deneb(),
min_blobs_by_root_request: default_min_blobs_by_root_request(),
max_blobs_by_root_request: default_max_blobs_by_root_request(),

/*
* Application specific
*/
Expand Down Expand Up @@ -916,12 +939,12 @@ impl ChainSpec {
*/
boot_nodes: vec![],
network_id: 100, // Gnosis Chain network id
attestation_propagation_slot_range: 32,
attestation_propagation_slot_range: default_attestation_propagation_slot_range(),
attestation_subnet_count: 64,
subnets_per_node: 4, // Make this larger than usual to avoid network damage
maximum_gossip_clock_disparity_millis: 500,
maximum_gossip_clock_disparity_millis: default_maximum_gossip_clock_disparity_millis(),
target_aggregators_per_committee: 16,
epochs_per_subnet_subscription: 256,
epochs_per_subnet_subscription: default_epochs_per_subnet_subscription(),
gossip_max_size: default_gossip_max_size(),
min_epochs_for_block_requests: default_min_epochs_for_block_requests(),
max_chunk_size: default_max_chunk_size(),
Expand All @@ -941,6 +964,16 @@ impl ChainSpec {
min_epochs_for_blob_sidecars_requests: default_min_epochs_for_blob_sidecars_requests(),
blob_sidecar_subnet_count: default_blob_sidecar_subnet_count(),

/*
* Derived Deneb Specific
*/
min_blocks_by_root_request: default_min_blocks_by_root_request(),
max_blocks_by_root_request: default_max_blocks_by_root_request(),
min_blocks_by_root_request_deneb: default_min_blocks_by_root_request_deneb(),
max_blocks_by_root_request_deneb: default_max_blocks_by_root_request_deneb(),
min_blobs_by_root_request: default_min_blobs_by_root_request(),
max_blobs_by_root_request: default_max_blobs_by_root_request(),

/*
* Application specific
*/
Expand Down Expand Up @@ -1065,6 +1098,12 @@ pub struct Config {
#[serde(default = "default_gossip_max_size")]
#[serde(with = "serde_utils::quoted_u64")]
gossip_max_size: u64,
#[serde(default = "default_max_request_blocks")]
#[serde(with = "serde_utils::quoted_u64")]
max_request_blocks: u64,
#[serde(default = "default_epochs_per_subnet_subscription")]
#[serde(with = "serde_utils::quoted_u64")]
epochs_per_subnet_subscription: u64,
#[serde(default = "default_min_epochs_for_block_requests")]
#[serde(with = "serde_utils::quoted_u64")]
min_epochs_for_block_requests: u64,
Expand All @@ -1077,6 +1116,12 @@ pub struct Config {
#[serde(default = "default_resp_timeout")]
#[serde(with = "serde_utils::quoted_u64")]
resp_timeout: u64,
#[serde(default = "default_attestation_propagation_slot_range")]
#[serde(with = "serde_utils::quoted_u64")]
attestation_propagation_slot_range: u64,
#[serde(default = "default_maximum_gossip_clock_disparity_millis")]
#[serde(with = "serde_utils::quoted_u64")]
maximum_gossip_clock_disparity_millis: u64,
#[serde(default = "default_message_domain_invalid_snappy")]
#[serde(with = "serde_utils::bytes_4_hex")]
message_domain_invalid_snappy: [u8; 4],
Expand All @@ -1089,6 +1134,18 @@ pub struct Config {
#[serde(default = "default_attestation_subnet_prefix_bits")]
#[serde(with = "serde_utils::quoted_u8")]
attestation_subnet_prefix_bits: u8,
#[serde(default = "default_max_request_blocks_deneb")]
#[serde(with = "serde_utils::quoted_u64")]
max_request_blocks_deneb: u64,
#[serde(default = "default_max_request_blob_sidecars")]
#[serde(with = "serde_utils::quoted_u64")]
max_request_blob_sidecars: u64,
#[serde(default = "default_min_epochs_for_blob_sidecars_requests")]
#[serde(with = "serde_utils::quoted_u64")]
min_epochs_for_blob_sidecars_requests: u64,
#[serde(default = "default_blob_sidecar_subnet_count")]
#[serde(with = "serde_utils::quoted_u64")]
blob_sidecar_subnet_count: u64,
}

fn default_bellatrix_fork_version() -> [u8; 4] {
Expand Down Expand Up @@ -1190,6 +1247,76 @@ const fn default_blob_sidecar_subnet_count() -> u64 {
6
}

const fn default_epochs_per_subnet_subscription() -> u64 {
256
}

const fn default_attestation_propagation_slot_range() -> u64 {
32
}

const fn default_maximum_gossip_clock_disparity_millis() -> u64 {
500
}

fn min_blocks_by_root_request_common(max_request_blocks: u64) -> usize {
let max_request_blocks = max_request_blocks as usize;
RuntimeVariableList::<Hash256>::from_vec(Vec::<Hash256>::new(), max_request_blocks)
.as_ssz_bytes()
.len()
}

fn max_blocks_by_root_request_common(max_request_blocks: u64) -> usize {
let max_request_blocks = max_request_blocks as usize;
RuntimeVariableList::<Hash256>::from_vec(
vec![Hash256::zero(); max_request_blocks],
max_request_blocks,
)
.as_ssz_bytes()
.len()
}

fn min_blobs_by_root_request_common(max_request_blob_sidecars: u64) -> usize {
let max_request_blob_sidecars = max_request_blob_sidecars as usize;
RuntimeVariableList::<Hash256>::from_vec(Vec::<Hash256>::new(), max_request_blob_sidecars)
.as_ssz_bytes()
.len()
}

fn max_blobs_by_root_request_common(max_request_blob_sidecars: u64) -> usize {
let max_request_blob_sidecars = max_request_blob_sidecars as usize;
RuntimeVariableList::<Hash256>::from_vec(
vec![Hash256::zero(); max_request_blob_sidecars],
max_request_blob_sidecars,
)
.as_ssz_bytes()
.len()
}

fn default_min_blocks_by_root_request() -> usize {
min_blocks_by_root_request_common(default_max_request_blocks())
}

fn default_max_blocks_by_root_request() -> usize {
max_blocks_by_root_request_common(default_max_request_blocks())
}

fn default_min_blocks_by_root_request_deneb() -> usize {
min_blocks_by_root_request_common(default_max_request_blocks_deneb())
}

fn default_max_blocks_by_root_request_deneb() -> usize {
max_blocks_by_root_request_common(default_max_request_blocks_deneb())
}

fn default_min_blobs_by_root_request() -> usize {
min_blobs_by_root_request_common(default_max_request_blob_sidecars())
}

fn default_max_blobs_by_root_request() -> usize {
max_blobs_by_root_request_common(default_max_request_blob_sidecars())
}

impl Default for Config {
fn default() -> Self {
let chain_spec = MainnetEthSpec::default_spec();
Expand Down Expand Up @@ -1292,14 +1419,22 @@ impl Config {
deposit_contract_address: spec.deposit_contract_address,

gossip_max_size: spec.gossip_max_size,
max_request_blocks: spec.max_request_blocks,
epochs_per_subnet_subscription: spec.epochs_per_subnet_subscription,
min_epochs_for_block_requests: spec.min_epochs_for_block_requests,
max_chunk_size: spec.max_chunk_size,
ttfb_timeout: spec.ttfb_timeout,
resp_timeout: spec.resp_timeout,
attestation_propagation_slot_range: spec.attestation_propagation_slot_range,
maximum_gossip_clock_disparity_millis: spec.maximum_gossip_clock_disparity_millis,
message_domain_invalid_snappy: spec.message_domain_invalid_snappy,
message_domain_valid_snappy: spec.message_domain_valid_snappy,
attestation_subnet_extra_bits: spec.attestation_subnet_extra_bits,
attestation_subnet_prefix_bits: spec.attestation_subnet_prefix_bits,
max_request_blocks_deneb: spec.max_request_blocks_deneb,
max_request_blob_sidecars: spec.max_request_blob_sidecars,
min_epochs_for_blob_sidecars_requests: spec.min_epochs_for_blob_sidecars_requests,
blob_sidecar_subnet_count: spec.blob_sidecar_subnet_count,
}
}

Expand Down Expand Up @@ -1356,6 +1491,14 @@ impl Config {
message_domain_valid_snappy,
attestation_subnet_extra_bits,
attestation_subnet_prefix_bits,
max_request_blocks,
epochs_per_subnet_subscription,
attestation_propagation_slot_range,
maximum_gossip_clock_disparity_millis,
max_request_blocks_deneb,
max_request_blob_sidecars,
min_epochs_for_blob_sidecars_requests,
blob_sidecar_subnet_count,
} = self;

if preset_base != T::spec_name().to_string().as_str() {
Expand Down Expand Up @@ -1405,6 +1548,27 @@ impl Config {
message_domain_valid_snappy,
attestation_subnet_extra_bits,
attestation_subnet_prefix_bits,
max_request_blocks,
epochs_per_subnet_subscription,
attestation_propagation_slot_range,
maximum_gossip_clock_disparity_millis,
max_request_blocks_deneb,
max_request_blob_sidecars,
min_epochs_for_blob_sidecars_requests,
blob_sidecar_subnet_count,

// We need to re-derive any values that might have changed in the config.
min_blocks_by_root_request: min_blocks_by_root_request_common(max_request_blocks),
max_blocks_by_root_request: max_blocks_by_root_request_common(max_request_blocks),
min_blocks_by_root_request_deneb: min_blocks_by_root_request_common(
max_request_blocks_deneb,
),
max_blocks_by_root_request_deneb: max_blocks_by_root_request_common(
max_request_blocks_deneb,
),
min_blobs_by_root_request: min_blobs_by_root_request_common(max_request_blob_sidecars),
max_blobs_by_root_request: max_blobs_by_root_request_common(max_request_blob_sidecars),

..chain_spec.clone()
})
}
Expand Down
Loading

0 comments on commit 936af46

Please sign in to comment.