rainbow-me / rainbowkit

The best way to connect a wallet 🌈 🧰

Home Page:https://rainbowkit.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[bug] Metamask window is not opening after disconnect

josadcha opened this issue · comments

Is there an existing issue for this?

  • I have searched the existing issues

RainbowKit Version

2.1.1

wagmi Version

2.9.9

Current Behavior

After disconnecting from Metamask and doing an attempt to connect again, the Metamask window is not opened. Issue resolves after refreshing the page:

Screen.Recording.2024-06-06.at.12.34.44.PM.mp4

Expected Behavior

After disconnecting from Metamask and trying to initiate the connection again, the Metamask is triggered to be connected.

Steps To Reproduce

  1. Connect to Metamask
  2. DIsconnect
  3. Try to connect to Metamask again

(Sometimes the issue appears on the 2nd attempt, sometimes on the 3rd.

Link to Minimal Reproducible Example (CodeSandbox, StackBlitz, etc.)

No response

Anything else?

No response

commented

@josadcha Looking into this now

+1 Im also getting this and with the same Wagmi / Rainbowkit versions

commented

I'm able to reproduce this as well. Reporting this to the wagmi team to see what's going on.

+1 I'm also getting this with Wagmi/Rainbowkit version "latest"

commented

Seems like this is a EIP-1193 and EIP-6963 issue. We should be deprecating EIP-1193 pretty soon and fix this. I'll keep this issue open meanwhile 👍

The problem is in disconnecting the wallet.

it becomes obvious after debugging packages/rainbowkit/src/components/ConnectOptions/DesktopOptions.tsx

  const connectToWallet = (wallet: WalletConnector) => {
    setConnectionError(false);
    if (wallet.ready) {
      wallet?.connect?.()?.catch(() => {
        setConnectionError(true);
      });
    }
  };

wallet.connect() throws ConnectorAlreadyConnectedError

The solution is to disconnect via direct connector. To achieve this you can utilize useAccount from wagmi.

const { connector } = useAccount()
const handleDisconnect = ()=>{
        connector && await connector.disconnect()
}

In case you need more context on the issue, please don't hesitate to let me know. You can debug packages/core/src/actions/connect.ts and in case of disconnecting directly from connecter config.state.current becomes undefined but if useDisconnect hook is used it remains and wagmi throws the error.

  // Check if connector is already connected
  if (connector.uid === config.state.current)
    throw new ConnectorAlreadyConnectedError()

So it is not EIP-1193 or EIP-6963 issue but wagmi useDisconnect hook issue

commented

@babkenmes We have metaMaskWallet EIP-1193 and EIP-6963 connector which shares the same window.ethereum instance, that's why it throws that error since it's marked as already "connected" from Wagmi.

Feel free to check out the wagmi issue here wevm/wagmi#4027. The issue should be resolved once we deprecate the EIP-1193 connectors 👍

commented

Here is another EIP-1193 bug we've encountered wevm/wagmi#3606. As i said all these EIP-1193 breaking behaviours should be resolved once we migrate fully over to EIP-6963.

commented

@josadcha Are you able to reproduce this with the latest Wagmi version 2.11.1 ?

commented

@magiziz I think this is resolved now using

    "@rainbow-me/rainbowkit": "^2.1.3",
    "viem": "^2.17.4",
    "wagmi": "^2.11.1",
commented

@REPTILEHAUS Awesome. Yeah Wagmi has done a few changes to their connectors so hopefully we should see some less conflicts now.

commented

This is now fixed in the latest Wagmi version 2.11.3.