From bc490ed208868ec6d455c103e9fa968e611f6804 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Mon, 2 Dec 2024 19:38:28 +0000 Subject: [PATCH] fix(wallet): stop sqlite from overwritting keyset counter --- crates/cdk-cli/src/main.rs | 6 ++++-- crates/cdk-sqlite/src/wallet/mod.rs | 25 +++++++++++++++++-------- crates/cdk/src/wallet/mint.rs | 6 ++++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/crates/cdk-cli/src/main.rs b/crates/cdk-cli/src/main.rs index 898448705..9635045b9 100644 --- a/crates/cdk-cli/src/main.rs +++ b/crates/cdk-cli/src/main.rs @@ -85,7 +85,7 @@ async fn main() -> Result<()> { let args: Cli = Cli::parse(); let default_filter = args.log_level; - let sqlx_filter = "sqlx=warn"; + let sqlx_filter = "sqlx=warn,hyper_util=warn,reqwest=warn"; let env_filter = EnvFilter::new(format!("{},{}", default_filter, sqlx_filter)); @@ -132,7 +132,9 @@ async fn main() -> Result<()> { let random_bytes: [u8; 32] = rng.gen(); let mnemonic = Mnemonic::from_entropy(&random_bytes)?; - tracing::info!("Using randomly generated seed you will not be able to restore"); + tracing::info!("Creating new seed"); + + fs::write(seed_path, mnemonic.to_string())?; mnemonic } diff --git a/crates/cdk-sqlite/src/wallet/mod.rs b/crates/cdk-sqlite/src/wallet/mod.rs index 0decfac3b..b2480ee13 100644 --- a/crates/cdk-sqlite/src/wallet/mod.rs +++ b/crates/cdk-sqlite/src/wallet/mod.rs @@ -260,10 +260,15 @@ FROM mint for keyset in keysets { sqlx::query( r#" -INSERT OR REPLACE INTO keyset -(mint_url, id, unit, active, input_fee_ppk) -VALUES (?, ?, ?, ?, ?); - "#, + INSERT INTO keyset + (mint_url, id, unit, active, input_fee_ppk) + VALUES (?, ?, ?, ?, ?) + ON CONFLICT(id) DO UPDATE SET + mint_url = excluded.mint_url, + unit = excluded.unit, + active = excluded.active, + input_fee_ppk = excluded.input_fee_ppk; + "#, ) .bind(mint_url.to_string()) .bind(keyset.id.to_string()) @@ -675,19 +680,23 @@ FROM proof; #[instrument(skip(self), fields(keyset_id = %keyset_id))] async fn increment_keyset_counter(&self, keyset_id: &Id, count: u32) -> Result<(), Self::Err> { + let mut transaction = self.pool.begin().await.map_err(Error::from)?; + sqlx::query( r#" UPDATE keyset -SET counter = counter + ? -WHERE id IS ?; +SET counter=counter+? +WHERE id=?; "#, ) - .bind(count) + .bind(count as i64) .bind(keyset_id.to_string()) - .execute(&self.pool) + .execute(&mut transaction) .await .map_err(Error::from)?; + transaction.commit().await.map_err(Error::from)?; + Ok(()) } diff --git a/crates/cdk/src/wallet/mint.rs b/crates/cdk/src/wallet/mint.rs index 77b9bb706..5a18b5bb0 100644 --- a/crates/cdk/src/wallet/mint.rs +++ b/crates/cdk/src/wallet/mint.rs @@ -256,6 +256,12 @@ impl Wallet { self.localstore.remove_mint_quote("e_info.id).await?; if spending_conditions.is_none() { + tracing::debug!( + "Incrementing keyset {} counter by {}", + active_keyset_id, + proofs.len() + ); + // Update counter for keyset self.localstore .increment_keyset_counter(&active_keyset_id, proofs.len() as u32)