Dapps
The following steps describe the various steps necessary for dapps to migrate to WalletConnect v2.0.
Getting Startedβ
In order to get started, we recommend identifying which library your dapp utilizes. If none of your approaches are listed, feel free to reach out to us via GitHub Discussions here.
- web3-provider
- ethereum-provider
- Web3Modal v1.0
- Web3Modal v2.0
- react-native-dapp
- web3-onboard
- Dynamic
- solana-labs/wallet-adapter
- web3-react
- ConnectKit
- wagmi
- RainbowKit
- Privy
web3-providerβ
If you are using @walletconnect/web3-provider
, we stopped supporting this provider in favor of the improved version published under @walletconnect/ethereum-provider
and you will be able to check the latest version on NPM here.
ethereum-providerβ
For usage with Typescript, make sure you are using Typescript version 5.0.0
or higher.
- Ensure you have a
projectId
from the WalletConnect Cloud. You can get one here. - Upgrade
@walletconnect/ethereum-provider
from1.x.x
to2.x.x
.
Previously, you would have passed in an infuraId
like:
import WalletConnectProvider from '@walletconnect/ethereum-provider'
const web3Provider = new WalletConnectProvider({
infuraId: 'INFURA_ID'
})
The new implementation requires projectId
and chains
instead. Here is an example of the new initialization:
import { EthereumProvider } from '@walletconnect/ethereum-provider'
const provider = await EthereumProvider.init({
projectId: 'WALLETCONNECT_PROJECT_ID', // required
chains: [1], // required
showQrModal: true // requires @walletconnect/modal
})
- Install
@walletconnect/modal
if you want to use the QR Code modal. You can find more information about WalletConnectModal here.
Web3Modal v1.0β
We recommend that you replace your existing integration with the latest version of Web3Modal by following one of these paths:
- Web3Modal: Web3modal feature rich modal with wagmi, has WalletConnect, extension wallets, connectors, chain switching, account modal and more.
- WalletConnectModal: WalletConnectModal is a lightweight modal to add into your existing workflows.
Web3Modal v2.0β
If you are using our redesigned Web3Modal (often referred to as Web3Modal v2.0), you are ready to go. Please ensure that you are using a minimum version of 2.6.0
. Here is a code example:
import { w3mConnectors, w3mProvider } from '@web3modal/ethereum'
import { createConfig } from 'wagmi'
// ...
const { publicClient } = configureChains(chains, [w3mProvider({ projectId })])
const config = createConfig({
autoConnect: true,
connectors: [
w3mConnectors({
projectId,
chains
})
],
publicClient
})
const ethereumClient = new EthereumClient(config, chains)
// ...
For more documentation, follow the docs for Web3Modal here.
react-native-dappβ
We are currently developing our new SDK @walletconnect/modal-react-native
, which is now available in release-candidate version.
To ensure a seamless transition, we have developed a comprehensive example here that simplifies the migration process.
Follow this steps along with the migration example:
- Remove
@walletconnect/react-native-dapp
and all it's implementation - Remove
crypto
polyfill andrn-nodeify
logic (if present) - Install new packages:
yarn add @walletconnect/modal-react-native react-native-get-random-values react-native-modal react-native-svg @react-native-async-storage/async-storage @react-native-community/netinfo
- If the project uses react native < 0.70, install
big-integer
and addBigInt
polyfill - Run
pod install
in/ios
You can also find detailed documentation on how to install & utilize the new SDK here.
The latest SDK introduces a powerful combination of Universal Provider and our Cloud Explorer API. This integration forms the solid foundation for a React Native dapp to effortlessly connect with wallets."
If you need assistance at any point during the migration process, please feel free to reach out to us via GitHub Discussions.
web3-onboardβ
If you are using the WalletConnect package with Blocknative's web3-onboard, the migration is straightforward. The latest WalletConnect package is backwards-compatible (until the WalletConnect v1.0 shutdown comes into effect).
When you are ready to transition, bump the @web3-onboard/walletconnect
package version to >= 2.3.0
and adjust the initialization params:
const walletConnect = walletConnectModule({
version: 2, // **New Param** Defaults to version: 1 - this behavior will be deprecated after the WalletConnect v1 sunset
handleUri: uri => console.log(uri),
projectId: '', // ***New Param* Project ID associated with [WalletConnect account](https://cloud.walletconnect.com)
requiredChains: [1, 56] // chains required to be supported by WC wallet
})
// for optional chains/optionalNamespaces
const onboard = Onboard({
wallets: [walletConnect],
chains: [
// chains that are passed as optional chains to WC wallet after cleaning and parsing as number[]
{
id: '0x89',
token: 'MATIC',
label: 'Polygon',
rpcUrl: 'https://matic-mainnet.chainstacklabs.com'
}
// ...
]
})
Note: The @web3-onboard/walletconnect
package will default to version
1 until the WalletConnect v1 sunset is complete
Dynamicβ
Switching to WalletConnect v2.0 is straightforward using Dynamic. To upgrade, ensure you are using v0.15 or later for @dynamic-labs/sdk-react
. Once set up, visit your Dynamic developer dashboard and head to the integrations page. Select the WalletConnect card, toggle v2.0 on and add your WalletConnect project ID
. Once enabled, Dynamic will automatically use WalletConnect v2.0 for wallets that support it, and v1.0 for wallets that donβt.
solana-labs/wallet-adapterβ
If you are using solana-labs/wallet-adapter
, this is already working on WalletConnect v2.0, so there is nothing to change here. There will be a new version released with an updated UI modal shortly.
web3-reactβ
web3-react has created their own modules for WalletConnect v2.0. You can test their playground here and read their example implementation here. In order to get started with the migration, we suggest upgrading your @web3-react/types
, @web3-react/store
and @web3-react/core
as well as installing @web3-react/walletconnect-v2
.
After you have the respective packages, you will have to obtain a projectId from the WalletConnect Cloud and add it your .env
file.
You will need to then initialize WalletConnect v2.0 as a connector as referenced here.
import { initializeConnector } from '@web3-react/core'
import { WalletConnect as WalletConnectV2 } from '@web3-react/walletconnect-v2'
import { MAINNET_CHAINS } from '../chains'
const [mainnet, ...optionalChains] = Object.keys(MAINNET_CHAINS).map(Number)
export const [walletConnectV2, hooks] = initializeConnector<WalletConnectV2>(
actions =>
new WalletConnectV2({
actions,
options: {
projectId: process.env.walletConnectProjectId,
chains: [mainnet],
optionalChains,
showQrModal: true
}
})
)
Note: Be sure to test with several chains in order to complete your implementation of WalletConnect v2.0.
Then use the @web3-react/walletconnect-v2
package with the following methods in your components.
URIListener
: Event listener for when v2 URI is created. Code reference here.activate
: Create a session pairing with WalletConnect v2. Code reference here.deactivate
: Disconnect your session from your wallet. Code reference here.connectEagerly
: Connect to v2 protocol on mount. Code reference here.
Sample codes of reference can be found in:
ConnectKitβ
To migrate to WalletConnect v2.0 using ConnectKit, you need to upgrade connectkit
and wagmi
to the latest version.
WalletConnect V2 is only supported in ConnectKit v1.3.0 and above
For version 1.4.0 and above, you need to remove ethers
and install viem
instead.
yarn remove ethers
yarn add wagmi@latest viem@latest
Run the following command to install it using Yarn:
yarn add connectkit@^latest wagmi@^latest
WalletConnect v2.0 requires a projectId to be set and included in the configuration.
You can easily get a projectId
by creating an account on the WalletConnect Cloud.
Create a new environment variable WALLETCONNECT_PROJECT_ID
in your .env
file and set it to your projectId.
WALLETCONNECT_PROJECT_ID=YOUR_PROJECT_ID
Next, update your code by including the walletConnectProjectId
inside the config object for getDefaultClient
:
...
const client = createClient(
getDefaultClient({
...
+ walletConnectProjectId: process.env.WALLETCONNECT_PROJECT_ID,
...
}),
);
...
Note:
- For a version specific upgrade, refer to the official migration guide from Family.
- When customizing your configuration for advanced usage, it is important to include the
projectId
within yourWalletConnectConnector
object. You can learn more about it here. - Make sure you have compatible versions of ethers and viem. Check your project's dependencies to ensure compatibility with ConnectKit.
For a comprehensive example, refer to the provided sample code:
wagmiβ
To migrate to WalletConnect v2.0 using wagmi, you need to upgrade wagmi
to either 0.12.16
if you are using ethers
or 1.x.x
if you are using viem
.
WalletConnect v2.0 is only supported in wagmi 0.12.8
and above.
Upgrading to wagmi 0.12.16
β
Run the following command to install it using Yarn:
yarn add wagmi@^0.12.16
WalletConnect v2.0 requires a projectId to be set and included in the configuration.
You can easily get a projectId
by creating an account on the WalletConnect Cloud.
Create a new environment variable WALLETCONNECT_PROJECT_ID
in your .env
file and set it to your projectId.
WALLETCONNECT_PROJECT_ID=YOUR_PROJECT_ID
Next, update your code by including the walletConnectProjectId
inside the config object for WalletConnectConnector
:
import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'
const connector = new WalletConnectConnector({
options: {
projectId: process.env.WALLETCONNECT_PROJECT_ID,
showQrModal: true
}
})
const client = createClient({
autoConnect: true,
provider,
connectors: [connector],
});
...
Upgrading to wagmi 1.x.x
β
wagmi 1.x.x drops support for ethers
and only supports viem
. If you are using ethers
, you will need to migrate to viem
before upgrading to wagmi 1.x.x
.
yarn remove ethers
yarn add wagmi viem@latest
WalletConnect v2.0 requires a projectId to be set and included in the configuration.
You can easily get a projectId
by creating an account on the WalletConnect Cloud.
Create a new environment variable WALLETCONNECT_PROJECT_ID
in your .env
file and set it to your projectId.
WALLETCONNECT_PROJECT_ID=YOUR_PROJECT_ID
Next, update your code by including the walletConnectProjectId
inside the config object for WalletConnectConnector
:
import { createConfig, configureChains, mainnet } from 'wagmi'
import { publicProvider } from 'wagmi/providers/public'
import { WalletConnectConnector } from 'wagmi/connectors/walletConnect'
const { chains, publicClient } = configureChains([mainnet], [publicProvider()])
const connector = new WalletConnectConnector({
chains,
options: {
projectId: process.env.WALLETCONNECT_PROJECT_ID,
},
}),
const config = createConfig({
connectors: [connector],
publicClient,
})
...
wagmi 1.x.x
introduces several breaking changes due to the migration from ethers
to viem
.
For a version-specific upgrade, refer to:
- Official migration guide for wagmi
- ethers.js -> viem migration guide for viem
RainbowKitβ
If you've already adopted RainbowKit 0.12.x
and 1.0.x
, then you're almost there! Just upgrade to the latest RainbowKit patch release and give it a try. RainbowKit has been API compatible with WalletConnect v2 since 0.12.8
was released in April.
RainbowKit has enabled WalletConnect v2 by default with 0.12.15
and 1.0.2
. RainbowKit will continue to support 0.12.x
in case your dApp has not yet upgraded to Wagmi and RainbowKit v1.
1. Upgrading dependencies
npm i @rainbow-me/rainbowkit@^1.0.2 wagmi@^1.2
If you're using a version of RainbowKit before 0.12.x
or 1.0.x
, just follow the Migration Guides to get up-to-date.
It is recommended that 0.12.x
dApps also begin to upgrade wagmi, as improvements to WalletConnect v2 will only be included in future versions of wagmi.
2. Supplying a projectId
Every dApp that relies on WalletConnect now needs to obtain a projectId
from WalletConnect Cloud. This is absolutely free and only takes a few minutes.
Supply your projectId
to getDefaultWallets
and individual RainbowKit wallet connectors like the following:
const projectId = 'YOUR_PROJECT_ID'
const { wallets } = getDefaultWallets({
appName: 'My RainbowKit App',
projectId,
chains
})
const connectors = connectorsForWallets([
...wallets,
{
groupName: 'Other',
wallets: [
argentWallet({ projectId, chains }),
trustWallet({ projectId, chains }),
ledgerWallet({ projectId, chains })
]
}
])
RainbowKit is type-safe and will warn you when a projectId
is missing. Refer to RainbowKits' examples to see v2 in action:
Privyβ
To upgrade Privy to use WalletConnect v2.0, the only thing you need to do is install the latest version of the Privy SDK:
npm i @privy-io/react-auth@latest
That's it! You've upgraded to WalletConnect v2.0.
Optionalβ
If you want to configure your own WalletConnect Cloud Project instead of using the default one provided by Privy, proceed to the following steps. This is optional.
1. Get a WalletConnect Cloud Project IDβ
Go to WalletConnect Cloud and create a new account. Once your account is created, create a new project and collect the Project ID.
2. Configure your Project ID in the PrivyProviderβ
In the config
property of your PrivyProvider
, add a walletConnectCloudProjectId
with your project ID from step 1.
import type { AppProps } from 'next/app'
import Head from 'next/head'
import { PrivyProvider } from '@privy-io/react-auth'
function MyApp({ Component, pageProps }: AppProps) {
return (
<PrivyProvider
appId={process.env.NEXT_PUBLIC_PRIVY_APP_ID || ''}
config={{
walletConnectCloudProjectId: 'YOUR_WALLETCONNECT_CLOUD_PROJECT_ID'
}}
>
<Component {...pageProps} />
</PrivyProvider>
)
}
For more information:β
- See Privy's full WalletConnect v2.0 migration guide.
- Learn more about Privy at our website.
Was this helpful?