SuperWallet docs
v1.1.0
Wallet demoAdmin demo Get help
● Reference · Versions

Changelog
what changed, when.

Every release, newest first. Read the entry for your target version before you update.

011.1.0

Current 2026-10 · app 1.1.0 · admin panel 1.1.0

Changed

  • Safe defaults: on a fresh install the swap fee is off and every fee wallet is empty.
  • The swap fee is capped at 2 % (200 bps) in the admin and in the app.
  • Admin → Monetization has two fee wallets: an EVM wallet for 0x and 1inch swaps and a Solana wallet for Jupiter swaps. Jupiter pays the fee into the Solana wallet's token account for the token the user receives; that account must exist.
  • The admin config address is now the ADMIN_CONFIG_URL build setting, empty by default (Remote Config only), instead of an address written in the code.
  • The firebase_options.dart files in the package are placeholders with no project values (Firebase stays off until you connect it); run flutterfire configure for both apps.
  • The admin demo mode exists only in builds made with the demo build switch; there are no default demo credentials.
  • Web build: the wallet vault is now locked with a vault passphrase (10 characters or more). PBKDF2-HMAC-SHA256, 600,000 iterations through the browser's Web Crypto, encrypts the vault's AES key and wraps the key flutter_secure_storage keeps in the browser. Revealing the recovery phrase, encrypted backups, security settings and every signing — sends, swaps, WalletConnect signatures and transactions, speed-up and cancel — ask for the passphrase again, whatever the amount; the 1.0.0 web build asked for nothing at all (details).
  • Web build: the Content-Security-Policy in crypto_wallet/firebase.json no longer allows 'unsafe-inline', 'unsafe-eval' or scripts from arbitrary https: origins; script-src names its origins. style-src has no 'unsafe-inline' either: the page styles are in files, and the two style blocks the Flutter engine injects are allowed by their SHA-256 hashes (details).
  • Portfolio Brain (callPortfolioBrain) enforces Firebase App Check, requires a server-verified, paid PRO plan (the free trial does not include it), accepts structured portfolio data instead of a free-text prompt (questions up to 500 characters, token budget set by the server) and has a per-user and a global daily cap (PORTFOLIO_BRAIN_USER_DAILY_LIMIT, PORTFOLIO_BRAIN_GLOBAL_DAILY_LIMIT). The app activates App Check at start-up.
  • bootstrapFirstAdmin requires the new ADMIN_SETUP_TOKEN secret (or a caller signed in as OWNER_UID) and locks itself after the first admin is created; an empty admin_users collection is no longer enough.
  • The app ships English only; its text comes from app_en.arb.
  • A store subscription unlocks PRO only for the account that bought it: the purchase carries an account token (appAccountToken / obfuscatedAccountId), the server reads the subscription from Apple or Google and refuses it for any other account (details). New APPLE_BUNDLE_ID setting in functions/.env.
  • The app clears a local PRO when the server reports no entitlement, and the web build never takes PRO from browser storage.
  • Restoring a store subscription on a new device files a transfer request that the operator approves in Admin → Users; approval re-checks the purchase with Apple or Google and moves it, so it is never active on two accounts. Sandbox purchases unlock PRO only with APP_STORE_ALLOW_SANDBOX=true.
  • The iOS and Android paywall shows the store's own localized price; the admin weekly price is used for the crypto payment.
  • Store subscribers count as PRO in the admin and trigger the new-PRO webhook (https URLs only).
  • macOS shows the crypto PRO payment only in builds made with --dart-define=DIRECT_DISTRIBUTION=true (details).
  • The admin demo workspace starts empty (no sample users, swaps or revenue), and the Monetization page shows recorded fees instead of a projection.
  • Inter (SIL OFL 1.1) is bundled in assets/google_fonts/ of both the wallet and the admin panel, so neither downloads Inter at runtime.
  • The admin's change-history screen is now called Activity Log (same data and Firestore collection as before).
  • The backend has 30 Cloud Functions (crypto_wallet/functions/src/index.ts).
  • Crypto payment for PRO (web and self-distributed macOS builds) is verified on-chain by the verifyProCryptoPayment Cloud Function. Each plan has its own EUR price: the weekly price, plus optional monthly and annual prices in Admin → System Config; a plan without a price is not sold for crypto.

Removed

  • Stripe web checkout (the Cloud Functions, the app code, the STRIPE_* settings and the stripe package), the bridge platform fee setting, the referral program (screen, settings and admin card), the per-feature PRO switches, rate limits and the two extra webhook fields that nothing read (Admin → Monetization now has one PRO features switch), and the unused validateAppleReceipt / validateGoogleReceipt functions with the APPLE_SHARED_SECRET setting.
  • Admin tools that had nothing on the wallet or server side to act on them: promo codes (and the validatePromoCode function), the A/B Testing screen and feature flags, the list of announcement banners and its A/B test, and the PRO Trial and Bonus Points campaign types. Campaigns keep Zero Fee and Promo Banner, which the wallet applies; the single announcement line stays in Remote Config.
  • The Claude key field on the admin Security page. Portfolio Brain reads its key only from the CLAUDE_API_KEY secret (firebase functions:secrets:set CLAUDE_API_KEY).
  • The untested windows/ and linux/ folders. The wallet targets iOS, Android, web and macOS.

