At Privy, we build simple tools to help you onboard and engage your users in web3. In this series, we break down some of the work it takes to create simple experiences with state of the art tooling in web3.
Multiplayer journeys make web3 products unique. By leveraging assets that can be used across apps and ecosystems, web3 powers novel experiences that can build on one another, where anyone can openly contribute to a protocol or support its assets, thereby adding to the ecosystem’s value.
The launch of our embedded wallets raises some key questions for developers about interoperability:
- Can I ensure that my users have access to their assets across apps, even as they use embedded wallets?
- If a user creates a wallet in my app, can they use this wallet, or its assets in another app like OpenSea?
These questions apply to all wallets, but are particularly important for embedded wallets. Embedded wallets shift us from a wallet-centric mindset (where the user takes their assets with them using third-party software) to an app-centric mindset (where asset ownership is deeply integrated into the app experience).
Why interoperability matters
Interoperability is the ability for data or assets to be freely moved from one system to another. It is essential to building rich experiences in web3 and helps unlock novel use cases beyond what any single company could build.
Practically speaking it boils down to two pragmatic concerns:
- Assets out — Will assets generated in your app have value elsewhere? Can your user take them to trade/spend/use?
- Assets in — Can your app benefit from the assets your user has accumulated elsewhere? Do they need to buy crypto again (for gas, eg) if they have done it before?
Historically, interoperability in web3 has been made possible by consumer crypto wallets. Users bring their own key management software (the wallet) to every app. The wallet acts as a bridge across apps and ecosystems, enabling the user to carry their assets with them, unlocking new value for the ecosystem.
However, wallets can cause quite a bit of friction for newcomers who are not used to the self-custodial UX in web3.
Enter embedded wallets
Embedded wallets are tightly integrated into a given product — no third party extension or app download required. They give a user all of the benefits of a self-custodial system without requiring them to BYOW (bring your own wallet — download an extension, secure a 12-word mnemonic, etc).
But how does interoperability figure into this? Wallets must remain usable across apps. If I generate a wallet as part of my journey in app A, I must be able to take my assets to app B and beyond.
Embedded wallet interoperability, a story in three parts
Let’s put ourselves in the shoes of a user. Alice is new to crypto and may not even know the product she is using runs on decentralized rails. She signs up for MadRealities using her phone number (and gets a Privy embedded wallet), earning a rose (NFT) in the process. Months later, Bob (her crypto-curious friend) tells her this rose is valuable and she should trade it on OpenSea. How can her embedded wallet enable this easily?
Option 1: Native wallet support across apps.
In this option, our embedded wallet system is supported across both apps, the asset originator and destination. That is both MadRealities and OpenSea integrate Privy natively so Alice can bring her wallet across both sites.
In this scenario, we must account for certain considerations:
- UX — embedded wallets can reduce user friction by integrating deeply into an app flow, and giving users an option to pre-approve certain transactions, for example. However, massive UX upside here carries real risk of a potential rogue app tricking a user into taking unwanted action.
- Privacy — Automatically connecting a wallet across apps when a user logs in reveals a lot of information about the user. The wallet may be tied to sensitive on-chain information, and users must stay in control of whether they link accounts across apps like this.
The prospects of embedded wallet integrations bringing self-custodial asset control across apps is exciting. But obviously it’s unrealistic to expect all apps to support the same wallet infrastructure in the near-term. This cannot be the end of the story. What if the app your user is going to (OpenSea in this instance) doesn’t support your user’s embedded wallet?
You really have two practical options:
- A WalletConnect integration
- Provisioning a consumer wallet to go alongside the embedded wallet
Option 2: the WalletConnect integration
WalletConnect was created in 2018 to make it easier for developers to integrate the long tail of wallets, and ensure users can connect to their app with any wallet. In fact, WalletConnect is an invaluable part of the connector infrastructure Privy has built for native users. While WalletConnect is fantastic for web3 users, it’s UX is very native to consumer self-custodial wallets and accordingly, some of its flows confuse web3 newcomers.
Back to Alice… Using WalletConnect, Privy would appear as one of the available wallets in the WalletConnect interface and Alice could simply use this to connect her embedded wallet to any site that supports WalletConnect. But we must keep in mind where Alice is coming from as part of her journey.
The Newcomer Experience — New to web3, Alice thinks in terms of apps, not wallets. She is thinking about her assets (her MadRealities rose) not in terms of software (what wallet is securing these assets). This implicit change of frame is hard to pull off.
- Alice expects to log into OpenSea with her MadRealities account. Instead she sees WalletConnect, but may not know what that is.
- From there Alice, if she knows to click it, she will be shown a list of available wallets in the market (or worse: a QR code). This is very intimidating for a newcomer. Now, she must pick Privy, which she may not know about. Expecting to access her MadRealities rose from OpenSea, Alice gets a crash course in the wallet market.
Accordingly, our view of the landscape today is this: rather than let the user learn about wallets on their own, let’s proactively onboard them to a consumer wallet once they are ready.As your user is ready to leave their first app experience and head into the wider world of digital ownership, we want to give them the right tool for the journey.
The right tool at the right time
By the time Alice is ready to leave MadRealities for OpenSea to sell her NFT, she has a real incentive to deal with the friction of getting a wallet.
Out of the box, Privy supports simple key export so you can easily prompt your user to copy their keys to an external wallet at the appropriate time. From there, they can use their embedded wallet in other apps, as well as continue to use it in your app.
The way ahead
Our work does not stop here. We are working with a number of wallet providers to develop one-click wallet migrations, enabling users to export their embedded wallet into an external wallet with a single click. Interoperability is a core part of the web3 user experience and we’re excited to see many builders in the space pushing to make assets usable across apps for all users.
We’re excited to share more on this front soon!
Some Lessons
- Remember who your user is and how they got to your app. Knowing what they know and what they expect is powerful information. Make use of it to pick the best flows at a given moment.
- Size the carrot and the stick. Through their journey through your app, consider your users’ incentives and motivations. By the time a user has a material reason to take assets from your ecosystem elsewhere, they are much more engaged than when they first came into your app.
By supporting both external wallets and internal wallets, Privy is designed for all of your users, newcomers and experts alike, as they evolve through their web3 journey. Sign up to get access today at privy.io.