gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-docs] branch master updated: document peer push debit lifecycle


From: gnunet
Subject: [taler-docs] branch master updated: document peer push debit lifecycle
Date: Thu, 16 Feb 2023 20:01:25 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository docs.

The following commit(s) were added to refs/heads/master by this push:
     new d1aecb3  document peer push debit lifecycle
d1aecb3 is described below

commit d1aecb3344e5ade5ca10f483a51eb58b0203c7f2
Author: Florian Dold <florian@dold.me>
AuthorDate: Thu Feb 16 20:01:16 2023 +0100

    document peer push debit lifecycle
---
 .../037-wallet-transactions-lifecycle.rst          | 99 +++++++++++++++++-----
 1 file changed, 77 insertions(+), 22 deletions(-)

diff --git a/design-documents/037-wallet-transactions-lifecycle.rst 
b/design-documents/037-wallet-transactions-lifecycle.rst
index 6c6e1bb..a79f7d7 100644
--- a/design-documents/037-wallet-transactions-lifecycle.rst
+++ b/design-documents/037-wallet-transactions-lifecycle.rst
@@ -18,10 +18,11 @@ Proposed Solution
 Common States
 -------------
 
-**pending**: A pending transaction waits for some external event/service.
+The following states apply to multiple different transactions.  They can
+have transaction-specific sub-states, denoted by ``state(substate)``.
+
+``pending``: A pending transaction waits for some external event/service.
 The transaction stays pending until its change on the wallet's material 
balance is finished.
-If the transaction has affected the wallet's balance but is still waiting for 
some external
-money transfer that the wallet does not directly affect, the state will 
instead be ``monitoring``. 
 
 There are some other distinctions for pending transactions:
 
@@ -33,53 +34,60 @@ There are some other distinctions for pending transactions:
   object with details about what happened during the last attempt to proceed
   with the transaction.
 
-**done**: A transaction that is done does not require any more processing.  It 
also
+``done``: A transaction that is done does not require any more processing.  It 
also
 never has a ``lastError`` but is considered successful.
 
-**aborting**: Similar to a pending transaction, but instead of taking active 
steps to
+``aborting``: Similar to a pending transaction, but instead of taking active 
steps to
 complete the transaction, the wallet is taking active steps to abort it. The 
``lastError``
 indicates errors the wallet experienced while taking active steps to abort the 
transaction.
 
 .. attention::
   Should there be an abortReason for aborted transactions?
 
-**aborted**: Similar to a ``done`` transaction, but the transaction was 
successfully aborted
+``aborted``: Similar to a ``done`` transaction, but the transaction was 
successfully aborted
 instead of successfully finished.
 
-**failed**: Similar to ``done``, but the transaction could not even be aborted 
successfully.
+``failed``: Similar to ``done``, but the transaction could not even be aborted 
successfully.
 
-**kyc-required**: The transaction can't proceed because the user needs to 
actively
+``kyc-required``: The transaction can't proceed because the user needs to 
actively
 finish a KYC process.
 
-**monitoring**: A transaction is in principle finished (has affected the 
wallet balance), but still waiting for some external
-event to occur to be fully finished.  For example, the money transfer by the 
exchange to a bank account after a deposit,
-or another wallet claiming a p2p push payment that our wallet initiated.  Some 
transactions (e.g. p2p push payments)
-can still be aborted in the ``monitoring`` state, and as a result the 
transaction is basically reverted.
+``updating``: A ``done`` transaction can transition in the ``updating`` state
+when there is a potential update for the transaction, for example a refund.
+This change will be reflected in new transactions, not in modifications to the
+old transaction.
+
+``deleted``: A ``deleted`` state is always a final state.  We only use this
+state for illustrative purposes. In the implementation, the data associated
+with the transaction would be deleted.
+
 
+Common Transitions
+------------------
 
-Common Actions
---------------
+Transitions are actions or other events.
 
