Restore last connected wallet instead of first authorized one#1
Merged
Conversation
The silent-restore effect iterated detectWallets() in a fixed SUPPORTED_WALLETS order (metamask, phantom) and picked whichever was already authorized for the site. After a user disconnected MetaMask and then connected Phantom, a reload or navigation would silently snap the connection back to MetaMask — because MetaMask's site authorization is still active (only the extension can revoke it). The deposit flow then opened MetaMask to sign, even though the UI showed Phantom. Persist the last connected walletId in localStorage on connect, clear it on disconnect, and try it first during restore. Falls back to the old detection order when no preference is remembered.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The wallet panel's "Disconnect" looked broken: after disconnecting MetaMask and connecting Phantom, depositing would still pop MetaMask to sign.
Root cause is in the silent-restore effect in
PmxtProvider. On mount it iteratesdetectWallets()in a hardcodedSUPPORTED_WALLETSorder (metamask,phantom) and picks whichever is already authorized for the site. MetaMask's site authorization is not revoked when the widget "disconnects" (only the extension can do that), so on any reload or remount after switching to Phantom, MetaMask wins the restore race andconnectedWalletis force-set back tometamask. The deposit flow then uses MetaMask's provider.Fix: persist the last connected
walletIdin localStorage onconnect, clear it ondisconnect, and try it first during restore. Falls back to the old detection order when no preference is remembered (first visit, storage cleared, last wallet uninstalled).Reproduction
Test plan