Sunday, February 6

breadwallet – A Closer Look At A Different iOS Bitcoin Wallet

breadwallet is a strange beast. At first I misunderstood it, but over time it has turned into my main go-to wallet.

I have professionally worked in usability for years, and I’m now a photographer. I have worked with users on all levels, from the complete newbie to the seasoned professional. From noob to geek. And over the years I have learned to draw a clear line between my personal taste and the things that might benefit an end user.
Two main functions
First of all, I don’t think any other wallet has a UI as simple as breadwallet. You have two tabs (or rather two views that you slide left and right), one to send money, one to receive. That’s pretty much it. On the top, breadwallet always shows you the wallet’s balance in bits (more on that later) and your local currency.
User interaction based on use cases
On the send screen you have two buttons, “scan QR code” and “pay address from clipboard”. Those two are exactly the kind of use cases that users will encounter and it’s this use case based approach that I love. In other wallets, you will find a text field where you enter the recipient’s address. But nobody EVER manually enters those, It’s ALWAYS copy/paste, so making that as easy as a single tap is worth lots to me. This is almost on the level of “pull down to refresh”.
Swipe left and you are on the “receive money” screen where a prominent QR code awaits you. Below that is the corresponding receive address – and again the primary use case is extremely simple to do: copy the address into the clipboard. Where in other wallets you first have to mark the address, then tap copy, here is that is done in breadwallet: tap the address and you get a popup menu with three options: copy, email, sms. Again, simple and elegant.
Third screen
There is a third screen that you access by hitting the menu icon in the left top. Nice touch: the little animation where the parallel menu lines turn into an X to dismiss the page. It gives you a list of previous transactions and if you scroll all the way down, you’ll find links to an about screen, a way show your wallet backup phrase, an action to import a private key, a button to rescan the blockchain, the option to remove the standard fees and a button to start/restore another wallet.
Technically solid
Under the hood, breadwallet seems to be solid. To make things fast, it makes use of the Simplified Payment Verification protocol (SPV), it is implemented as a BIP0032 hierarchical deterministic (HD) wallet and thus generates a new address for every receive transaction while allowing you re-create the entire wallet from a 12 word pass phrase any time in the future. It keeps your private keys on the device and it’s completely open source, so you can review the sources and if you have an Apple developer account, you could even compile it yourself. But as an end user you don’t really have to worry about this technical side. All its complexity is nicely hidden under the hood and it’s simply there to make things more secure.
Wish list
After all these great things about breadwallet, I’ll still have to put on my usability hat, because I think there are a few things that, when changed, could easily boost breadwallet’s user base by several orders of magnitude and make it the go-to wallet for everyone. So without further ado, here’s my wish list:
  1. I wish there was a passcode (and I read that it’s on the list of things to come). I’m not planning to keep my life-savings on this wallet (or on any iOS based wallet for that matter), but I’d still like to have a second (albeit weaker) line of defense just in case someone takes my iPhone within the five-minute passcode delay that I have set it to. It is also simply possible to display the 12-word passphrase once you’re in the wallet, which would allow you to take all the funds, even at a later time, so that would be a natural place to ask for an additional passcode too.
  2. I’m not sure how breadwallet determines my home currency, but for me (I’m German) it displays Euros in addition to bits. In general that’s great, but I wish there was a way to select that second currency. Bitcoin is international and border-less and I often need to pay someone in the equivalent of their home currency, in my case that’s often US dollars. Being able to choose that currency is important to me.
  3. I’m also not sure what the source is for the currency conversion. We still have quite a spread between different exchanges, so I believe being able to use a specific source or at least knowing what source is being used would be helpful.
  4. As much as many of us hope to live in a bitcoin-only world, the reality is that we still live in a world of mostly government currencies, and prices are often denominated in fiat. I often have the need to enter a bitcoin amount that corresponds to a fiat value, so being able to enter a fiat value instead of bits would be a tremendous help. Otherwise this use case turns into a game of trial and error and makes me switch to another wallet that can do that. It could be implemented as simple as tapping on the according currency in the header.
  5. breadwallet makes it super easy to present someone with a QR code for a receiving address. Sometimes I want the other party to pay a specific amount and BIP0021 defines a protocol for that. I believe allowing for a simple way to craft such a request would strengthen the appeal of breadwallet.
  6. breadwallet uses bits as its main bitcoin denomination. I’m torn on this one. Many wallets have the option to choose the denomination to display. So at the time of writing this post, $US 1 is equivalent to 0.0016 btc. Or 1.6 millibitcoins (mbtc). Or 1600 micro bitcoins (or ubtc or “bits”). So one bit is one millionth of a bitcoin, $US 1 is 1600 bits. At first I wanted to be able to choose between different denominations, then I kept hearing more and more people use “bits” and since I’ve been using breadwallet more and more, I have begun to think in bits more and more myself. Maybe it’s a good idea to just leave it at that. Time will tell.
  7. The send and receive screens are quite logical, but the third view is a messy tangle between history, settings and actions. Even worse, the history is at the top, so as it keeps growing, you have to scroll down more and more to get to the actions. I really wish history, settings and actions would be un-tangled into their own respective views. Making an app feel intuitive is a lot about being able to transfer what you learned from other apps. The slide-in-from-the-left menus are an example of that. Once they became used more often, they started to feel logical and are now often expected. In the light of this commonly used and accepted UI paradigm, the most logical way for me would be to make the menu icon on the left top open a slide-out menu to the left. This menu would the contain send, receive, settings, expert actions and about.
  8. There is a difference between importing a private key or sweeping it. Sweeping a key means that you take everything from a specific address and transfer it to a new address, thus emptying the funds that were on the original key. Importing a private key leaves everything on the original address, so whoever has access to the private key can spend money from that same address. If you import from a paper wallet, sweeping is by far the safest option, but I understand the need to have both options. Unfortunately breadwallet hides sweeping keys in a very unexpected place: to sweep a key, you have to go to the send screen and “scan QR code”, i.e. the place where you would send funds to another address is suddenly used to import something into your wallet. This was very confusing to me at first and I believe it would make much more sense to be placed next to an import key action in the above mentioned action menu.
  9. fees are confusing to newbies and it’s great that breadwallet automatically and dynamically determines those for you, so transactions that originate from many addresses in your wallet and that thus end up pushing beyond a certain byte limit will be sent with the right amount of fees to guarantee a fast transaction by the miners. Being able to remove the standard fees is great too, because you don’t always care about speed. In the current version 0.3.1, enabling the setting doesn’t seem to do anything though.
  10. being able to pay address from clipboard is a great usability feature, I would love though to be even more aware of what address I’m sending bitcoins to. How about pre-populating the UI if a bitcoin address is present in the clipboard? This could either become part of the button (pay address form clipboard: 16GqFtFWM9LcGaN7FRVHWKxe7ZycPuyKf1) or the address could be printed over the button (bitcoin address in clipboard: 16GqFtFWM9LcGaN7FRVHWKxe7ZycPuyKf1)
  11. I love the orange bubbles that appear as you tap on various things on the screen. It’s a great way to teach newbies what these things are about. After a while they get in the way though, so I would love to be able to switch them off. Another good reason for a separate settings menu.
  12. I would love more clarity in the buttons that you get when tapping the receive address: at the moment those are copy, email and sms. I opt for a bit more explanation on what they do, especially for non-techies: copy to clipboard, send as email and send as message. Especially the sms one is misleading, as most users of the iOS ecosystem now deal with iMessage, which automatically takes care of determining which way the recipient can receive it.
I hope the developer can see this wish-list as what it is: changes that are focused on the end-user – and I’ve thought about them for a long time, in front of my background as a usability guy and a photographer – two fields that have a surprising amount of things in common.