Making payments
Blockchain data structures are fundamentally about transfers (inputs and outputs between addresses), and initiating a transfer is probably the action users take most frequently in wallet or exchange software. If you talk to cryptocurrency users or listen to Podcasts, you will frequently hear about a feeling of anxiety around sending money. People are afraid to typing in the wrong address, or they get nervous when a transaction is not showing up in an explorer or on an exchange after a few minutes. In traditional bank transfers it's perfectly normal that you have to wait for a few days and that you don't really know what happens in that time period. But with cryptocurrencies, the expectations are much higher and good interface design can help reduce some of the anxiety.
User flow
Sending coins typically follows a linear sequence of events, as follows:
User A shares their address, the amount, and an optional payment ID with User B. User B enters/copies the address or scans a QR code. User B enters the amount to send. User B may increase the transaction fee for faster processing. A payment ID may be entered to uniquely identify the purpose of the transaction later. The UI requires User B to review the transaction details before sending it to the network. The transaction is sent to the network for processing. After a certain amount of blocks, the transaction is considered confirmed. Once confirmed, the transaction is final and settled.
Request
Address input
Amount input
Fee adjustment
Payment ID
Review & confirmation
Sending
Processing
Confirmed
Note that typically you don't have to select an address from which the amount is taken from. While you usually receive payments on multiple addresses, wallets tend to disregard them for sending. An outgoing transaction might even include amounts from several addresses (for technical reasons). Some wallets offer options to choose a single "from" address.
1. Payment request
The user receives a request for payment and navigates to the "Send" screen in their wallet. The recipient may share their address, or a payment ID (which has the address, amount and purpose encoded). The payment ID can also be received via a QR code.
2. Address input
The recipient address may be entered manually, which can be error prone. It is better to use copy/paste functionality or providing the option to scan a QR code. This is covered in addresses.
If the wallet supports services like OpenAlias or the Ethereum Name Service, users can also enter URLs or email addresses that are then resolved into addresses. In those cases, it should be clarified that this option is available, and users should ideally verify that the correct address was retrieved.
3. Amount input
Entering the amount to pay is fairly straightforward. Important is to show how many coins the user currently has in their account, as well as the amount converted to the users local currency (Euro, Dollar, etc). Another popular option is to "Send all".
4. Fee adjustment
Nobody likes fees, but they are necessary for several purposes. For once, free transactions would likely lead to spam and network attacks. Second, they help compensate miners for their work. Since many cryptocurrencies have fixed supply, mining rewards will drop to zero at some point and fees will become the sole incentive for miners to continue their work.
Users can typically increase fees for higher priority to get a transaction processed by the network. In some cases, like Monero, fees can also be increase for higher privacy (increased ring size in this case).
Fees are typically fairly low, but can become substantial during peak network loads like December 2018. Also note that fees are independent of the amount that is sent. So sending $100,000 costs the same fee as $1.
Regarding the user experience, fee adjustment is often shown as a slider that ranges from low priority to high priority. As the user adjusts it, the indicators for transaction fee and processing time update dynamically.
5. Payment ID input
Some cryptocurrencies allow for an additional payment ID. In Monero, for example, the receiving and sending addresses are encrypted, so submitting a payment ID allows for faster matching of the transaction to a user account or invoice. Also note that so-called integrated addresses are a way to bake an address and a payment ID into a single address, which is much easier to work with.
7. Review & confirmation
Before sending the transaction for processing to the network, it is good practice to ask the user to review the information again to spot any mistakes. This is also a good moment to add an optional note, although this note will not be sent along with the transaction or stored in the blockchain.
8. Sent confirmation
Once sent, the transaction cannot be modified or reversed. Now senders may want to send a confirmation about the transaction to the recipient (a proof of transaction, or receipt), and both the sender and recipient may want to observe the transaction as it gets processed by the network.
9. Processing
Transactions get first added to a queue and then added to a block. Then, the confirmation process begins. A confirmed transaction simply means that a certain number of blocks has been added to the blockchain after the block the transaction is stored in. Since blockchains have target block times, it's then possible to give an estimated confirmation time. The transaction will already show up in the receiving and sending wallet before being confirmed.
10. Confirmed
A transaction is considered confirmed if a certain number of blocks has been added to the chain after the block that contains the transaction. In Monero, that number is 10. A block is created every 2 minutes (in Monero), so a transaction takes about 20 minutes to be confirmed.
Centralized services can monitor transactions and send out emails or notifications as the confirmation process happens. I am not sure whether this is a technical limitation, but notifications are not usually offered by most software wallets.
Keep users informed
Sometimes it can be a good idea to perform an action in the background (like processing a transaction), while allowing users to move on to other things. This is particularly important in crypto where actual money is being sent.
Help users get it right
Users will make mistakes. When they do, don't hold it against them with big red errors and technical statements. It's better to help them understand how to get it right.
Examples
Moneroju send flow
![Moneroju wallet send screen](/images/sending/moneroju-send.png)
![Moneroju wallet send screen](/images/sending/moneroju-send-confirm.png)
![Moneroju wallet send screen](/images/sending/moneroju-send-receipt.png)
![Moneroju wallet send screen](/images/sending/moneroju-home.png)
Various others
![Cake Wallet, V 3.0.1, Sep 24, 2018 Cake Wallet send screen](/images/sending/cake-wallet-send.png)
![Skycoin wallet app, V 1.1.1, August 20, 2018 Send screen in the Skycoin wallet app.](/images/sending/skycoin-send.png)
![Send screen in the Coinbase app.](/images/sending/coinbase-send.png)
![IOTA Trinity Wallet, V 0.5.0, September 14, 2018 Send screen in the IOTA app.](/images/sending/iota-trinity-send.png)
![VeChainThor Wallet, V 1.2.0, September 7, 2018 Send screen in the VeChainThor app.](/images/sending/vechain-send.png)
![Nano wallet for iOS, V 1.0.1, July 25, 2018 Send screen in the Nano wallet app.](/images/sending/nano-send.jpg)
![Citowise - Ethereum Wallet, V 1.7.3, Sep 19, 2018 Send screen in the Citowise app.](/images/sending/citowise-send.jpg)