Schedule Deneb on mainnet (#5233)

* Schedule Deneb on mainnet

* Fix trusted setup roundtrip test

* Fix BN CLI tests for insecure genesis sync
This commit is contained in:
Michael Sproul 2024-02-15 23:23:51 +11:00 committed by GitHub
parent 7c23625193
commit 0e819fa785
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 84 additions and 27 deletions

View File

@ -1,9 +1,15 @@
# Mainnet config # Mainnet config
# Extends the mainnet preset # Extends the mainnet preset
CONFIG_NAME: 'mainnet'
PRESET_BASE: 'mainnet' PRESET_BASE: 'mainnet'
# Free-form short name of the network that this configuration applies to - known
# canonical network names include:
# * 'mainnet' - there can be only one
# * 'prater' - testnet
# Must match the regex: [a-z0-9\-]
CONFIG_NAME: 'mainnet'
# Transition # Transition
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Estimated on Sept 15, 2022 # Estimated on Sept 15, 2022
@ -12,6 +18,8 @@ TERMINAL_TOTAL_DIFFICULTY: 58750000000000000000000
TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000 TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000
TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615 TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615
# Genesis # Genesis
# --------------------------------------------------------------- # ---------------------------------------------------------------
# `2**14` (= 16,384) # `2**14` (= 16,384)
@ -32,22 +40,16 @@ GENESIS_DELAY: 604800
# Altair # Altair
ALTAIR_FORK_VERSION: 0x01000000 ALTAIR_FORK_VERSION: 0x01000000
ALTAIR_FORK_EPOCH: 74240 ALTAIR_FORK_EPOCH: 74240 # Oct 27, 2021, 10:56:23am UTC
# Merge # Bellatrix
BELLATRIX_FORK_VERSION: 0x02000000 BELLATRIX_FORK_VERSION: 0x02000000
BELLATRIX_FORK_EPOCH: 144896 # Sept 6, 2022, 11:34:47am UTC BELLATRIX_FORK_EPOCH: 144896 # Sept 6, 2022, 11:34:47am UTC
# Capella # Capella
CAPELLA_FORK_VERSION: 0x03000000 CAPELLA_FORK_VERSION: 0x03000000
CAPELLA_FORK_EPOCH: 194048 # April 12, 2023, 10:27:35pm UTC CAPELLA_FORK_EPOCH: 194048 # April 12, 2023, 10:27:35pm UTC
# Deneb # Deneb
DENEB_FORK_VERSION: 0x04000000 DENEB_FORK_VERSION: 0x04000000
DENEB_FORK_EPOCH: 18446744073709551615 DENEB_FORK_EPOCH: 269568 # March 13, 2024, 01:55:35pm UTC
# Sharding
SHARDING_FORK_VERSION: 0x03000000
SHARDING_FORK_EPOCH: 18446744073709551615
# TBD, 2**32 is a placeholder. Merge transition approach is in active R&D.
TRANSITION_TOTAL_DIFFICULTY: 4294967296
# Time parameters # Time parameters
@ -74,16 +76,22 @@ INACTIVITY_SCORE_RECOVERY_RATE: 16
EJECTION_BALANCE: 16000000000 EJECTION_BALANCE: 16000000000
# 2**2 (= 4) # 2**2 (= 4)
MIN_PER_EPOCH_CHURN_LIMIT: 4 MIN_PER_EPOCH_CHURN_LIMIT: 4
# 2**3 (= 8)
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8
# 2**16 (= 65,536) # 2**16 (= 65,536)
CHURN_LIMIT_QUOTIENT: 65536 CHURN_LIMIT_QUOTIENT: 65536
# [New in Deneb:EIP7514] 2**3 (= 8)
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8
# Fork choice # Fork choice
# --------------------------------------------------------------- # ---------------------------------------------------------------
# 40% # 40%
PROPOSER_SCORE_BOOST: 40 PROPOSER_SCORE_BOOST: 40
# 20%
REORG_HEAD_WEIGHT_THRESHOLD: 20
# 160%
REORG_PARENT_WEIGHT_THRESHOLD: 160
# `2` epochs
REORG_MAX_EPOCHS_SINCE_FINALIZATION: 2
# Deposit contract # Deposit contract
# --------------------------------------------------------------- # ---------------------------------------------------------------
@ -92,17 +100,43 @@ DEPOSIT_CHAIN_ID: 1
DEPOSIT_NETWORK_ID: 1 DEPOSIT_NETWORK_ID: 1
DEPOSIT_CONTRACT_ADDRESS: 0x00000000219ab540356cBB839Cbe05303d7705Fa DEPOSIT_CONTRACT_ADDRESS: 0x00000000219ab540356cBB839Cbe05303d7705Fa
# Network
# Networking
# --------------------------------------------------------------- # ---------------------------------------------------------------
SUBNETS_PER_NODE: 2 # `10 * 2**20` (= 10485760, 10 MiB)
GOSSIP_MAX_SIZE: 10485760 GOSSIP_MAX_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 MIN_EPOCHS_FOR_BLOCK_REQUESTS: 33024
# `10 * 2**20` (=10485760, 10 MiB)
MAX_CHUNK_SIZE: 10485760 MAX_CHUNK_SIZE: 10485760
# 5s
TTFB_TIMEOUT: 5 TTFB_TIMEOUT: 5
# 10s
RESP_TIMEOUT: 10 RESP_TIMEOUT: 10
ATTESTATION_PROPAGATION_SLOT_RANGE: 32
# 500ms
MAXIMUM_GOSSIP_CLOCK_DISPARITY: 500
MESSAGE_DOMAIN_INVALID_SNAPPY: 0x00000000 MESSAGE_DOMAIN_INVALID_SNAPPY: 0x00000000
MESSAGE_DOMAIN_VALID_SNAPPY: 0x01000000 MESSAGE_DOMAIN_VALID_SNAPPY: 0x01000000
# 2 subnets per node
SUBNETS_PER_NODE: 2
# 2**8 (= 64)
ATTESTATION_SUBNET_COUNT: 64 ATTESTATION_SUBNET_COUNT: 64
ATTESTATION_SUBNET_EXTRA_BITS: 0 ATTESTATION_SUBNET_EXTRA_BITS: 0
# ceillog2(ATTESTATION_SUBNET_COUNT) + ATTESTATION_SUBNET_EXTRA_BITS
ATTESTATION_SUBNET_PREFIX_BITS: 6 ATTESTATION_SUBNET_PREFIX_BITS: 6
ATTESTATION_SUBNET_SHUFFLING_PREFIX_BITS: 3 ATTESTATION_SUBNET_SHUFFLING_PREFIX_BITS: 3
# 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

View File

@ -583,6 +583,8 @@ mod tests {
} else { } else {
GenesisStateSource::Unknown GenesisStateSource::Unknown
}; };
// With Deneb enabled by default we must set a trusted setup here.
let kzg_trusted_setup = get_trusted_setup_from_config(&config).unwrap();
let testnet = Eth2NetworkConfig { let testnet = Eth2NetworkConfig {
deposit_contract_deploy_block, deposit_contract_deploy_block,
@ -593,7 +595,7 @@ mod tests {
.map(Encode::as_ssz_bytes) .map(Encode::as_ssz_bytes)
.map(Into::into), .map(Into::into),
config, config,
kzg_trusted_setup: None, kzg_trusted_setup: Some(kzg_trusted_setup),
}; };
testnet testnet

View File

@ -8,5 +8,5 @@ FIELD_ELEMENTS_PER_BLOB: 4096
MAX_BLOB_COMMITMENTS_PER_BLOCK: 4096 MAX_BLOB_COMMITMENTS_PER_BLOCK: 4096
# `uint64(6)` # `uint64(6)`
MAX_BLOBS_PER_BLOCK: 6 MAX_BLOBS_PER_BLOCK: 6
# `floorlog2(BLOB_KZG_COMMITMENTS_GINDEX) + 1 + ceillog2(MAX_BLOB_COMMITMENTS_PER_BLOCK)` = 4 + 1 + 12 = 17 # `floorlog2(get_generalized_index(BeaconBlockBody, 'blob_kzg_commitments')) + 1 + ceillog2(MAX_BLOB_COMMITMENTS_PER_BLOCK)` = 4 + 1 + 12 = 17
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 17 KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: 17

View File

@ -681,7 +681,7 @@ impl ChainSpec {
* Deneb hard fork params * Deneb hard fork params
*/ */
deneb_fork_version: [0x04, 0x00, 0x00, 0x00], deneb_fork_version: [0x04, 0x00, 0x00, 0x00],
deneb_fork_epoch: None, deneb_fork_epoch: Some(Epoch::new(269568)),
/* /*
* Network specific * Network specific

View File

@ -55,6 +55,12 @@ impl CommandLineTest {
} }
fn run_with_zero_port(&mut self) -> CompletedTest<Config> { fn run_with_zero_port(&mut self) -> CompletedTest<Config> {
// Required since Deneb was enabled on mainnet.
self.cmd.arg("--allow-insecure-genesis-sync");
self.run_with_zero_port_and_no_genesis_sync()
}
fn run_with_zero_port_and_no_genesis_sync(&mut self) -> CompletedTest<Config> {
self.cmd.arg("-z"); self.cmd.arg("-z");
self.run() self.run()
} }
@ -93,16 +99,16 @@ fn staking_flag() {
} }
#[test] #[test]
fn allow_insecure_genesis_sync() { #[should_panic]
CommandLineTest::new() fn allow_insecure_genesis_sync_default() {
.run_with_zero_port() CommandLineTest::new().run_with_zero_port_and_no_genesis_sync();
.with_config(|config| { }
assert_eq!(config.allow_insecure_genesis_sync, false);
});
#[test]
fn allow_insecure_genesis_sync_enabled() {
CommandLineTest::new() CommandLineTest::new()
.flag("allow-insecure-genesis-sync", None) .flag("allow-insecure-genesis-sync", None)
.run_with_zero_port() .run_with_zero_port_and_no_genesis_sync()
.with_config(|config| { .with_config(|config| {
assert_eq!(config.allow_insecure_genesis_sync, true); assert_eq!(config.allow_insecure_genesis_sync, true);
}); });
@ -851,6 +857,7 @@ fn network_port_flag_over_ipv4() {
let port = 0; let port = 0;
CommandLineTest::new() CommandLineTest::new()
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -867,6 +874,7 @@ fn network_port_flag_over_ipv4() {
let port = 9000; let port = 9000;
CommandLineTest::new() CommandLineTest::new()
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -886,6 +894,7 @@ fn network_port_flag_over_ipv6() {
CommandLineTest::new() CommandLineTest::new()
.flag("listen-address", Some("::1")) .flag("listen-address", Some("::1"))
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -903,6 +912,7 @@ fn network_port_flag_over_ipv6() {
CommandLineTest::new() CommandLineTest::new()
.flag("listen-address", Some("::1")) .flag("listen-address", Some("::1"))
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -925,6 +935,7 @@ fn network_port_flag_over_ipv4_and_ipv6() {
.flag("listen-address", Some("::1")) .flag("listen-address", Some("::1"))
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("port6", Some(port6.to_string().as_str())) .flag("port6", Some(port6.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -954,6 +965,7 @@ fn network_port_flag_over_ipv4_and_ipv6() {
.flag("listen-address", Some("::1")) .flag("listen-address", Some("::1"))
.flag("port", Some(port.to_string().as_str())) .flag("port", Some(port.to_string().as_str()))
.flag("port6", Some(port6.to_string().as_str())) .flag("port6", Some(port6.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -983,6 +995,7 @@ fn network_port_and_discovery_port_flags_over_ipv4() {
CommandLineTest::new() CommandLineTest::new()
.flag("port", Some(tcp4_port.to_string().as_str())) .flag("port", Some(tcp4_port.to_string().as_str()))
.flag("discovery-port", Some(disc4_port.to_string().as_str())) .flag("discovery-port", Some(disc4_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1003,6 +1016,7 @@ fn network_port_and_discovery_port_flags_over_ipv6() {
.flag("listen-address", Some("::1")) .flag("listen-address", Some("::1"))
.flag("port", Some(tcp6_port.to_string().as_str())) .flag("port", Some(tcp6_port.to_string().as_str()))
.flag("discovery-port", Some(disc6_port.to_string().as_str())) .flag("discovery-port", Some(disc6_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1028,6 +1042,7 @@ fn network_port_and_discovery_port_flags_over_ipv4_and_ipv6() {
.flag("discovery-port", Some(disc4_port.to_string().as_str())) .flag("discovery-port", Some(disc4_port.to_string().as_str()))
.flag("port6", Some(tcp6_port.to_string().as_str())) .flag("port6", Some(tcp6_port.to_string().as_str()))
.flag("discovery-port6", Some(disc6_port.to_string().as_str())) .flag("discovery-port6", Some(disc6_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1067,6 +1082,7 @@ fn network_port_discovery_quic_port_flags_over_ipv4_and_ipv6() {
.flag("port6", Some(tcp6_port.to_string().as_str())) .flag("port6", Some(tcp6_port.to_string().as_str()))
.flag("discovery-port6", Some(disc6_port.to_string().as_str())) .flag("discovery-port6", Some(disc6_port.to_string().as_str()))
.flag("quic-port6", Some(quic6_port.to_string().as_str())) .flag("quic-port6", Some(quic6_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1293,6 +1309,7 @@ fn enr_match_flag_over_ipv4() {
.flag("listen-address", Some("127.0.0.2")) .flag("listen-address", Some("127.0.0.2"))
.flag("discovery-port", Some(udp4_port.to_string().as_str())) .flag("discovery-port", Some(udp4_port.to_string().as_str()))
.flag("port", Some(tcp4_port.to_string().as_str())) .flag("port", Some(tcp4_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1324,6 +1341,7 @@ fn enr_match_flag_over_ipv6() {
.flag("listen-address", Some(ADDR)) .flag("listen-address", Some(ADDR))
.flag("discovery-port", Some(udp6_port.to_string().as_str())) .flag("discovery-port", Some(udp6_port.to_string().as_str()))
.flag("port", Some(tcp6_port.to_string().as_str())) .flag("port", Some(tcp6_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1364,6 +1382,7 @@ fn enr_match_flag_over_ipv4_and_ipv6() {
.flag("listen-address", Some(IPV6_ADDR)) .flag("listen-address", Some(IPV6_ADDR))
.flag("discovery-port6", Some(udp6_port.to_string().as_str())) .flag("discovery-port6", Some(udp6_port.to_string().as_str()))
.flag("port6", Some(tcp6_port.to_string().as_str())) .flag("port6", Some(tcp6_port.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| { .with_config(|config| {
assert_eq!( assert_eq!(
@ -1490,6 +1509,7 @@ fn http_port_flag() {
.flag("http", None) .flag("http", None)
.flag("http-port", Some(port1.to_string().as_str())) .flag("http-port", Some(port1.to_string().as_str()))
.flag("port", Some(port2.to_string().as_str())) .flag("port", Some(port2.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| assert_eq!(config.http_api.listen_port, port1)); .with_config(|config| assert_eq!(config.http_api.listen_port, port1));
} }
@ -1647,6 +1667,7 @@ fn metrics_port_flag() {
.flag("metrics", None) .flag("metrics", None)
.flag("metrics-port", Some(port1.to_string().as_str())) .flag("metrics-port", Some(port1.to_string().as_str()))
.flag("port", Some(port2.to_string().as_str())) .flag("port", Some(port2.to_string().as_str()))
.flag("allow-insecure-genesis-sync", None)
.run() .run()
.with_config(|config| assert_eq!(config.http_metrics.listen_port, port1)); .with_config(|config| assert_eq!(config.http_metrics.listen_port, port1));
} }