depolymerization

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

commit 398991804e4c7b75836c19881818fa07e1ab060d
parent 5a4e56976d3fb7a88819aa7b9e290c0c8f3aaff9
Author: Antoine A <>
Date:   Fri,  2 Oct 2026 14:15:52 +0200

common: sync taler-rust and incoming history ordering fix

Diffstat:
MCargo.lock | 12++++++------
Mdepolymerizer-bitcoin/db/depolymerizer-bitcoin-0001.sql | 3++-
Mdepolymerizer-bitcoin/db/depolymerizer-bitcoin-procedures.sql | 12+++++++-----
Mdepolymerizer-bitcoin/src/api.rs | 18++++++++++++++++--
Mdepolymerizer-bitcoin/src/db.rs | 4++--
5 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -994,7 +994,7 @@ dependencies = [ [[package]] name = "failure-injection" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" dependencies = [ "thiserror", ] @@ -2922,7 +2922,7 @@ dependencies = [ [[package]] name = "taler-api" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" dependencies = [ "aws-lc-rs", "axum", @@ -2952,12 +2952,12 @@ dependencies = [ [[package]] name = "taler-build" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" [[package]] name = "taler-common" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" dependencies = [ "anyhow", "aws-lc-rs", @@ -2987,7 +2987,7 @@ dependencies = [ [[package]] name = "taler-macros" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" dependencies = [ "proc-macro2", "quote", @@ -2997,7 +2997,7 @@ dependencies = [ [[package]] name = "taler-test-utils" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#7bfaf2c5e3f7ee89c29cc9175da77ee7cb582b18" +source = "git+git://git.taler.net/taler-rust.git/#fe79c64eaf74efe0fdf3308ed7c797b1cbe56db1" dependencies = [ "aws-lc-rs", "axum", diff --git a/depolymerizer-bitcoin/db/depolymerizer-bitcoin-0001.sql b/depolymerizer-bitcoin/db/depolymerizer-bitcoin-0001.sql @@ -50,7 +50,8 @@ CREATE TYPE incoming_type AS ENUM COMMENT ON TYPE incoming_type IS 'Types of incoming talerable transactions'; CREATE TABLE taler_in ( - tx_in_id INT8 PRIMARY KEY REFERENCES tx_in(tx_in_id) ON DELETE CASCADE, + taler_in_id INT8 PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + tx_in_id INT8 NOT NULL UNIQUE REFERENCES tx_in(tx_in_id) ON DELETE CASCADE, type incoming_type NOT NULL, metadata BYTEA NOT NULL CHECK (LENGTH(metadata)=32), authorization_pub BYTEA CHECK (LENGTH(authorization_pub)=32), diff --git a/depolymerizer-bitcoin/db/depolymerizer-bitcoin-procedures.sql b/depolymerizer-bitcoin/db/depolymerizer-bitcoin-procedures.sql @@ -1,6 +1,6 @@ -- -- This file is part of TALER --- Copyright (C) 2025, 2026 Taler Systems SA +-- Copyright (C) 2025-2026 Taler Systems SA -- -- TALER is free software; you can redistribute it and/or modify it under the -- terms of the GNU General Public License as published by the Free Software @@ -124,6 +124,7 @@ LANGUAGE plpgsql AS $$ DECLARE local_authorization_pub BYTEA; local_authorization_sig BYTEA; +local_taler_in_id INT8; BEGIN out_pending=false; @@ -191,9 +192,9 @@ ELSIF in_type IS NOT NULL THEN in_metadata, local_authorization_pub, local_authorization_sig - ); + ) RETURNING taler_in_id INTO local_taler_in_id; -- Notify new incoming talerable transaction registration - PERFORM pg_notify('taler_in', out_tx_row_id || ''); + PERFORM pg_notify('taler_in', local_taler_in_id::text); END IF; END $$; COMMENT ON FUNCTION register_tx_in IS 'Register an incoming transaction idempotently'; @@ -358,6 +359,7 @@ CREATE FUNCTION register_prepared_transfers ( LANGUAGE plpgsql AS $$ DECLARE talerable_tx INT8; + local_taler_in_id INT8; idempotent BOOLEAN; BEGIN @@ -403,9 +405,9 @@ IF in_recurrent THEN INSERT INTO taler_in (tx_in_id, type, metadata, authorization_pub, authorization_sig) SELECT moved_tx.tx_in_id, in_type, in_account_pub, in_authorization_pub, in_authorization_sig FROM moved_tx - RETURNING tx_in_id INTO talerable_tx; + RETURNING tx_in_id, taler_in_id INTO talerable_tx, local_taler_in_id; IF talerable_tx IS NOT NULL THEN - PERFORM pg_notify('taler_in', talerable_tx::text); + PERFORM pg_notify('taler_in', local_taler_in_id::text); END IF; ELSE -- Bounce all pending diff --git a/depolymerizer-bitcoin/src/api.rs b/depolymerizer-bitcoin/src/api.rs @@ -418,8 +418,8 @@ pub mod test { use taler_macros::db_test; use taler_test_utils::{ routine::{ - Status, admin_add_incoming_routine, out_history_routine, registration_routine, - revenue_routine, transfer_routine, + Status, admin_add_incoming_routine, in_history_routine, out_history_routine, + registration_routine, revenue_routine, transfer_routine, }, server::TestServer, tasks, @@ -532,6 +532,20 @@ pub mod test { } #[db_test] + async fn incoming_history(db: PgPool) { + let server = setup(&db).await; + in_history_routine( + &server.prefix("/taler-wire-gateway"), + &server.prefix("/taler-prepared-transfer"), + &CLIENT.as_uri(), + &EXCHANGE.as_uri(), + tasks!(), + tasks!(), + ) + .await; + } + + #[db_test] async fn admin_add_incoming(db: PgPool) { let server = setup(&db).await; admin_add_incoming_routine( diff --git a/depolymerizer-bitcoin/src/db.rs b/depolymerizer-bitcoin/src/db.rs @@ -327,14 +327,14 @@ pub async fn incoming_history( ) -> sqlx::Result<Vec<IncomingBankTransaction>> { history( db, - "tx_in_id", + "taler_in_id", params, listen, || { QueryBuilder::new( " SELECT - tx_in_id, + taler_in_id, received_at, amount, debit_acc,