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
# Extends the mainnet preset
CONFIG_NAME: '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
# ---------------------------------------------------------------
# Estimated on Sept 15, 2022
@ -12,6 +18,8 @@ TERMINAL_TOTAL_DIFFICULTY: 58750000000000000000000
TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000
TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615
# Genesis
# ---------------------------------------------------------------
# `2**14` (= 16,384)
@ -32,22 +40,16 @@ GENESIS_DELAY: 604800
# Altair
ALTAIR_FORK_VERSION: 0x01000000
ALTAIR_FORK_EPOCH: 74240
# Merge
ALTAIR_FORK_EPOCH: 74240 # Oct 27, 2021, 10:56:23am UTC
# Bellatrix
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_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_FORK_VERSION: 0x04000000
DENEB_FORK_EPOCH: 18446744073709551615
# 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
DENEB_FORK_EPOCH: 269568 # March 13, 2024, 01:55:35pm UTC
# Time parameters
@ -74,16 +76,22 @@ INACTIVITY_SCORE_RECOVERY_RATE: 16
EJECTION_BALANCE: 16000000000
# 2**2 (= 4)
MIN_PER_EPOCH_CHURN_LIMIT: 4
# 2**3 (= 8)
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8
# 2**16 (= 65,536)
CHURN_LIMIT_QUOTIENT: 65536
# [New in Deneb:EIP7514] 2**3 (= 8)
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8
# Fork choice
# ---------------------------------------------------------------
# 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
# ---------------------------------------------------------------
@ -92,17 +100,43 @@ DEPOSIT_CHAIN_ID: 1
DEPOSIT_NETWORK_ID: 1
DEPOSIT_CONTRACT_ADDRESS: 0x00000000219ab540356cBB839Cbe05303d7705Fa
# Network
# Networking
# ---------------------------------------------------------------
SUBNETS_PER_NODE: 2
# `10 * 2**20` (= 10485760, 10 MiB)
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
# `10 * 2**20` (=10485760, 10 MiB)
MAX_CHUNK_SIZE: 10485760
# 5s
TTFB_TIMEOUT: 5
# 10s
RESP_TIMEOUT: 10
ATTESTATION_PROPAGATION_SLOT_RANGE: 32
# 500ms
MAXIMUM_GOSSIP_CLOCK_DISPARITY: 500
MESSAGE_DOMAIN_INVALID_SNAPPY: 0x00000000
MESSAGE_DOMAIN_VALID_SNAPPY: 0x01000000
# 2 subnets per node
SUBNETS_PER_NODE: 2
# 2**8 (= 64)
ATTESTATION_SUBNET_COUNT: 64
ATTESTATION_SUBNET_EXTRA_BITS: 0
# ceillog2(ATTESTATION_SUBNET_COUNT) + ATTESTATION_SUBNET_EXTRA_BITS
ATTESTATION_SUBNET_PREFIX_BITS: 6
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 {
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 {
deposit_contract_deploy_block,
@ -593,7 +595,7 @@ mod tests {
.map(Encode::as_ssz_bytes)
.map(Into::into),
config,
kzg_trusted_setup: None,
kzg_trusted_setup: Some(kzg_trusted_setup),
};
testnet

View File

@ -8,5 +8,5 @@ FIELD_ELEMENTS_PER_BLOB: 4096
MAX_BLOB_COMMITMENTS_PER_BLOCK: 4096
# `uint64(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

View File

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

View File

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