Fixed

  • macOS: wallets, the app PIN and saved API keys are kept in the login keychain, so they are still there after the app quits; no keychain entitlement is needed for them (lib/core/security/keychain_options.dart).
  • Jupiter (Solana) swap fee: the fee is now sent to your token account for the token the user receives. 1.0.0 sent the wallet address, which Jupiter rejects, so Solana swaps earned nothing.
  • The Revenue screen counts a fee only when a fee was attached to a completed swap.
  • The full test suite completes (two tests used to hang); flutter analyze reports no errors or warnings.
  • Android builds no longer depend on a path from the author's machine.
  • The swap quote's Wallet fee line and the PRO screen show the fee you configured in the admin, and None when no fee is set; they no longer show a fixed 0.35 %.
  • iOS: the App Attest entitlement is in Runner.entitlements, so App Check (and Portfolio Brain) works in release builds (setup).
  • PRO no longer advertises "priority routing" (every user gets the same best-quote routing).
  • The free PRO trial follows Admin → Monetization → Trial Days. With No trial (the default) the app hides the trial button and adminStartTrial refuses the request; otherwise the app shows "Try N days free" and the server grants exactly N days (at most 30), once per account. 1.0.0 always granted 24 hours whatever the setting. A trial never unlocks Portfolio Brain.
  • Admin → Users → Start Free Trial now starts the trial for the selected user (superAdmin only) with the configured length; in 1.0.0 it started it for the signed-in admin.
  • If bootstrapFirstAdmin fails while creating the admin, it removes its lock (_system/admin_bootstrap) again, so you can simply retry.
  • The wallet test suite passes from the package as delivered, without a .firebaserc file.

Migration from 1.0.0

  1. Config addressIf you had changed kAdminConfigUrl in lib/core/config/app_config.dart, move that address to ADMIN_CONFIG_URL in crypto_wallet/.env (how).
  2. Firebase settingsKeep your own lib/firebase_options.dart in both apps, or run flutterfire configure again.
  3. FeeIf your fee was above 2 %, set 2.0 % or lower and publish. To earn on Solana swaps, fill the Solana fee wallet and create its token accounts (how).
  4. Web walletsIf you or your users created a wallet in a browser with 1.0.0, the first start of 1.1.0 asks for a new vault passphrase and moves that browser vault behind it. Tell web users to have their recovery phrase at hand before they update.
  5. RedeployFunctions and rules, then release new app builds (How to update).

021.0.0 · 2026-09

App 1.0.0+9 · admin panel 1.0.0+1

  • Flutter wallet for iOS, Android and web: EVM networks, Bitcoin, Solana, Tron and Sui; create and import wallets; send, receive, swap (0x and 1inch on EVM, Jupiter on Solana), bridge, buy; NFTs; Discover and dApp browser; WalletConnect v2; PRO subscription; price alerts; security center.
  • Flutter web admin with 21 screens, from Overview to Publish Config.
  • Firebase backend: rules and indexes, Remote Config template and Cloud Functions for admin access with an authenticator, config publishing, push, fee records, PRO checks (App Store, Google Play, crypto).
  • Swap fee presets from Free to 2 % on 0x and 1inch routes, paid on-chain to your wallet.
  • Fee wallet and prices ship empty; you set them in the admin.

Migration: none, first release.

03How to update

Keep the original package and your changes apart from day one, so a new version is a merge, not a rewrite:

cd superwallet               # the folder with crypto_wallet/ and crypto_wallet_admin/
git init
git add .
git commit -m "SuperWallet 1.0.0 (original)"
git branch vendor            # untouched copy of the original
  1. Back upAdmin → Publish Config → Save Version Snapshot; commit your work.
  2. Download the new versionCodeCanyon → your account → Downloads → SuperWallet → All files & documentation.
  3. Unpack the new version on the vendor branch
    git checkout vendor
    # delete the old files (not .git), unzip the new version here
    git add -A
    git commit -m "SuperWallet <new version> (original)"
    git checkout main
    git merge vendor
  4. Resolve conflictsUsually only in files you rebranded. Keep your values, take the new code.
  5. Redeploy the backendRules, indexes and functions — not Remote Config, unless the entry says so.
    cd crypto_wallet
    firebase deploy --only firestore:rules,firestore:indexes,functions
  6. Release the appRaise the build number, build, upload. For an important fix, set Minimum App Version in Admin → Remote Config once the new version is live.

Versions follow major.minor.patch: a patch fixes bugs, a minor adds features with safe defaults, a major may need migration steps, which are always listed here.