diff --git a/integration_test/src/main.rs b/integration_test/src/main.rs index 19e8157e..eec921db 100644 --- a/integration_test/src/main.rs +++ b/integration_test/src/main.rs @@ -40,7 +40,14 @@ async fn main() { let spendable = test_check_spendable(&client, &new_token).await; let proofs = test_send(&wallet, spendable).await; - test_melt(&wallet, Invoice::from_str(MELTINVOICE).unwrap(), proofs).await; + test_melt( + &wallet, + Invoice::from_str(MELTINVOICE).unwrap(), + proofs, + // TODO: + 10, + ) + .await; test_check_fees(&client).await; } @@ -152,8 +159,8 @@ async fn test_send(wallet: &CashuWallet, proofs: Proofs) -> Proofs { send.send_proofs } -async fn test_melt(wallet: &CashuWallet, invoice: Invoice, proofs: Proofs) { - let res = wallet.melt(invoice, proofs).await.unwrap(); +async fn test_melt(wallet: &CashuWallet, invoice: Invoice, proofs: Proofs, fee_reserve: u64) { + let res = wallet.melt(invoice, proofs, fee_reserve).await.unwrap(); println!("{:?}", res); } diff --git a/src/cashu_wallet.rs b/src/cashu_wallet.rs index ed37b4d8..069dc9cb 100644 --- a/src/cashu_wallet.rs +++ b/src/cashu_wallet.rs @@ -220,8 +220,13 @@ impl CashuWallet { }) } - pub async fn melt(&self, invoice: Invoice, proofs: Proofs) -> Result { - let change = BlindedMessages::blank()?; + pub async fn melt( + &self, + invoice: Invoice, + proofs: Proofs, + fee_reserve: u64, + ) -> Result { + let change = BlindedMessages::blank(fee_reserve)?; let melt_response = self .client .melt(proofs, invoice, Some(change.blinded_messages)) diff --git a/src/types.rs b/src/types.rs index 7290cb67..ce781a65 100644 --- a/src/types.rs +++ b/src/types.rs @@ -60,10 +60,12 @@ impl BlindedMessages { } /// Blank Outputs used for NUT-08 change - pub fn blank() -> Result { + pub fn blank(fee_reserve: u64) -> Result { let mut blinded_messages = BlindedMessages::default(); - for _i in 0..4 { + let count = ((fee_reserve as f64).log2().ceil() as u64).max(1); + + for _i in 0..count { let secret = generate_secret(); let (blinded, r) = blind_message(secret.as_bytes(), None)?; @@ -385,4 +387,13 @@ mod tests { assert_eq!(token_data, token); } + + #[test] + fn test_blank_blinded_messages() { + let b = BlindedMessages::blank(1000).unwrap(); + assert_eq!(b.blinded_messages.len(), 10); + + let b = BlindedMessages::blank(1).unwrap(); + assert_eq!(b.blinded_messages.len(), 1); + } }