commit 5d39f3347dc603ebf49f6a37b6bbd309470fbd20
parent c50a441dc6636d5f7e92fcf0e2b5eb636f3346b5
Author: Christian Grothoff <christian@grothoff.org>
Date: Sat, 4 Apr 2026 10:21:17 +0200
add missing ECs
Diffstat:
4 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/core/exchange/get-deposits-H_WIRE-MERCHANT_PUB-H_CONTRACT_TERMS-COIN_PUB.rst b/core/exchange/get-deposits-H_WIRE-MERCHANT_PUB-H_CONTRACT_TERMS-COIN_PUB.rst
@@ -30,11 +30,17 @@
executed. Hence the exchange does not yet have a wire transfer identifier. The
merchant should come back later and ask again.
The response body is a `TrackTransactionAcceptedResponse`.
+ :http:statuscode:`400 Bad request`:
+ A path parameter is malformed.
+ This response comes with a standard `ErrorDetail` response.
:http:statuscode:`403 Forbidden`:
A signature is invalid.
This response comes with a standard `ErrorDetail` response.
:http:statuscode:`404 Not found`:
The deposit operation is unknown to the exchange.
+ :http:statuscode:`500 Internal Server Error`:
+ The exchange had an internal error processing the request.
+ This response comes with a standard `ErrorDetail` response.
**Details:**
diff --git a/core/exchange/get-kyc-check-H_NORMALIZED_PAYTO.rst b/core/exchange/get-kyc-check-H_NORMALIZED_PAYTO.rst
@@ -84,6 +84,9 @@
The account identified by the normalized payto hash is unknown.
:http:statuscode:`409 Conflict`:
The bank account is not (yet) associated with a public key. The account owner must do a wire transfer to the exchange with the account public key in the wire transfer subject to enable authentication.
+ :http:statuscode:`500 Internal Server Error`:
+ The exchange had an internal error processing the request.
+ This response comes with a standard `ErrorDetail` response.
**Details:**
@@ -91,6 +94,9 @@
interface KycCheckAccountExpectedResponse {
+ // Taler error code, ``TALER_EC_EXCHANGE_KYC_CHECK_AUTHORIZATION_FAILED``.
+ code: Integer;
+
// Public key for which the signature must be
// valid to authorize this request.
expected_account_pub: EddsaPublicKey;
diff --git a/core/exchange/get-reserves-RESERVE_PUB-history.rst b/core/exchange/get-reserves-RESERVE_PUB-history.rst
@@ -63,6 +63,8 @@
| ReserveWithdrawTransaction
| ReserveCreditTransaction
| ReserveClosingTransaction
+ | ReserveRecoupTransaction
+ | ReserveHistoryRequestTransaction
| ReserveOpenRequestTransaction
| ReserveCloseRequestTransaction
| PurseMergeTransaction;
@@ -203,6 +205,56 @@
}
+ .. ts:def:: ReserveRecoupTransaction
+
+ interface ReserveRecoupTransaction {
+ type: "RECOUP";
+
+ // Offset of this entry in the reserve history.
+ // Useful to request incremental histories via
+ // the "start" query parameter.
+ history_offset: Integer;
+
+ // Public key of the coin that was paid back.
+ coin_pub: CoinPublicKey;
+
+ // This is a signature over a
+ // struct `TALER_RecoupConfirmationPS` with purpose
+ // ``TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP``.
+ exchange_sig: EddsaSignature;
+
+ // Public key used to create 'exchange_sig'.
+ exchange_pub: EddsaPublicKey;
+
+ // Time when the recoup was accepted.
+ timestamp: Timestamp;
+
+ // Amount recouped to the reserve.
+ amount: Amount;
+ }
+
+ .. ts:def:: ReserveHistoryRequestTransaction
+
+ interface ReserveHistoryRequestTransaction {
+ type: "HISTORY";
+
+ // Offset of this entry in the reserve history.
+ // Useful to request incremental histories via
+ // the "start" query parameter.
+ history_offset: Integer;
+
+ // Signature created with the reserve's private key.
+ // Must be of purpose ``TALER_SIGNATURE_RESERVE_HISTORY_REQUEST`` over
+ // a ``TALER_ReserveHistoryRequestSignaturePS``.
+ reserve_sig: EddsaSignature;
+
+ // Timestamp of the history request.
+ request_timestamp: Timestamp;
+
+ // Fee charged for the history request.
+ amount: Amount;
+ }
+
.. ts:def:: ReserveOpenRequestTransaction
interface ReserveOpenRequestTransaction {
diff --git a/core/exchange/post-recoup-withdraw.rst b/core/exchange/post-recoup-withdraw.rst
@@ -25,12 +25,16 @@
:http:statuscode:`200 OK`:
The request was successful, and the response is a `ReserveSummary`.
:http:statuscode:`403 Forbidden`:
- A coin's signature is invalid.
+ A coin's signature is invalid
+ (``TALER_EC_EXCHANGE_RECOUP_SIGNATURE_INVALID``)
+ or the denomination signature is invalid
+ (``TALER_EC_EXCHANGE_DENOMINATION_SIGNATURE_INVALID``).
This response comes with a standard `ErrorDetail` response.
:http:statuscode:`404 Not found`:
A denomination key is unknown,
the withdraw commitment is unknown
- or a blinded coin is not known to have been withdrawn.
+ or a blinded coin is not known to have been withdrawn
+ (``TALER_EC_EXCHANGE_RECOUP_WITHDRAW_NOT_FOUND``).
If a denomination key is unknown, the response will be
a `DenominationUnknownMessage`.
:http:statuscode:`409 Conflict`:
@@ -43,10 +47,19 @@
The response is a `DepositDoubleSpendError`.
:http:statuscode:`410 Gone`:
A requested denomination key is not yet or no longer valid.
- It either before the validity start, past the expiration or was not yet revoked.
+ It either before the validity start
+ (``TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE``),
+ past the expiration
+ (``TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED``)
+ or was not yet revoked
+ (``TALER_EC_EXCHANGE_RECOUP_NOT_ELIGIBLE``).
The response is a `DenominationGoneMessage`.
Clients must evaluate the error code provided
to understand which of the cases this is and handle it accordingly.
+ :http:statuscode:`500 Internal Server Error`:
+ The exchange encountered an internal error, for example a blinding
+ failure (``TALER_EC_EXCHANGE_RECOUP_BLINDING_FAILED``).
+ This response comes with a standard `ErrorDetail` response.
**Details:**