Use web3-react to connect to Coinbase Wallet and others
March 7, 2022
How to connect your dapp to web3 wallets using the web3-react library

One of the most popular methods to integrate wallet providers into your dapp is using the Web3-react library, developed by Noah Zinnsmeister. Web3-react is a modular framework for building and interacting with Ethereum dapps using React, which abstracts away the complexities of working directly with various wallet providers by providing a single convenient API. It combines ethers.js, a web3 library that lets you use HTTP, IPC, or WebSocket to communicate with a local or remote Ethereum node, and React, a widely used JavaScript library for front-end development, to create blockchain applications.
This tutorial will show you how to integrate your dapp to Coinbase Wallet — or any Ethereum-compatible wallet supported by Web3-react — to your dapp, so that users of Coinbase Wallet or other wallet solutions can access your decentralized application. The expected time for this project is about 30 minutes or less.

Prerequisites:
As always, please engage in this process at your own risk and do your own research. We recommend following this process using testnet funds to explore the steps with no value at stake. Do not use mainnet funds for learning. You can access testnet tokens from the Ropsten Ethereum testnet token faucet here.
We will assume that you already have a React app up and running, and are familiar with React.
Integrate your dapp to Coinbase Wallet with web3-react
Step 1: Install web3-react
# required
yarn add ethers # required dependency
yarn add @web3-react/core
Step 2: Import and Setup Web3ReactProvider
Here, we instantiate a provider and define a getLibrary function that returns it. Then, we wrap our app around a React context that returns this instantiated provider, which makes it globally available throughout our dapp.
import { Web3ReactProvider } from '@web3-react/core'
import { Web3Provider } from "@ethersproject/providers";
function getLibrary(provider) {
return new Web3Provider(provider);
}
const Dapp => () {
return (
<Web3ReactProvider getLibrary={getLibrary}>
<App />
</Web3ReactProvider>
)
};
Step 3: Import and instantiate wallet connectors
We then instantiate various wallet connectors to integrate into our dapp.
import { InjectedConnector } from "@web3-react/walletlink-connector";
import { WalletLinkConnector } from "@web3-react/walletlink-connector";
import { WalletConnectConnector } from "@web3-react/walletlink-connector";
const Injected = new InjectedConnector({
supportedChainIds: [1, 3, 4, 5, 42]
});
const CoinbaseWallet = new WalletLinkConnector({
url: `https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`,
appName: "Web3-react Demo",
supportedChainIds: [1, 3, 4, 5, 42],
});
const WalletConnect = new WalletConnectConnector({
rpcUrl: `https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`,
bridge: "https://bridge.walletconnect.org",
qrcode: true,
});
Note: If your dapp uses webpack5, a tool used to bundle JavaScript files for efficient usage in a browser, add the following code snippet to webpack.config.js:
…
resolve: {
fallback: {
fs: false,
// eslint-disable-next-line node/no-extraneous-require
'stream': require.resolve('stream-browserify'),
// eslint-disable-next-line node/no-extraneous-require
'buffer': require.resolve('buffer/'),
// eslint-disable-next-line node/no-extraneous-require
'util': require.resolve('util/'),
'assert': require.resolve('assert/'),
},
},
…
Finally, add the following dependencies to package.json:
…
"assert": "^2.0.0",
"buffer": "^6.0.3",
"stream-browserify": "^3.0.0",
"util": "^0.12.4"