commit 813b7afbbcd10b0fb530f93cb04299ec656419e1
parent 3109e3cc293c6a35a39bb409f217a49d1d039f57
Author: Mikolai Gütschow <mikolai.guetschow@tu-dresden.de>
Date: Thu, 2 Apr 2026 16:55:22 +0200
protocol: add intro to payment
Diffstat:
2 files changed, 159 insertions(+), 143 deletions(-)
diff --git a/draft-guetschow-taler-protocol.md b/draft-guetschow-taler-protocol.md
@@ -391,7 +391,7 @@ out = uint32(len(msg)) | uint32(purpose) | msg
// todo: explain persist, check, knows, sum, indexing (if left of equal sign, single entry; if not refers to whole list)
-## Withdrawal
+## Withdrawal {#withdrawal}
The wallet generates `n > 0` coins (`coinᵢ`) and requests `n` signatures (`blind_sigᵢ`) from the exchange,
attributing value to the coins according to `n` chosen denominations (`denomᵢ`).
@@ -488,7 +488,13 @@ check RSA-FDH-Verify(SHA-512(coinᵢ.pub), coinᵢ.sig, denomᵢ.pub)
persist (coinᵢ, blind_secretᵢ)
~~~
-## Payment
+## Payment {#payment}
+
+The wallet obtains `contract` information for an `order` from the merchant
+after claiming it with a `nonce`.
+Payment of the order is prepared by signing (partial) deposit authorizations (`depositᵢ`) of coins (`coinᵢ`),
+where the sum of all contributions (`contributionᵢ <= denomᵢ.value`) must match the `contract.price` plus potential deposit fees.
+The payment is complete as soon as the merchant successfully redeems the deposit authorizations at the exchange (cf. {{deposit}}).
~~~
wallet merchant
@@ -507,7 +513,7 @@ knows valid coinᵢ knows exchange, payto
+-----------------------+ |
| |
|------- /orders/{order.id}/claim ------>|
- | (nonce.pub, token?) |
+ | (nonce.pub, order.token?) |
| |
| +--------------------------+
| | (M2) contract generation |
@@ -593,7 +599,7 @@ persist (contract, ~sig, ~deposit)
~~~
(M3) deposit check (merchant)
-check sum(depositᵢ.fraction) == contract.price
+check sum(depositᵢ.contribution) == contract.price
check Deposit(deposit)ᵢ
msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract)
sig = EdDSA-Sign(merchant.priv, msg)
@@ -605,7 +611,7 @@ sig = EdDSA-Sign(merchant.priv, msg)
check EdDSA-Verify(merchant.pub, msg, sig)
~~~
-## Deposit
+## Deposit {#deposit}
~~~
merchant/wallet exchange
@@ -644,7 +650,7 @@ msg3 = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT,
( h_contract | contract.h_wire | uint512(0x0)
| exchange_timestamp | contract.wire_deadline
| contract.refund_deadline
- | sum(*deposit.fraction - *denom.fee_deposit)
+ | sum(*deposit.contribution - *denom.fee_deposit)
| SHA-512(*deposit.sig1) | merchant.pub ))
~~~
diff --git a/draft-guetschow-taler-protocol.xml b/draft-guetschow-taler-protocol.xml
@@ -24,7 +24,7 @@
<email>mikolai.guetschow@tu-dresden.de</email>
</address>
</author>
- <date year="2026" month="April" day="01"/>
+ <date year="2026" month="April" day="02"/>
<workgroup>independent</workgroup>
<keyword>taler</keyword>
<keyword>cryptography</keyword>
@@ -472,6 +472,11 @@ persist (coinᵢ, blind_secretᵢ)
</section>
<section anchor="payment">
<name>Payment</name>
+ <t>The wallet obtains <tt>contract</tt> information for an <tt>order</tt> from the merchant
+after claiming it with a <tt>nonce</tt>.
+Payment of the order is prepared by signing (partial) deposit authorizations (<tt>depositᵢ</tt>) of coins (<tt>coinᵢ</tt>),
+where the sum of all contributions (<tt>contributionᵢ <= denomᵢ.value</tt>) must match the <tt>contract.price</tt> plus potential deposit fees.
+The payment is complete as soon as the merchant successfully redeems the deposit authorizations at the exchange (cf. <xref target="deposit"/>).</t>
<artwork><![CDATA[
wallet merchant
knows merchant.pub knows merchant.priv
@@ -489,7 +494,7 @@ knows valid coinᵢ knows exchange, payto
+-----------------------+ |
| |
|------- /orders/{order.id}/claim ------>|
- | (nonce.pub, token?) |
+ | (nonce.pub, order.token?) |
| |
| +--------------------------+
| | (M2) contract generation |
@@ -567,7 +572,7 @@ persist (contract, ~sig, ~deposit)
<artwork><![CDATA[
(M3) deposit check (merchant)
-check sum(depositᵢ.fraction) == contract.price
+check sum(depositᵢ.contribution) == contract.price
check Deposit(deposit)ᵢ
msg = Sign-Msg(MERCHANT_PAYMENT_OK, h_contract)
sig = EdDSA-Sign(merchant.priv, msg)
@@ -615,7 +620,7 @@ msg3 = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT,
( h_contract | contract.h_wire | uint512(0x0)
| exchange_timestamp | contract.wire_deadline
| contract.refund_deadline
- | sum(*deposit.fraction - *denom.fee_deposit)
+ | sum(*deposit.contribution - *denom.fee_deposit)
| SHA-512(*deposit.sig1) | merchant.pub ))
]]></artwork>
</section>
@@ -707,7 +712,7 @@ msg3 = Sign-Msg(EXCHANGE_CONFIRM_DEPOSIT,
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
</reference>
</references>
- <?line 659?>
+ <?line 665?>
<section anchor="change-log">
<name>Change log</name>
@@ -720,138 +725,143 @@ Education and Research (BMBF) within the project Concrete Contracts.</t>
</section>
</back>
<!-- ##markdown-source:
-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
+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
+5/8PNW0ZaAJSAAA=
-->