Skip to content

Commit

Permalink
fix(wallet): stop sqlite from overwritting keyset counter
Browse files Browse the repository at this point in the history
  • Loading branch information
thesimplekid committed Dec 2, 2024
1 parent 7afd88b commit bc490ed
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
6 changes: 4 additions & 2 deletions crates/cdk-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand Down Expand Up @@ -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
}
Expand Down
25 changes: 17 additions & 8 deletions crates/cdk-sqlite/src/wallet/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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(())
}

Expand Down
6 changes: 6 additions & 0 deletions crates/cdk/src/wallet/mint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,12 @@ impl Wallet {
self.localstore.remove_mint_quote(&quote_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)
Expand Down

0 comments on commit bc490ed

Please sign in to comment.