From 181ca7e92c458f0fcd43e8649a3c4c8899afa8bb Mon Sep 17 00:00:00 2001 From: Wilfred Allyn Date: Tue, 22 Apr 2025 10:03:53 -0400 Subject: [PATCH] add test for mining share quote --- crates/cdk/Cargo.toml | 2 + crates/cdk/src/mint/mint_nut04.rs | 66 +++++++++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/crates/cdk/Cargo.toml b/crates/cdk/Cargo.toml index 4bbf57f02b..97d8eb2d37 100644 --- a/crates/cdk/Cargo.toml +++ b/crates/cdk/Cargo.toml @@ -31,6 +31,7 @@ bitcoin = { version = "0.32.2", features = [ "rand", "rand-std", ] } +bitcoin_hashes = { version = "0.16", features = ["serde"] } ciborium = { version = "0.2.2", default-features = false, features = ["std"] } lightning-invoice = { version = "0.32.0", features = ["serde", "std"] } regex = "1" @@ -101,6 +102,7 @@ rand = "0.8.5" bip39 = "2.0" tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } criterion = "0.5.1" +cdk-integration-tests = { path = "../cdk-integration-tests" } [[bench]] name = "dhke_benchmarks" diff --git a/crates/cdk/src/mint/mint_nut04.rs b/crates/cdk/src/mint/mint_nut04.rs index 7e60b02c5e..03412dd62e 100644 --- a/crates/cdk/src/mint/mint_nut04.rs +++ b/crates/cdk/src/mint/mint_nut04.rs @@ -1,6 +1,6 @@ use cdk_common::nut04::{MintMiningShareRequest, MintQuoteMiningShareRequest, MintQuoteMiningShareResponse}; use cdk_common::BlindedMessage; -use tracing::instrument; +use tracing::{instrument, debug}; use uuid::Uuid; use super::verification::Verification; @@ -183,8 +183,11 @@ impl Mint { }; self.process_mining_mint_request(mint_mining_share_request).await?; - - let quote: MintQuoteMiningShareResponse = quote.into(); + debug!("Successfully processed mining mint request for quote {}", quote.id); + + // Update the local quote state to Issued since was updated in process_mining_mint_request + let mut quote: MintQuoteMiningShareResponse = quote.into(); + quote.state = MintQuoteState::Issued; self.pubsub_manager .broadcast(NotificationPayload::MintQuoteMiningShareResponse(quote.clone())); @@ -534,3 +537,60 @@ impl Mint { }) } } + +#[cfg(test)] +mod tests { + use crate::amount::Amount; + use crate::nuts::{CurrencyUnit, MintQuoteState}; + use cdk_common::nut04::MintQuoteMiningShareRequest; + use cdk_integration_tests::init_pure_tests::create_and_start_test_mint; + use bitcoin_hashes::sha256::Hash; + use cdk_common::nut00::BlindedMessage; + use std::collections::HashMap; + use anyhow::Result; + + #[tokio::test] + async fn test_mint_mining_share_quote_is_issued() -> Result<()> { + let mint = create_and_start_test_mint().await?; + + // Rotate keyset to make it active for CurrencyUnit::Sat + mint.rotate_keyset(CurrencyUnit::Sat, 0, 32, 0, &HashMap::new()).await?; + + // Create a header hash for the mining share request + let header_hash = Hash::hash(b"test_header"); + + // Get active keyset ID, keyset info to get a valid public key + let active_keyset_id = mint.localstore.get_active_keyset_id(&CurrencyUnit::Sat).await?.unwrap(); + let keyset_info = mint.localstore.get_keyset_info(&active_keyset_id).await?.unwrap(); + let keyset = mint.generate_keyset(keyset_info); + + // Get the public key for amount 512 (2^9) + let amount = Amount::from(512); + let valid_public_key = keyset.keys.get(&amount).unwrap().public_key; + + let request = MintQuoteMiningShareRequest { + amount: Amount::from(512), + unit: CurrencyUnit::Sat, + header_hash, + description: None, + pubkey: None, + }; + + // Create a minimal blinded message with the same unit + let blinded_message = BlindedMessage { + amount: Amount::from(512), + keyset_id: active_keyset_id, + blinded_secret: valid_public_key, + witness: None, + }; + + // Create the quote with the blinded message + let quote = mint.create_paid_mint_mining_share_quote(request, vec![blinded_message]).await.unwrap(); + + // Verify quote state is Issued + assert_eq!(quote.state, MintQuoteState::Issued); + + Ok(()) + } +} +