Simplify MultiMintWallet interface (#664)

This commit is contained in:
ok300
2025-03-26 15:55:57 +00:00
committed by GitHub
parent 7b4951041e
commit de4285bd9c
20 changed files with 117 additions and 149 deletions

View File

@@ -165,6 +165,7 @@ async fn main() -> Result<()> {
mnemonic
}
};
let seed = mnemonic.to_seed_normalized("");
let mut wallets: Vec<Wallet> = Vec::new();
@@ -187,7 +188,7 @@ async fn main() -> Result<()> {
wallets.push(wallet);
}
let multi_mint_wallet = MultiMintWallet::new(wallets);
let multi_mint_wallet = MultiMintWallet::new(localstore, Arc::new(seed), wallets);
match &args.command {
Commands::DecodeToken(sub_command_args) => {
@@ -198,14 +199,7 @@ async fn main() -> Result<()> {
sub_commands::melt::pay(&multi_mint_wallet, sub_command_args).await
}
Commands::Receive(sub_command_args) => {
sub_commands::receive::receive(
&multi_mint_wallet,
localstore,
&mnemonic.to_seed_normalized(""),
sub_command_args,
&work_dir,
)
.await
sub_commands::receive::receive(&multi_mint_wallet, sub_command_args, &work_dir).await
}
Commands::Send(sub_command_args) => {
sub_commands::send::send(&multi_mint_wallet, sub_command_args).await
@@ -217,13 +211,7 @@ async fn main() -> Result<()> {
sub_commands::mint_info::mint_info(args.proxy, sub_command_args).await
}
Commands::Mint(sub_command_args) => {
sub_commands::mint::mint(
&multi_mint_wallet,
&mnemonic.to_seed_normalized(""),
localstore,
sub_command_args,
)
.await
sub_commands::mint::mint(&multi_mint_wallet, sub_command_args).await
}
Commands::MintPending => {
sub_commands::pending_mints::mint_pending(&multi_mint_wallet).await
@@ -232,13 +220,7 @@ async fn main() -> Result<()> {
sub_commands::burn::burn(&multi_mint_wallet, sub_command_args).await
}
Commands::Restore(sub_command_args) => {
sub_commands::restore::restore(
&multi_mint_wallet,
&mnemonic.to_seed_normalized(""),
localstore,
sub_command_args,
)
.await
sub_commands::restore::restore(&multi_mint_wallet, sub_command_args).await
}
Commands::UpdateMintUrl(sub_command_args) => {
sub_commands::update_mint_url::update_mint_url(&multi_mint_wallet, sub_command_args)
@@ -259,28 +241,18 @@ async fn main() -> Result<()> {
Commands::MintBlindAuth(sub_command_args) => {
sub_commands::mint_blind_auth::mint_blind_auth(
&multi_mint_wallet,
&mnemonic.to_seed_normalized(""),
localstore,
sub_command_args,
&work_dir,
)
.await
}
Commands::CatLogin(sub_command_args) => {
sub_commands::cat_login::cat_login(
&multi_mint_wallet,
&mnemonic.to_seed_normalized(""),
localstore,
sub_command_args,
&work_dir,
)
.await
sub_commands::cat_login::cat_login(&multi_mint_wallet, sub_command_args, &work_dir)
.await
}
Commands::CatDeviceLogin(sub_command_args) => {
sub_commands::cat_device_login::cat_device_login(
&multi_mint_wallet,
&mnemonic.to_seed_normalized(""),
localstore,
sub_command_args,
&work_dir,
)

View File

@@ -1,14 +1,12 @@
use std::path::Path;
use std::str::FromStr;
use std::sync::Arc;
use std::time::Duration;
use anyhow::Result;
use cdk::cdk_database::{Error, WalletDatabase};
use anyhow::{anyhow, Result};
use cdk::mint_url::MintUrl;
use cdk::nuts::{CurrencyUnit, MintInfo};
use cdk::wallet::types::WalletKey;
use cdk::wallet::{MultiMintWallet, Wallet};
use cdk::wallet::MultiMintWallet;
use cdk::OidcClient;
use clap::Args;
use serde::{Deserialize, Serialize};
@@ -32,8 +30,6 @@ pub struct CatDeviceLoginSubCommand {
pub async fn cat_device_login(
multi_mint_wallet: &MultiMintWallet,
seed: &[u8],
localstore: Arc<dyn WalletDatabase<Err = Error> + Sync + Send>,
sub_command_args: &CatDeviceLoginSubCommand,
work_dir: &Path,
) -> Result<()> {
@@ -46,14 +42,16 @@ pub async fn cat_device_login(
{
Some(wallet) => wallet.clone(),
None => {
let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None)?;
multi_mint_wallet.add_wallet(wallet.clone()).await;
wallet
multi_mint_wallet
.create_and_add_wallet(&mint_url.to_string(), unit, None)
.await?
}
};
let mint_info = wallet.get_mint_info().await?.expect("Mint info not found");
let mint_info = wallet
.get_mint_info()
.await?
.ok_or(anyhow!("Mint info not found"))?;
let (access_token, refresh_token) =
get_device_code_token(&mint_info, &sub_command_args.client_id).await;

View File

@@ -1,13 +1,11 @@
use std::path::Path;
use std::str::FromStr;
use std::sync::Arc;
use anyhow::Result;
use cdk::cdk_database::{Error, WalletDatabase};
use anyhow::{anyhow, Result};
use cdk::mint_url::MintUrl;
use cdk::nuts::{CurrencyUnit, MintInfo};
use cdk::wallet::types::WalletKey;
use cdk::wallet::{MultiMintWallet, Wallet};
use cdk::wallet::MultiMintWallet;
use cdk::OidcClient;
use clap::Args;
use serde::{Deserialize, Serialize};
@@ -34,8 +32,6 @@ pub struct CatLoginSubCommand {
pub async fn cat_login(
multi_mint_wallet: &MultiMintWallet,
seed: &[u8],
localstore: Arc<dyn WalletDatabase<Err = Error> + Sync + Send>,
sub_command_args: &CatLoginSubCommand,
work_dir: &Path,
) -> Result<()> {
@@ -48,14 +44,16 @@ pub async fn cat_login(
{
Some(wallet) => wallet.clone(),
None => {
let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None)?;
multi_mint_wallet.add_wallet(wallet.clone()).await;
wallet
multi_mint_wallet
.create_and_add_wallet(&mint_url.to_string(), unit, None)
.await?
}
};
let mint_info = wallet.get_mint_info().await?.expect("Mint info not found");
let mint_info = wallet
.get_mint_info()
.await?
.ok_or(anyhow!("Mint info not found"))?;
let (access_token, refresh_token) = get_access_token(
&mint_info,

View File

@@ -1,14 +1,12 @@
use std::str::FromStr;
use std::sync::Arc;
use anyhow::{anyhow, Result};
use cdk::amount::SplitTarget;
use cdk::cdk_database::{Error, WalletDatabase};
use cdk::mint_url::MintUrl;
use cdk::nuts::nut00::ProofsMethods;
use cdk::nuts::{CurrencyUnit, MintQuoteState, NotificationPayload};
use cdk::wallet::types::WalletKey;
use cdk::wallet::{MultiMintWallet, Wallet, WalletSubscription};
use cdk::wallet::{MultiMintWallet, WalletSubscription};
use cdk::Amount;
use clap::Args;
use serde::{Deserialize, Serialize};
@@ -32,8 +30,6 @@ pub struct MintSubCommand {
pub async fn mint(
multi_mint_wallet: &MultiMintWallet,
seed: &[u8],
localstore: Arc<dyn WalletDatabase<Err = Error> + Sync + Send>,
sub_command_args: &MintSubCommand,
) -> Result<()> {
let mint_url = sub_command_args.mint_url.clone();
@@ -46,10 +42,9 @@ pub async fn mint(
{
Some(wallet) => wallet.clone(),
None => {
let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None)?;
multi_mint_wallet.add_wallet(wallet.clone()).await;
wallet
multi_mint_wallet
.create_and_add_wallet(&mint_url.to_string(), unit, None)
.await?
}
};

View File

@@ -1,13 +1,11 @@
use std::path::Path;
use std::str::FromStr;
use std::sync::Arc;
use anyhow::{anyhow, Result};
use cdk::cdk_database::{Error, WalletDatabase};
use cdk::mint_url::MintUrl;
use cdk::nuts::{CurrencyUnit, MintInfo};
use cdk::wallet::types::WalletKey;
use cdk::wallet::{MultiMintWallet, Wallet};
use cdk::wallet::MultiMintWallet;
use cdk::{Amount, OidcClient};
use clap::Args;
use serde::{Deserialize, Serialize};
@@ -31,8 +29,6 @@ pub struct MintBlindAuthSubCommand {
pub async fn mint_blind_auth(
multi_mint_wallet: &MultiMintWallet,
seed: &[u8],
localstore: Arc<dyn WalletDatabase<Err = Error> + Sync + Send>,
sub_command_args: &MintBlindAuthSubCommand,
work_dir: &Path,
) -> Result<()> {
@@ -45,10 +41,9 @@ pub async fn mint_blind_auth(
{
Some(wallet) => wallet.clone(),
None => {
let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None)?;
multi_mint_wallet.add_wallet(wallet.clone()).await;
wallet
multi_mint_wallet
.create_and_add_wallet(&mint_url.to_string(), unit, None)
.await?
}
};

View File

@@ -1,15 +1,12 @@
use std::collections::HashSet;
use std::path::Path;
use std::str::FromStr;
use std::sync::Arc;
use anyhow::{anyhow, Result};
use cdk::cdk_database::{self, WalletDatabase};
use cdk::nuts::{SecretKey, Token};
use cdk::util::unix_time;
use cdk::wallet::multi_mint_wallet::MultiMintWallet;
use cdk::wallet::types::WalletKey;
use cdk::wallet::Wallet;
use cdk::Amount;
use clap::Args;
use nostr_sdk::nips::nip04;
@@ -40,8 +37,6 @@ pub struct ReceiveSubCommand {
pub async fn receive(
multi_mint_wallet: &MultiMintWallet,
localstore: Arc<dyn WalletDatabase<Err = cdk_database::Error> + Send + Sync>,
seed: &[u8],
sub_command_args: &ReceiveSubCommand,
work_dir: &Path,
) -> Result<()> {
@@ -68,8 +63,6 @@ pub async fn receive(
Some(token_str) => {
receive_token(
multi_mint_wallet,
localstore,
seed,
token_str,
&signing_keys,
&sub_command_args.preimage,
@@ -110,8 +103,6 @@ pub async fn receive(
for token_str in &tokens {
match receive_token(
multi_mint_wallet,
localstore.clone(),
seed,
token_str,
&signing_keys,
&sub_command_args.preimage,
@@ -138,8 +129,6 @@ pub async fn receive(
async fn receive_token(
multi_mint_wallet: &MultiMintWallet,
localstore: Arc<dyn WalletDatabase<Err = cdk_database::Error> + Send + Sync>,
seed: &[u8],
token_str: &str,
signing_keys: &[SecretKey],
preimage: &[String],
@@ -151,14 +140,13 @@ async fn receive_token(
let wallet_key = WalletKey::new(mint_url.clone(), token.unit().unwrap_or_default());
if multi_mint_wallet.get_wallet(&wallet_key).await.is_none() {
let wallet = Wallet::new(
&mint_url.to_string(),
token.unit().unwrap_or_default(),
localstore,
seed,
None,
)?;
multi_mint_wallet.add_wallet(wallet).await;
multi_mint_wallet
.create_and_add_wallet(
&mint_url.to_string(),
token.unit().unwrap_or_default(),
None,
)
.await?;
}
let amount = multi_mint_wallet

View File

@@ -1,12 +1,10 @@
use std::str::FromStr;
use std::sync::Arc;
use anyhow::Result;
use cdk::cdk_database::{Error, WalletDatabase};
use cdk::mint_url::MintUrl;
use cdk::nuts::CurrencyUnit;
use cdk::wallet::types::WalletKey;
use cdk::wallet::{MultiMintWallet, Wallet};
use cdk::wallet::MultiMintWallet;
use clap::Args;
#[derive(Args)]
@@ -20,8 +18,6 @@ pub struct RestoreSubCommand {
pub async fn restore(
multi_mint_wallet: &MultiMintWallet,
seed: &[u8],
localstore: Arc<dyn WalletDatabase<Err = Error> + Sync + Send>,
sub_command_args: &RestoreSubCommand,
) -> Result<()> {
let unit = CurrencyUnit::from_str(&sub_command_args.unit)?;
@@ -33,10 +29,9 @@ pub async fn restore(
{
Some(wallet) => wallet.clone(),
None => {
let wallet = Wallet::new(&mint_url.to_string(), unit, localstore, seed, None)?;
multi_mint_wallet.add_wallet(wallet.clone()).await;
wallet
multi_mint_wallet
.create_and_add_wallet(&mint_url.to_string(), unit, None)
.await?
}
};