diff --git a/CHANGELOG.md b/CHANGELOG.md index 6582353a..db6dae7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ * `Wallet::receive_raw` which receives raw binary tokens ([lollerfirst]). ### Fixed +* Multimint unit check when wallet receiving token ([thesimplekid]) ### Removed diff --git a/crates/cashu/src/nuts/nut00/token.rs b/crates/cashu/src/nuts/nut00/token.rs index 2e4fc809..59bf6beb 100644 --- a/crates/cashu/src/nuts/nut00/token.rs +++ b/crates/cashu/src/nuts/nut00/token.rs @@ -272,6 +272,10 @@ impl TokenV3 { mint_urls } + + pub fn is_multi_mint(&self) -> bool { + self.token.len() > 1 + } } impl FromStr for TokenV3 { diff --git a/crates/cdk/src/wallet/receive.rs b/crates/cdk/src/wallet/receive.rs index aed875a3..92d06161 100644 --- a/crates/cdk/src/wallet/receive.rs +++ b/crates/cdk/src/wallet/receive.rs @@ -190,20 +190,23 @@ impl Wallet { p2pk_signing_keys: &[SecretKey], preimages: &[String], ) -> Result { - let token_data = Token::from_str(encoded_token)?; + let token = Token::from_str(encoded_token)?; - let unit = token_data.unit().unwrap_or_default(); + let unit = token.unit().unwrap_or_default(); if unit != self.unit { return Err(Error::UnitUnsupported); } - let proofs = token_data.proofs(); - if proofs.len() != 1 { - return Err(Error::MultiMintTokenNotSupported); + let proofs = token.proofs(); + + if let Token::TokenV3(token) = &token { + if token.is_multi_mint() { + return Err(Error::MultiMintTokenNotSupported); + } } - if self.mint_url != token_data.mint_url()? { + if self.mint_url != token.mint_url()? { return Err(Error::IncorrectMint); }