mirror of
https://github.com/aljazceru/cdk.git
synced 2025-12-20 14:14:49 +01:00
fix: default state sql
fix(mint/sqlite): add pending proof state fix(mint): adding proof to pending before checking current fix(mint): remove double call to verify melt quote
This commit is contained in:
@@ -34,7 +34,7 @@ const CONFIG_TABLE: TableDefinition<&str, &str> = TableDefinition::new("config")
|
||||
const BLINDED_SIGNATURES: TableDefinition<[u8; 33], &str> =
|
||||
TableDefinition::new("blinded_signatures");
|
||||
|
||||
const DATABASE_VERSION: u32 = 0;
|
||||
const DATABASE_VERSION: u32 = 1;
|
||||
|
||||
/// Mint Redbdatabase
|
||||
#[derive(Debug, Clone)]
|
||||
|
||||
@@ -68,6 +68,7 @@ impl WalletRedbDatabase {
|
||||
match db_version {
|
||||
Some(db_version) => {
|
||||
let mut current_file_version = u32::from_str(&db_version)?;
|
||||
tracing::info!("Current file version {}", current_file_version);
|
||||
|
||||
match current_file_version.cmp(&DATABASE_VERSION) {
|
||||
Ordering::Less => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ALTER TABLE melt_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID' ) ) NOT NULL;
|
||||
ALTER TABLE melt_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID' ) ) NOT NULL DEFAULT 'UNPAID';
|
||||
ALTER TABLE melt_quote ADD payment_preimage TEXT;
|
||||
ALTER TABLE melt_quote DROP COLUMN paid;
|
||||
CREATE INDEX IF NOT EXISTS melt_quote_state_index ON melt_quote(state);
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
ALTER TABLE mint_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID', 'ISSUED' ) ) NOT NULL;
|
||||
ALTER TABLE mint_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID', 'ISSUED' ) ) NOT NULL DEFAULT 'UNPAID';
|
||||
ALTER TABLE mint_quote DROP COLUMN paid;
|
||||
CREATE INDEX IF NOT EXISTS mint_quote_state_index ON mint_quote(state);
|
||||
|
||||
@@ -486,7 +486,7 @@ AND state="SPENT";
|
||||
sqlx::query(
|
||||
r#"
|
||||
INSERT OR REPLACE INTO proof
|
||||
(y, amount, keyset_id, secret, c, witness, spent, pending)
|
||||
(y, amount, keyset_id, secret, c, witness, state)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?);
|
||||
"#,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ALTER TABLE melt_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID' ) ) NOT NULL;
|
||||
ALTER TABLE melt_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID' ) ) NOT NULL DEFAULT 'UNPAID';
|
||||
ALTER TABLE melt_quote ADD payment_preimage TEXT;
|
||||
ALTER TABLE melt_quote DROP COLUMN paid;
|
||||
CREATE INDEX IF NOT EXISTS melt_quote_state_index ON melt_quote(state);
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
ALTER TABLE mint_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID', 'ISSUED' ) ) NOT NULL;
|
||||
ALTER TABLE mint_quote ADD state TEXT CHECK ( state IN ('UNPAID', 'PENDING', 'PAID', 'ISSUED' ) ) NOT NULL DEFAULT 'UNPAID';
|
||||
ALTER TABLE mint_quote DROP COLUMN paid;
|
||||
CREATE INDEX IF NOT EXISTS mint_quote_state_index ON mint_quote(state);
|
||||
|
||||
@@ -592,10 +592,6 @@ impl Mint {
|
||||
self.verify_proof(proof).await?;
|
||||
}
|
||||
|
||||
self.localstore
|
||||
.add_pending_proofs(melt_request.inputs.clone())
|
||||
.await?;
|
||||
|
||||
let state = self
|
||||
.localstore
|
||||
.update_melt_quote_state(&melt_request.quote, MeltQuoteState::Pending)
|
||||
@@ -694,17 +690,29 @@ impl Mint {
|
||||
return Err(Error::DuplicateProofs);
|
||||
}
|
||||
|
||||
// Add proofs to pending
|
||||
self.localstore
|
||||
.add_pending_proofs(melt_request.inputs.clone())
|
||||
.await?;
|
||||
|
||||
tracing::debug!("Verified melt quote: {}", melt_request.quote);
|
||||
Ok(quote)
|
||||
}
|
||||
|
||||
/// Process melt request marking [`Proofs`] as spent
|
||||
/// The melt request must be verifyed using [`Self::verify_melt_request`] before calling [`Self::process_melt_request`]
|
||||
pub async fn process_melt_request(
|
||||
&self,
|
||||
melt_request: &MeltBolt11Request,
|
||||
preimage: &str,
|
||||
total_spent: Amount,
|
||||
) -> Result<MeltQuoteBolt11Response, Error> {
|
||||
let quote = self.verify_melt_request(melt_request).await?;
|
||||
tracing::debug!("Processing melt quote: {}", melt_request.quote);
|
||||
let quote = self
|
||||
.localstore
|
||||
.get_melt_quote(&melt_request.quote)
|
||||
.await?
|
||||
.ok_or(Error::UnknownQuote)?;
|
||||
|
||||
if let Some(outputs) = &melt_request.outputs {
|
||||
for blinded_message in outputs {
|
||||
|
||||
Reference in New Issue
Block a user