feat(frontend): Terra Classic wallet parity with ustr-cmm #17
Labels
No labels
bug
docs
documentation
duplicate
enhancement
frontend
good first issue
help wanted
invalid
missing-implementation
priority
medium
product
QA
question
testing
UX
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/ustr-cmm#17
Loading…
Add table
Add a link
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
dex.cl8y.comConnect Wallet does not offer the full Terra Classic wallet set that ustr-cmm already supports (https://ust1cmm.com, repoPlasticDigits2/ustr-cmm). Retail users who connect on CMM with Leap (and, on the CMM preregister dApp, extra WalletConnect paths) cannot do the same on the DEX.Goal: DEX Connect Wallet + sign/broadcast must support every Terra Classic wallet ustr-cmm supports, without regressing the DEX-only mobile pairing work (#519 / #554) and without restoring the dead Leap Install URL that #159 removed.
Reference implementation: ustr-cmm
frontend/src/services/wallet.ts(header: Station, Keplr, LUNC Dash, Galaxy Station, Leap, Cosmostation) andfrontend/src/components/common/WalletButton.tsx. Extra WC rows also exist in ustr-cmmcontracts/external/cmm-ustc-preregister/frontend-dapp/.Problem statement
CMM and DEX share
@goblinhunt/cosmescontrollers, but the DEX product surface is a subset. Anyone already using Leap (or CMM’s extra WC wallets) hits a dead end on the DEX even though the same chain, sameterra1…accounts, and the same cosmes stack work onust1cmm.com.Closed #159 removed Leap because
leapwallet.io/download404’d (“Leap Wallet is being sunset”). That was the right fix for a broken Install CTA. It also dropped connect for users who already have the Leap extension (window.leap) — which CMM still offers.Evidence / current gap
frontend/window.keplr(#554 WC-M10)wallet.ts; no Connect list rowWalletNameDEX files that encode the subset:
frontend-dapp/src/components/wallet/connectWalletOptions.ts— Station, Keplr, Cosmostation, LuncDash, Galaxy Station onlyfrontend-dapp/src/services/terraclassic/wallet.ts— noLeapController;TerraWalletBackendexcludesleapfrontend-dapp/src/hooks/useWallet.ts— clears persisted Leap sessions on loadfrontend-dapp/src/components/wallet/walletIconSrc.ts/WalletModal.test.tsx— tests assert Leap is absentfrontend-dapp/src/services/terraclassic/walletExtensionInstall.ts— no Leap detection / no install URL (intentional #159)docs/frontend.md,QA_TEMPLATE.md,skills/AGENTS_FRONTEND_WALLET_CONNECT_MODAL.mdustr-cmm already wires
LeapController,window.leapdetect, andexperimentalSuggestChainfor Leap alongside Station / Keplr / Cosmostation.Constraints / guardrails
leapwallet.io/download(or any other 404). If Leap has a live download page, use that; otherwise offer Leap only when injected (window.leap) and/or via WalletConnect — no fake Install.wc:copy viaCopyButton, scheme allowlist, bounded connect/cancel, no AppKit/Web3Modal just for this./wallets/*asset +PROVENANCE.mdentry. No CDN hotlink.VITE_WC_PROJECT_ID: do not drop the Vite WC project-id guard (#378).window.keplr, keep the Keplr-browser hint for terms.Proposed solution (high level)
Match ustr-cmm’s Terra Classic connect list on the DEX, using the DEX’s existing modal / pairing / cancel stack (do not copy CMM’s glass modal wholesale).
LeapController,window.leapdetection, chain suggest, persist/TerraWalletBackend'leap', Connect row, logo. Reverse the “purge Leap localStorage on load” behaviour so a valid Leap session can reconnect. Install CTA only if a live official URL exists.isAllowedWalletConnectDeepLinkonly with documented vendor schemes (Leap / Station already partially represented via Hexxagon / Terra Station hosts).docs/frontend.md,QA_TEMPLATE.md,AGENTS_FRONTEND_WALLET_CONNECT_MODAL.md,AGENTS_FRONTEND_WALLETCONNECT_MOBILE.md. Flip tests that currently require Leap to be absent.Acceptance criteria
frontend/lists: Station, Keplr, Leap, Cosmostation, LUNC Dash, Galaxy Station.window.leapis present, row is Ready and connect + suggest-chain + sign (swap or dummy execute) works on columbus-5 / LocalTerra.javascript:/ arbitrary https from the payload.make verify-issue-NNNupdated. Tests that asserted “no Leap” are replaced with the new contract.Test plan (functional)
resolveConnectWalletOptionsincludes Leap; mobile without injection offers Leap/Station/Cosmostation WC where in scope; injected extension still Extension + Ready.isBrowserWalletExtensionDetected(WalletName.LEAP)followswindow.leap; WC-only names still not treated as missing extensions.javascript:/ off-allowlist https rejected.make verify-issue-554/make verify-issue-519stay green.Test plan (attack / abuse)
window.leapobject that throws on connectjavascript:/data:/ attacker httpshttps:and notleapwallet.io/download/wallets/*onlyVerification
make verify-issue-NNN(new) plus existingmake verify-issue-554.ust1cmm.comConnect modal.Owner type
frontend
Priority
P2 — wallet coverage / retail reach; not a funds-at-risk bug. Blocks users who already live in Leap / CMM WC wallets.
Related
PlasticDigits2/ustr-cmmfrontend/src/services/wallet.ts,frontend/src/components/common/WalletButton.tsx, preregisterfrontend-dapp/src/pages/TerraClassicPage.tsxmentioned in issue #18