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:
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,