Hey everyone!
For the past couple of months we were working on a MetaMask Snap based wallet for the IC that is called Masquerade (MSQ for short).
In short MSQ is three things:
- A crypto wallet, like MetaMask or NNS;
- An authorization provider, like Internet Identity or Google;
- A payment service, like PayPal.
Here is a demo-video covering the main features of MSQ:
Why?
- II + NNS are super-secure, but some people find them hard to use.
- Other browser-extension-based wallets are less secure, but easy to use.
- So, it would be nice to have something in the middle.
Why Now?
- MetaMask launched Snaps recently (now in Beta).
- ckETH is coming to the IC soon.
- MetaMask is 30M users, we can make their transition to the IC seamless.
What Are Snaps?
Snaps are extensions for MetaMask. They are distributed via NPM and everyone can develop one. They require only one-time installation, which can happen on any website, and then they used freely without limitations.
Snaps can securely derive deterministic randomness from user’s seed phrase. They can store information, make network requests and execute arbitrary logic. This logic can depend on a particular website that currently interacts with the Snap. For some websites a Snap can provide different functionalities than for others.
There is one downside though - they are very limited in their UI/UX capabilities.
What Is MSQ?
MSQ is a Snap and an accompanying IC-hosted Dapp. The Dapp is a continuation of the Snap which greatly extends its capabilities, mainly in terms of UI/UX. The Dapp is integrated with the Snap in a special way, so it has more control over the data inside, than any other website that interacts with MSQ.
MSQ offers similar levels of privacy and security as the Internet Identity, but with a much friendlier and snappier (haha) UX.
For more info about what MSQ can and how it looks, please refer to the demo video above.
Other websites integrate with MSQ by using a JS client library. The integration process is very simple. The library provides a special object to communicate with both: the Snap and the Dapp.
For example, there is a function that allows your users to authenticate themself. This function starts a user-side flow (which is covered in the video above), that as a result make your user authorized and returns you an Identity
object, which you can pass in your HttpAgent
or whatever agent you’re using and it will work as expected with the rest of your system.
Private keys (or any other privacy & security related information) never leave the Snap - they are always inside. Instead you have a number of functions to retrieve the information which is not considered private in the current context. For example, you can’t get all the identities that a particular user may use on your website (because a user might not want you to know them), but if a user is authorized within your website, then you can get a principal of an identity they are currently authorized with (as well as their pseudonym and an avatar they use on MSQ).
All the design decisions are made with a sole focus of giving users an absolute control of their privacy.
MSQ For Users
- A simple way to dive into Internet Computer
- Great UX
- Great Privacy & Security
MSQ For Developers
- Strategic move (30M users with almost no learning curve)
- Easy to integrate
- Powerful features
FAQ
Is it ready?
No, it’s not. We’re finishing the development process (2-4 more weeks) and communicating with the MetaMask team about including MSQ in the official list of approved Snaps (estimates are unkown).
Can I try it?
Yes, you can. The Dapp is available at msq.tech. You won’t be able to install the Snap with your regular MetaMask extension - you will need MetaMask Flask for this. Once you have it, the Dapp should prompt you with Snap’s installation process. Let me know if you have any problems with it.
What platforms are supported?
MSQ runs everywhere MetaMask Snaps can be executed. Currently it is Chrome Desktop and Firefox Desktop. There is no MetaMask on Safari. Mobile Snaps are coming, but there is no timeline for that.
I want to integrate it into my website. Are there any docs available?
There is no public documentation at the moment, but if you really want to, please DM me.
Is it open source?
Not yet, but once we’re in the list of official Snaps, it will be.
Why is it called Masquerade?
It is a methaphor. Any website, to which a user wants to interact with, is like a masquerade party. And before going to such a party a user might want to open their wardrobe and choose a mask, so nobody recognizes them.
Ask me anything in this forum thread. Thanks and take care!