Allow external addr to be specified in ASB CLI param

This commit is contained in:
rishflab 2021-06-30 13:44:46 +10:00 committed by Daniel Karzel
parent 92e77d1b71
commit fa4cc82de0
No known key found for this signature in database
GPG key ID: 30C3FC2E438ADB6E
2 changed files with 40 additions and 13 deletions

View file

@ -4,6 +4,7 @@ use crate::env;
use crate::env::GetConfig; use crate::env::GetConfig;
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use bitcoin::Address; use bitcoin::Address;
use libp2p::Multiaddr;
use serde::Serialize; use serde::Serialize;
use std::ffi::OsString; use std::ffi::OsString;
use std::path::PathBuf; use std::path::PathBuf;
@ -24,12 +25,18 @@ where
let command: RawCommand = args.cmd; let command: RawCommand = args.cmd;
let arguments = match command { let arguments = match command {
RawCommand::Start { resume_only } => Arguments { RawCommand::Start {
resume_only,
external_addr,
} => Arguments {
testnet: is_testnet, testnet: is_testnet,
json: is_json, json: is_json,
config_path: config_path(config, is_testnet)?, config_path: config_path(config, is_testnet)?,
env_config: env_config(is_testnet), env_config: env_config(is_testnet),
cmd: Command::Start { resume_only }, cmd: Command::Start {
resume_only,
external_addr,
},
}, },
RawCommand::History => Arguments { RawCommand::History => Arguments {
testnet: is_testnet, testnet: is_testnet,
@ -167,6 +174,7 @@ pub struct Arguments {
pub enum Command { pub enum Command {
Start { Start {
resume_only: bool, resume_only: bool,
external_addr: Option<Multiaddr>,
}, },
History, History,
WithdrawBtc { WithdrawBtc {
@ -234,6 +242,11 @@ pub enum RawCommand {
help = "For maintenance only. When set, no new swap requests will be accepted, but existing unfinished swaps will be resumed." help = "For maintenance only. When set, no new swap requests will be accepted, but existing unfinished swaps will be resumed."
)] )]
resume_only: bool, resume_only: bool,
#[structopt(
long = "external-addr",
help = "Our external address to be used when registering our service with a rendezvous node"
)]
external_addr: Option<Multiaddr>,
}, },
#[structopt(about = "Prints swap-id and the state of each swap ever made.")] #[structopt(about = "Prints swap-id and the state of each swap ever made.")]
History, History,
@ -338,7 +351,10 @@ mod tests {
json: false, json: false,
config_path: default_mainnet_conf_path.clone(), config_path: default_mainnet_conf_path.clone(),
env_config: mainnet_env_config, env_config: mainnet_env_config,
cmd: Command::Start { resume_only: false }, cmd: Command::Start {
resume_only: false,
external_addr: None,
},
}; };
let args = parse_args(raw_ars).unwrap(); let args = parse_args(raw_ars).unwrap();
assert_eq!(expected_args, args); assert_eq!(expected_args, args);
@ -475,7 +491,10 @@ mod tests {
json: false, json: false,
config_path: default_testnet_conf_path.clone(), config_path: default_testnet_conf_path.clone(),
env_config: testnet_env_config, env_config: testnet_env_config,
cmd: Command::Start { resume_only: false }, cmd: Command::Start {
resume_only: false,
external_addr: None,
},
}; };
let args = parse_args(raw_ars).unwrap(); let args = parse_args(raw_ars).unwrap();
assert_eq!(expected_args, args); assert_eq!(expected_args, args);

View file

@ -107,7 +107,10 @@ async fn main() -> Result<()> {
Seed::from_file_or_generate(&config.data.dir).expect("Could not retrieve/initialize seed"); Seed::from_file_or_generate(&config.data.dir).expect("Could not retrieve/initialize seed");
match cmd { match cmd {
Command::Start { resume_only } => { Command::Start {
resume_only,
external_addr,
} => {
let bitcoin_wallet = init_bitcoin_wallet(&config, &seed, env_config).await?; let bitcoin_wallet = init_bitcoin_wallet(&config, &seed, env_config).await?;
let monero_wallet = init_monero_wallet(&config, env_config).await?; let monero_wallet = init_monero_wallet(&config, env_config).await?;
@ -163,14 +166,19 @@ async fn main() -> Result<()> {
tracing::info!(peer_id = %swarm.local_peer_id(), "Network layer initialized"); tracing::info!(peer_id = %swarm.local_peer_id(), "Network layer initialized");
Swarm::dial_addr(&mut swarm, config.rendezvous_node.addr.clone()).with_context( // todo: Option<Multiaddr> is being used as a rendezvous feature toggle.
|| { // The fact that rendezvous is an optional feature could be expressed better.
format!( if let Some(addr) = external_addr {
"Failed to dial rendezvous node addr {}", let _ = Swarm::add_external_address(&mut swarm, addr, AddressScore::Infinite);
config.rendezvous_node.addr Swarm::dial_addr(&mut swarm, config.rendezvous_node.addr.clone()).with_context(
) || {
}, format!(
)?; "Failed to dial rendezvous node addr {}",
config.rendezvous_node.addr
)
},
)?;
}
let namespace = if testnet { let namespace = if testnet {
XmrBtcNamespace::Testnet XmrBtcNamespace::Testnet