Tetris Wallet πͺ π© π¨
When I started writing about coin control for the Bitcoin Design Guide a couple of years ago, I realised that this is often a foreign concept to the majority of bitcoin users.
Coin control is the process of choosing which UTXOs (or βcoinsβ) to use as inputs when making an on-chain bitcoin payment. For payments on the lightning network, coin selection is only relevant for the transaction that opens the lightning channel.
Most wallets opt for some form of automatic coin selection, resulting in users becoming unaware of the privacy implications of each on-chain transaction. So, I embarked on a design journey that could help users understand some of the following points...
What are UTXOs?
When trying to understand what a UTXO (Unspent Transaction Output) is, one thing that stood out to me most was what role they play in totalling a wallets balance. This reminded me of a building block structure, where the whole (wallet balance) is calculated by adding up the sum of its parts (UTXOs).
Why are UTXOs important?
UTXOs are important when understanding how to optimise our bitcoin payments for either cost, speed, or privacy.
Cost: Miners select transactions based on their fee, measured by the fee rate of satoshis per byte. Therefore, it is cost-effective for users to minimise transaction size by minimising the number of inputs.
Speed: Higher fees will increase the likelihood of your transaction being prioritised by miners and included in the next block, thereby increasing the speed of your transaction being confirmed.
Privacy: Because each UTXO can be traced backward on a public ledger, we can unearth the digital footprints of bitcoin payments. Privacy is often lost due to the exposure of unknown coins, addresses, balances, and economic activity to unrecognised trading partners. Privacy can be optimised by selecting transaction inputs from an anonymity set (CoinJoins or mixers) or a recognised label or cluster or reducing the size of change outputs.
How can I improve privacy with the use of labelling and contact clusters?
Labelling UTXOs (sometimes referred to as "Contacts"), is a popular method of identifying where a UTXO has come from, and where it might go. For example, I might label my monthly salary payments as Work, these payments can be renamed using the same label, creating a UTXO cluster. When I then want to send a friend $5 in bitcoin in order to show them how bitcoin transaction work, I might avoid using a UTXO from my Work cluster so that my friend doesn't see how much I get paid each month.
Visualising UTXOs as tetris blocks
Brining UTXOs to a walletβs forefront encourages users to interact with and visualise coin selection and labelling, resulting in increased privacy awareness. I thought it would be fun to visualise a wallet's UTXOs by having them as tetris blocks, which could fall into place as the wallet scans addresses and syncs its balance. I imagine the wallet owner being able to click on each tetris block/UTXO, revealing certain data such as an anonymity set, label, no. of confirmations, etc. This information could inform the wallet owner if they need to take extra steps to increase their financial privacy for future transactions. It's also just a fun way for wallet owners to find out how their balance is accrued.
Want to work on this idea?
As I'm the organiser of the #LegendsOfLightning event, I think it wouldn't be the best idea for me to actively work on a project entry. However, I really want to see this idea get built - so if anyone is up to the challenge of building a wallet with this type of design, let's see it!