commit 1fb1010919fed0f0adb9927650b598e8a4476cb7
parent 8985f9026c19c1a92a4678ce934eee8d0041cf5e
Author: Antoine A <>
Date: Tue, 30 Jun 2026 17:29:08 +0200
prepared-transfer-api: new signatures
Diffstat:
9 files changed, 177 insertions(+), 150 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -84,9 +84,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "asn1-rs"
@@ -175,9 +175,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "aws-lc-rs"
-version = "1.17.0"
+version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00"
+checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad"
dependencies = [
"aws-lc-sys",
"untrusted 0.7.1",
@@ -186,14 +186,15 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.41.0"
+version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4"
+checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444"
dependencies = [
"cc",
"cmake",
"dunce",
"fs_extra",
+ "pkg-config",
]
[[package]]
@@ -402,9 +403,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]]
name = "chacha20"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
+checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
dependencies = [
"cfg-if",
"cpufeatures 0.3.0",
@@ -1336,7 +1337,7 @@ dependencies = [
[[package]]
name = "http-client"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
dependencies = [
"compact_str",
"futures-util",
@@ -1378,9 +1379,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hybrid-array"
-version = "0.4.12"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
+checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c"
dependencies = [
"typenum",
]
@@ -1629,9 +1630,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "jiff"
-version = "0.2.29"
+version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34f877a98676d2fb664698d74cc6a51ce6c484ce8c770f05d0108ec9090aeb46"
+checksum = "ccfe6121cbe750cf81efa362d85c0bde7ea298ec43092d3a193baca59cdbd634"
dependencies = [
"defmt",
"jiff-static",
@@ -1643,9 +1644,9 @@ dependencies = [
[[package]]
name = "jiff-static"
-version = "0.2.29"
+version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0666b5ab5ecaca213fc2a85b8c0083d9004e84ee2d5f9a7e0017aaf50986f25f"
+checksum = "e165e897f662d428f3cd3828a919dbe067c2d42bb1031eede74ef9d27ecdedd2"
dependencies = [
"proc-macro2",
"quote",
@@ -1713,9 +1714,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.102"
+version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
dependencies = [
"cfg-if",
"futures-util",
@@ -3440,7 +3441,7 @@ dependencies = [
[[package]]
name = "taler-api"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3467,12 +3468,12 @@ dependencies = [
[[package]]
name = "taler-build"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
[[package]]
name = "taler-common"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
dependencies = [
"anyhow",
"aws-lc-rs",
@@ -3501,7 +3502,7 @@ dependencies = [
[[package]]
name = "taler-macros"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
dependencies = [
"proc-macro2",
"quote",
@@ -3511,7 +3512,7 @@ dependencies = [
[[package]]
name = "taler-test-utils"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#e8a8977ada44fe6015d5a50eb8db63e3dfe693f2"
+source = "git+git://git.taler.net/taler-rust.git/#2a7d903ae13ef097b4503df7394d936d3ee8265f"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3604,9 +3605,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.51"
+version = "0.3.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327"
+checksum = "0e48db7b415311b615f910b3dcaa4557bcd4bf1982379c95c223fd8c2a20e210"
dependencies = [
"deranged",
"num-conv",
@@ -3624,9 +3625,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
[[package]]
name = "time-macros"
-version = "0.2.30"
+version = "0.2.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935"
+checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f"
dependencies = [
"num-conv",
"time-core",
@@ -4007,9 +4008,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.23.3"
+version = "1.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
+checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53"
dependencies = [
"getrandom 0.4.3",
"js-sys",
@@ -4087,9 +4088,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
[[package]]
name = "wasm-bindgen"
-version = "0.2.125"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
dependencies = [
"cfg-if",
"once_cell",
@@ -4100,9 +4101,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.75"
+version = "0.4.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280"
+checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -4110,9 +4111,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.125"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -4120,9 +4121,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.125"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -4133,18 +4134,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.125"
+version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
-version = "0.3.102"
+version = "0.3.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d"
+checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141"
dependencies = [
"js-sys",
"wasm-bindgen",
diff --git a/libeufin-bank/src/api/prepared.rs b/libeufin-bank/src/api/prepared.rs
@@ -126,10 +126,17 @@ pub fn prepared_api() -> Router<Arc<BankState>> {
mod test {
use aws_lc_rs::signature::{Ed25519KeyPair, KeyPair as _};
use sqlx::{Row as _, postgres::PgRow};
- use taler_api::{crypto::eddsa_sign, db::TypeHelper as _};
- use taler_common::{api::EddsaPublicKey, db::IncomingType, error_code::ErrorCode};
+ use taler_api::db::TypeHelper as _;
+ use taler_common::{
+ api::{
+ EddsaPublicKey, EddsaSignature,
+ prepared::{PublicKeyAlg, RegistrationRequest, TransferType},
+ },
+ db::IncomingType,
+ error_code::ErrorCode,
+ types::amount::{Amount, Currency},
+ };
use taler_test_utils::{
- json,
routine::{Status, registration_routine},
server::TestServer as _,
};
@@ -142,22 +149,35 @@ mod test {
let key_pair1 = Ed25519KeyPair::generate().unwrap();
let auth_pub1 = EddsaPublicKey::try_from(key_pair1.public_key().as_ref()).unwrap();
- let req = json!({
- "credit_account": ctx.exchange_payto,
- "credit_amount": "KUDOS:120",
- "type": "reserve",
- "alg": "EdDSA",
- "account_pub": auth_pub1,
- "authorization_pub": auth_pub1,
- "authorization_sig": eddsa_sign(&key_pair1, auth_pub1.as_ref()),
- "recurrent": false
- });
+ let req = RegistrationRequest {
+ credit_account: ctx.exchange_payto.as_uri(),
+ r#type: TransferType::reserve,
+ recurrent: false,
+ credit_amount: Amount::new(&Currency::KUDOS, 120, 0),
+ alg: PublicKeyAlg::EdDSA,
+ account_pub: auth_pub1,
+ authorization_pub: auth_pub1,
+ authorization_sig: EddsaSignature::ZEROED,
+ }
+ .signed(&key_pair1);
ctx.post("/taler-prepared-transfer/registration")
- .json(json!(req + { "credit_account": ctx.customer_payto }))
+ .json(
+ RegistrationRequest {
+ credit_account: ctx.customer_payto.as_uri(),
+ ..req.clone()
+ }
+ .signed(&key_pair1),
+ )
.await
.assert_error(ErrorCode::BANK_ACCOUNT_IS_NOT_EXCHANGE);
ctx.post("/taler-prepared-transfer/registration")
- .json(json!(req + { "credit_account": ctx.unknown_payto }))
+ .json(
+ RegistrationRequest {
+ credit_account: ctx.unknown_payto.as_uri(),
+ ..req.clone()
+ }
+ .signed(&key_pair1),
+ )
.await
.assert_error(ErrorCode::BANK_UNKNOWN_CREDITOR);
diff --git a/libeufin-bank/src/api/wire.rs b/libeufin-bank/src/api/wire.rs
@@ -520,7 +520,7 @@ pub mod test {
amount: amount("KUDOS:55"),
origin_exchange_url: s.origin_exchange_url.clone(),
metadata: None,
- wtid: s.wtid.clone(),
+ wtid: s.wtid,
credit_account: s.credit_account.clone(),
timestamp: s.timestamp,
},
diff --git a/libeufin-bank/src/bench.rs b/libeufin-bank/src/bench.rs
@@ -23,12 +23,19 @@ use aws_lc_rs::signature::{Ed25519KeyPair, KeyPair as _};
use axum::http::header::AUTHORIZATION;
use compact_str::{CompactString, format_compact};
use jiff::{Timestamp, Zoned, tz::TimeZone};
-use taler_api::crypto::eddsa_sign;
use taler_common::{
- api::{EddsaPublicKey, HashCode, ShortHashCode, wire::TransferResponse},
+ api::{
+ EddsaPublicKey, EddsaSignature, HashCode, ShortHashCode,
+ prepared::{PublicKeyAlg, RegistrationRequest, TransferType, Unregistration},
+ wire::TransferResponse,
+ },
bench::{Bench, h16, h32, h64},
encoding::hex,
error_code::ErrorCode,
+ types::{
+ amount::{Amount, Currency},
+ timestamp::TalerTimestamp,
+ },
};
use taler_test_utils::{json, server::TestServer};
use uuid::Uuid;
@@ -566,19 +573,20 @@ pub async fn bench_db() {
// Wire transfer
b.measure("wt_register", async |i| {
let (pair, key) = &accounts_pubs[i];
- let body = json!({
- "credit_account": &ctx.exchange_payto,
- "credit_amount": "KUDOS:55",
- "type": "reserve",
- "alg": "EdDSA",
- "account_pub": key,
- "authorization_pub": key,
- "authorization_sig": eddsa_sign(pair, key.as_ref()),
- "recurrent":false
- });
+ let req = RegistrationRequest {
+ credit_account: ctx.exchange_payto.as_uri(),
+ r#type: TransferType::reserve,
+ recurrent: false,
+ credit_amount: Amount::new(&Currency::KUDOS, 55, 0),
+ alg: PublicKeyAlg::EdDSA,
+ account_pub: *key,
+ authorization_pub: *key,
+ authorization_sig: EddsaSignature::ZEROED,
+ }
+ .signed(pair);
for _ in 0..2 {
ctx.post("/taler-prepared-transfer/registration")
- .json(&body)
+ .json(&req)
.await
.assert_ok()
}
@@ -586,12 +594,12 @@ pub async fn bench_db() {
.await;
b.measure("wt_unregister", async |i| {
let (pair, key) = &accounts_pubs[i];
- let now = Timestamp::now().to_string();
- let req = json!({
- "timestamp": &now,
- "authorization_pub": key,
- "authorization_sig": eddsa_sign(pair, now.as_ref()),
- });
+ let req = Unregistration {
+ timestamp: TalerTimestamp::Timestamp(Timestamp::now()),
+ authorization_pub: *key,
+ authorization_sig: EddsaSignature::ZEROED,
+ }
+ .signed(pair);
ctx.post("/taler-prepared-transfer/unregistration")
.json(&req)
.await
diff --git a/libeufin-bank/src/db/exchange.rs b/libeufin-bank/src/db/exchange.rs
@@ -83,8 +83,8 @@ pub async fn transfer(
FROM taler_transfer($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
",
)
- .bind(&req.request_uid)
- .bind(&req.wtid)
+ .bind(req.request_uid)
+ .bind(req.wtid)
.bind(&subject)
.bind(req.amount)
.bind(req.exchange_base_url.as_str())
diff --git a/libeufin-ebics/src/xml_sign.rs b/libeufin-ebics/src/xml_sign.rs
@@ -32,8 +32,8 @@ use thiserror::Error;
use crate::xml::{self, Xml, XmlAccess as _};
-fn escape<'a>(
- mut text: &'a str,
+fn escape(
+ mut text: &str,
replacements: &[(char, &str)],
out: &mut impl Write,
) -> std::io::Result<()> {
@@ -41,7 +41,7 @@ fn escape<'a>(
while let Some(pos) = text.find(|c| replacements.iter().any(|&(r, _)| r == c)) {
// Write the safe chunk of text before the escaped character
if pos > 0 {
- out.write_all(text[..pos].as_bytes())?;
+ out.write_all(&text.as_bytes()[..pos])?;
}
// Get the character that triggered the match
diff --git a/libeufin-nexus/src/bench.rs b/libeufin-nexus/src/bench.rs
@@ -23,12 +23,19 @@ use aws_lc_rs::signature::{Ed25519KeyPair, KeyPair as _};
use compact_str::{CompactString, format_compact};
use jiff::Timestamp;
use serde_json::json;
-use taler_api::{crypto::eddsa_sign, subject::subject_fmt_qr_bill};
+use taler_api::subject::subject_fmt_qr_bill;
use taler_common::{
- api::{EddsaPublicKey, HashCode, ShortHashCode},
+ api::{
+ EddsaPublicKey, EddsaSignature, HashCode, ShortHashCode,
+ prepared::{PublicKeyAlg, RegistrationRequest, TransferType, Unregistration},
+ },
bench::{Bench, h32, h64},
encoding::hex,
error_code::ErrorCode,
+ types::{
+ amount::{Amount, Currency},
+ timestamp::TalerTimestamp,
+ },
};
use taler_test_utils::server::TestServer as _;
@@ -245,31 +252,34 @@ pub async fn bench_db() {
// Wire transfer
b.measure("wt_register", async |i| {
let (pair, key) = &accounts_pubs[i];
-
- server
- .post("/taler-prepared-transfer/registration")
- .json(json!({
- "credit_account": *EXCHANGE,
- "credit_amount": "KUDOS:55",
- "type": "reserve",
- "alg": "EdDSA",
- "account_pub": key,
- "authorization_pub": key,
- "authorization_sig": eddsa_sign(pair, key.as_ref()),
- "recurrent":false
- }))
- .await
- .assert_ok()
+ let req = RegistrationRequest {
+ credit_account: EXCHANGE.as_uri(),
+ r#type: TransferType::reserve,
+ recurrent: false,
+ credit_amount: Amount::new(&Currency::KUDOS, 55, 0),
+ alg: PublicKeyAlg::EdDSA,
+ account_pub: *key,
+ authorization_pub: *key,
+ authorization_sig: EddsaSignature::ZEROED,
+ }
+ .signed(pair);
+ for _ in 0..2 {
+ server
+ .post("/taler-prepared-transfer/registration")
+ .json(&req)
+ .await
+ .assert_ok()
+ }
})
.await;
b.measure("wt_unregister", async |i| {
let (pair, key) = &accounts_pubs[i];
- let now = Timestamp::now().to_string();
- let req = json!({
- "timestamp": &now,
- "authorization_pub": key,
- "authorization_sig": eddsa_sign(pair, now.as_ref()),
- });
+ let req = Unregistration {
+ timestamp: TalerTimestamp::Timestamp(Timestamp::now()),
+ authorization_pub: *key,
+ authorization_sig: EddsaSignature::ZEROED,
+ }
+ .signed(pair);
server
.post("/taler-prepared-transfer/unregistration")
.json(&req)
diff --git a/libeufin-nexus/src/db/exchange.rs b/libeufin-nexus/src/db/exchange.rs
@@ -212,8 +212,8 @@ pub async fn transfer(
FROM taler_transfer($1,$2,$3,$4,$5,$6,$7,$8,$9)
",
)
- .bind(&req.request_uid)
- .bind(&req.wtid)
+ .bind(req.request_uid)
+ .bind(req.wtid)
.bind(&subject)
.bind(req.amount)
.bind(req.exchange_base_url.as_str())
diff --git a/libeufin-nexus/src/db/payment.rs b/libeufin-nexus/src/db/payment.rs
@@ -662,11 +662,11 @@ mod test {
// Register
let incoming = gen_in_pay(&subject);
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(key.clone())]).await;
+ check_in_state(&db, &[Reserve(key)]).await;
// Idempotent
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(key.clone())]).await;
+ check_in_state(&db, &[Reserve(key)]).await;
// Key reuse is bounced
register_incoming(&db, &cfg, &gen_in_pay(&subject))
@@ -675,13 +675,13 @@ mod test {
register_incoming(&db, &cfg, &gen_in_pay(format_args!("another {subject}")))
.await
.unwrap();
- check_in_state(&db, &[Reserve(key.clone()), Bounced, Bounced]).await;
+ check_in_state(&db, &[Reserve(key), Bounced, Bounced]).await;
// Admin balance adjust is ignored
register_incoming(&db, &cfg, &gen_in_pay("ADMIN BALANCE ADJUST"))
.await
.unwrap();
- check_in_state(&db, &[Reserve(key.clone()), Bounced, Bounced, Simple]).await;
+ check_in_state(&db, &[Reserve(key), Bounced, Bounced, Simple]).await;
let new = EddsaPublicKey::rand();
let original = gen_in_pay(format_args!("test 2 with {new} reserve pub"));
@@ -693,25 +693,13 @@ mod test {
// Register incomplete transaction
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(
- &db,
- &[Reserve(key.clone()), Bounced, Bounced, Simple, Incomplete],
- )
- .await;
+ check_in_state(&db, &[Reserve(key), Bounced, Bounced, Simple, Incomplete]).await;
// Idempotent
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(
- &db,
- &[Reserve(key.clone()), Bounced, Bounced, Simple, Incomplete],
- )
- .await;
+ check_in_state(&db, &[Reserve(key), Bounced, Bounced, Simple, Incomplete]).await;
// Recover info when completed
register_incoming(&db, &cfg, &original).await.unwrap();
- check_in_state(
- &db,
- &[Reserve(key.clone()), Bounced, Bounced, Simple, Reserve(new)],
- )
- .await;
+ check_in_state(&db, &[Reserve(key), Bounced, Bounced, Simple, Reserve(new)]).await;
}
#[tokio::test]
@@ -743,17 +731,17 @@ mod test {
// Register
let incoming = gen_in_pay(&subject);
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone())]).await;
+ check_in_state(&db, &[Reserve(first)]).await;
// Idempotent
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone())]).await;
+ check_in_state(&db, &[Reserve(first)]).await;
// Admin balance adjust is ignored
register_incoming(&db, &cfg, &gen_in_pay("ADMIN BALANCE ADJUST"))
.await
.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple]).await;
+ check_in_state(&db, &[Reserve(first), Simple]).await;
let original = gen_in_pay(format_args!("test 2 for {subject}"));
let incomplete = InTx {
@@ -763,13 +751,13 @@ mod test {
};
// Register incomplete transaction
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Incomplete]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Incomplete]).await;
// Idempotent
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Incomplete]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Incomplete]).await;
// Recover info when completed
register_incoming(&db, &cfg, &original).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Bounced]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Bounced]).await;
let second = EddsaPublicKey::rand();
assert_eq!(
@@ -787,7 +775,7 @@ mod test {
.unwrap(),
RegistrationResult::Success
);
- check_in_state(&db, &[Reserve(first.clone()), Simple, Bounced]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Bounced]).await;
// Key reuse is pending
for _ in 0..3 {
@@ -798,10 +786,10 @@ mod test {
check_in_state(
&db,
&[
- Reserve(first.clone()),
+ Reserve(first),
Simple,
Bounced,
- Reserve(second.clone()),
+ Reserve(second),
Pending,
Pending,
],
@@ -828,11 +816,11 @@ mod test {
check_in_state(
&db,
&[
- Reserve(first.clone()),
+ Reserve(first),
Simple,
Bounced,
- Reserve(second.clone()),
- Reserve(third.clone()),
+ Reserve(second),
+ Reserve(third),
Pending,
],
)
@@ -867,17 +855,17 @@ mod test {
// Register
let incoming = gen_in_pay(reference_number.clone());
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone())]).await;
+ check_in_state(&db, &[Reserve(first)]).await;
// Idempotent
register_incoming(&db, &cfg, &incoming).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone())]).await;
+ check_in_state(&db, &[Reserve(first)]).await;
// Admin balance adjust is ignored
register_incoming(&db, &cfg, &gen_in_pay("ADMIN BALANCE ADJUST"))
.await
.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple]).await;
+ check_in_state(&db, &[Reserve(first), Simple]).await;
let original = gen_in_pay(reference_number.clone());
let incomplete = InTx {
@@ -887,13 +875,13 @@ mod test {
};
// Register incomplete transaction
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Incomplete]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Incomplete]).await;
// Idempotent
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Incomplete]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Incomplete]).await;
// Recover info when completed
register_incoming(&db, &cfg, &original).await.unwrap();
- check_in_state(&db, &[Reserve(first.clone()), Simple, Bounced]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Bounced]).await;
let second = EddsaPublicKey::rand();
assert_eq!(
@@ -911,7 +899,7 @@ mod test {
.unwrap(),
RegistrationResult::Success
);
- check_in_state(&db, &[Reserve(first.clone()), Simple, Bounced]).await;
+ check_in_state(&db, &[Reserve(first), Simple, Bounced]).await;
// Key reuse is pending
for _ in 0..3 {
@@ -922,10 +910,10 @@ mod test {
check_in_state(
&db,
&[
- Reserve(first.clone()),
+ Reserve(first),
Simple,
Bounced,
- Reserve(second.clone()),
+ Reserve(second),
Pending,
Pending,
],
@@ -952,11 +940,11 @@ mod test {
check_in_state(
&db,
&[
- Reserve(first.clone()),
+ Reserve(first),
Simple,
Bounced,
- Reserve(second.clone()),
- Reserve(third.clone()),
+ Reserve(second),
+ Reserve(third),
Pending,
],
)
@@ -1117,7 +1105,7 @@ mod test {
register_incoming(&db, &cfg, &incomplete).await.unwrap();
register_incoming(&db, &cfg, &payment).await.unwrap();
register_incoming(&db, &cfg, &incomplete).await.unwrap();
- check_in_state(&db, &[Reserve(key.clone())]).await;
+ check_in_state(&db, &[Reserve(key)]).await;
// Check we do not register as talerable bounced transaction
let new_key = EddsaPublicKey::rand();
@@ -1130,6 +1118,6 @@ mod test {
register_incoming(&db, &cfg, &payment).await.unwrap();
register_incoming(&db, &cfg, &incomplete).await.unwrap();
register_incoming(&db, &cfg, &payment).await.unwrap();
- check_in_state(&db, &[Reserve(key.clone()), Bounced]).await;
+ check_in_state(&db, &[Reserve(key), Bounced]).await;
}
}