summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--design-documents/037-wallet-transactions-lifecycle.rst24
-rw-r--r--transaction-withdrawal-states.dot99
2 files changed, 60 insertions, 63 deletions
diff --git a/design-documents/037-wallet-transactions-lifecycle.rst b/design-documents/037-wallet-transactions-lifecycle.rst
index fe0f7e5f..e9380862 100644
--- a/design-documents/037-wallet-transactions-lifecycle.rst
+++ b/design-documents/037-wallet-transactions-lifecycle.rst
@@ -55,8 +55,8 @@ include more information information relevant to the transaction in `abortReason
``suspended``: Similar to a ``aborted`` transaction, but the transaction was could be
resumed and may then still succeed.
-``failed``: Similar to ``done``, but the transaction could be completed or
-possible not even be aborted properly. The user may have lost money. In some
+``failed``: Similar to ``done``, but the transaction could not be completed or
+possibly not even be aborted properly. The user may have lost money. In some
cases, a report to the auditor would make sense in this state.
``deleted``: A ``deleted`` state is always a final state. We only use this
@@ -170,12 +170,12 @@ Transaction Type: Withdrawal
user aborts at this stage, we do not know if the bank is in the confirmation stage,
so we must still *try* to abort the transaction at the bank.
- * ``[processed-success] => pending(bank-confirming)``
+ * ``[processed-success] => pending(bank-confirm-transfer)``
* ``[processed-error] => failed``: On permanent errors (like 404 for the withdrawal operation),
the wallet gives up.
- * ``[action:abort] => aborting(bank-to-wallet)``
+ * ``[action:abort] => aborting(bank)``
-* ``pending(bank-confirming)``
+* ``pending(bank-confirm-transfer)``
The wallet waits until the bank has confirmed the withdrawal operation;
usually the user has to complete a 2FA step to *approve* that the money is
@@ -192,18 +192,18 @@ Transaction Type: Withdrawal
* ``[bank-aborted] => aborted``: Bank denied the operation.
* ``[exchange-poll-success] => pending(withdrawing-coins)``: Optional
short-cut transition. Exchange was faster than the bank.
- * ``[action:abort] => aborting(wallet-to-bank)``
+ * ``[action:abort] => aborting(bank)``
-* ``aborting(wallet-to-bank)``
+* ``aborting(bank)``
The user aborted the withdraw operation in the wallet. The wallet must now
try to signal the bank that the wire transfer should no longer be performed.
Note that it is possible that the bank registration never succeeded (if the
- user aborted us during ``pending(bank-register-service)``) and in this case
+ user aborted us during ``pending(bank-register-reserve)``) and in this case
we get an ``unknown transaction`` failure here. It is also theoretically
possible that the user approved the transaction in the bank while
simultaneously aborting in the wallet. In this case, we transition to
- ``suspended(after-wired)`` (treating the ``abort`` action as a ``suspend``
+ ``suspended(exchange-wait-reserve)`` (treating the ``abort`` action as a ``suspend``
action).
* ``[processed-success] => aborted``
@@ -232,7 +232,7 @@ Transaction Type: Withdrawal
at the exchange.
* ``[exchange-poll-success] => pending(withdrawing-coins)``
- * ``[action:suspend] => suspended(after-wired)``
+ * ``[action:suspend] => suspended(exchange-wait-reserve)``
* ``pending(withdrawing-coins)``
@@ -240,9 +240,13 @@ Transaction Type: Withdrawal
the AML and KYC thresholds, we may at any time transition into a
holding pattern on the AML or KYC checks of the exchange.
+ It is possible that the selected denominations expired.
+ In that case, the wallet will re-select denominations.
+
* ``[processed-success] => done``
* ``[processed-kyc-required] => pending(kyc)``
* ``[processed-aml-required] => pending(aml)``
+ * ``[reserve-expired] => fail``
* ``[action:suspend] => suspended(withdrawing-coins)``
* ``pending(kyc)``
diff --git a/transaction-withdrawal-states.dot b/transaction-withdrawal-states.dot
index 20fb92ef..603b4770 100644
--- a/transaction-withdrawal-states.dot
+++ b/transaction-withdrawal-states.dot
@@ -1,74 +1,67 @@
-digraph G {
- initial[label="", shape="circle"];
- suspended_wc[label="suspended(withdrawing-coins)", shape="box"];
+digraph G {
+ ranksep=1;
+ initial_manual[label="", shape="circle"];
+ initial_bank[label="", shape="circle"];
pending_brr[label="pending(bank-register-reserve)"];
pending_bc[label="pending(bank-confirming)"];
pending_ewr[label="pending(exchange-wait-reserve)"];
pending_wc[label="pending(withdrawing-coins)"];
pending_kyc[label="pending(kyc)"];
pending_aml[label="pending(aml)"];
- done[label="done", shape="box"];
+ done[label="done", shape="doubleoctagon"];
+ aborting_bank[label="aborting(bank)"];
+ aborted[label="aborted", shape="doubleoctagon"];
+ failed[label="failed", shape="doubleoctagon"];
+ //deleted[label="deleted", shape="box"];
suspended_ewr[label="suspended(exchange-wait-reserve)", shape="box"];
- suspended_aml[label="suspended(aml)", shape="box"];
- suspended_kyc[label="suspended(kyc)", shape="box"];
- aborting_w2b[label="aborting(wallet-to-bank)"];
- aborted[label="aborted", shape="box"];
- failed[label="failed", shape="box"];
- deleted[label="deleted", shape="box"];
-
- subgraph {
- rank = same; pending_brr; pending_bc; pending_ewr; pending_wc; done;
- }
-
- subgraph {
- rank = same; suspended_wc; suspended_ewr; suspended_aml; suspended_kyc;
- }
-
- subgraph {
- rank = same; aborting_w2b; pending_aml; pending_kyc;
- }
-
- initial->pending_brr [color="blue", label="bank integrated withdraw"];
- initial->pending_ewr [color="blue", xlabel="manual withdraw"];
+ // Boring suspended states
+ // suspended_aml[label="suspended(aml)", shape="box"];
+ // suspended_kyc[label="suspended(kyc)", shape="box"];
+ // suspended_wc[label="suspended(withdrawing-coins)", shape="box"];
+
+ initial_bank->pending_brr [color="blue", label="bank integrated withdrawal"];
+ initial_manual->pending_ewr [color="blue", label="manual withdrawal"];
pending_brr->pending_bc;
- pending_brr->aborting_w2b [color="blue", label="abort"];
- pending_brr->aborted [color="red", label="error"];
+ pending_brr->aborting_bank [color="blue", fontcolor="blue", label="abort"];
+ pending_brr->failed [color="red", label="error"];
pending_bc->pending_ewr [label="bank-poll:\napproved"];
- pending_bc->pending_wc [xlabel="exchange-poll:\nreserve ready",style="dotted"];
- pending_bc->aborting_w2b [color="blue", label="cancel"];
- pending_bc->failed [label="bank-poll:\ndenied"];
+ //pending_bc->pending_wc [xlabel="exchange-poll:\nreserve ready",style="dotted"];
+ pending_bc->aborting_bank [color="blue", label="abort", fontcolor=blue]
+ pending_bc->failed;
- pending_ewr->pending_wc [label="exchange-poll:\nreserve ready"];
+ pending_ewr->pending_wc [color=purple];
pending_wc->pending_kyc;
pending_wc->pending_aml;
- pending_kyc->pending_wc [color="purple",label="long-poll:kyc"];
- pending_aml->pending_wc [color="purple",label="long-poll:approve"];
- pending_kyc->suspended_kyc [color="blue", label="suspend"];
- pending_aml->suspended_aml [color="blue", label="suspend"];
- suspended_aml->pending_aml [color="blue", label="resume"];
- suspended_kyc->pending_kyc [color="blue", label="resume"];
-
- aborting_w2b->suspended_ewr [color="red", label="error(already-confirmed)"];
- aborting_w2b->failed [color="red", label="error(unknown-transaction)"];
-
- pending_ewr->suspended_ewr [color="blue", label="suspend"];
+ pending_kyc->pending_wc [color="purple"];
+ pending_aml->pending_wc [color="purple"];
+
+ pending_wc->failed [label="expired"];
- suspended_ewr->pending_ewr [color="blue", label="resume"];
+ aborting_bank->suspended_ewr [color="red", label="already-confirmed"];
+ aborting_bank->aborted;
+ aborting_bank->failed [color="red"];
- pending_wc->suspended_wc [color="blue", label="suspend"];
- suspended_wc->pending_wc [color="blue", label="resume"];
+ // Interesting suspended states
+ pending_ewr->suspended_ewr [dir=both, fontcolor=blue, color="blue", label="suspend/resume"];
+ // Boring suspended states
+ // pending_kyc->suspended_kyc [color="blue", label="suspend"];
+ // pending_aml->suspended_aml [color="blue", label="suspend"];
+ // suspended_aml->pending_aml [color="blue", label="resume"];
+ // suspended_kyc->pending_kyc [color="blue", label="resume"];
+ // pending_wc->suspended_wc [color="blue", label="suspend"];
+ // suspended_wc->pending_wc [color="blue", label="resume"];
- suspended_ewr->deleted [color="blue", label="delete"];
- aborting_w2b->deleted;
- failed->deleted;
- aborted->deleted;
- done->deleted [color="blue", label="delete"];
- suspended_aml->deleted [color="blue", label="delete"];
- suspended_kyc->deleted [color="blue", label="delete"];
- suspended_wc->deleted [color="blue", label="delete"];
+ // suspended_ewr->deleted [color="blue", label="delete"];
+ // aborting_bank->deleted;
+ // failed->deleted;
+ // aborted->deleted;
+ // done->deleted [color="blue", label="delete"];
+ // suspended_aml->deleted [color="blue", label="delete"];
+ // suspended_kyc->deleted [color="blue", label="delete"];
+ // suspended_wc->deleted [color="blue", label="delete"];
pending_wc->done;
}