There’s this quote from VisaKanv which goes - “a problem is by definition something that is poorly-defined. As soon as you know how to solve it, it becomes a task”. And that is where crypto on mobile is today - it’s an undefined problem.
What is the problem? I can tell you exactly, having attempted to build crypto mobile apps with my mate Shun. He built Light Wallet - using it, you can approve transactions within Safari on iOS.
Here are the problems:
Users must connect their wallet.
Connecting wallets is nigh impossible for Swift apps. There is no open-source library which can do this smoothly, not even WalletConnect. So native apps are eliminated.
React Native apps. It is possible to connect a wallet here. We can use WalletConnect to show a dialog. There are 40+ wallets to choose from. And Metamask Wallet doesn’t support WalletConnect.
When the user finally selects a wallet they have, they are redirected outside of the app. This experience can, and has, broken quite easily. Rainbow has broken for me, due to a bugged update, and this meant I couldn’t connect wallet on mobile.
Users might not even have a wallet.
We haven’t even reached the step where users actually use.
Now a user goes to swap a token, for example.
Users must confirm every single transaction. Even for apps they already trust (Uniswap), even for low-value txs.
Users might not have gas to pay for transactions.
Users might have to switch networks.
And what happens when a user returns to your app the next day?
User must reconnect wallet.
User might have to switch networks.
And finally, three high-level problems:
Every app competes with other apps for blockspace. Result: many chains UX.
WalletConnect isn’t even decentralized. They require an API key to use their product.
Apple doesn’t support crypto. They blocked Uniswap’s Wallet from being released, eventually it did.
What’s an ideal flow?
User opens app.
User hits “connect wallet”.
User uses app to swap. Hits “swap”.
For unknown contracts, the wallet requires confirmation.
For known contracts, where the transaction exceeds a user-defined threshold (say >$100), the wallet requires confirmation. This is how the PayPass/Paywave UX works.
For known contracts below a threshold, and where gas prices are not crazy, we confirm the transaction automatically.
Could we build that? I think we could. And let me share a piece of the puzzle:
What Jarrod has built is something very interesting using account abstraction, better known as smart wallets. Here’s what I’m thinking:
The app generates a wallet for the user. The wallet private key is securely stored in the iOS Keychain, meaning it isn’t available to other apps.
Because the app owns the wallet private key, there is a lot of affordance in the UX:
Users don’t have to find a wallet. They already have one.
Connecting a wallet is instant. There is no redirection to another app.
The app wallet connects to the right chain, by default. There is no switching networks.
The app does not require redirecting to another wallet app, for confirming transactions.
Connecting the wallet is one tap. The wallet is loaded from the Keychain.
What about gas? This is where it gets interesting.
(1) The economic design of “paying for transactions” will change.
The best example of this is Immutable. Instead of users paying for all transactions, they “take fees on where value flows” and use that to subsidize non-value txs like mints and transfers. Simply put - take fees on sales, use that to make mints/transfers free.
Thanks to account abstraction, you can now subsidise transactions for users. The best example of this working is STEPN, a Solana app which had a large userbase of non-crypto people.
(2) The economic design of “one chain fits all” will change, and so will gas wars.
Currently, every app competes for blockspace, which constrains usage because gas costs fluctuate.
The future is likely multichain by default, likely app chains. There are some services already which allow you to “spin up a rollup” in one click (e.g. Spark).
The consequence of multichain and new gas models (if it happens this way), is that wallet apps will have to catch-up to compete. This is an M-of-N problem for wallets. And approaches like WalletConnect will also need to be adapted. Whereas for an “app wallet”, this is much simpler.
Lastly, for the higher-level problems I mentioned earlier, these could be improved.
We don’t need WalletConnect when there is a single wallet, so there is less centralization risk. But there is still a need to move your assets to your “main wallet”, for example. Using ENS + a chain picker might just work. But I don’t know.
Apple might block gambling apps, but they didn’t block Signal. And Signal and app wallets are just cryptography with private keys. There is still the risk that they demand a 30% share from marketplace transactions (the Apple tax), which we have to solve.
I share these thoughts because I think crypto on mobile is going to be insane. My context is as someone who has designed blockchains (Quark), implemented meta transactions, and built a crypto social app with real daily users (Take). My friend Shun has designed mobile Ethereum wallets in Swift. Both of us understand that the problem here is identifying the problem, not convincing users. Users really want a crypto mobile experience. We just have to build the platform to make it possible.
What do I see in the future? People building things like STEPN. STEPN is ridiculous and stupid, a ponzi cult designed around incentivising people to walk using tokens. But it worked. And I remember being at some boat party for my mate, and meeting a totally-not-technical user who was showing me the app. It’s funny and insane to think this is on the tip of our tongues.