Skip to content

Commit 5518ad2

Browse files
authored
feat(cdk): add quote_id field to transactions for quote tracking (#1041)
- Add quote_id field to Transaction struct in cdk-common - Add database migrations for quote_id column in SQLite and PostgreSQL - Update wallet operations to populate quote_id for mint/melt transactions - Set quote_id to None for send/receive operations without associated quotes
1 parent 9b35158 commit 5518ad2

14 files changed

Lines changed: 33 additions & 13 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
- cdk-common: Added comprehensive test module for KV store functionality with transaction and isolation testing ([thesimplekid]).
1717
- cdk-sql-common: Database migration to add `kv_store` table for generic key-value storage in SQLite and PostgreSQL ([thesimplekid]).
1818
- cdk-sql-common: Implementation of `MintKVStoreDatabase` trait for SQL-based databases with namespace support ([thesimplekid]).
19+
- cdk-common: Added `quote_id` field to `Transaction` struct for tracking associated mint or melt quote IDs ([thesimplekid]).
20+
- cdk-sql-common: Database migration to add `quote_id` column to transactions table for SQLite and PostgreSQL ([thesimplekid]).
1921

2022
### Changed
2123
- cdk-common: Refactored `MintPayment` trait method `wait_any_incoming_payment` to `wait_payment_event` with event-driven architecture ([thesimplekid]).

crates/cdk-common/src/wallet.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ pub struct Transaction {
202202
pub memo: Option<String>,
203203
/// User-defined metadata
204204
pub metadata: HashMap<String, String>,
205+
/// Quote ID if this is a mint or melt transaction
206+
pub quote_id: Option<String>,
205207
}
206208

207209
impl Transaction {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/// @generated
22
/// Auto-generated by build.rs
33
pub static MIGRATIONS: &[(&str, &str, &str)] = &[
4-
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
54
("postgres", "1_init.sql", include_str!(r#"./migrations/postgres/1_init.sql"#)),
5+
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
66
("sqlite", "20250109143347_init.sql", include_str!(r#"./migrations/sqlite/20250109143347_init.sql"#)),
7-
("sqlite", "20250822104351_rename_blind_message_y_to_b.sql", include_str!(r#"./migrations/sqlite/20250822104351_rename_blind_message_y_to_b.sql"#)),
87
("postgres", "20250822104351_rename_blind_message_y_to_b.sql", include_str!(r#"./migrations/postgres/20250822104351_rename_blind_message_y_to_b.sql"#)),
8+
("sqlite", "20250822104351_rename_blind_message_y_to_b.sql", include_str!(r#"./migrations/sqlite/20250822104351_rename_blind_message_y_to_b.sql"#)),
99
];

crates/cdk-sql-common/src/mint/migrations.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/// @generated
22
/// Auto-generated by build.rs
33
pub static MIGRATIONS: &[(&str, &str, &str)] = &[
4-
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
54
("postgres", "1_initial.sql", include_str!(r#"./migrations/postgres/1_initial.sql"#)),
5+
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
66
("postgres", "2_remove_request_lookup_kind_constraints.sql", include_str!(r#"./migrations/postgres/2_remove_request_lookup_kind_constraints.sql"#)),
77
("sqlite", "20240612124932_init.sql", include_str!(r#"./migrations/sqlite/20240612124932_init.sql"#)),
88
("sqlite", "20240618195700_quote_state.sql", include_str!(r#"./migrations/sqlite/20240618195700_quote_state.sql"#)),
@@ -27,8 +27,8 @@ pub static MIGRATIONS: &[(&str, &str, &str)] = &[
2727
("sqlite", "20250706101057_bolt12.sql", include_str!(r#"./migrations/sqlite/20250706101057_bolt12.sql"#)),
2828
("sqlite", "20250812132015_drop_melt_request.sql", include_str!(r#"./migrations/sqlite/20250812132015_drop_melt_request.sql"#)),
2929
("sqlite", "20250819200000_remove_request_lookup_kind_constraints.sql", include_str!(r#"./migrations/sqlite/20250819200000_remove_request_lookup_kind_constraints.sql"#)),
30-
("sqlite", "20250901090000_add_kv_store.sql", include_str!(r#"./migrations/sqlite/20250901090000_add_kv_store.sql"#)),
3130
("postgres", "20250901090000_add_kv_store.sql", include_str!(r#"./migrations/postgres/20250901090000_add_kv_store.sql"#)),
32-
("sqlite", "20250903200000_add_signatory_amounts.sql", include_str!(r#"./migrations/sqlite/20250903200000_add_signatory_amounts.sql"#)),
31+
("sqlite", "20250901090000_add_kv_store.sql", include_str!(r#"./migrations/sqlite/20250901090000_add_kv_store.sql"#)),
3332
("postgres", "20250903200000_add_signatory_amounts.sql", include_str!(r#"./migrations/postgres/20250903200000_add_signatory_amounts.sql"#)),
33+
("sqlite", "20250903200000_add_signatory_amounts.sql", include_str!(r#"./migrations/sqlite/20250903200000_add_signatory_amounts.sql"#)),
3434
];

crates/cdk-sql-common/src/wallet/migrations.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/// @generated
22
/// Auto-generated by build.rs
33
pub static MIGRATIONS: &[(&str, &str, &str)] = &[
4-
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
54
("postgres", "1_initial.sql", include_str!(r#"./migrations/postgres/1_initial.sql"#)),
5+
("sqlite", "1_fix_sqlx_migration.sql", include_str!(r#"./migrations/sqlite/1_fix_sqlx_migration.sql"#)),
66
("sqlite", "20240612132920_init.sql", include_str!(r#"./migrations/sqlite/20240612132920_init.sql"#)),
77
("sqlite", "20240618200350_quote_state.sql", include_str!(r#"./migrations/sqlite/20240618200350_quote_state.sql"#)),
88
("sqlite", "20240626091921_nut04_state.sql", include_str!(r#"./migrations/sqlite/20240626091921_nut04_state.sql"#)),
@@ -22,6 +22,8 @@ pub static MIGRATIONS: &[(&str, &str, &str)] = &[
2222
("sqlite", "20250707093445_bolt12.sql", include_str!(r#"./migrations/sqlite/20250707093445_bolt12.sql"#)),
2323
("sqlite", "20250729111701_keyset_v2_u32.sql", include_str!(r#"./migrations/sqlite/20250729111701_keyset_v2_u32.sql"#)),
2424
("sqlite", "20250812084621_keyset_plus_one.sql", include_str!(r#"./migrations/sqlite/20250812084621_keyset_plus_one.sql"#)),
25-
("sqlite", "20250831215438_melt_quote_method.sql", include_str!(r#"./migrations/sqlite/20250831215438_melt_quote_method.sql"#)),
2625
("postgres", "20250831215438_melt_quote_method.sql", include_str!(r#"./migrations/postgres/20250831215438_melt_quote_method.sql"#)),
26+
("sqlite", "20250831215438_melt_quote_method.sql", include_str!(r#"./migrations/sqlite/20250831215438_melt_quote_method.sql"#)),
27+
("postgres", "20250906200000_add_transaction_quote_id.sql", include_str!(r#"./migrations/postgres/20250906200000_add_transaction_quote_id.sql"#)),
28+
("sqlite", "20250906200000_add_transaction_quote_id.sql", include_str!(r#"./migrations/sqlite/20250906200000_add_transaction_quote_id.sql"#)),
2729
];
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE transactions ADD COLUMN quote_id TEXT;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE transactions ADD COLUMN quote_id TEXT;

crates/cdk-sql-common/src/wallet/mod.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -903,9 +903,9 @@ ON CONFLICT(id) DO UPDATE SET
903903
query(
904904
r#"
905905
INSERT INTO transactions
906-
(id, mint_url, direction, unit, amount, fee, ys, timestamp, memo, metadata)
906+
(id, mint_url, direction, unit, amount, fee, ys, timestamp, memo, metadata, quote_id)
907907
VALUES
908-
(:id, :mint_url, :direction, :unit, :amount, :fee, :ys, :timestamp, :memo, :metadata)
908+
(:id, :mint_url, :direction, :unit, :amount, :fee, :ys, :timestamp, :memo, :metadata, :quote_id)
909909
ON CONFLICT(id) DO UPDATE SET
910910
mint_url = excluded.mint_url,
911911
direction = excluded.direction,
@@ -915,7 +915,8 @@ ON CONFLICT(id) DO UPDATE SET
915915
ys = excluded.ys,
916916
timestamp = excluded.timestamp,
917917
memo = excluded.memo,
918-
metadata = excluded.metadata
918+
metadata = excluded.metadata,
919+
quote_id = excluded.quote_id
919920
;
920921
"#,
921922
)?
@@ -932,6 +933,7 @@ ON CONFLICT(id) DO UPDATE SET
932933
"metadata",
933934
serde_json::to_string(&transaction.metadata).map_err(Error::from)?,
934935
)
936+
.bind("quote_id", transaction.quote_id)
935937
.execute(&*conn)
936938
.await?;
937939

@@ -955,7 +957,8 @@ ON CONFLICT(id) DO UPDATE SET
955957
ys,
956958
timestamp,
957959
memo,
958-
metadata
960+
metadata,
961+
quote_id
959962
FROM
960963
transactions
961964
WHERE
@@ -989,7 +992,8 @@ ON CONFLICT(id) DO UPDATE SET
989992
ys,
990993
timestamp,
991994
memo,
992-
metadata
995+
metadata,
996+
quote_id
993997
FROM
994998
transactions
995999
"#,
@@ -1226,7 +1230,8 @@ fn sql_row_to_transaction(row: Vec<Column>) -> Result<Transaction, Error> {
12261230
ys,
12271231
timestamp,
12281232
memo,
1229-
metadata
1233+
metadata,
1234+
quote_id
12301235
) = row
12311236
);
12321237

@@ -1249,5 +1254,6 @@ fn sql_row_to_transaction(row: Vec<Column>) -> Result<Transaction, Error> {
12491254
serde_json::from_slice(&v).ok()
12501255
})
12511256
.unwrap_or_default(),
1257+
quote_id: column_as_nullable_string!(quote_id),
12521258
})
12531259
}

crates/cdk/src/wallet/issue/issue_bolt11.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ impl Wallet {
322322
timestamp: unix_time,
323323
memo: None,
324324
metadata: HashMap::new(),
325+
quote_id: Some(quote_id.to_string()),
325326
})
326327
.await?;
327328

crates/cdk/src/wallet/issue/issue_bolt12.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ impl Wallet {
226226
timestamp: unix_time(),
227227
memo: None,
228228
metadata: HashMap::new(),
229+
quote_id: Some(quote_id.to_string()),
229230
})
230231
.await?;
231232

0 commit comments

Comments
 (0)