Skip to content

Add Mints

Trust model

Adding a mint to the CDK MultiMintWallet implies the user trusts this mint enough to hold a cashu balance on it. Adding a mint should therefore need explicit user confirmation in the UI.

async fn add_mint(multi_mint_wallet: &MultiMintWallet, mint_url_str: &str) -> Result<()> {
    let mint_url = MintUrl::from_str(mint_url_str)?;
    let client = HttpClient::new(mint_url.clone(), None);

    let mint_info = client.get_mint_info().await?;
    multi_mint_wallet
        .localstore
        .add_mint(mint_url.clone(), Some(mint_info))
        .await?;

    // TODO Show mint info to user, get confirmation

    let keys = client.get_mint_keys().await?;
    let units: Vec<CurrencyUnit> = keys.into_iter().map(|ks| ks.unit).collect();
    for unit in units {
        let wallet_key = WalletKey::new(mint_url.clone(), unit.clone());

        if !multi_mint_wallet.has(&wallet_key).await {
            multi_mint_wallet
                .create_and_add_wallet(mint_url_str, unit, None)
                .await?;
        }
    }

    Ok(())
}

The MintInfo is described in NUT-06.