diff --git a/gossip/src/main.rs b/gossip/src/main.rs index 04c206e618..625df6f95e 100644 --- a/gossip/src/main.rs +++ b/gossip/src/main.rs @@ -38,6 +38,13 @@ fn main() -> Result<(), Box> { .takes_value(false) .help("Return all RPC URLs"), ) + .arg( + Arg::with_name("any") + .long("any") + .takes_value(false) + .conflicts_with("all") + .help("Return any RPC URL"), + ) .arg( Arg::with_name("timeout") .long("timeout") @@ -237,6 +244,8 @@ fn main() -> Result<(), Box> { } } ("get-rpc-url", Some(matches)) => { + let any = matches.is_present("any"); + let all = matches.is_present("all"); let entrypoint_addr = parse_entrypoint(&matches); let timeout = value_t_or_exit!(matches, "timeout", u64); let (nodes, _archivers) = discover( @@ -251,7 +260,7 @@ fn main() -> Result<(), Box> { let rpc_addrs: Vec<_> = nodes .iter() .filter_map(|contact_info| { - if (matches.is_present("all") || Some(contact_info.gossip) == entrypoint_addr) + if (any || all || Some(contact_info.gossip) == entrypoint_addr) && ContactInfo::is_valid_address(&contact_info.rpc) { return Some(contact_info.rpc); @@ -267,6 +276,9 @@ fn main() -> Result<(), Box> { for rpc_addr in rpc_addrs { println!("http://{}", rpc_addr); + if any { + break; + } } } ("stop", Some(matches)) => { diff --git a/multinode-demo/validator.sh b/multinode-demo/validator.sh index ba942aebc1..bf6f0cf220 100755 --- a/multinode-demo/validator.sh +++ b/multinode-demo/validator.sh @@ -273,7 +273,7 @@ setup_validator_accounts() { return 0 } -rpc_url=$($solana_gossip get-rpc-url --entrypoint "$gossip_entrypoint") +rpc_url=$($solana_gossip get-rpc-url --entrypoint "$gossip_entrypoint" --any) [[ -r "$identity_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$identity_keypair_path" [[ -r "$voting_keypair_path" ]] || $solana_keygen new --no-passphrase -so "$voting_keypair_path"