● 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_URLbuild setting, empty by default (Remote Config only), instead of an address written in the code. - The
firebase_options.dartfiles in the package are placeholders with no project values (Firebase stays off until you connect it); runflutterfire configurefor 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_storagekeeps 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.jsonno longer allows'unsafe-inline','unsafe-eval'or scripts from arbitraryhttps:origins;script-srcnames its origins.style-srchas 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. bootstrapFirstAdminrequires the newADMIN_SETUP_TOKENsecret (or a caller signed in asOWNER_UID) and locks itself after the first admin is created; an emptyadmin_userscollection 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). NewAPPLE_BUNDLE_IDsetting infunctions/.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
verifyProCryptoPaymentCloud 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 thestripepackage), 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 unusedvalidateAppleReceipt/validateGoogleReceiptfunctions with theAPPLE_SHARED_SECRETsetting. - Admin tools that had nothing on the wallet or server side to act on them: promo codes (and the
validatePromoCodefunction), 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_KEYsecret (firebase functions:secrets:set CLAUDE_API_KEY). - The untested
windows/andlinux/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 analyzereports 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
adminStartTrialrefuses 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
bootstrapFirstAdminfails 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
.firebasercfile.
Migration from 1.0.0
- Config addressIf you had changed
kAdminConfigUrlinlib/core/config/app_config.dart, move that address toADMIN_CONFIG_URLincrypto_wallet/.env(how). - Firebase settingsKeep your own
lib/firebase_options.dartin both apps, or runflutterfire configureagain. - 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).
- 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.
- 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
- Back upAdmin → Publish Config → Save Version Snapshot; commit your work.
- Download the new versionCodeCanyon → your account → Downloads → SuperWallet → All files & documentation.
- 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 - Resolve conflictsUsually only in files you rebranded. Keep your values, take the new code.
- 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 - 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.