diff options
author | Florian Dold <florian@dold.me> | 2023-09-12 12:24:42 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-09-12 12:25:09 +0200 |
commit | ee8993f11cf81721cc30b4473e40124c2fee0dff (patch) | |
tree | 7978bc61a12c88368e59fd7b46a72865db9547de /packages/taler-util | |
parent | a437605ebaf4267e60ae26f50ac107cdf11a8876 (diff) | |
download | wallet-core-ee8993f11cf81721cc30b4473e40124c2fee0dff.tar.xz |
wallet-core: use batch deposit API
Diffstat (limited to 'packages/taler-util')
-rw-r--r-- | packages/taler-util/src/taler-types.ts | 116 |
1 files changed, 98 insertions, 18 deletions
diff --git a/packages/taler-util/src/taler-types.ts b/packages/taler-util/src/taler-types.ts index a78df7452..eaba1ae3d 100644 --- a/packages/taler-util/src/taler-types.ts +++ b/packages/taler-util/src/taler-types.ts @@ -1889,42 +1889,58 @@ export interface ExchangeRefreshRevealRequest { old_age_commitment?: Edx25519PublicKeyEnc[]; } -export interface DepositSuccess { +interface DepositConfirmationSignature { + // The EdDSA signature of `TALER_DepositConfirmationPS` using a current + // `signing key of the exchange <sign-key-priv>` affirming the successful + // deposit and that the exchange will transfer the funds after the refund + // deadline, or as soon as possible if the refund deadline is zero. + exchange_sig: EddsaSignatureString; +} + +export interface BatchDepositSuccess { // Optional base URL of the exchange for looking up wire transfers // associated with this transaction. If not given, // the base URL is the same as the one used for this request. - // Can be used if the base URL for /transactions/ differs from that - // for /coins/, i.e. for load balancing. Clients SHOULD - // respect the transaction_base_url if provided. Any HTTP server + // Can be used if the base URL for ``/transactions/`` differs from that + // for ``/coins/``, i.e. for load balancing. Clients SHOULD + // respect the ``transaction_base_url`` if provided. Any HTTP server // belonging to an exchange MUST generate a 307 or 308 redirection // to the correct base URL should a client uses the wrong base // URL, or if the base URL has changed since the deposit. transaction_base_url?: string; - // timestamp when the deposit was received by the exchange. + // Timestamp when the deposit was received by the exchange. exchange_timestamp: TalerProtocolTimestamp; - // the EdDSA signature of TALER_DepositConfirmationPS using a current - // signing key of the exchange affirming the successful - // deposit and that the exchange will transfer the funds after the refund - // deadline, or as soon as possible if the refund deadline is zero. - exchange_sig: string; - - // public EdDSA key of the exchange that was used to + // `Public EdDSA key of the exchange <sign-key-pub>` that was used to // generate the signature. - // Should match one of the exchange's signing keys from /keys. It is given + // Should match one of the exchange's signing keys from ``/keys``. It is given // explicitly as the client might otherwise be confused by clock skew as to // which signing key was used. - exchange_pub: string; + exchange_pub: EddsaPublicKeyString; + + // Array of deposit confirmation signatures from the exchange + // Entries must be in the same order the coins were given + // in the batch deposit request. + exchange_sigs: DepositConfirmationSignature[]; } -export const codecForDepositSuccess = (): Codec<DepositSuccess> => - buildCodecForObject<DepositSuccess>() +export const codecForDepositConfirmationSignature = + (): Codec<DepositConfirmationSignature> => + buildCodecForObject<DepositConfirmationSignature>() + .property("exchange_sig", codecForString()) + .build("DepositConfirmationSignature"); + +export const codecForBatchDepositSuccess = (): Codec<BatchDepositSuccess> => + buildCodecForObject<BatchDepositSuccess>() .property("exchange_pub", codecForString()) - .property("exchange_sig", codecForString()) + .property( + "exchange_sigs", + codecForList(codecForDepositConfirmationSignature()), + ) .property("exchange_timestamp", codecForTimestamp) .property("transaction_base_url", codecOptional(codecForString())) - .build("DepositSuccess"); + .build("BatchDepositSuccess"); export interface TrackTransactionWired { // Raw wire transfer identifier of the deposit. @@ -2148,6 +2164,9 @@ export interface ExchangePurseDeposits { deposits: PurseDeposit[]; } +/** + * @deprecated batch deposit should be used. + */ export interface ExchangeDepositRequest { // Amount to be deposited, can be a fraction of the // coin's total value. @@ -2210,6 +2229,67 @@ export interface ExchangeDepositRequest { h_age_commitment?: string; } +export type WireSalt = string; + +export interface ExchangeBatchDepositRequest { + // The merchant's account details. + merchant_payto_uri: string; + + // The salt is used to hide the ``payto_uri`` from customers + // when computing the ``h_wire`` of the merchant. + wire_salt: WireSalt; + + // SHA-512 hash of the contract of the merchant with the customer. Further + // details are never disclosed to the exchange. + h_contract_terms: HashCodeString; + + // The list of coins that are going to be deposited with this Request. + coins: BatchDepositRequestCoin[]; + + // Timestamp when the contract was finalized. + timestamp: TalerProtocolTimestamp; + + // Indicative time by which the exchange undertakes to transfer the funds to + // the merchant, in case of successful payment. A wire transfer deadline of 'never' + // is not allowed. + wire_transfer_deadline: TalerProtocolTimestamp; + + // EdDSA `public key of the merchant <merchant-pub>`, so that the client can identify the + // merchant for refund requests. + merchant_pub: EddsaPublicKeyString; + + // Date until which the merchant can issue a refund to the customer via the + // exchange, to be omitted if refunds are not allowed. + // + // THIS FIELD WILL BE DEPRICATED, once the refund mechanism becomes a + // policy via extension. + refund_deadline?: TalerProtocolTimestamp; + + // CAVEAT: THIS IS WORK IN PROGRESS + // (Optional) policy for the batch-deposit. + // This might be a refund, auction or escrow policy. + policy?: any; +} + +export interface BatchDepositRequestCoin { + // EdDSA public key of the coin being deposited. + coin_pub: EddsaPublicKeyString; + + // Hash of denomination RSA key with which the coin is signed. + denom_pub_hash: HashCodeString; + + // Exchange's unblinded RSA signature of the coin. + ub_sig: UnblindedSignature; + + // Amount to be deposited, can be a fraction of the + // coin's total value. + contribution: Amounts; + + // Signature over `TALER_DepositRequestPS`, made by the customer with the + // `coin's private key <coin-priv>`. + coin_sig: EddsaSignatureString; +} + export interface WalletKycUuid { // UUID that the wallet should use when initiating // the KYC check. |