-**Delete**: Deleting a transaction (also called "forgetting" in the UI)
+``[action:delete]``: Deleting a transaction (also called "forgetting" in the 
UI)
 completely deletes the transaction in the database.  Depending on the type of
 transaction, some of the other data *resulting* from the transaction might
 still survive deletion. For example, deleting a withdrawal transaction does not
 delete withdrawn coins.
 
-**Retry**: Retrying a transaction *(1.)* stops ongoing longpolling requests for
-the transaction *(2.)* resets the retry timeout *(3.)* re-runs the handler to
-process the transaction.
+``[action:retry]``: Retrying a transaction *(1.)* stops ongoing longpolling
+requests for the transaction *(2.)* resets the retry timeout *(3.)* re-runs the
+handler to process the transaction. Retries are always possible the following
+states: ``pending(*)``, ``kyc-required(*)``, ``updating(*)``, ``aborting(*)``.
 
 .. attention::
 
    Should we show the retry timeout in the UI somewhere?  Should we show it in 
dev mode?
 
-**Abort**: Aborting a transaction either directly stops processing for the 
transaction and puts it in an ``aborted`` state
+``[action:abort]``: Aborting a transaction either directly stops processing 
for the transaction and puts it in an ``aborted`` state
 or starts the necessary steps to actively abort the transaction (e.g. to avoid 
losing money) and puts it in an ``aborting`` state.
 
-**Resume**: Some aborted transactions may be resumed.  Whether resuming is 
possible depends on the transaction type.
+``[action:resume]``: Some aborted transactions may be resumed.  Whether 
resuming is possible depends on the transaction type.
 
-**Give up**: Giving up puts an ``aborting`` transaction into the ``failed`` 
state.
+``[action:give-up]``: Giving up puts an ``aborting`` transaction into the 
``failed`` state.
 
 Transaction Type: Withdrawal
 ----------------------------
@@ -114,7 +122,54 @@ TBD.
 Transaction Type: Peer Push Debit
 ---------------------------------
 
-TBD.
+Peer Push Debit transactions are created when the user wants to transfer money
+to another wallet.
+
+States and transitions:
+
+* ``pending(initial)``
+
+  In this state, the user is not yet able to send the payment to somebody else.
+
+  * ``[action:abort] => aborted``: The payment is aborted early, before the 
wallet even had the chance to create a purse.
+    No fees are incurred.
+  * ``[action:delete] => deleted``: No funds are lost.
+  * ``[processsing-success] => pending(purse-created)``: The wallet was able 
to successfully create a purse.
+
+* ``pending(purse-created)``
+
+  In this state, the user can send / show the `taler://` URI or QR code to 
somebody else.\
+
+  * ``[action:abort] => aborting(delete-purse)``: The user aborts the P2P 
payment. The wallet tries to reclaim money in the purse.
+  * ``[purse-timeout] => aborting(refresh)``: The other party was too slow.
+  * ``[poll-success] => done``: The other party has accepted the payment.
+
+* ``aborting(delete-purse)``
+
+  * ``[processed-success] => aborting(refresh)``: The purse was deleted 
successfully, and refunded coins must be refreshed.
+  * ``[processed-failed] => ...``: Permanent failure when trying to delete the 
reserve.
+
+    * If purse is already merged: ``=> done``
+    * Otherwise: ``=> failed`` XXX: Do we still try to refresh?
+
+  * ``[action:give-up] => failed``
+
+* ``aborting(refresh)``
+
+  * ``[processed] => aborted)``: Aborting was successful, money was reclaimed
+  * ``[action:give-up] => failed``: XXX will this abort the refresh session?
+
+* ``done``
+
+  * ``[action:delete]`` No money should be lost in this case.
+
+* ``aborted``
+
+  * ``[action:delete]`` No additional money is lost other than fees from 
aborting/refreshing.
+
+* ``failed``
+
+  * ``[action:delete]``: Money will be lost.
 
 
 Transaction Type: Peer Push Credit

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]