Skip to main content

solana_local_cluster/
cluster.rs

1use {
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}