To use a DApp, you need a cryptocurrency wallet. But the whole field of wallets is new, and things are changing overnight. We recently built a DApp on Ethereum, spent considerable time evaluating the different wallets available, and have some advice that can save you time on your own DApp projects.
We tested these four prominent wallets and provide reviews and recommendations below:
- MetaMask, for desktop (on Chrome or Brave, Windows or Mac)
- Parity Wallet, for desktop (on Chrome, Windows)
- Coinbase Wallet, for mobile (on Android or iPhone)
- Status, for mobile (on Android or iPhone)
As of September 2018, we advise using MetaMask on Chrome on desktop, and Coinbase Wallet on mobile. Blockchain evolves overnight, so use this advice while it’s fresh!
Our advice here is intended for a dev team similar to one of ours here at Giant Machines — a small dev team building DApps on Ethereum, looking for the best available wallet to use internally and recommend to their users. Some definitions of “DApp” go so far as to include blockchain infrastructure and ICOs, but here we mean simply any web app with a smart contract for a backend.
Read on and let’s save your team an afternoon. Alternatively, if you made one of these wallets, gently put down anything fragile, because I’m about to dissect the fruits of your labor.
Why Wallets Matter
Cryptocurrency wallets are necessary for users to “log into” DApps, accessing their accounts.
The wallets store pairs of public & private keys that allow the user to certify their identity. The public key is like a username and allows you to read data personalized for you; the private key is like a password and allows you to write data to the blockchain and make changes under your name. Good wallets also support mnemonics — passphrases which can generate many pairs of public and private keys, so you can easily switch between many key pairs, and therefore many logins.
When selecting a wallet, DApp dev teams are looking for two things above all others:
- Which wallet is the least trouble for our dev team to test our work-in-progress DApp?
- Which wallet will we recommend to our users, who are trying to adapt to DApps?
We judged the following wallets against these needs.
Desktop wallet solutions come in several forms, from lightweight browser extensions to large system installations.
One of the issues with desktop extensions is that they rely on a browser popup to sign outgoing transactions. This creates a disjointed UX that currently has no clear solution.
MetaMask on Chrome
MetaMask is the most popular wallet on Ethereum, and for good reason. It’s well-maintained and has very open and communicative devs, who had long-running conversations with our dev team and quickly resolved a bug we found. All the functionality you need, and easy to use too.
Our biggest concern here was security. MetaMask was temporarily removed from the Chrome web store by mistake, and there is a constant presence of mysterious “MetaMask” apps that may or may not be phishing scams. Fortunately, the popularity of MetaMask itself helped drive attention to the issue and got it fixed within several hours.
We were initially worried that our core DApp functionality was tailored too specifically to MetaMask. For such a popular product, there could have been a lazy temptation to become the IE6 of Ethereum and recommend a nonstandard programming behavior that only works with itself. This is thankfully not the case; if your code works with MetaMask, it should work with any wallet, without requiring you to make any code changes.
MetaMask on Brave
MetaMask comes integrated with the Brave browser as a default extension; you just need to switch it on in your settings. Users do not need to go to Brave’s extension web store. Being pre-installed by default eliminates Chrome’s potential phishing problem, and makes onboarding users one step faster.
The main problem with MetaMask on Brave is that Brave has a much smaller share of the browser market, so it’s inevitably going to be a lower priority dev project for MetaMask. This means it lags slightly behind in terms of bug fixes and UI updates. MetaMask on Brave was occasionally buggy and occasionally needed to be reloaded, and the MetaMask Brave UI was different from the MetaMask Chrome UI. Fortunately, it follows the Chrome extension so closely that the issues are not significant. The sort of user who will be disturbed by these minor issues is the sort who won’t want to use an insurgent new browser like Brave in the first place.
In general, MetaMask on Brave works great when you need it to. It’s a good backup if the Chrome extension goes out again, and may help introduce new users to Brave.
Parity Wallet on Chrome & Windows
Parity Wallet is famous. Parity contains much of the same software that runs the Ethereum blockchain itself, and the dev teams overlap significantly. There were a couple notorious incidents involving the Parity wallet, but these were resolved and have left the software stronger.
Although Parity Wallet is well-known, Parity is much more than just the wallet. Parity is an Ethereum node with a wallet feature added on, among other tools. By comparison, MetaMask calls on nodes via the Infura API; it doesn’t have a node of its own. Having your own node as part of your DApp is a major architectural commitment. If you’ve already paid the cost, using Parity Wallet will make the most of your investment.
If you aren’t in need of your own Ethereum node, Parity is overkill. Setting up a node is much, much more work than setting up a wallet. Users must install a desktop app, and the browser extension that connects to it. Before the browser extension can function, your node must also load all transactions that ever happened, so installation can take hours. It will ultimately sign your transactions just like MetaMask does, but it is not a convenient option if all you want to do is test a DApp, and it is totally unrealistic to expect end users to adopt it.
On mobile, instead of putting a signer in the browser, they put the browser in the signer. You open the wallet app, go to the browser within it, and then whatever transactions you make are owned by the wallet account you have currently selected in your settings.
This was always going to have some headaches, because in-app browsers rarely play well. But the mobile UX was surprisingly good — generally smoother than the desktop browser extensions, because by controlling the browser they had no problems with popups or overlays. This may encourage DApps to focus on mobile for consumer use.
Coinbase Wallet / Toshi on Android & iPhone
Surprisingly, it is missing the transaction history feature, which it announced was coming shortly before it was acquired by Coinbase. Viewing the history of transactions is occasionally useful in debugging, though we usually debug this sort of thing on desktop.
Unfortunately, in-app browsers often end up with issues that stand-alone browsers do not. On Coinbase Wallet, the Cryptokitties website frequently locked up the in-app browser for half a minute at a time. Our own DApp didn’t have this problem, so we’re not certain what is going on with Cryptokitties — but then again we’re also not about to tell a relative success like Cryptokitties that they’re wrong about anything, so we’ll just have to stay on our guard.
Until just recently there was no bookmarking, which meant that until you got your app in the DApp registry you had to type in the URL every time you opened the app; very frustrating. Fortunately, if you’re still having this problem, update your app — they just added it. Bookmarking your development URL is now easy. You’re going to be loading your DApp ad nauseum during development, so that’s pretty important.
Status on Android & iPhone
Status is the new kid on the block compared to Coinbase Wallet. It’s worth watching, but doesn’t have all the features you will need for blockchain development just yet. It is currently available on Android, but for iPhone is in early access and only available via TestFlight.
While it doesn’t have bookmarking like Coinbase Wallet, it does save previously opened DApp URLs, so you can quickly go back to your DApp (which won’t be in the registry list yet) over and over again without having to type it in every time. We didn’t find the lack of bookmarking to be a serious problem.
The biggest obstacle is that you will only be able to use the first account generated by a mnemonic passphrase, not all the others. This is probably fine for casual users, but for developers who need to switch accounts frequently to see how their app reacts, it’s not good enough.
On the other hand, Status has a very visible and accessible transaction history, which Coinbase Wallet does not. This was not as important for debugging purposes for us as having multiple accounts, because our main use case for mobile testing was to verify our responsive styling by rapidly switching accounts. We usually verified that transaction submission was working in MetaMask while coding on desktop. But it is a very telling feature to have over its competition, because the average consumer user will need a transaction history much more than the ability to rapidly switch accounts. This shows a strong user focus, which is a great competitive advantage over the long run.
Additionally, whatever problem Coinbase Wallet has with Cryptokitties, Status doesn’t have it. The Cryptokitties site loaded fine in its in-app browser. They’re doing something right that Coinbase Wallet isn’t. This definitely makes them worth keeping an eye on.
You may have heard that Brave has an integrated wallet, without MetaMask. This is true! Brave Payments holds Basic Attention Tokens (BAT) to donate to sites in lieu of watching ads, which are blocked by Brave. Any ETH you send to it gets turned into BAT. It can’t be used to connect to an Ethereum DApp just yet. For now, you will need to activate MetaMask.
Mist is much like Parity in that it spins up its own node. Parity loaded all the transactions and synced its node faster — only 3 or 4 hours vs 18+ hours for Mist. It is unlikely that you’ll want that for your dev team or your users, unless you’re using its extra functionality, so we put it down here. But it’s still under development, and this field changes fast, so it deserves a mention.
On desktop, use MetaMask on Chrome. If Chrome Web Store shuts down MetaMask again, use MetaMask on Brave, but do not expect all your users to want to use Brave. Parity Wallet is overkill for smaller DApp projects, and even if you do use it, you will still want your end users on MetaMask.
On mobile, use Coinbase Wallet, which is slightly superior to Status when testing blockchain DApps. But don’t forget Status, because they’re ahead by having a transaction history and a superior in-app browser. Status has only to start generating multiple accounts from one mnemonic to surpass Coinbase Wallet for DApp testing purposes. I currently retain both apps on my phone and eagerly await new releases.
The wallet dev teams are incredibly competitive, and constantly upgrading their apps. We expect our advice here to quickly go obsolete as they add features and improve performance, but we hope we’ve helped out some of the awesome dev teams out there, working hard to get things done with DApps. Fight the good fight everyone!