mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-09 19:51:47 +00:00
Improve single-node testnet support and Arc NetworkConfig/ChainSpec (#6396)
* Arc ChainSpec and NetworkConfig * Fix release tests * Fix lint * Merge remote-tracking branch 'origin/unstable' into single-node-testnet
This commit is contained in:
@@ -350,11 +350,12 @@ impl<E: EthSpec> Case for ForkChoiceTest<E> {
|
||||
/// A testing rig used to execute a test case.
|
||||
struct Tester<E: EthSpec> {
|
||||
harness: BeaconChainHarness<EphemeralHarnessType<E>>,
|
||||
spec: ChainSpec,
|
||||
spec: Arc<ChainSpec>,
|
||||
}
|
||||
|
||||
impl<E: EthSpec> Tester<E> {
|
||||
pub fn new(case: &ForkChoiceTest<E>, spec: ChainSpec) -> Result<Self, Error> {
|
||||
let spec = Arc::new(spec);
|
||||
let genesis_time = case.anchor_state.genesis_time();
|
||||
|
||||
if case.anchor_state.slot() != spec.genesis_slot {
|
||||
|
||||
@@ -11,6 +11,7 @@ use node_test_rig::{
|
||||
};
|
||||
use rayon::prelude::*;
|
||||
use std::cmp::max;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use tokio::time::sleep;
|
||||
use types::{Epoch, EthSpec, MinimalEthSpec};
|
||||
@@ -98,7 +99,7 @@ pub fn run_basic_sim(matches: &ArgMatches) -> Result<(), String> {
|
||||
.multi_threaded_tokio_runtime()?
|
||||
.build()?;
|
||||
|
||||
let spec = &mut env.eth2_config.spec;
|
||||
let mut spec = (*env.eth2_config.spec).clone();
|
||||
|
||||
let total_validator_count = validators_per_node * node_count;
|
||||
let genesis_delay = GENESIS_DELAY;
|
||||
@@ -117,6 +118,8 @@ pub fn run_basic_sim(matches: &ArgMatches) -> Result<(), String> {
|
||||
spec.capella_fork_epoch = Some(Epoch::new(CAPELLA_FORK_EPOCH));
|
||||
spec.deneb_fork_epoch = Some(Epoch::new(DENEB_FORK_EPOCH));
|
||||
//spec.electra_fork_epoch = Some(Epoch::new(ELECTRA_FORK_EPOCH));
|
||||
let spec = Arc::new(spec);
|
||||
env.eth2_config.spec = spec.clone();
|
||||
|
||||
let slot_duration = Duration::from_secs(spec.seconds_per_slot);
|
||||
let slots_per_epoch = MinimalEthSpec::slots_per_epoch();
|
||||
|
||||
@@ -10,6 +10,7 @@ use node_test_rig::{
|
||||
};
|
||||
use rayon::prelude::*;
|
||||
use std::cmp::max;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use tokio::time::sleep;
|
||||
use types::{Epoch, EthSpec, MinimalEthSpec};
|
||||
@@ -105,7 +106,7 @@ pub fn run_fallback_sim(matches: &ArgMatches) -> Result<(), String> {
|
||||
.multi_threaded_tokio_runtime()?
|
||||
.build()?;
|
||||
|
||||
let spec = &mut env.eth2_config.spec;
|
||||
let mut spec = (*env.eth2_config.spec).clone();
|
||||
|
||||
let total_validator_count = validators_per_vc * vc_count;
|
||||
let node_count = vc_count * bns_per_vc;
|
||||
@@ -122,6 +123,8 @@ pub fn run_fallback_sim(matches: &ArgMatches) -> Result<(), String> {
|
||||
spec.capella_fork_epoch = Some(Epoch::new(CAPELLA_FORK_EPOCH));
|
||||
spec.deneb_fork_epoch = Some(Epoch::new(DENEB_FORK_EPOCH));
|
||||
//spec.electra_fork_epoch = Some(Epoch::new(ELECTRA_FORK_EPOCH));
|
||||
let spec = Arc::new(spec);
|
||||
env.eth2_config.spec = spec.clone();
|
||||
|
||||
let slot_duration = Duration::from_secs(spec.seconds_per_slot);
|
||||
let slots_per_epoch = MinimalEthSpec::slots_per_epoch();
|
||||
|
||||
@@ -317,7 +317,7 @@ mod tests {
|
||||
validator_definitions: Vec<ValidatorDefinition>,
|
||||
slashing_protection_config: SlashingProtectionConfig,
|
||||
using_web3signer: bool,
|
||||
spec: ChainSpec,
|
||||
spec: Arc<ChainSpec>,
|
||||
) -> Self {
|
||||
let log = test_logger();
|
||||
let validator_dir = TempDir::new().unwrap();
|
||||
@@ -408,7 +408,7 @@ mod tests {
|
||||
pub async fn new(
|
||||
network: &str,
|
||||
slashing_protection_config: SlashingProtectionConfig,
|
||||
spec: ChainSpec,
|
||||
spec: Arc<ChainSpec>,
|
||||
listen_port: u16,
|
||||
) -> Self {
|
||||
let signer_rig =
|
||||
@@ -575,7 +575,7 @@ mod tests {
|
||||
/// Test all the "base" (phase 0) types.
|
||||
async fn test_base_types(network: &str, listen_port: u16) {
|
||||
let network_config = Eth2NetworkConfig::constant(network).unwrap().unwrap();
|
||||
let spec = &network_config.chain_spec::<E>().unwrap();
|
||||
let spec = Arc::new(network_config.chain_spec::<E>().unwrap());
|
||||
|
||||
TestingRig::new(
|
||||
network,
|
||||
@@ -591,13 +591,16 @@ mod tests {
|
||||
.unwrap()
|
||||
})
|
||||
.await
|
||||
.assert_signatures_match("beacon_block_base", |pubkey, validator_store| async move {
|
||||
let block = BeaconBlock::Base(BeaconBlockBase::empty(spec));
|
||||
let block_slot = block.slot();
|
||||
validator_store
|
||||
.sign_block(pubkey, block, block_slot)
|
||||
.await
|
||||
.unwrap()
|
||||
.assert_signatures_match("beacon_block_base", |pubkey, validator_store| {
|
||||
let spec = spec.clone();
|
||||
async move {
|
||||
let block = BeaconBlock::Base(BeaconBlockBase::empty(&spec));
|
||||
let block_slot = block.slot();
|
||||
validator_store
|
||||
.sign_block(pubkey, block, block_slot)
|
||||
.await
|
||||
.unwrap()
|
||||
}
|
||||
})
|
||||
.await
|
||||
.assert_signatures_match("attestation", |pubkey, validator_store| async move {
|
||||
@@ -645,7 +648,7 @@ mod tests {
|
||||
/// Test all the Altair types.
|
||||
async fn test_altair_types(network: &str, listen_port: u16) {
|
||||
let network_config = Eth2NetworkConfig::constant(network).unwrap().unwrap();
|
||||
let spec = &network_config.chain_spec::<E>().unwrap();
|
||||
let spec = Arc::new(network_config.chain_spec::<E>().unwrap());
|
||||
let altair_fork_slot = spec
|
||||
.altair_fork_epoch
|
||||
.unwrap()
|
||||
@@ -658,17 +661,17 @@ mod tests {
|
||||
listen_port,
|
||||
)
|
||||
.await
|
||||
.assert_signatures_match(
|
||||
"beacon_block_altair",
|
||||
|pubkey, validator_store| async move {
|
||||
let mut altair_block = BeaconBlockAltair::empty(spec);
|
||||
.assert_signatures_match("beacon_block_altair", |pubkey, validator_store| {
|
||||
let spec = spec.clone();
|
||||
async move {
|
||||
let mut altair_block = BeaconBlockAltair::empty(&spec);
|
||||
altair_block.slot = altair_fork_slot;
|
||||
validator_store
|
||||
.sign_block(pubkey, BeaconBlock::Altair(altair_block), altair_fork_slot)
|
||||
.await
|
||||
.unwrap()
|
||||
},
|
||||
)
|
||||
}
|
||||
})
|
||||
.await
|
||||
.assert_signatures_match(
|
||||
"sync_selection_proof",
|
||||
@@ -728,7 +731,7 @@ mod tests {
|
||||
/// Test all the Bellatrix types.
|
||||
async fn test_bellatrix_types(network: &str, listen_port: u16) {
|
||||
let network_config = Eth2NetworkConfig::constant(network).unwrap().unwrap();
|
||||
let spec = &network_config.chain_spec::<E>().unwrap();
|
||||
let spec = Arc::new(network_config.chain_spec::<E>().unwrap());
|
||||
let bellatrix_fork_slot = spec
|
||||
.bellatrix_fork_epoch
|
||||
.unwrap()
|
||||
@@ -741,10 +744,10 @@ mod tests {
|
||||
listen_port,
|
||||
)
|
||||
.await
|
||||
.assert_signatures_match(
|
||||
"beacon_block_bellatrix",
|
||||
|pubkey, validator_store| async move {
|
||||
let mut bellatrix_block = BeaconBlockBellatrix::empty(spec);
|
||||
.assert_signatures_match("beacon_block_bellatrix", |pubkey, validator_store| {
|
||||
let spec = spec.clone();
|
||||
async move {
|
||||
let mut bellatrix_block = BeaconBlockBellatrix::empty(&spec);
|
||||
bellatrix_block.slot = bellatrix_fork_slot;
|
||||
validator_store
|
||||
.sign_block(
|
||||
@@ -754,8 +757,8 @@ mod tests {
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
},
|
||||
)
|
||||
}
|
||||
})
|
||||
.await;
|
||||
}
|
||||
|
||||
@@ -767,7 +770,7 @@ mod tests {
|
||||
let network = "mainnet";
|
||||
|
||||
let network_config = Eth2NetworkConfig::constant(network).unwrap().unwrap();
|
||||
let spec = &network_config.chain_spec::<E>().unwrap();
|
||||
let spec = Arc::new(network_config.chain_spec::<E>().unwrap());
|
||||
let bellatrix_fork_slot = spec
|
||||
.bellatrix_fork_epoch
|
||||
.unwrap()
|
||||
@@ -805,7 +808,7 @@ mod tests {
|
||||
};
|
||||
|
||||
let first_block = || {
|
||||
let mut bellatrix_block = BeaconBlockBellatrix::empty(spec);
|
||||
let mut bellatrix_block = BeaconBlockBellatrix::empty(&spec);
|
||||
bellatrix_block.slot = bellatrix_fork_slot;
|
||||
BeaconBlock::Bellatrix(bellatrix_block)
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user