diff --git a/crates/cdk-cli/src/main.rs b/crates/cdk-cli/src/main.rs index 3259f9c0..8b62a53a 100644 --- a/crates/cdk-cli/src/main.rs +++ b/crates/cdk-cli/src/main.rs @@ -46,7 +46,7 @@ enum Commands { /// Balance Balance, /// Pay bolt11 invoice - Pay, + Pay(sub_commands::melt::MeltSubCommand), /// Claim pending mint quotes that have been paid MintPending, /// Receive token @@ -148,7 +148,9 @@ async fn main() -> Result<()> { sub_commands::decode_token::decode_token(sub_command_args) } Commands::Balance => sub_commands::balance::balance(&multi_mint_wallet).await, - Commands::Pay => sub_commands::melt::pay(multi_mint_wallet).await, + Commands::Pay(sub_command_args) => { + sub_commands::melt::pay(&multi_mint_wallet, sub_command_args).await + } Commands::Receive(sub_command_args) => { sub_commands::receive::receive(&multi_mint_wallet, localstore, sub_command_args).await } diff --git a/crates/cdk-cli/src/sub_commands/balance.rs b/crates/cdk-cli/src/sub_commands/balance.rs index a6f8d7da..824e9821 100644 --- a/crates/cdk-cli/src/sub_commands/balance.rs +++ b/crates/cdk-cli/src/sub_commands/balance.rs @@ -7,15 +7,15 @@ use cdk::wallet::multi_mint_wallet::MultiMintWallet; use cdk::Amount; pub async fn balance(multi_mint_wallet: &MultiMintWallet) -> Result<()> { - mint_balances(multi_mint_wallet).await?; + mint_balances(multi_mint_wallet, &CurrencyUnit::Sat).await?; Ok(()) } pub async fn mint_balances( multi_mint_wallet: &MultiMintWallet, + unit: &CurrencyUnit, ) -> Result> { - let wallets: HashMap = - multi_mint_wallet.get_balances(&CurrencyUnit::Sat).await?; + let wallets: HashMap = multi_mint_wallet.get_balances(unit).await?; let mut wallets_vec = Vec::with_capacity(wallets.capacity()); diff --git a/crates/cdk-cli/src/sub_commands/burn.rs b/crates/cdk-cli/src/sub_commands/burn.rs index c05b7207..a7194e96 100644 --- a/crates/cdk-cli/src/sub_commands/burn.rs +++ b/crates/cdk-cli/src/sub_commands/burn.rs @@ -1,3 +1,5 @@ +use std::str::FromStr; + use anyhow::Result; use cdk::nuts::CurrencyUnit; use cdk::wallet::multi_mint_wallet::WalletKey; @@ -9,6 +11,9 @@ use clap::Args; pub struct BurnSubCommand { /// Mint Url mint_url: Option, + /// Currency unit e.g. sat + #[arg(default_value = "sat")] + unit: String, } pub async fn burn( @@ -16,10 +21,12 @@ pub async fn burn( sub_command_args: &BurnSubCommand, ) -> Result<()> { let mut total_burnt = Amount::ZERO; + let unit = CurrencyUnit::from_str(&sub_command_args.unit)?; + match &sub_command_args.mint_url { Some(mint_url) => { let wallet = multi_mint_wallet - .get_wallet(&WalletKey::new(mint_url.clone(), CurrencyUnit::Sat)) + .get_wallet(&WalletKey::new(mint_url.clone(), unit)) .await .unwrap(); total_burnt = wallet.check_all_pending_proofs().await?; diff --git a/crates/cdk-cli/src/sub_commands/melt.rs b/crates/cdk-cli/src/sub_commands/melt.rs index 3dfe0149..1467ebc7 100644 --- a/crates/cdk-cli/src/sub_commands/melt.rs +++ b/crates/cdk-cli/src/sub_commands/melt.rs @@ -6,11 +6,23 @@ use anyhow::{bail, Result}; use cdk::nuts::CurrencyUnit; use cdk::wallet::multi_mint_wallet::{MultiMintWallet, WalletKey}; use cdk::Bolt11Invoice; +use clap::Args; use crate::sub_commands::balance::mint_balances; -pub async fn pay(multi_mint_wallet: MultiMintWallet) -> Result<()> { - let mints_amounts = mint_balances(&multi_mint_wallet).await?; +#[derive(Args)] +pub struct MeltSubCommand { + /// Currency unit e.g. sat + #[arg(default_value = "sat")] + unit: String, +} + +pub async fn pay( + multi_mint_wallet: &MultiMintWallet, + sub_command_args: &MeltSubCommand, +) -> Result<()> { + let unit = CurrencyUnit::from_str(&sub_command_args.unit)?; + let mints_amounts = mint_balances(multi_mint_wallet, &unit).await?; println!("Enter mint number to melt from"); @@ -26,8 +38,9 @@ pub async fn pay(multi_mint_wallet: MultiMintWallet) -> Result<()> { } let wallet = mints_amounts[mint_number].0.clone(); + let wallet = multi_mint_wallet - .get_wallet(&WalletKey::new(wallet, CurrencyUnit::Sat)) + .get_wallet(&WalletKey::new(wallet, unit)) .await .expect("Known wallet"); diff --git a/crates/cdk-cli/src/sub_commands/mint.rs b/crates/cdk-cli/src/sub_commands/mint.rs index c595bb25..57b31070 100644 --- a/crates/cdk-cli/src/sub_commands/mint.rs +++ b/crates/cdk-cli/src/sub_commands/mint.rs @@ -1,3 +1,4 @@ +use std::str::FromStr; use std::sync::Arc; use std::time::Duration; @@ -30,19 +31,15 @@ pub async fn mint( sub_command_args: &MintSubCommand, ) -> Result<()> { let mint_url = sub_command_args.mint_url.clone(); + let unit = CurrencyUnit::from_str(&sub_command_args.unit)?; + let wallet = match multi_mint_wallet .get_wallet(&WalletKey::new(mint_url.clone(), CurrencyUnit::Sat)) .await { Some(wallet) => wallet.clone(), None => { - let wallet = Wallet::new( - &mint_url.to_string(), - CurrencyUnit::Sat, - localstore, - seed, - None, - ); + let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None); multi_mint_wallet.add_wallet(wallet.clone()).await; wallet diff --git a/crates/cdk-cli/src/sub_commands/pending_mints.rs b/crates/cdk-cli/src/sub_commands/pending_mints.rs index 91d35a72..d772873b 100644 --- a/crates/cdk-cli/src/sub_commands/pending_mints.rs +++ b/crates/cdk-cli/src/sub_commands/pending_mints.rs @@ -1,12 +1,12 @@ use anyhow::Result; use cdk::wallet::MultiMintWallet; -use cdk::Amount; pub async fn mint_pending(multi_mint_wallet: &MultiMintWallet) -> Result<()> { let amounts = multi_mint_wallet.check_all_mint_quotes(None).await?; - let amount = amounts.into_values().sum::(); + for (unit, amount) in amounts { + println!("Unit: {}, Amount: {}", unit, amount); + } - println!("Amount minted: {amount}"); Ok(()) } diff --git a/crates/cdk-cli/src/sub_commands/restore.rs b/crates/cdk-cli/src/sub_commands/restore.rs index 9b8b15ba..c9151df7 100644 --- a/crates/cdk-cli/src/sub_commands/restore.rs +++ b/crates/cdk-cli/src/sub_commands/restore.rs @@ -1,3 +1,5 @@ +use std::str::FromStr; + use anyhow::{anyhow, Result}; use cdk::nuts::CurrencyUnit; use cdk::url::UncheckedUrl; @@ -9,17 +11,18 @@ use clap::Args; pub struct RestoreSubCommand { /// Mint Url mint_url: UncheckedUrl, + /// Currency unit e.g. sat + #[arg(default_value = "sat")] + unit: String, } pub async fn restore( multi_mint_wallet: &MultiMintWallet, sub_command_args: &RestoreSubCommand, ) -> Result<()> { + let unit = CurrencyUnit::from_str(&sub_command_args.unit)?; let wallet = multi_mint_wallet - .get_wallet(&WalletKey::new( - sub_command_args.mint_url.clone(), - CurrencyUnit::Sat, - )) + .get_wallet(&WalletKey::new(sub_command_args.mint_url.clone(), unit)) .await .ok_or(anyhow!("Unknown mint url"))?; diff --git a/crates/cdk-cli/src/sub_commands/send.rs b/crates/cdk-cli/src/sub_commands/send.rs index 92a1206a..7e6e1e1a 100644 --- a/crates/cdk-cli/src/sub_commands/send.rs +++ b/crates/cdk-cli/src/sub_commands/send.rs @@ -45,13 +45,17 @@ pub struct SendSubCommand { /// Amount willing to overpay to avoid a swap #[arg(short, long)] tolerance: Option, + /// Currency unit e.g. sat + #[arg(default_value = "sat")] + unit: String, } pub async fn send( multi_mint_wallet: &MultiMintWallet, sub_command_args: &SendSubCommand, ) -> Result<()> { - let mints_amounts = mint_balances(multi_mint_wallet).await?; + let unit = CurrencyUnit::from_str(&sub_command_args.unit)?; + let mints_amounts = mint_balances(multi_mint_wallet, &unit).await?; println!("Enter mint number to create token"); @@ -156,7 +160,7 @@ pub async fn send( let wallet = mints_amounts[mint_number].0.clone(); let wallet = multi_mint_wallet - .get_wallet(&WalletKey::new(wallet, CurrencyUnit::Sat)) + .get_wallet(&WalletKey::new(wallet, unit)) .await .expect("Known wallet");