|
@@ -1,10 +1,12 @@
|
|
|
use std::str::FromStr;
|
|
|
+use std::sync::Arc;
|
|
|
|
|
|
-use anyhow::{anyhow, Result};
|
|
|
+use anyhow::Result;
|
|
|
+use cdk::cdk_database::{Error, WalletDatabase};
|
|
|
use cdk::mint_url::MintUrl;
|
|
|
use cdk::nuts::CurrencyUnit;
|
|
|
use cdk::wallet::multi_mint_wallet::WalletKey;
|
|
|
-use cdk::wallet::MultiMintWallet;
|
|
|
+use cdk::wallet::{MultiMintWallet, Wallet};
|
|
|
use clap::Args;
|
|
|
|
|
|
#[derive(Args)]
|
|
@@ -18,13 +20,25 @@ 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)?;
|
|
|
- let wallet = multi_mint_wallet
|
|
|
- .get_wallet(&WalletKey::new(sub_command_args.mint_url.clone(), unit))
|
|
|
+ let mint_url = sub_command_args.mint_url.clone();
|
|
|
+
|
|
|
+ let wallet = match multi_mint_wallet
|
|
|
+ .get_wallet(&WalletKey::new(mint_url.clone(), unit.clone()))
|
|
|
.await
|
|
|
- .ok_or(anyhow!("Unknown mint url"))?;
|
|
|
+ {
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
let amount = wallet.restore().await?;
|
|
|
|