use solana_client::thin_client::ThinClient; use solana_core::contact_info::ContactInfo; use solana_core::validator::ValidatorConfig; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::Keypair; use std::path::PathBuf; use std::sync::Arc; pub struct ValidatorInfo { pub keypair: Arc, pub voting_keypair: Arc, pub storage_keypair: Arc, pub ledger_path: PathBuf, pub contact_info: ContactInfo, } pub struct ClusterValidatorInfo { pub info: ValidatorInfo, pub config: ValidatorConfig, } impl ClusterValidatorInfo { pub fn new(validator_info: ValidatorInfo, config: ValidatorConfig) -> Self { Self { info: validator_info, config, } } } pub trait Cluster { fn get_node_pubkeys(&self) -> Vec; fn get_validator_client(&self, pubkey: &Pubkey) -> Option; fn exit_node(&mut self, pubkey: &Pubkey) -> ClusterValidatorInfo; fn restart_node(&mut self, pubkey: &Pubkey, cluster_validator_info: ClusterValidatorInfo); fn exit_restart_node(&mut self, pubkey: &Pubkey, config: ValidatorConfig); }