diff --git a/cli-config/src/config.rs b/cli-config/src/config.rs index fd2fe6be7c..a0dfeee0c3 100644 --- a/cli-config/src/config.rs +++ b/cli-config/src/config.rs @@ -76,17 +76,6 @@ impl Config { ws_url.to_string() } - pub fn compute_rpc_banks_url(json_rpc_url: &str) -> String { - let json_rpc_url: Option = json_rpc_url.parse().ok(); - if json_rpc_url.is_none() { - return "".to_string(); - } - let mut url = json_rpc_url.unwrap(); - let port = url.port().unwrap_or(8899); - url.set_port(Some(port + 3)).expect("unable to set port"); - url.to_string() - } - pub fn import_address_labels

(&mut self, filename: P) -> Result<(), io::Error> where P: AsRef, @@ -133,28 +122,4 @@ mod test { assert_eq!(Config::compute_websocket_url(&"garbage"), String::new()); } - - #[test] - fn compute_rpc_banks_url() { - assert_eq!( - Config::compute_rpc_banks_url(&"http://devnet.solana.com"), - "http://devnet.solana.com:8902/".to_string() - ); - - assert_eq!( - Config::compute_rpc_banks_url(&"https://devnet.solana.com"), - "https://devnet.solana.com:8902/".to_string() - ); - - assert_eq!( - Config::compute_rpc_banks_url(&"http://example.com:8899"), - "http://example.com:8902/".to_string() - ); - assert_eq!( - Config::compute_rpc_banks_url(&"https://example.com:1234"), - "https://example.com:1237/".to_string() - ); - - assert_eq!(Config::compute_rpc_banks_url(&"garbage"), String::new()); - } } diff --git a/core/src/cluster_info.rs b/core/src/cluster_info.rs index b1066eebc4..7c4712a09a 100644 --- a/core/src/cluster_info.rs +++ b/core/src/cluster_info.rs @@ -424,7 +424,7 @@ pub fn make_accounts_hashes_message( type Ping = ping_pong::Ping<[u8; GOSSIP_PING_TOKEN_SIZE]>; // TODO These messages should go through the gpu pipeline for spam filtering -#[frozen_abi(digest = "3jHXixLRv6fuCykW47hBZSwFuwDjbZShR73GVQB6TjGr")] +#[frozen_abi(digest = "8L3mKuv292LTa3XFCGNVdaFihWnsgYE4hf941p9gqUxF")] #[derive(Serialize, Deserialize, Debug, AbiEnumVisitor, AbiExample)] #[allow(clippy::large_enum_variant)] enum Protocol { @@ -720,7 +720,7 @@ impl ClusterInfo { let rpc_addr = node.rpc.ip(); Some(format!( - "{:15} {:2}| {:5} | {:44} |{:^9}| {:5}| {:5}| {:5}| {}\n", + "{:15} {:2}| {:5} | {:44} |{:^9}| {:5}| {:5}| {}\n", rpc_addr.to_string(), if node.id == my_pubkey { "me" } else { "" }.to_string(), now.saturating_sub(last_updated), @@ -732,7 +732,6 @@ impl ClusterInfo { }, addr_to_string(&rpc_addr, &node.rpc), addr_to_string(&rpc_addr, &node.rpc_pubsub), - addr_to_string(&rpc_addr, &node.rpc_banks), node.shred_version, )) }) @@ -740,9 +739,9 @@ impl ClusterInfo { format!( "RPC Address |Age(ms)| Node identifier \ - | Version | RPC |PubSub| Banks|ShredVer\n\ + | Version | RPC |PubSub|ShredVer\n\ ------------------+-------+----------------------------------------------+---------+\ - ------+------+------+--------\n\ + ------+------+--------\n\ {}\ RPC Enabled Nodes: {}", nodes.join(""), @@ -3000,13 +2999,11 @@ impl Node { let rpc_pubsub_port = find_available_port_in_range(bind_ip_addr, (1024, 65535)).unwrap(); let rpc_pubsub_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), rpc_pubsub_port); - let rpc_banks_port = find_available_port_in_range(bind_ip_addr, (1024, 65535)).unwrap(); - let rpc_banks_addr = - SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), rpc_banks_port); let broadcast = vec![UdpSocket::bind("0.0.0.0:0").unwrap()]; let retransmit_socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let serve_repair = UdpSocket::bind("127.0.0.1:0").unwrap(); + let unused = UdpSocket::bind("0.0.0.0:0").unwrap(); let info = ContactInfo { id: *pubkey, gossip: gossip_addr, @@ -3015,7 +3012,7 @@ impl Node { repair: repair.local_addr().unwrap(), tpu: tpu.local_addr().unwrap(), tpu_forwards: tpu_forwards.local_addr().unwrap(), - rpc_banks: rpc_banks_addr, + unused: unused.local_addr().unwrap(), rpc: rpc_addr, rpc_pubsub: rpc_pubsub_addr, serve_repair: serve_repair.local_addr().unwrap(), @@ -3096,7 +3093,7 @@ impl Node { repair: SocketAddr::new(gossip_addr.ip(), repair_port), tpu: SocketAddr::new(gossip_addr.ip(), tpu_port), tpu_forwards: SocketAddr::new(gossip_addr.ip(), tpu_forwards_port), - rpc_banks: socketaddr_any!(), + unused: socketaddr_any!(), rpc: socketaddr_any!(), rpc_pubsub: socketaddr_any!(), serve_repair: SocketAddr::new(gossip_addr.ip(), serve_repair_port), diff --git a/core/src/contact_info.rs b/core/src/contact_info.rs index ea43093f7e..59c4179937 100644 --- a/core/src/contact_info.rs +++ b/core/src/contact_info.rs @@ -26,7 +26,7 @@ pub struct ContactInfo { /// address to forward unprocessed transactions to pub tpu_forwards: SocketAddr, /// address to which to send bank state requests - pub rpc_banks: SocketAddr, + pub unused: SocketAddr, /// address to which to send JSON-RPC requests pub rpc: SocketAddr, /// websocket for JSON-RPC push notifications @@ -95,7 +95,7 @@ impl Default for ContactInfo { repair: socketaddr_any!(), tpu: socketaddr_any!(), tpu_forwards: socketaddr_any!(), - rpc_banks: socketaddr_any!(), + unused: socketaddr_any!(), rpc: socketaddr_any!(), rpc_pubsub: socketaddr_any!(), serve_repair: socketaddr_any!(), @@ -115,7 +115,7 @@ impl ContactInfo { repair: socketaddr!("127.0.0.1:1237"), tpu: socketaddr!("127.0.0.1:1238"), tpu_forwards: socketaddr!("127.0.0.1:1239"), - rpc_banks: socketaddr!("127.0.0.1:1240"), + unused: socketaddr!("127.0.0.1:1240"), rpc: socketaddr!("127.0.0.1:1241"), rpc_pubsub: socketaddr!("127.0.0.1:1242"), serve_repair: socketaddr!("127.0.0.1:1243"), @@ -145,7 +145,7 @@ impl ContactInfo { repair: addr, tpu: addr, tpu_forwards: addr, - rpc_banks: addr, + unused: addr, rpc: addr, rpc_pubsub: addr, serve_repair: addr, @@ -170,7 +170,6 @@ impl ContactInfo { let repair = next_port(&bind_addr, 5); let rpc = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PORT); let rpc_pubsub = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PUBSUB_PORT); - let rpc_banks = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_BANKS_PORT); let serve_repair = next_port(&bind_addr, 6); Self { id: *pubkey, @@ -180,7 +179,7 @@ impl ContactInfo { repair, tpu, tpu_forwards, - rpc_banks, + unused: "0.0.0.0:0".parse().unwrap(), rpc, rpc_pubsub, serve_repair, @@ -257,7 +256,7 @@ mod tests { assert!(ci.rpc.ip().is_unspecified()); assert!(ci.rpc_pubsub.ip().is_unspecified()); assert!(ci.tpu.ip().is_unspecified()); - assert!(ci.rpc_banks.ip().is_unspecified()); + assert!(ci.unused.ip().is_unspecified()); assert!(ci.serve_repair.ip().is_unspecified()); } #[test] @@ -269,7 +268,7 @@ mod tests { assert!(ci.rpc.ip().is_multicast()); assert!(ci.rpc_pubsub.ip().is_multicast()); assert!(ci.tpu.ip().is_multicast()); - assert!(ci.rpc_banks.ip().is_multicast()); + assert!(ci.unused.ip().is_multicast()); assert!(ci.serve_repair.ip().is_multicast()); } #[test] @@ -282,7 +281,7 @@ mod tests { assert!(ci.rpc.ip().is_unspecified()); assert!(ci.rpc_pubsub.ip().is_unspecified()); assert!(ci.tpu.ip().is_unspecified()); - assert!(ci.rpc_banks.ip().is_unspecified()); + assert!(ci.unused.ip().is_unspecified()); assert!(ci.serve_repair.ip().is_unspecified()); } #[test] @@ -295,7 +294,7 @@ mod tests { assert_eq!(ci.tpu_forwards.port(), 13); assert_eq!(ci.rpc.port(), rpc_port::DEFAULT_RPC_PORT); assert_eq!(ci.rpc_pubsub.port(), rpc_port::DEFAULT_RPC_PUBSUB_PORT); - assert_eq!(ci.rpc_banks.port(), rpc_port::DEFAULT_RPC_BANKS_PORT); + assert!(ci.unused.ip().is_unspecified()); assert_eq!(ci.serve_repair.port(), 16); } @@ -319,10 +318,6 @@ mod tests { d1.rpc_pubsub, socketaddr!(format!("127.0.0.1:{}", rpc_port::DEFAULT_RPC_PUBSUB_PORT)) ); - assert_eq!( - d1.rpc_banks, - socketaddr!(format!("127.0.0.1:{}", rpc_port::DEFAULT_RPC_BANKS_PORT)) - ); assert_eq!(d1.tvu_forwards, socketaddr!("127.0.0.1:1238")); assert_eq!(d1.repair, socketaddr!("127.0.0.1:1239")); assert_eq!(d1.serve_repair, socketaddr!("127.0.0.1:1240")); diff --git a/core/src/serve_repair.rs b/core/src/serve_repair.rs index aa8b661a34..c4183616cc 100644 --- a/core/src/serve_repair.rs +++ b/core/src/serve_repair.rs @@ -685,7 +685,7 @@ mod tests { repair: socketaddr!("127.0.0.1:1237"), tpu: socketaddr!("127.0.0.1:1238"), tpu_forwards: socketaddr!("127.0.0.1:1239"), - rpc_banks: socketaddr!("127.0.0.1:1240"), + unused: socketaddr!("127.0.0.1:1240"), rpc: socketaddr!("127.0.0.1:1241"), rpc_pubsub: socketaddr!("127.0.0.1:1242"), serve_repair: socketaddr!("127.0.0.1:1243"), @@ -769,7 +769,7 @@ mod tests { repair: socketaddr!([127, 0, 0, 1], 1237), tpu: socketaddr!([127, 0, 0, 1], 1238), tpu_forwards: socketaddr!([127, 0, 0, 1], 1239), - rpc_banks: socketaddr!([127, 0, 0, 1], 1240), + unused: socketaddr!([127, 0, 0, 1], 1240), rpc: socketaddr!([127, 0, 0, 1], 1241), rpc_pubsub: socketaddr!([127, 0, 0, 1], 1242), serve_repair: serve_repair_addr, @@ -798,7 +798,7 @@ mod tests { repair: socketaddr!([127, 0, 0, 1], 1237), tpu: socketaddr!([127, 0, 0, 1], 1238), tpu_forwards: socketaddr!([127, 0, 0, 1], 1239), - rpc_banks: socketaddr!([127, 0, 0, 1], 1240), + unused: socketaddr!([127, 0, 0, 1], 1240), rpc: socketaddr!([127, 0, 0, 1], 1241), rpc_pubsub: socketaddr!([127, 0, 0, 1], 1242), serve_repair: serve_repair_addr2, diff --git a/core/src/test_validator.rs b/core/src/test_validator.rs index 35692ed357..dc107038a5 100644 --- a/core/src/test_validator.rs +++ b/core/src/test_validator.rs @@ -120,7 +120,7 @@ impl TestValidator { let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config); let config = ValidatorConfig { - rpc_addrs: Some((node.info.rpc, node.info.rpc_pubsub, node.info.rpc_banks)), + rpc_addrs: Some((node.info.rpc, node.info.rpc_pubsub)), ..ValidatorConfig::default() }; diff --git a/core/src/validator.rs b/core/src/validator.rs index 6238d976c4..88a997d1ab 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -30,7 +30,6 @@ use crate::{ }; use crossbeam_channel::{bounded, unbounded}; use rand::{thread_rng, Rng}; -use solana_banks_server::rpc_banks_service::RpcBanksService; use solana_ledger::{ bank_forks_utils, blockstore::{Blockstore, BlockstoreSignals, CompletedSlotsReceiver, PurgeType}, @@ -82,7 +81,7 @@ pub struct ValidatorConfig { pub voting_disabled: bool, pub account_paths: Vec, pub rpc_config: JsonRpcConfig, - pub rpc_addrs: Option<(SocketAddr, SocketAddr, SocketAddr)>, // (JsonRpc, JsonRpcPubSub, Banks) + pub rpc_addrs: Option<(SocketAddr, SocketAddr)>, // (JsonRpc, JsonRpcPubSub) pub pubsub_config: PubSubConfig, pub snapshot_config: Option, pub max_ledger_shreds: Option, @@ -176,7 +175,6 @@ struct TransactionHistoryServices { struct RpcServices { json_rpc_service: JsonRpcService, pubsub_service: PubSubService, - rpc_banks_service: RpcBanksService, optimistically_confirmed_bank_tracker: OptimisticallyConfirmedBankTracker, } @@ -396,62 +394,52 @@ impl Validator { let poh_recorder = Arc::new(Mutex::new(poh_recorder)); let rpc_override_health_check = Arc::new(AtomicBool::new(false)); - let (rpc_service, bank_notification_sender) = - if let Some((rpc_addr, rpc_pubsub_addr, rpc_banks_addr)) = config.rpc_addrs { - if ContactInfo::is_valid_address(&node.info.rpc) { - assert!(ContactInfo::is_valid_address(&node.info.rpc_pubsub)); - assert!(ContactInfo::is_valid_address(&node.info.rpc_banks)); - } else { - assert!(!ContactInfo::is_valid_address(&node.info.rpc_pubsub)); - assert!(!ContactInfo::is_valid_address(&node.info.rpc_banks)); - } - let tpu_address = cluster_info.my_contact_info().tpu; - let (bank_notification_sender, bank_notification_receiver) = unbounded(); - ( - Some(RpcServices { - json_rpc_service: JsonRpcService::new( - rpc_addr, - config.rpc_config.clone(), - config.snapshot_config.clone(), - bank_forks.clone(), - block_commitment_cache.clone(), - blockstore.clone(), - cluster_info.clone(), - Some(poh_recorder.clone()), - genesis_config.hash(), - ledger_path, - validator_exit.clone(), - config.trusted_validators.clone(), - rpc_override_health_check.clone(), - optimistically_confirmed_bank.clone(), - ), - pubsub_service: PubSubService::new( - config.pubsub_config.clone(), - &subscriptions, - rpc_pubsub_addr, - &exit, - ), - rpc_banks_service: RpcBanksService::new( - rpc_banks_addr, - tpu_address, - &bank_forks, - &block_commitment_cache, - &exit, - ), - optimistically_confirmed_bank_tracker: - OptimisticallyConfirmedBankTracker::new( - bank_notification_receiver, - &exit, - bank_forks.clone(), - optimistically_confirmed_bank, - subscriptions.clone(), - ), - }), - Some(bank_notification_sender), - ) + let (rpc_service, bank_notification_sender) = if let Some((rpc_addr, rpc_pubsub_addr)) = + config.rpc_addrs + { + if ContactInfo::is_valid_address(&node.info.rpc) { + assert!(ContactInfo::is_valid_address(&node.info.rpc_pubsub)); } else { - (None, None) - }; + assert!(!ContactInfo::is_valid_address(&node.info.rpc_pubsub)); + } + let (bank_notification_sender, bank_notification_receiver) = unbounded(); + ( + Some(RpcServices { + json_rpc_service: JsonRpcService::new( + rpc_addr, + config.rpc_config.clone(), + config.snapshot_config.clone(), + bank_forks.clone(), + block_commitment_cache.clone(), + blockstore.clone(), + cluster_info.clone(), + Some(poh_recorder.clone()), + genesis_config.hash(), + ledger_path, + validator_exit.clone(), + config.trusted_validators.clone(), + rpc_override_health_check.clone(), + optimistically_confirmed_bank.clone(), + ), + pubsub_service: PubSubService::new( + config.pubsub_config.clone(), + &subscriptions, + rpc_pubsub_addr, + &exit, + ), + optimistically_confirmed_bank_tracker: OptimisticallyConfirmedBankTracker::new( + bank_notification_receiver, + &exit, + bank_forks.clone(), + optimistically_confirmed_bank, + subscriptions.clone(), + ), + }), + Some(bank_notification_sender), + ) + } else { + (None, None) + }; if config.dev_halt_at_slot.is_some() { // Simulate a confirmed root to avoid RPC errors with CommitmentConfig::max() and @@ -666,13 +654,11 @@ impl Validator { if let Some(RpcServices { json_rpc_service, pubsub_service, - rpc_banks_service, optimistically_confirmed_bank_tracker, }) = self.rpc_service { json_rpc_service.join().expect("rpc_service"); pubsub_service.join().expect("pubsub_service"); - rpc_banks_service.join().expect("rpc_banks_service"); optimistically_confirmed_bank_tracker .join() .expect("optimistically_confirmed_bank_tracker"); @@ -1242,11 +1228,7 @@ mod tests { let voting_keypair = Arc::new(Keypair::new()); let config = ValidatorConfig { - rpc_addrs: Some(( - validator_node.info.rpc, - validator_node.info.rpc_pubsub, - validator_node.info.rpc_banks, - )), + rpc_addrs: Some((validator_node.info.rpc, validator_node.info.rpc_pubsub)), ..ValidatorConfig::default() }; let validator = Validator::new( @@ -1316,11 +1298,7 @@ mod tests { ledger_paths.push(validator_ledger_path.clone()); let vote_account_keypair = Keypair::new(); let config = ValidatorConfig { - rpc_addrs: Some(( - validator_node.info.rpc, - validator_node.info.rpc_pubsub, - validator_node.info.rpc_banks, - )), + rpc_addrs: Some((validator_node.info.rpc, validator_node.info.rpc_pubsub)), ..ValidatorConfig::default() }; Validator::new( diff --git a/local-cluster/src/local_cluster.rs b/local-cluster/src/local_cluster.rs index ff57b35c68..0d57ee7063 100644 --- a/local-cluster/src/local_cluster.rs +++ b/local-cluster/src/local_cluster.rs @@ -194,11 +194,7 @@ impl LocalCluster { let (leader_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config); let leader_contact_info = leader_node.info.clone(); let mut leader_config = config.validator_configs[0].clone(); - leader_config.rpc_addrs = Some(( - leader_node.info.rpc, - leader_node.info.rpc_pubsub, - leader_node.info.rpc_banks, - )); + leader_config.rpc_addrs = Some((leader_node.info.rpc, leader_node.info.rpc_pubsub)); leader_config.account_paths = vec![leader_ledger_path.join("accounts")]; let leader_keypair = Arc::new(Keypair::from_bytes(&leader_keypair.to_bytes()).unwrap()); let leader_vote_keypair = @@ -343,11 +339,7 @@ impl LocalCluster { } let mut config = validator_config.clone(); - config.rpc_addrs = Some(( - validator_node.info.rpc, - validator_node.info.rpc_pubsub, - validator_node.info.rpc_banks, - )); + config.rpc_addrs = Some((validator_node.info.rpc, validator_node.info.rpc_pubsub)); config.account_paths = vec![ledger_path.join("accounts")]; let voting_keypair = voting_keypair.unwrap(); let validator_server = Validator::new( @@ -629,8 +621,7 @@ impl Cluster for LocalCluster { // Update the stored ContactInfo for this node let node = Node::new_localhost_with_pubkey(&pubkey); cluster_validator_info.info.contact_info = node.info.clone(); - cluster_validator_info.config.rpc_addrs = - Some((node.info.rpc, node.info.rpc_pubsub, node.info.rpc_banks)); + cluster_validator_info.config.rpc_addrs = Some((node.info.rpc, node.info.rpc_pubsub)); let entry_point_info = { if *pubkey == self.entry_point_info.id { diff --git a/validator/src/main.rs b/validator/src/main.rs index 0981b422a2..da8b8608ee 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -573,11 +573,10 @@ fn verify_reachable_ports( } let mut tcp_listeners = vec![]; - if let Some((rpc_addr, rpc_pubsub_addr, rpc_banks_addr)) = validator_config.rpc_addrs { + if let Some((rpc_addr, rpc_pubsub_addr)) = validator_config.rpc_addrs { for (purpose, bind_addr, public_addr) in &[ ("RPC", rpc_addr, &node.info.rpc), ("RPC pubsub", rpc_pubsub_addr, &node.info.rpc_pubsub), - ("RPC banks", rpc_banks_addr, &node.info.rpc_banks), ] { if ContactInfo::is_valid_address(&public_addr) { tcp_listeners.push(( @@ -1510,9 +1509,9 @@ pub fn main() { ( SocketAddr::new(rpc_bind_address, rpc_port), SocketAddr::new(rpc_bind_address, rpc_port + 1), - // +2 is skipped to avoid a conflict with the websocket port (which is +2) in web3.js - // This odd port shifting is tracked at https://github.com/solana-labs/solana/issues/12250 - SocketAddr::new(rpc_bind_address, rpc_port + 3), + // If additional ports are added, +2 needs to be skipped to avoid a conflict with + // the websocket port (which is +2) in web3.js This odd port shifting is tracked at + // https://github.com/solana-labs/solana/issues/12250 ) }), pubsub_config: PubSubConfig { @@ -1761,12 +1760,9 @@ pub fn main() { if let Some(public_rpc_addr) = public_rpc_addr { node.info.rpc = public_rpc_addr; node.info.rpc_pubsub = public_rpc_addr; - node.info.rpc_banks = public_rpc_addr; - } else if let Some((rpc_addr, rpc_pubsub_addr, rpc_banks_addr)) = validator_config.rpc_addrs - { + } else if let Some((rpc_addr, rpc_pubsub_addr)) = validator_config.rpc_addrs { node.info.rpc = SocketAddr::new(node.info.gossip.ip(), rpc_addr.port()); node.info.rpc_pubsub = SocketAddr::new(node.info.gossip.ip(), rpc_pubsub_addr.port()); - node.info.rpc_banks = SocketAddr::new(node.info.gossip.ip(), rpc_banks_addr.port()); } }