mirror of
https://github.com/aljazceru/cdk.git
synced 2026-01-27 00:36:05 +01:00
feat: support muli unit
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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?;
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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"))?;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user