diff --git a/cli/README.md b/cli/README.md index 2d0e7f4..ebade1d 100644 --- a/cli/README.md +++ b/cli/README.md @@ -12,6 +12,13 @@ Start the CLI with cargo run ``` +To set a specific network, use one of + +```bash +cargo run -- --network mainnet +cargo run -- --network testnet +``` + To specify a custom data directory, use ```bash diff --git a/cli/src/main.rs b/cli/src/main.rs index 39e5364..10256d4 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -24,6 +24,13 @@ pub(crate) struct Args { #[clap(short, long)] pub(crate) log_file: Option, + + #[clap(short, long, value_parser = parse_network_arg)] + pub(crate) network: Option, +} + +fn parse_network_arg(s: &str) -> Result { + Network::try_from(s).map_err(|e| e.to_string()) } fn show_results(result: Result) -> Result<()> { @@ -74,14 +81,16 @@ fn main() -> Result<()> { } let mnemonic = persistence.get_or_create_mnemonic()?; - let wallet = Wallet::connect( - &mnemonic.to_string(), - Some(data_dir_str), - Network::LiquidTestnet, - )?; + let network = args.network.unwrap_or(Network::LiquidTestnet); + let wallet = Wallet::connect(&mnemonic.to_string(), Some(data_dir_str), network)?; + + let cli_prompt = match network { + Network::Liquid => "breez-liquid-cli [mainnet]> ", + Network::LiquidTestnet => "breez-liquid-cli [testnet]> ", + }; loop { - let readline = rl.readline("breez-liquid> "); + let readline = rl.readline(cli_prompt); match readline { Ok(line) => { rl.add_history_entry(line.as_str())?; diff --git a/lib/core/src/model.rs b/lib/core/src/model.rs index 4491970..229ade2 100644 --- a/lib/core/src/model.rs +++ b/lib/core/src/model.rs @@ -1,3 +1,4 @@ +use anyhow::anyhow; use boltz_client::network::Chain; use boltz_client::Bolt11Invoice; use lwk_signer::SwSigner; @@ -30,6 +31,18 @@ impl From for Chain { } } +impl TryFrom<&str> for Network { + type Error = anyhow::Error; + + fn try_from(value: &str) -> Result { + match value.to_lowercase().as_str() { + "mainnet" => Ok(Network::Liquid), + "testnet" => Ok(Network::LiquidTestnet), + _ => Err(anyhow!("Invalid network")), + } + } +} + #[derive(Debug)] pub struct WalletOptions { pub signer: SwSigner,