Everipedia Logo
Everipedia is now IQ.wiki - Join the IQ Brainlist and our Discord for early access to editing on the new platform and to participate in the beta testing.
WalletConnect

WalletConnect

WalletConnect is an open-source standard for connecting desktop dApps to mobile Wallets. This system consists in 4 parts to allow interaction between a desktop app or web app without installing any Browser extensions or requiring any Hardware without comprising the security of any of its parts.

WalletConnect is a simple solution that bridges communication between browser-based Dapps and mobile wallets using a QR code to establish the initial connection. It is an open protocol and does not require a Dapp user to install a browser extension. The protocol is agnostic to specific mobile wallets a user may want to use and enables Dapp developers to integrate with multiple wallets through a single implementation.

  • enable users to use their mobile wallets with Dapps without having to install a browser extension

  • enable users to use the wallet of their choice without worrying about which Dapps have integrated with which wallets

  • simplify wallet integration for Dapp developers instead of requiring them to integrate each wallet individually

  • provide flexibility to Dapp developers about which Wallet Connect bridge servers they want to use to communicate with mobile wallets

  • provide control to the mobile wallet developers on how push notifications are sent to their users

Walletconnect Design

The 4 parts of the design consist:

  • Desktop dApp

  • Mobile Wallet

  • Bridge Server

  • Push Server

The first two are self-explanatory, they consist on a desktop app or web app that serves as front-end for a Dapp and a Mobile app that serves as a wallet by managing and storing the user’s private keys to their account(s).

The last two are crucial to this design and can be setup by anyone without any commitment to a single Dapp or Wallet.

However, it’s more logical for the Bridge server to be setup by Dapp development team and the Push server to be setup by the Wallet development team.

The Bridge server has the sole purpose to relay data between the Dapp and the Wallet by storing it momentarily under a session ID without ever knowing the contents of the relayed data.

The Push server has the sole purpose of triggering push notifications of the mobile Wallet device without sharing the secret required by the push notification service for either Android or iOS platforms.

Walletconnect Interactions

When using a Dapp there are fundamentally 3 interactions that require the user’s Wallet.

These are getting accounts, sending transactions and signing messages.

The last two are essentially the same where the Dapp provides some data to be signed by the user on the Wallet and returning a signed transaction id or signed message, respectively.

Thus, we can reduce it as a single interaction in the form of signing request.

However, we need an initial interaction to create communication between the Dapp and the Wallet.

There are 3 interactions with WalletConnect;

  1. Session Creation: In order to create a session, a Dapp must know beforehand the Bridge URL, which you setup your own by following the Setting up a Bridge server tutorial. Now that you have a Bridge URL, the session creation works as follow: (a) Desktop Dapp requests Bridge server to create a session ID (b) Desktop Dapp generates an ephemeral shared Key (c) Desktop Dapp shares session data using a QR code (d) Mobile Wallet scans the QR code to obtain session data

  2. Getting Accounts: At this point, the Desktop Dapp and Mobile Wallet now have both the session data necessary to communicate with each other. Thus we can proceed with the first fundamental interaction, Getting Accounts: (a) Mobile Wallet encrypts the user’s accounts with the shared key (b) Mobile Wallet sends it to the Bridge server using the session ID (c) Desktop Dapp listens to this change and fetches encrypted Accounts (d) Desktop Dapp decrypts the user’s accounts with shared Key

  3. Signing Requests: The Dapp can now display information to the user based on their accounts. Eventually when required the Dapp will ask the user to sign a transaction or a message, which brings us to the second interaction: Signing Requests: (a) Desktop Dapp encrypts data into a signing request with shared ey (b) Desktop Dapp sends the signing request to the Bridge using the session ID (c) Bridge server triggers push notification by the Push server (d) Mobile Wallet fetches signing request data from the Bridge server (e) Mobile Wallet decrypts signing request with shared key (f) Mobile Wallet displays signing request to the User to be signed or not (g) Mobile Wallet shares the user’s response of the signing request, which is either approved (with transaction id or signed messaged) or rejected.

Wallets that support Walletconnect protocol

  • Trust

  • Metamask

  • Pillar

  • Gnosis Safe

  • Walleth

  • Tokenary

  • Argent

  • Rainbow

  • Safepal

  • Equal

  • Coinomi

  • Gridplus

  • CoolWallets

  • Atomic

  • Authereum

References

[1]
Citation Linkmedium.com
Jul 10, 2020, 1:29 AM
[2]
Citation Linkmedium.com
Jul 10, 2020, 1:29 AM
[3]
Citation Linkwalletconnect.org
Jul 10, 2020, 1:29 AM
[4]
Citation Linkwalletconnect.org
Jul 10, 2020, 1:29 AM
[5]
Citation Linkwalletconnect.readthedocs.io
Jul 10, 2020, 1:29 AM
[6]
Citation Linkdocs.binance.org
Jul 10, 2020, 1:30 AM
[7]
Citation Linkgithub.com
Jul 10, 2020, 1:30 AM
[8]
Citation Linkwww.crunchbase.com
Jul 10, 2020, 1:30 AM
[9]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:51 AM
[10]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:51 AM
[11]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:51 AM
[12]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:52 AM
[13]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:54 AM
[14]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:54 AM
[15]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:54 AM
[16]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:55 AM
[17]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:55 AM
[18]
Citation Linkywqaugeunhowzrcj.public.blob.vercel-storage.com
Jul 10, 2020, 2:56 AM