-
Notifications
You must be signed in to change notification settings - Fork 1
🐛 Wallet Connection State Persisted Without Verification #41
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Description
The wallet connection state is persisted in localStorage and restored on page load without verifying if the wallet is still connected or if the address is still valid.
Current Behavior
// WalletProvider.tsx (Lines 19-26)
useEffect(() => {
// Check localStorage for saved address
const savedAddress = localStorage.getItem(STORAGE_KEY);
if (savedAddress) {
setIsConnected(true); // Assumes connected without verification!
setAddress(savedAddress);
}
}, []);Problems
- Stale State: User may have disconnected from wallet extension
- Wrong Account: User may have switched accounts in wallet
- Wallet Uninstalled: User may have removed wallet extension
- Session Expired: Wallet session may have timed out
Impact
- UI shows connected but operations fail
- User sees wrong address
- Confusing error messages when transactions fail
Suggested Fix
useEffect(() => {
const savedAddress = localStorage.getItem(STORAGE_KEY);
if (savedAddress) {
// Verify connection is still valid
verifyConnection(savedAddress).then((isValid) => {
if (isValid) {
setIsConnected(true);
setAddress(savedAddress);
} else {
// Clear stale data
localStorage.removeItem(STORAGE_KEY);
}
});
}
}, []);
async function verifyConnection(savedAddress: string): Promise<boolean> {
try {
// Attempt to get current wallet state
const accounts = await getAccounts();
return accounts.some(a => a.address === savedAddress);
} catch {
return false;
}
}Additional Improvements
- Listen for wallet disconnect events
- Listen for account change events
- Show reconnect prompt if verification fails
- Add "Connected as" indicator with current address
Files Affected
frontend/src/components/WalletProvider.tsx
Priority
🟡 Medium - Can cause confusing UX
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working