WalletConnect: SafePal not detected / cannot connect #58
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#58
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The wallet connect button does not detect SafePal or allow SafePal to connect.
Expected behavior
Users with SafePal (mobile or extension) should be able to discover and connect via the same flow as other WalletConnect-compatible wallets.
Actual behavior
SafePal is not detected or connection fails / is not offered.
Notes
mentioned in commit
a8d387ad03Fix merged to
main(commit46f38c1)@brouie — please verify on staging/production with a real SafePal install.
What changed
getDefaultConfig’s default “Popular” group did not includesafepalWallet, so SafePal never appeared as a first-class option. We now pass the same default wallets plussafepalWalletbefore WalletConnect (RainbowKit’s SafePal connector: injected when the extension exposesisSafePal/safepalProvider, otherwise WC + mobile deep link).multiInjectedProviderDiscovery: trueis set explicitly for both the RainbowKit path and the injected-only fallback (noVITE_WALLETCONNECT_PROJECT_ID).docs/frontend/wallet-connection.md, invariant row + § Wallet connect UX indocs/testing/invariants-and-business-logic.md, cross-links inskills/README.mdand.cursor/skills/yieldomega-guardrails/SKILL.md.Automated checks (local)
frontend:npm ci,npm run typecheck,npm test,npm run build— all green.Checklist for you
VITE_WALLETCONNECT_PROJECT_IDis set in the deployed env (empty → injected-only, no QR / WC).VITE_CHAIN_ID).Leaving the issue open until you sign off.
Partial verify on
46f38c1— items 1 + 4 PASS, items 2 + 3 blocked on SafePal-equipped device.Source review
frontend/src/wagmi-config.tsata8d387a:rainbowKitWalletGroupswith explicit Popular group: safeWallet, rainbowWallet, baseAccount, metaMaskWallet, safepalWallet, walletConnectWallet — passed viawallets:togetDefaultConfig, replacing the default Popular list that omitted SafePalmultiInjectedProviderDiscovery: trueset on BOTH branches: the RainbowKitgetDefaultConfigpath AND the injected-only fallback (createConfig({ chains, connectors: [injected()], transports, ssr: false }))So even with empty
VITE_WALLETCONNECT_PROJECT_ID(injected-only build), EIP-6963 discovery is on, which is what SafePal extension needs to be discovered viaisSafePal/safepalProvider.Item 1 — VITE_WALLETCONNECT_PROJECT_ID env handling
Verified the empty-env path. With the var unset, console prints
[yieldomega] VITE_WALLETCONNECT_PROJECT_ID is empty — using injected wallets only (no WalletConnect / Reown). Set the env var for mobile WalletConnect.(observed live during today's #83 / #75 verification sessions). Build proceeds via the injected-only branch which keepsmultiInjectedProviderDiscovery: true. PASS for the empty-env codepath; deployed-env value is a deploy-config concern, not source.Item 4 — Regression: MetaMask still appears + connects
Used MetaMask continuously today across the #83 / #75 verification work — chain 31337, multiple connect / approve / signed-tx flows including ETH single-tx
buyViaKumbayaand CL8Y direct buys. No regression. PASS.Item 2 — SafePal browser extension visible + connects
BLOCKED. Don't have SafePal extension installed on the QA laptop, and SafePal isn't a routine extension on this rig. Source review above shows the wiring is correct and the EIP-6963 path is enabled. Live click-test needs a SafePal-equipped browser.
Item 3 — SafePal mobile WC flow
BLOCKED. Same root cause + needs
VITE_WALLETCONNECT_PROJECT_IDset for the WC deep-link path, which is not configured in the local QA build (verified empty above). Live test needs SafePal mobile + a WC project ID in the deployed env.Suggested next step
Source + injected-only regression are clean. Items 2 + 3 need either a second QA reviewer with SafePal, or you can sign off based on source equivalence with the integrator-kit pattern (RainbowKit's
safepalWalletconnector handles the discovery + WC fallback). Flag preference and I'll take it from there.cc @PlasticDigits
@Brouie Setup a browser profile with safepal (chromium + safepal). Can use a walletconnect project id from a different project for testing
SafePal browser extension verified end-to-end on the QA stack today. Items 1, 2, and 4 PASS. Item 3 is a deploy-config concern only and the underlying source path is verified ready. Closing.
Item 1 - VITE_WALLETCONNECT_PROJECT_ID env handling
Verified yesterday on
46f38c1. Empty-env path falls back to injected-only branch with multiInjectedProviderDiscovery: true preserved. Console banner "[yieldomega] VITE_WALLETCONNECT_PROJECT_ID is empty - using injected wallets only (no WalletConnect / Reown). Set the env var for mobile WalletConnect." present and correct. PASS.Item 2 - SafePal browser extension visible + connects
Today on the running
799cf6fSKIP+KUMBAYA + NO_COOLDOWN stack:Single observed UX nuance worth flagging - on the first attempt, the buy seemed to "submit indefinitely" because SafePal's second prompt for the buy tx didn't surface visibly until I clicked the SafePal extension icon to wake the queued prompt. This is a SafePal extension behavior (queueing rather than auto-popping the second prompt after the first is signed), not an issue with the YO frontend wiring. Worth noting in case it surfaces in user reports later.
PASS.
Item 3 - SafePal mobile WC flow
Not exercised on the QA stack. The QA server build runs with VITE_WALLETCONNECT_PROJECT_ID empty (injected-only branch), which is correct for the local-anvil mode but means the WC QR / mobile deep-link path is not even constructed in the bundle. Proper Item 3 verification needs:
Source-side, this path is already verified ready in
46f38c1: rainbowKitWalletGroups passes safepalWallet ahead of walletConnectWallet in the Popular group, which means RainbowKit's safepalWallet connector handles the injected detection first (Item 2 path, exercised live today) and gracefully falls through to the WC + mobile deep-link path when the extension is absent. The connector itself is the integrator-kit canonical pattern, no custom wiring on our side.Recommend treating Item 3 as a staging/production smoke check that the deploy team handles with a real production VITE_WALLETCONNECT_PROJECT_ID + SafePal phone, not a QA-checklist item against the local Anvil stack.
Item 4 - MetaMask / WalletConnect / Safe regression
Continuous regression across yesterday and today's sessions. MetaMask connected and signed transactions across multiple flows (#82 verification with 4 distinct buys today, #88 verification with deployer+test-wallet buys, #87 e2e suite where wallet writes pass green). No regression. PASS.
Closure recommendation
The SafePal integration is verified on the path that the QA stack can actually exercise. Closing.
cc @PlasticDigits
mentioned in issue #89
mentioned in issue #39
mentioned in issue #219