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 anyhow::{bail, Result};
use bitcoin::Address;
use libp2p::Multiaddr;
use serde::Serialize;
use std::ffi::OsString;
use std::path::PathBuf;
@ -24,12 +25,18 @@ where
let command: RawCommand = args.cmd;
let arguments = match command {
RawCommand::Start { resume_only } => Arguments {
RawCommand::Start {
resume_only,
external_addr,
} => Arguments {
testnet: is_testnet,
json: is_json,
config_path: config_path(config, is_testnet)?,
env_config: env_config(is_testnet),
cmd: Command::Start { resume_only },
cmd: Command::Start {
resume_only,
external_addr,
},
},
RawCommand::History => Arguments {
testnet: is_testnet,
@ -167,6 +174,7 @@ pub struct Arguments {
pub enum Command {
Start {
resume_only: bool,
external_addr: Option<Multiaddr>,
},
History,
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."
)]
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.")]
History,
@ -338,7 +351,10 @@ mod tests {
json: false,
config_path: default_mainnet_conf_path.clone(),
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();
assert_eq!(expected_args, args);
@ -475,7 +491,10 @@ mod tests {
json: false,
config_path: default_testnet_conf_path.clone(),
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();
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");
match cmd {
Command::Start { resume_only } => {
Command::Start {
resume_only,
external_addr,
} => {
let bitcoin_wallet = init_bitcoin_wallet(&config, &seed, env_config).await?;
let monero_wallet = init_monero_wallet(&config, env_config).await?;
@ -163,6 +166,10 @@ async fn main() -> Result<()> {
tracing::info!(peer_id = %swarm.local_peer_id(), "Network layer initialized");
// todo: Option<Multiaddr> is being used as a rendezvous feature toggle.
// The fact that rendezvous is an optional feature could be expressed better.
if let Some(addr) = external_addr {
let _ = Swarm::add_external_address(&mut swarm, addr, AddressScore::Infinite);
Swarm::dial_addr(&mut swarm, config.rendezvous_node.addr.clone()).with_context(
|| {
format!(
@ -171,6 +178,7 @@ async fn main() -> Result<()> {
)
},
)?;
}
let namespace = if testnet {
XmrBtcNamespace::Testnet