Use RPC endpoint of the provided network entrypoint rather than searching for the leader

This commit is contained in:
Michael Vines 2019-01-11 15:37:52 -07:00
parent 45c247fa5b
commit 4d9489aeb1
4 changed files with 18 additions and 7 deletions

View File

@ -52,6 +52,7 @@ pub fn parse_args(matches: &ArgMatches<'_>) -> Result<WalletConfig, Box<dyn erro
proxy,
drone_port: None,
rpc_client: None,
rpc_port: None,
})
}

View File

@ -4,14 +4,13 @@ use chrono::prelude::*;
use clap::ArgMatches;
use serde_json;
use serde_json::json;
use solana::rpc::RpcSignatureStatus;
use solana::rpc::{RpcSignatureStatus, RPC_PORT};
#[cfg(test)]
use solana::rpc_mock::{request_airdrop_transaction, MockRpcClient as RpcClient};
#[cfg(not(test))]
use solana::rpc_request::RpcClient;
use solana::rpc_request::{get_rpc_request_str, RpcRequest, RpcRequestHandler};
use solana::socketaddr;
use solana::thin_client::poll_gossip_for_leader;
#[cfg(not(test))]
use solana_drone::drone::request_airdrop_transaction;
use solana_drone::drone::DRONE_PORT;
@ -91,6 +90,7 @@ pub struct WalletConfig {
pub proxy: Option<String>,
pub drone_port: Option<u16>,
pub rpc_client: Option<RpcClient>,
pub rpc_port: Option<u16>,
}
impl Default for WalletConfig {
@ -104,6 +104,7 @@ impl Default for WalletConfig {
proxy: None,
drone_port: None,
rpc_client: None,
rpc_port: None,
}
}
}
@ -116,7 +117,9 @@ impl WalletConfig {
drone_addr
}
pub fn rpc_addr(&self, rpc_addr: SocketAddr) -> String {
pub fn rpc_addr(&self) -> String {
let mut rpc_addr = self.network;
rpc_addr.set_port(self.rpc_port.unwrap_or(RPC_PORT));
let rpc_addr_str = get_rpc_request_str(rpc_addr);
self.proxy.clone().unwrap_or(rpc_addr_str)
}
@ -321,8 +324,7 @@ pub fn process_command(config: &WalletConfig) -> Result<String, Box<dyn error::E
let drone_addr = config.drone_addr();
let rpc_client = if config.rpc_client.is_none() {
let leader = poll_gossip_for_leader(config.network, config.timeout)?;
let rpc_addr = config.rpc_addr(leader.rpc);
let rpc_addr = config.rpc_addr();
RpcClient::new(rpc_addr)
} else {
// Primarily for testing
@ -839,8 +841,10 @@ mod tests {
config.drone_port = Some(1234);
assert_eq!(config.drone_addr(), socketaddr!(0, 1234));
let rpc_addr = config.rpc_addr(socketaddr!(0, 9876));
assert_eq!(rpc_addr, "http://0.0.0.0:9876");
assert_eq!(config.rpc_addr(), "http://0.0.0.0:8899");
config.rpc_port = Some(1234);
assert_eq!(config.rpc_addr(), "http://0.0.0.0:1234");
}
#[test]

View File

@ -74,10 +74,12 @@ fn test_wallet_timestamp_tx() {
let mut config_payer = WalletConfig::default();
config_payer.network = leader_data.gossip;
config_payer.drone_port = Some(drone_addr.port());
config_payer.rpc_port = Some(leader_data.rpc.port());
let mut config_witness = WalletConfig::default();
config_witness.network = leader_data.gossip;
config_witness.drone_port = Some(drone_addr.port());
config_witness.rpc_port = Some(leader_data.rpc.port());
assert_ne!(config_payer.id.pubkey(), config_witness.id.pubkey());
@ -173,10 +175,12 @@ fn test_wallet_witness_tx() {
let mut config_payer = WalletConfig::default();
config_payer.network = leader_data.gossip;
config_payer.drone_port = Some(drone_addr.port());
config_payer.rpc_port = Some(leader_data.rpc.port());
let mut config_witness = WalletConfig::default();
config_witness.network = leader_data.gossip;
config_witness.drone_port = Some(drone_addr.port());
config_witness.rpc_port = Some(leader_data.rpc.port());
assert_ne!(config_payer.id.pubkey(), config_witness.id.pubkey());
@ -268,6 +272,7 @@ fn test_wallet_cancel_tx() {
let mut config_payer = WalletConfig::default();
config_payer.network = leader_data.gossip;
config_payer.drone_port = Some(drone_addr.port());
config_payer.rpc_port = Some(leader_data.rpc.port());
let mut config_witness = WalletConfig::default();
config_witness.network = leader_data.gossip;

View File

@ -58,6 +58,7 @@ fn test_wallet_request_airdrop() {
let mut bob_config = WalletConfig::default();
bob_config.network = leader_data.gossip;
bob_config.drone_port = Some(drone_addr.port());
bob_config.rpc_port = Some(leader_data.rpc.port());
bob_config.command = WalletCommand::Airdrop(50);
let sig_response = process_command(&bob_config);