From 05624266613c11150d717d72c69afac4151cac5f Mon Sep 17 00:00:00 2001 From: Haleem Assal <45647978+Hassall@users.noreply.github.com> Date: Mon, 24 Jan 2022 16:56:37 -0400 Subject: [PATCH] add 'ticks-per-slot' to 'solana-test-validator' (#22701) * add 'ticks-per-slot' to 'solana-test-validator' * add input parser validator for "ticks-per-slot" argument * fix fmt --- test-validator/src/lib.rs | 10 ++++++++++ validator/src/bin/solana-test-validator.rs | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index bc99f78c9..983dd5c94 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -96,6 +96,7 @@ pub struct TestValidatorGenesis { no_bpf_jit: bool, accounts: HashMap, programs: Vec, + ticks_per_slot: Option, epoch_schedule: Option, node_config: TestValidatorNodeConfig, pub validator_exit: Arc>, @@ -128,6 +129,11 @@ impl TestValidatorGenesis { self } + pub fn ticks_per_slot(&mut self, ticks_per_slot: u64) -> &mut Self { + self.ticks_per_slot = Some(ticks_per_slot); + self + } + pub fn epoch_schedule(&mut self, epoch_schedule: EpochSchedule) -> &mut Self { self.epoch_schedule = Some(epoch_schedule); self @@ -465,6 +471,10 @@ impl TestValidator { .epoch_schedule .unwrap_or_else(EpochSchedule::without_warmup); + if let Some(ticks_per_slot) = config.ticks_per_slot { + genesis_config.ticks_per_slot = ticks_per_slot; + } + let ledger_path = match &config.ledger_path { None => create_new_tmp_ledger!(&genesis_config).0, Some(ledger_path) => { diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index b019b08af..c7e98efed 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -5,7 +5,7 @@ use { solana_clap_utils::{ input_parsers::{pubkey_of, pubkeys_of, value_of}, input_validators::{ - is_pubkey, is_pubkey_or_keypair, is_slot, is_url_or_moniker, + is_parsable, is_pubkey, is_pubkey_or_keypair, is_slot, is_url_or_moniker, normalize_to_url_if_moniker, }, }, @@ -187,6 +187,14 @@ fn main() { .takes_value(false) .help("Disable the just-in-time compiler and instead use the interpreter for BPF. Windows always disables JIT."), ) + .arg( + Arg::with_name("ticks_per_slot") + .long("ticks-per-slot") + .value_name("TICKS") + .validator(is_parsable::) + .takes_value(true) + .help("The number of ticks in a slot"), + ) .arg( Arg::with_name("slots_per_epoch") .long("slots-per-epoch") @@ -397,6 +405,7 @@ fn main() { let rpc_port = value_t_or_exit!(matches, "rpc_port", u16); let faucet_port = value_t_or_exit!(matches, "faucet_port", u16); + let ticks_per_slot = value_t!(matches, "ticks_per_slot", u64).ok(); let slots_per_epoch = value_t!(matches, "slots_per_epoch", Slot).ok(); let gossip_host = matches.value_of("gossip_host").map(|gossip_host| { solana_net_utils::parse_host(gossip_host).unwrap_or_else(|err| { @@ -539,6 +548,7 @@ fn main() { ("clone_account", "--clone"), ("account", "--account"), ("mint_address", "--mint"), + ("ticks_per_slot", "--ticks-per-slot"), ("slots_per_epoch", "--slots-per-epoch"), ("faucet_sol", "--faucet-sol"), ] { @@ -620,6 +630,10 @@ fn main() { genesis.warp_slot(warp_slot); } + if let Some(ticks_per_slot) = ticks_per_slot { + genesis.ticks_per_slot(ticks_per_slot); + } + if let Some(slots_per_epoch) = slots_per_epoch { genesis.epoch_schedule(EpochSchedule::custom( slots_per_epoch,