depolymerization

wire gateway for Bitcoin/Ethereum
Log | Files | Refs | Submodules | README | LICENSE

commit b6fa249d91984d4504393ab1b5f482a01b980a05
parent 11086493c0f205cad03a085acef854fd92cd426c
Author: Florian Dold <dold@taler.net>
Date:   Wed,  9 Sep 2026 01:37:31 +0200

bitcoin: use current taler-rust payment and timestamp APIs

Diffstat:
Mdepolymerizer-bitcoin/src/api.rs | 12++++++------
Mdepolymerizer-bitcoin/src/db.rs | 47+++++++++++++++++++++++------------------------
Mdepolymerizer-bitcoin/src/loops/worker.rs | 4++--
3 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/depolymerizer-bitcoin/src/api.rs b/depolymerizer-bitcoin/src/api.rs @@ -35,7 +35,7 @@ use taler_api::{ wire::WireGateway, }, error::{ApiResult, failure_code, failure_status}, - subject::IncomingSubject, + subject::IncomingKey, }; use taler_common::{ ExpoBackoffDecorr, @@ -53,7 +53,7 @@ use taler_common::{ types::{ amount::{Amount, Currency}, payto::PaytoURI, - timestamp::TalerTimestamp, + time::TalerTimestamp, }, }; use tokio::{sync::watch::Sender, time::sleep}; @@ -136,7 +136,7 @@ async fn add_incoming( db: &PgPool, amount: Amount, debit_account: PaytoURI, - subject: &IncomingSubject, + subject: &IncomingKey, ) -> ApiResult<AddIncomingResponse> { let debtor = FullBtcPayto::try_from(&debit_account)?; match register_tx_in_admin(db, &amount, &debtor.0, &Timestamp::now(), subject).await? { @@ -219,7 +219,7 @@ impl WireGateway for ServerState { &self.pool, req.amount, req.debit_account, - &IncomingSubject::Reserve(req.reserve_pub), + &IncomingKey::reserve(req.reserve_pub), ) .await } @@ -229,7 +229,7 @@ impl WireGateway for ServerState { &self.pool, req.amount, req.debit_account, - &IncomingSubject::Kyc(req.account_pub), + &IncomingKey::kyc(req.account_pub), ) .await } @@ -239,7 +239,7 @@ impl WireGateway for ServerState { &self.pool, req.amount, req.debit_account, - &IncomingSubject::Map(req.authorization_pub), + &IncomingKey::map(req.authorization_pub), ) .await } diff --git a/depolymerizer-bitcoin/src/db.rs b/depolymerizer-bitcoin/src/db.rs @@ -22,7 +22,7 @@ use sqlx::{PgConnection, PgExecutor, PgPool, QueryBuilder, Row, postgres::PgRow} use taler_api::{ db::{BindHelper as _, TypeHelper as _, history, page}, serialized, - subject::IncomingSubject, + subject::IncomingKey, }; use taler_common::{ api::{ @@ -168,7 +168,7 @@ pub async fn transfer( } else { TransferResult::Success(TransferResponse { row_id: r.try_get_u64("out_transfer_row_id")?, - timestamp: r.try_get_taler_timestamp("out_created_at")?, + timestamp: r.try_get("out_created_at")?, }) }) }) @@ -223,7 +223,7 @@ pub async fn transfer_page( status: r.try_get::<DebitStatus, _>(1)?.into(), amount: r.try_get_amount(2, currency)?, credit_account: sql_payto(&r, 3, 4)?, - timestamp: r.try_get_taler_timestamp(5)?, + timestamp: r.try_get(5)?, }) }, ) @@ -262,7 +262,7 @@ pub async fn transfer_by_id( wtid: r.try_get(4)?, credit_account: sql_payto(&r, 5, 6)?, metadata: r.try_get(7)?, - timestamp: r.try_get_taler_timestamp(8)?, + timestamp: r.try_get(8)?, }) }) .fetch_optional(db) @@ -303,7 +303,7 @@ pub async fn outgoing_history( |r| { Ok(OutgoingBankTransaction { row_id: r.try_get_u64(0)?, - date: r.try_get_taler_timestamp(1)?, + date: r.try_get(1)?, amount: r.try_get_amount(2, currency)?, wtid: r.try_get(3)?, credit_account: sql_payto(&r, 4, 5)?, @@ -349,7 +349,7 @@ pub async fn incoming_history( Ok(match r.try_get(4)? { IncomingType::reserve => IncomingBankTransaction::Reserve { row_id: r.try_get_u64(0)?, - date: r.try_get_taler_timestamp(1)?, + date: r.try_get(1)?, amount: r.try_get_amount(2, currency)?, reserve_pub: r.try_get(5)?, debit_account: sql_generic_payto(&r, 3)?, @@ -359,7 +359,7 @@ pub async fn incoming_history( }, IncomingType::kyc => IncomingBankTransaction::Kyc { row_id: r.try_get_u64(0)?, - date: r.try_get_taler_timestamp(1)?, + date: r.try_get(1)?, amount: r.try_get_amount(2, currency)?, account_pub: r.try_get(5)?, debit_account: sql_generic_payto(&r, 3)?, @@ -402,7 +402,7 @@ pub async fn revenue_history( |r| { Ok(RevenueIncomingBankTransaction { row_id: r.try_get_u64(0)?, - date: r.try_get_taler_timestamp(1)?, + date: r.try_get(1)?, amount: r.try_get_amount(2, currency)?, debit_account: sql_generic_payto(&r, 3)?, credit_fee: None, // TODO store this @@ -432,7 +432,7 @@ pub async fn register_tx_in_admin( amount: &Amount, debit_acc: &Address, received: &Timestamp, - metadata: &IncomingSubject, + metadata: &IncomingKey, ) -> sqlx::Result<AddIncomingResult> { sqlx::query( " @@ -443,8 +443,8 @@ pub async fn register_tx_in_admin( .bind(amount) .bind(debit_acc.to_string()) .bind_timestamp(received) - .bind(metadata.ty()) - .bind(metadata.key()) + .bind(metadata.ty) + .bind(&metadata.key) .try_map(|r: PgRow| { Ok(if r.try_get_flag(0)? { AddIncomingResult::ReservePubReuse @@ -472,7 +472,7 @@ pub async fn register_tx_in<'a>( amount: &Amount, debit_acc: &Address, received: &Timestamp, - subject: &Option<IncomingSubject>, + subject: &Option<IncomingKey>, ) -> sqlx::Result<AddIncomingResult> { sqlx::query( " @@ -484,8 +484,8 @@ pub async fn register_tx_in<'a>( .bind(amount) .bind(debit_acc.to_string()) .bind_timestamp(received) - .bind(subject.as_ref().map(|it| it.ty())) - .bind(subject.as_ref().map(|it| it.key())) + .bind(subject.as_ref().map(|it| it.ty)) + .bind(subject.as_ref().map(|it| &it.key)) .try_map(|r: PgRow| { Ok(if r.try_get_flag(0)? { AddIncomingResult::ReservePubReuse @@ -882,7 +882,7 @@ pub mod test { }; use jiff::Span; use sqlx::{PgPool, Postgres, pool::PoolConnection, postgres::PgRow}; - use taler_api::{db::TypeHelper as _, notification::dummy_listen, subject::IncomingSubject}; + use taler_api::{db::TypeHelper as _, notification::dummy_listen, subject::IncomingKey}; use taler_common::{ api::{EddsaPublicKey, HashCode, ShortHashCode, params::History, wire::TransferRequest}, types::{ @@ -956,8 +956,7 @@ pub mod test { let (mut db, pool) = setup().await; let amount = amount("KUDOS:10"); - let mut routine = async |first: &Option<IncomingSubject>, - second: &Option<IncomingSubject>| { + let mut routine = async |first: &Option<IncomingKey>, second: &Option<IncomingKey>| { let id = sqlx::query("SELECT count(*) + 1 FROM tx_in") .try_map(|r: PgRow| r.try_get_u64(0)) .fetch_one(&mut *db) @@ -1026,15 +1025,15 @@ pub mod test { // Reserve transaction routine( - &Some(IncomingSubject::Reserve(first)), - &Some(IncomingSubject::Reserve(second)), + &Some(IncomingKey::reserve(first)), + &Some(IncomingKey::reserve(second)), ) .await; // Kyc transaction routine( - &Some(IncomingSubject::Kyc(first)), - &Some(IncomingSubject::Kyc(first)), + &Some(IncomingKey::kyc(first)), + &Some(IncomingKey::kyc(first)), ) .await; @@ -1078,7 +1077,7 @@ pub mod test { &amount, &ADDR, &now, - &IncomingSubject::Reserve(EddsaPublicKey::rand()) + &IncomingKey::reserve(EddsaPublicKey::rand()) ) .await .expect("register tx in"), @@ -1096,7 +1095,7 @@ pub mod test { &amount, &ADDR, &later, - &IncomingSubject::Reserve(EddsaPublicKey::rand()) + &IncomingKey::reserve(EddsaPublicKey::rand()) ) .await .expect("register tx in"), @@ -1623,7 +1622,7 @@ pub mod test { &amount, &ADDR, &now, - &Some(IncomingSubject::Reserve(reserve_pub)), + &Some(IncomingKey::reserve(reserve_pub)), ) .await .unwrap(); diff --git a/depolymerizer-bitcoin/src/loops/worker.rs b/depolymerizer-bitcoin/src/loops/worker.rs @@ -23,7 +23,7 @@ use sqlx::{ Acquire, Either, PgConnection, PgPool, postgres::{PgAdvisoryLock, PgAdvisoryLockKey, PgListener}, }; -use taler_api::subject::IncomingSubject; +use taler_api::subject::IncomingKey; use taler_common::{ExpoBackoffDecorr, api::ShortHashCode, db::IncomingType}; use tokio::time::sleep; use tracing::{debug, error, info, trace, warn}; @@ -363,7 +363,7 @@ async fn sync_chain_incoming_confirmed( &amount, &debit_addr, &Timestamp::from_second(tx.time as i64).unwrap(), - &Some(IncomingSubject::Reserve(reserve_pub)), + &Some(IncomingKey::reserve(reserve_pub)), ) .await? {