solana_local_cluster/
cluster.rs1use {
2 solana_commitment_config::CommitmentConfig,
3 solana_core::validator::{Validator, ValidatorConfig},
4 solana_gossip::{contact_info::ContactInfo, node::Node},
5 solana_keypair::Keypair,
6 solana_ledger::shred::Shred,
7 solana_pubkey::Pubkey,
8 solana_quic_client::{QuicConfig, QuicConnectionManager, QuicPool},
9 solana_streamer::socket::SocketAddrSpace,
10 solana_tpu_client::tpu_client::TpuClient,
11 std::{io::Result, path::PathBuf, sync::Arc},
12};
13
14pub type QuicTpuClient = TpuClient<QuicPool, QuicConnectionManager, QuicConfig>;
15
16pub struct ValidatorInfo {
17 pub keypair: Arc<Keypair>,
18 pub voting_keypair: Arc<Keypair>,
19 pub ledger_path: PathBuf,
20 pub contact_info: ContactInfo,
21}
22
23pub struct ClusterValidatorInfo {
24 pub info: ValidatorInfo,
25 pub config: ValidatorConfig,
26 pub validator: Option<Validator>,
27}
28
29impl ClusterValidatorInfo {
30 pub fn new(
31 validator_info: ValidatorInfo,
32 config: ValidatorConfig,
33 validator: Validator,
34 ) -> Self {
35 Self {
36 info: validator_info,
37 config,
38 validator: Some(validator),
39 }
40 }
41}
42
43pub trait Cluster {
44 fn get_node_pubkeys(&self) -> Vec<Pubkey>;
45 fn build_validator_tpu_quic_client(&self, pubkey: &Pubkey) -> Result<QuicTpuClient>;
46 fn build_validator_tpu_quic_client_with_commitment(
47 &self,
48 pubkey: &Pubkey,
49 commitment_config: CommitmentConfig,
50 ) -> Result<QuicTpuClient>;
51 fn get_contact_info(&self, pubkey: &Pubkey) -> Option<&ContactInfo>;
52 fn exit_node(&mut self, pubkey: &Pubkey) -> ClusterValidatorInfo;
53 fn restart_node(
54 &mut self,
55 pubkey: &Pubkey,
56 cluster_validator_info: ClusterValidatorInfo,
57 socket_addr_space: SocketAddrSpace,
58 );
59 fn create_restart_context(
60 &mut self,
61 pubkey: &Pubkey,
62 cluster_validator_info: &mut ClusterValidatorInfo,
63 ) -> (Node, Vec<ContactInfo>);
64 fn restart_node_with_context(
65 cluster_validator_info: ClusterValidatorInfo,
66 restart_context: (Node, Vec<ContactInfo>),
67 socket_addr_space: SocketAddrSpace,
68 ) -> ClusterValidatorInfo;
69 fn add_node(&mut self, pubkey: &Pubkey, cluster_validator_info: ClusterValidatorInfo);
70 fn exit_restart_node(
71 &mut self,
72 pubkey: &Pubkey,
73 config: ValidatorConfig,
74 socket_addr_space: SocketAddrSpace,
75 );
76 fn set_entry_point(&mut self, entry_point_info: ContactInfo);
77 fn send_shreds_to_validator(&self, dup_shreds: Vec<&Shred>, validator_key: &Pubkey);
78}