thesimplekid 9 месяцев назад
Родитель
Сommit
7bdc9280d2

+ 4 - 2
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
         }

+ 3 - 3
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<Vec<(UncheckedUrl, Amount)>> {
-    let wallets: HashMap<UncheckedUrl, Amount> =
-        multi_mint_wallet.get_balances(&CurrencyUnit::Sat).await?;
+    let wallets: HashMap<UncheckedUrl, Amount> = multi_mint_wallet.get_balances(unit).await?;
 
     let mut wallets_vec = Vec::with_capacity(wallets.capacity());
 

+ 8 - 1
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<UncheckedUrl>,
+    /// 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?;

+ 16 - 3
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");
 

+ 4 - 7
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

+ 3 - 3
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::<Amount>();
+    for (unit, amount) in amounts {
+        println!("Unit: {}, Amount: {}", unit, amount);
+    }
 
-    println!("Amount minted: {amount}");
     Ok(())
 }

+ 7 - 4
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"))?;
 

+ 6 - 2
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<u64>,
+    /// 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");