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:
thesimplekid
2024-06-29 00:24:06 +01:00
parent dec11e232a
commit 5db6eaa858
8 changed files with 20 additions and 11 deletions

View File

@@ -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)]

View File

@@ -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 => {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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 (?, ?, ?, ?, ?, ?, ?);
"#,
)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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 {