Skip to main content

Supported Connectors

Introduction

This guide will cover how to connect our dApp to all the different connectors that web3-react supports. It is based on the web3-react example, found in the Uniswap code examples repository. To run this example, check out the examples's README and follow the setup instructions.

In this example we will cover connecting our dApp to the following connectors:

  • Coinbase wallet
  • WalletConnect wallet
  • Network
  • Gnosis safe
info

For help on setting up web3-react and interacting with a MetaMask wallet, please visit our connecting to wallets page!

The input parameters to this guide are the chains that we want our dApp to be able to connect to and their RPC URLs.

The guide will cover:

  1. Building a Coinbase Wallet connector
  2. Building a WalletConnect Wallet connector
  3. Building a Network connector
  4. Building a Gnosis Safe connector

At the end of the guide, we should be able to connect and disconnect the application to the different connectors listed above.

For this guide, the following web3-react packages are used:

info

This guide uses web3-react version 8, which is a beta version.

The core code of this guide can be found in the top level of our examples repository, under each connectors' name. For example, the code for the Coinbase Wallet connector can be found in the the coinbase file.

Building a Coinbase Wallet connector

The second connector in the list of prioritized connectors that we provided as a parameter to Web3ReactProvider is the Coinbase Wallet connector:

Creating the prioritized Connectors list
loading...

To connect to a Coinbase Wallet connector, we first need to install @web3-react/coinbase-wallet, as well as @coinbase/wallet-sdk. Having installed the packages, we can import the CoinbaseWallet class from @web3-react/coinbase-wallet, as well as the initializeConnector function from the @web3-react/core package:

Importing the Coinbase Wallet connector
loading...

We can now build our connector, supplying the required arguments:

Initializing the Coinbase Wallet Connector
loading...

We pass CoinbaseWallet as the type argument to initializeConnector's templated parameter. Similar to the case of the InjectedConnector, the CoinbaseWallet class is a class that extends the AbstractConnector class, which is part of the @web3-react/core package. The parameter provided to initializeConnector is a function that receives an actions object, and expects an instance of CoinbaseWallet (to match the type argument) to be returned.

We build the new CoinbaseWallet instance by passing the actions object, an options object, and an onError callback. onError handles errors that occur during interaction with the connector, and options is used to configure the connector. In our case, we pass the url, appName and reloadOnDisconnect options: url is the RPC URL to connect to that was provided as an argument to the example application, appName is the name of our application, and reloadOnDisconnect is a boolean that indicates whether the application should reload when the user disconnects from the wallet.

After building the connector, we use its two return types, the Connector and it's respective hooks, and build a Connection object by setting the connection's type as the Coinbase wallet:

Building the Coinbase Wallet Connection
loading...

Having built the connector, all that remains is to build the user interface and supply it to our ConnectionOptions component, just as we did with the InjectedConnector:

Building the Coinbase Wallet component
loading...

Building a WalletConnect Wallet connector

The third connector in the list of prioritized connectors that we provided to Web3ReactProvider is the WalletConnect Wallet connector.

To connect to a WalletConnect Wallet connector, we first need to install @web3-react/walletconnect, as well as @walletconnect/ethereum-provider. Having installed the packages, we can import the WalletConnect class from @web3-react/walletconnect, as well as the initializeConnector function from@web3-react/core package:

Importing the WalletConnect Wallet Connector
loading...

We can now build our connector, supplying the required arguments:

Initializing the WalletConnect Wallet Connector
loading...

The main difference from the Coinbase Wallet connector lies in the arguments that the WalletConnect class requires to be instantiated. web3-react knows about this difference, as we passed the type argument WalletConnect to initializeConnector, thus specializing the type of AbstractConnector. In this case, the class receives three arguments, including actions and onError, identical to those supplied in the Coinbase Wallet connector case.

The difference lies in the second argument, which is an options object. In this case, we are passing the rpc parameter, which is an object that maps the chain ID to the RPC URL to connect to. We have already created this map in our constants file using our example's parameters. The other option that we are passing is the qrcode, which is a boolean that indicates whether the QR code should be displayed in the browser. In our case, we are passing true as we want to show the QR code.

Having built the connector, we just need to build the user interface to enable user interaction with the connector, and supply it to our ConnectionOptions:

Building the WalletConnect Wallet component
loading...

Building a Network connector

The Network connector, alongside the Gnosis Safe connector, are two of the connectors that we do not surface through our user interface, but instead we connect to them programmatically. In contrast to the previous Connectors, these do not come with any pre-built user interface for the user to interact with. We attempt to connect to them eagerly in our Web3ContextProvider component through a hook:

Hook to connect eagerly
loading...

The useEagerlyConnect hook is called in the Web3ContextProvider component and attempts to connect to the Network Connector and the Gnosis Safe Connector. The hook is named eagerly as it is called in the component's body as React effect when the component is first rendered. In the hook implementation we attempt to call web3-react's connectEagerly function if it exists on the connector, otherwise we call activate otherwise. The connectEagerly function attempts to connect our application to the connector, and fails silently if it does not succeed:

Connecting eagerly
loading...

Before eagerly connecting, we first need to initialize the connectors. We start by building the Network connector, and we first need to install @web3-react/network, and import the Network class from it. Note how this Connect does not require any package besides its web3-react package to function. We also need to import the initializeConnector function from @web3-react/core:

Importing the Network Connector
loading...

We can now build our connector, supplying the required arguments:

Initializing the Network Connector
loading...

The main difference from the other connectors lies in the arguments that the Network class requires to be instantiated. web3-react knows about this difference, as we passed the type argument Network to initializeConnector, thus specializing the type of AbstractConnector. In this case, the class receives actions, which is identical to that supplied in the rest of the connectors; urlMap, which is an object that maps the chain ID to the RPC URL to connect to, which we have already created in our constants file; and defaultChainId which is the chain ID to connect to by default.

After building, the connector, we can create a Connection instance by supplying it the return value of the initializeConnector function, and the Network class:

Creating a Network connection
loading...

All that remains is to return the constructed Connection instance.

Building a Gnosis Safe connector

Similar to the Network connector, we build the Gnosis Safe connector. We start by first installing @web3-react/gnosis-safe, and import the GnosisSafe class from it. We also need to import the initializeConnector function from @web3-react/core:

Importing the Gnosis Safe connector
loading...

The Gnosis Safe connector is the simplest of them all, as it does not require any additional parameterization other than actions:

Initializing a Gnosis Safe Connector
loading...

Having initialized the connector, we can now build the Connection instance and return it:

Creating a Gnosis Safe Connection
loading...

Next steps

Now that we have gone through building all of the different types of supported connectors, we will learn how to switch chains.