Three fixes in one turn. CROSS-NAV — Artemision · Katalogos · Listing · Swap · Deposit all now actually land somewhere. - New deep-link protocol: hash form (#tab=… &sub=… &view=…) instead of query string. The BNS gateway strips ?query from path-key resolution so `wallet/?tab=agora` falls back to the name-root landing; hash never hits the gateway. - src/deepLink.ts::deepLinkParam(name) reads hash first, query second. All wallet-side sniffers switched to it (App.tsx tab · AgoraScreen panel · AnthemusScreen view · ArtemisionScreen sub · KatalogosPanel open=publish). - ExchangePanel takes a `routes` + `linkTarget` prop; AnthemusKiosk populates it with wallet URLs opening in a new tab (deviant.x/wallet/#tab=…). Wallet-embedded ExchangePanel keeps the old hash-only defaults. - KatalogosPanel opens the Pinax registration modal automatically when the deep link carries open=publish, so the Listing link lands on the "add asset" form instead of the readonly directory. ASSET CHIPS — Favorites/All/Fiat replaced with ★ · BCH · USD · EUR per user request (Binance-style compact chips). - Single-select with click-again-to-clear; no active chip = show all. - ★ chip is icon-only, gold when active; currency chips filter pairs whose base OR quote ticker matches. Counts render next to each chip and update as favorites change. - Persists to deviant.anthemus.assetChip; retired the assetTab key. PIN ENTRY — two pads on one screen is fixed. Set-a-PIN now walks choose → confirm sequentially: single pad on screen, "Next" advances after ≥ 4 digits, "Back" returns to edit the first without clearing. Same PinPad component, two-step state (pinStep) inside Onboarding. ASSET-BASE FIX — the BNS gateway injects `<base href="/bns/<name>/">` into every served HTML, which broke the subpath deploy: assets at `/bns/deviant.x/wallet/assets/…` were resolved against the name root and 404'd. Now building with DEVIANT_BASE=/bns/deviant.x/wallet/ so all asset paths are absolute — the gateway's injected base becomes irrelevant. Cross-bucket loads (anthemus.dex → wallet's assets) work by design because the origin is the same. Deployed to bns/deviant.x/wallet/ + bns/deviant.x/anthemus/. Verified end to end: wallet boots at deviant.x/wallet/, kiosk fires at anthemus.dex/, chips filter correctly (USD→2 rows, ★→favorites only), PIN flow shows one pad at a time. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| android | ||
| patches | ||
| public | ||
| src | ||
| test | ||
| .env.example | ||
| asm.html | ||
| BETA_TESTING.md | ||
| capacitor.config.ts | ||
| DEPLOY.md | ||
| index.html | ||
| NATIVE_BUILD.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| redeploy.sh | ||
| tsconfig.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
| WALLET-COORDINATION.md | ||
shells/app/ — Deviant wallet shell (Capacitor + Vite + React)
The production wallet shell: the four-tab CosmoGenesis IA over the existing shared
TypeScript core, running in-process, client-side, non-custodially in the WebView
(desktop browser = same engine class — build/verify here first). No core fork, no
nodejs-mobile, no IPC bridge — proven viable in snapshot 0044 via the noble crypto shim
(ADR-0023). Full brief: ../../design/CAPACITOR_HANDOFF.md.
Status — chipnet beta (snapshot 0102)
The shell is a feature-complete, installable chipnet beta (web/PWA). Onboarding,
real keystores (web + native), live balance, swap broadcast, token import, sweep, and
activity all work; production vite build is green and a 17-test vitest suite covers
keystore/registry/safety. See BETA_TESTING.md (tester runbook) and NATIVE_BUILD.md
(device build). Remaining ⬜ items are device-only or post-beta.
| Piece | State |
|---|---|
vite.config.ts (node polyfills, @core/@design, noble shim default, esnext, code-split manualChunks) |
✅ dev + vite build green, no chunk-size warning |
src/core/wallet.ts thin client |
✅ session, balance, swap plan→execute (real broadcast), BCH send, token register, history |
KeyStore — WebKeyStore (AES-GCM/PBKDF2 vault) + CapacitorKeyStore (Keychain/Keystore + biometric) |
✅ runtime-selected via Capacitor.isNativePlatform(); created wallets restore from their own seed (R-017 fixed) |
Token registry — LocalStorageTokenRegistry |
✅ persists across sessions; chipnet ASM/ASM2 auto-seeded |
Onboarding (create/restore/PIN) + loading splash + Manifesto |
✅ phone-framed tap-to-enter splash; manifesto carries to welcome |
CosmoGenesis theme + src/shell.css + PWA (manifest, sw.js, icon) |
✅ installable on Android/desktop Chrome |
Beta safety — buildInfo.ts + BetaBanner |
✅ mainnet structurally absent; persistent banner |
| Main / Assets / Artemision / Apps / Settings tabs | ✅ built (Artemision create wizard; genesis broadcast ⬜) |
| Swap (Builder → live quote → broadcast) | ✅ planSwap/executeSwap on chipnet |
| Receive (real addr + QR) / Send (BCH broadcast) / Activity / Sweep / Token import | ✅ chipnet |
Native iOS/Android packages (cap add), camera QR scan, live WalletConnect/CashConnect, genesis broadcast |
⬜ device-only / post-beta |
Run
npm install # core deps (mainnet-js/cashscript/libauth) resolve from repo root
npm run dev # Vite dev server — noble shim crypto (ADR-0023) by default
npm run build # production bundle (noble shim; esnext target)
USE_WASM=1 npm run dev # opt back into raw libauth WASM (dev only; it has a top-level await)
Crypto: the bundle replaces libauth's WASM crypto with the pure-JS @noble shim by
default (ADR-0023) — no WASM, no top-level await, bundles cleanly and runs on any engine.
The core is imported from the repo's compiled dist/ via @core; run npm run build
at the repo root first if dist/ is stale.