When digital cash is withdrawn, it is tied to and in custody of an exchange.
There can be many exchanges offered by different entities,
each having their custom legal agreement documents and fee structures.
The user is free to choose an exchange.
Therefore, the process of withdrawing needs to account for this choice.
Here the user can pick an exchange from a list of known exchanges
or add a new one for immediate use.
For details see DD2: Wallet Exchange Management.
Display an exchange’s Terms of Service:
Shows the terms and gives an option to accept them.
For details see DD3: ToS rendering.
Withdrawal details and confirmation:
This should show the amount to be withdrawn along with its currency,
the currently selected exchange and the fee charged by it for the withdrawal.
The user flow between these screens is described in the following graph:
This enables the user to change the current exchange at any time in the process.
It ensures that the latest version of the exchange’s terms of service have been accepted by the user
before allowing them to confirm the withdrawal.
Some special regional or test currencies might have only a single known exchange.
For those, the wallet should not offer the option to change an exchange.
After confirming the withdrawal,
the user is brought to the list of transactions of the current currency.
It will include a pending TransactionWithdrawal which might require additional user confirmation
such as a two-factor-authentication step with the bank.
The bank transfer happens immediately
A second factor is required which is “detached”,
i.e. you have to press “confirm” on a physical Taler ATM,
or a Taler cashier has to do a final “confirm” on their device.
The bank provides a bankConfirmationUrl that the user needs to visit.
If the withdrawal proceeds very quickly,
the TransactionWithdrawal might not show as pending
and its effective amount is added to the displayed balance right away.
We considered and rejected the following alternatives:
Do not allow more than one exchange to make Taler simpler to use and understand:
Taler wants to allow custom exchanges for custom currencies
and foster competition between exchanges for the same currency
to provide the best possible service to users at the lowest fee.
Do not require acceptance to terms of service:
Having these terms and prompting the user to accept them
is a legal and business requirement in many jurisdictions,
so Taler needs to support them.
However, Taler encourages exchanges to keep their terms as short and simple as possible.
Should wallets pre-set a default exchange for the most common currencies,
so that users will not be burdened to understand exchanges and their fee structures
when making their first withdrawal?
This could increase user retention, but discourage
What should happen when an exchange changes its terms of service
and the user wants to use the funds stored there,
but does not initiate a new withdrawal with that exchange?