WC.png

The recent migration to WalletConnect version 2 (WCv2) has caused several compatibility issues with smart wallets (smart accounts) like Safe{Wallet}, impacting the ability of users to connect to various popular decentralised applications (dApps).

With this post, we aim to reach out to the ecosystem to create awareness for these current issues and provide some solutions on how we can move forward.

WCv2 and smart wallet compatibility

Smart wallets cannot guarantee that they exist or can be deployed with the same address on multiple other chains (more on this in our Mirror post), nor do they necessarily support the same methods and events across multiple chains. The release of WCv2 and consequential shutdown of WCv1 did not address these differences between EOA wallets and smart wallets properly, resulting in the current compatibility issues.

Here are some examples of situations that cause connection failures, particularly for smart wallets like Safe{Wallet}:

Despite these challenges, WalletConnect has taken steps to address the most critical of these issues, specifically chain support, in their latest v2.9.0 release. Now, dApps can list supported chains under 'optionalNamespaces' and leave the ‘requiredNamespaces' empty. This allows a smart wallet to establish a connection and approve a single chain interaction without causing the connection to fail.

Proposed solutions for smart wallet compatibility

  1. RECOMMENDED: Set 'requiredNamespaces' as undefined and send all the chains the dApp intends to support in the 'optionalNamespaces'. This adjustment allows the smart wallet to establish a connection and approve a single chain, eliminating the connection failure issue.
  2. ALTERNATIVE: Send 'requiredNamespaces' only with a single chain — the chain to which the smart account is connected to. This method may be more suited to certain use cases.

List of popular dApps tested with WCv2

DApp WC version Working? Details
https://lido.fi/#networks v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://app.aave.com/ v2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://app.uniswap.org/#/swap v2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://curve.fi/#/ethereum/swap v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://www.convexfinance.com/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://app.compound.finance/?market=weth-mainnet v2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://lite.instadapp.io/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://stake.rocketpool.net/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://pancakeswap.finance/?chain=eth v2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://app.balancer.fi/#/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://app.frax.finance/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://liquity.app/ v1 Yes None
https://app.gmx.io/#/trade v2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://app.aura.finance/ v2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://yearn.finance/ V2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://www.sushi.com/swap V2 Arbitrum only Sending Arbitrum chainId as requireNamespaces so it will only work on that chain
https://compound.morpho.org/?network=mainnet V2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain
https://stargate.finance/transfer V2 Yes* *Working partially. When selecting to connect via ‘All chains’ connection will fail as all available chains for the dapp are sent as {{requiredNamespaces}} but when selecting only one chain it will work as only one chain is sent inside {{requiredNamespaces}}. All chains should be sent inside of {{optionalNamespaces}}
https://app.stakewise.io/ V2 Yes Sending {{currentChainId}} as requireNamespaces so it will work but heavily recommended for them to use optionalNamespaces
https://swap.cow.fi/#/1/swap/WETH V1 Yes None
https://app.ens.domains/ V2 Ethereum only Sending Ethereum chainId as requireNamespaces so it will only work on that chain. Testnets (goerli) wont work

We appreciate your patience as we work through these issues and seek to deliver the best possible experience for Safe{Wallet} users. We're committed to ensuring the seamless integration of WCv2 with smart wallets and the wider ecosystem.