mirror of
https://github.com/aljazceru/cdk.git
synced 2026-01-10 08:25:55 +01:00
Simplify MultiMintWallet interface (#664)
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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?
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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?
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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?
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user