diff --git a/src/cashu_wallet.rs b/src/cashu_wallet.rs index 249e840a..519d0494 100644 --- a/src/cashu_wallet.rs +++ b/src/cashu_wallet.rs @@ -5,8 +5,7 @@ use crate::nuts::nut00::{mint, BlindedMessages, Proofs, Token}; use crate::nuts::nut01::Keys; use crate::nuts::nut03::RequestMintResponse; use crate::nuts::nut06::{SplitPayload, SplitRequest}; -use crate::nuts::nut08::MeltResponse; -use crate::types::{ProofsStatus, SendProofs}; +use crate::types::{Melted, ProofsStatus, SendProofs}; pub use crate::Invoice; use crate::{client::Client, dhke::construct_proofs, error::Error}; @@ -222,14 +221,30 @@ impl CashuWallet { invoice: Invoice, proofs: Proofs, fee_reserve: Amount, - ) -> Result { - let change = BlindedMessages::blank(fee_reserve)?; + ) -> Result { + let blinded = BlindedMessages::blank(fee_reserve)?; let melt_response = self .client - .melt(proofs, invoice, Some(change.blinded_messages)) + .melt(proofs, invoice, Some(blinded.blinded_messages)) .await?; - Ok(melt_response) + let change_proofs = match melt_response.change { + Some(change) => Some(construct_proofs( + change, + blinded.rs, + blinded.secrets, + &self.mint_keys, + )?), + None => None, + }; + + let melted = Melted { + paid: true, + preimage: melt_response.preimage, + change: change_proofs, + }; + + Ok(melted) } pub fn proofs_to_token(&self, proofs: Proofs, memo: Option) -> Result { diff --git a/src/types.rs b/src/types.rs index 1f6689d8..c00a9918 100644 --- a/src/types.rs +++ b/src/types.rs @@ -15,3 +15,11 @@ pub struct SendProofs { pub change_proofs: Proofs, pub send_proofs: Proofs, } + +/// Melt response with proofs +#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct Melted { + pub paid: bool, + pub preimage: Option, + pub change: Option, +}