diff --git a/test-validator/src/lib.rs b/test-validator/src/lib.rs index 06018fc664..ab01a17340 100644 --- a/test-validator/src/lib.rs +++ b/test-validator/src/lib.rs @@ -14,7 +14,7 @@ use { }, solana_ledger::{blockstore::create_new_ledger, create_new_tmp_ledger}, solana_net_utils::PortRange, - solana_rpc::rpc::JsonRpcConfig, + solana_rpc::{rpc::JsonRpcConfig, rpc_pubsub_service::PubSubConfig}, solana_runtime::{ genesis_utils::create_genesis_config_with_leader_ex, hardened_unpack::MAX_GENESIS_ARCHIVE_UNPACKED_SIZE, snapshot_config::SnapshotConfig, @@ -91,6 +91,7 @@ pub struct TestValidatorGenesis { tower_storage: Option>, pub rent: Rent, rpc_config: JsonRpcConfig, + pubsub_config: PubSubConfig, rpc_ports: Option<(u16, u16)>, // (JsonRpc, JsonRpcPubSub), None == random ports warp_slot: Option, no_bpf_jit: bool, @@ -149,6 +150,11 @@ impl TestValidatorGenesis { self } + pub fn pubsub_config(&mut self, pubsub_config: PubSubConfig) -> &mut Self { + self.pubsub_config = pubsub_config; + self + } + pub fn rpc_port(&mut self, rpc_port: u16) -> &mut Self { self.rpc_ports = Some((rpc_port, rpc_port + 1)); self @@ -606,6 +612,7 @@ impl TestValidator { ), )), rpc_config: config.rpc_config.clone(), + pubsub_config: config.pubsub_config.clone(), accounts_hash_interval_slots: 100, account_paths: vec![ledger_path.join("accounts")], poh_verify: false, // Skip PoH verification of ledger on startup for speed diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index c7e98efed0..08b5e21028 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -12,7 +12,7 @@ use { solana_client::rpc_client::RpcClient, solana_core::tower_storage::FileTowerStorage, solana_faucet::faucet::{run_local_faucet_with_port, FAUCET_PORT}, - solana_rpc::rpc::JsonRpcConfig, + solana_rpc::{rpc::JsonRpcConfig, rpc_pubsub_service::PubSubConfig}, solana_sdk::{ account::AccountSharedData, clock::Slot, @@ -155,6 +155,12 @@ fn main() { .validator(solana_validator::port_validator) .help("Enable JSON RPC on this port, and the next port for the RPC websocket"), ) + .arg( + Arg::with_name("rpc_pubsub_enable_vote_subscription") + .long("rpc-pubsub-enable-vote-subscription") + .takes_value(false) + .help("Enable the unstable RPC PubSub `voteSubscribe` subscription"), + ) .arg( Arg::with_name("bpf_program") .long("bpf-program") @@ -404,6 +410,7 @@ fn main() { }); let rpc_port = value_t_or_exit!(matches, "rpc_port", u16); + let enable_vote_subscription = matches.is_present("rpc_pubsub_enable_vote_subscription"); 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(); @@ -612,6 +619,10 @@ fn main() { faucet_addr, ..JsonRpcConfig::default() }) + .pubsub_config(PubSubConfig { + enable_vote_subscription, + ..PubSubConfig::default() + }) .bpf_jit(!matches.is_present("no_bpf_jit")) .rpc_port(rpc_port) .add_programs_with_path(&programs_to_load)