taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit e0e7eca1b3042d6667013f1878831eb28d127007
parent 3aa9420469d0f3c55ac6b5863dc2e7b43d95e32d
Author: Iván Ávalos <avalos@disroot.org>
Date:   Tue, 11 Aug 2026 17:47:24 +0200

dd92: mark the withdrawal family implemented, with the reserve reference

Diffstat:
Mdesign-documents/092-incremental-backup-sync.rst | 41++++++++++++++++++++++++++++-------------
1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/design-documents/092-incremental-backup-sync.rst b/design-documents/092-incremental-backup-sync.rst @@ -898,10 +898,15 @@ Restoring the coin also recomputes the wallet's *coin availability* rows (the counts the balance reads) from the restored coins, so a restored wallet shows the same balance as the wallet that made the backup. The reserves (and with them the ability to recoup a restored coin) are backed -up by the ``add-reserve`` family; the withdrawal groups and the refresh -groups are still not backed up, so pending withdrawals are not restored -and a restored refreshed coin cannot be recouped-refreshed until the -withdrawal and refresh families land (recoup of a withdrawn coin works, +up by the ``add-reserve`` family, and the withdrawal family +(``withdrawal-start`` / ``withdrawal-abort`` / ``withdrawal-done`` / +``withdrawal-fail``, referencing the reserve by +``[exchangeBaseUrl, reservePub]``) restores the withdrawal transactions +themselves; a withdrawal that was still pending on the other device +cannot have its in-flight bank leg continued, and the refresh groups are +still not backed up, so a restored refreshed coin cannot be +recouped-refreshed until the refresh family lands (recoup of a withdrawn +coin works, see the recoup discussion under "Add a reserve"). .. ts:def:: AddCoinInc @@ -1054,21 +1059,28 @@ Start a withdrawal User initiates a withdrawal. +The increment references the reserve by ``[exchangeBaseUrl, reservePub]`` +(see the "Add a reserve" section): the restored wallet takes the reserve's +key pair from the reserve record. The in-flight bank interaction of a +pending withdrawal is not part of the backup -- only the constant +parameters and the terminal increments travel, so a restored wallet shows +the withdrawal's history (start, then done, failed or aborted), while a +withdrawal that was still pending on the other device cannot have its bank +leg continued here. + .. ts:def:: WithdrawalStartInc interface WithdrawalStartInc { type: "withdrawal-start"; withdrawalGroupId: string; + exchangeBaseUrl: string; + reservePub: EddsaPublicKey; secretSeed: string; timestampStart: TalerPreciseTimestamp; restrictAge?: number; - instructedAmount: AmountString; + instructedAmount?: AmountString; } -.. TODO: withdrawal-start references the reserve by [exchangeBaseUrl, - reservePub] (see the "add-reserve" increment type below); the - withdrawal families are blocked on it. - * **Primary key:** ``[withdrawalGroupId]`` * **Deletion groups:** ``[withdrawals]`` @@ -2359,10 +2371,13 @@ Definition of done that predate the seed) is designed as described above; once implemented, it restores the reserves' key material, which is what makes a restored coin recoupable (see the recoup discussion under "Add a reserve"). - The withdrawal families are still blocked on the ``withdrawal-start`` - increment (referencing the reserve by ``[exchangeBaseUrl, reservePub]``) - and the refresh groups are not backed up, so pending withdrawals are not - restored; the token family is + The withdrawal families are implemented + (``withdrawal-start`` / ``withdrawal-abort`` / ``withdrawal-done`` / + ``withdrawal-fail``, referencing the reserve by + ``[exchangeBaseUrl, reservePub]``); a pending withdrawal's in-flight + bank leg is not portable, so only its history (and its coins) restore. + The refresh groups are not backed up, so a restored refreshed coin + cannot be recouped-refreshed; the token family is blocked on a schema redesign: the increments in this document model seed-derived tokens, while the wallet database now stores per-token key material, so restoring from the documented increments could not produce