Releases: SatoshiPortal/bullbitcoin-mobile
6.9.105-Internal Release
This release is only for testers. It is a proposed fix to the android migration failure issue #1879 .
It does not fix a broken storage, it only ensures that updates are safer for users.
Please reference #1879 (comment) for Test instructions
The changelog stays the same as https://github.com/SatoshiPortal/bullbitcoin-mobile/releases/tag/v6.9.1, with the addition of:
- Flutter secure storage hybrid strategy without migration
- Removal of boltz testnet support
- Prevent duplicate mnemonic import
- New onboarding wizard
- Server status page now makes more realistic calls
Update Log
29/04/26 11:31 PM IST : 6.9.102
- Fixes fss initalization for new installs
30/04/26 10:10 PM IST: 6.9.103
- Fixes mnemonic import bug causes freeze/crash
- Route unauthenticated user to login via buy/sell/withdraw
- Fixes crash for unknown script transactions
- Fixes routing to support via Get Help
- Dark mode fix for delete logs
- Dark/Light mode fix for swap fees
04/05/26 10:01 PM IST: 6.9.104
- Adds electrum timeout and retry via bdk-dart
- Text color on swap fees
- Text color on delete logs
05/05/26 10:01 PM IST: 6.9.104
- Allows electrum stopGap upto 5000
- New startup Wizard
- New Storage Warning Screens
- Pull to sync does not land loader behind bull logo
- Fix: Spam create wallet on startup
6.9.6-fss-rescue
WARNING: This is a build that only performs secure storage rescue for users affected by a failed secure storage initialization.
Only use this release if the support team has recommended it.
6.9.1
⏺ New Features
- Better handling of FSS10 Migration failure on android via FSS hybrid storage — apps that fail to migrate will fallback to legacy storage with a warning on home to backup and reinstall the app
- Colombia (COP) deposits — new COP payment link deposit flow
- SINPE receipt on tx details — reusable card on success + details screens
- Pull-to-refresh on wallet home can be triggered from anywhere on the screen
- Reproducible builds + dev containers
- Real-time WebSocket notifications — balance, KYC status, and group membership updates arrive instantly instead of polling every 5 seconds
- Real-time support chat — support messages appear immediately via WebSocket push
- Enhanced exchange settings menu — new functional screens: Recipients, Transactions, Default Bitcoin Wallets, App Settings, Secure File Upload,
Statistics - Email notifications toggle — enable/disable email notifications in App Settings
- Secure file upload — KYC document upload screen with status indicators (Upload, In Review, Accepted)
- Trading statistics dashboard — buy/sell ratio, trade volumes, trade counts, average prices, and biller statistics
- Announcement banner improvements — truncated descriptions with ellipsis; tap to open full details in a bottom sheet
- Preferred currency improvements — exchange home handles empty balance currency; deposit/withdraw/pay screens default to preferred currency
- Backup warning overlay — bottom sheet hard warning for backup
- Scam consent warning — explicit consent required before funding exchange account
- Randomized OHTTP relay selection — relay randomly selected per payjoin call via Random.secure() to prevent network fingerprinting
- Payjoin self-transfer detection — detects self-spent transactions and shows a "Self-transfer" row on confirmation; self-spends bypass payjoin
- Close button on broadcasting screen — added since the app no longer auto-progresses when autosync is disabled
- 11 new languages — Arabic, Bulgarian, Bengali, Czech, Greek, Persian, Hindi, Korean, Brazilian Portuguese, Thai, Turkish
- Detailed German translations — community contributions from @bsn21m
- Opt-in error reporting — optional, self-hosted (disabled by default); only collects error reports and stack traces, no telemetry
- Ledger hardware wallet support
Bug Fixes
- Fix address index issue via update to bdk-dart (bdk 2.0)
- Swap watcher race condition — fixed race condition that could cause status update issues
- MRH swap — uses transaction ID to fully resolve as a swap transaction
- Swap flow wallet autoselect - prevents self-spends or same network sends in the swap/transfer flow
- Price graph refresh — users can now manually reload Bitcoin prices if automatic loading fails
- LN receive success screen crash — fixed UI crash on Lightning receive success screen
- Insufficient balance navigation — Continue on send amount page with insufficient funds no longer navigates to confirm page
- Amountless invoice handling — throws a more descriptive error for amountless invoices on swaps
- WebSocket reconnect loop — fixed infinite reconnect loop for unauthenticated users
- Exchange statistics — linear progress indicators, integer trade counts, currency conversion, thousands separators
- Correct DCA confirmation text color in dark mode
- Support chat attachments — improved image picker with better permission handling and clearer errors
- CA KYC sell limit — enforced $999 CAD buy/sell limit for Canadian users with limited KYC
- Argentina recipients fix
- Labels feature refactor — complete architecture refactor with database migration v11→v12; fixed upsert constraint failures, SQLite
concurrency, and multiple related issues fixed. - Transaction note persistence
- Physical backup verification — fixed backup test status not updating after completing verification
- Backup-before-PIN safety gate
- Keyboard input — fixed price input keyboard on iOS to show correct number pad with decimal settings
- Keyboard lag — fixed lag when importing mnemonic passphrase or typing in label input fields
- Prevent using capital letters for mnemonic that was leading to errors
- Correct Testnet electrum URLs
- Custom mempool server — SSL toggle (auto-detected from URL), improved URL parsing/normalization, server status indicators, dark mode fixes and hidden service support via Orbot
- Recoverbull Orbot detection — checks if Orbot is actually running on port 9050 instead of relying on user settings, preventing Tor-over-Tor errors
- Dark theme fixes — QR code backgrounds, PSBT flow, exchange logout sheet, Recoverbull button, custom Electrum server widget, exchange home KYC status card
- PIN light theme readability
- Custom fee dark mode fix
- DCA UI fixes
- Light mode exchange banner fix
- Startup lag fix — fixed lag during wallet and seed loading on startup
- Startup error screen — gracefully handles and displays startup failures instead of freezing
- LWK database fixes — fixed Liquid wallet database initialization issues
- SQLite migration safety — catch blocks around label migration to prevent crash on failure
- Background tasks cleanup — removed unnecessary background tasks causing unexpected swap states and lwk db corruption
- Autoswap notice/warning fixes
Acknowledgements
Special thanks to @iosifpeterfi for his contributions to flutter_secure_storage to implement a backup mechanism prior to migration on android and for general consultation on how to handle this issue regarding seed storage. With this backup mechanism we dramatically decrease the risk of data loss.
Huge effort by the rest of the team as well in handling this highly sensitive issue with seed storage and coming up with a workable solution.
6.8.2-fss-hybrid
This version uses two forks of the mainline flutter_secure_storage - one targeting v9 and the other targeting the latest v10 with migrateWithBackup that is compatible with v9
For devices that are unable to migrate to v10, the app will fallback to fss v9, recover data from v10 backup and show a warning to the user to backup their wallet and reinstall the app.
A fresh install will initialize v10.
This is a fix to #1879
This release and successive releases will not fix an app with a broken secure storage as a result of failed migration, it will only ensure that devices that have not yet updated are able to either migrate safely or fallback to deprecated storage and give them time to backup their wallet and perform a clean reinstall.
Swap Rescue Tool
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Secure Storage Rescue II
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Expires on 28th March, 2026
Swap-Rescue w/ Liquid Network Path Correction
WARNING: THIS IS NOT A PUBLIC RELEASE! ONLY USE IF ADVISED BY THE SUPPORT TEAM.
BACKUP YOUR WALLET SEED WORDS BEFORE RUNNING THIS BUILD!
This is an update to https://github.com/SatoshiPortal/bullbitcoin-mobile/releases/tag/v6.5.4-swap-rescue for a specific user who was running an older version prior to running the 6.5.4-swap-rescue apk where the liquid wallet was updated to the new network path. Additionally the version is bumped to 6.7.22 because this user had also run the secure storage rescue build and now requires a version above 6.7.21
This build checks the receive wallet ID used and udpates the path to the the correct latest network path.
Secure Storage Rescue
WARNING: THIS IS NOT A PUBLIC RELEASE. DO NOT RUN THIS RELEASE UNLESS ADVISED TO DO SO BY THE BULL SUPPORT OR DEVELOPMENT TEAM
Expires on 28th Feb, 2026
Swap-Recover-Build
WARNING: THIS IS NOT A PUBLIC RELEASE! ONLY USE IF ADVISED BY THE SUPPORT TEAM
BACKUP YOUR WALLET SEED WORDS BEFORE RUNNING THIS BUILD!
ONLY RUN THIS BUILD IF YOUR CURRENT VERSION IS 6.5.2
This release is only for users who have a very specific bug in swaps where the status was wrongly moved to completed. This build will allow you to manually set the status back to paid so the swap watcher triggers and attempts to claim it again.
NOTE: Do not use this on already completed swaps, as it will permanently leave it in a bad state and will never get marked completed because it is already completed and there is no utxo in the swap script to claim or refund. The UI will always show it as In Progress. We will not provide support for users who attempt to use this in such a way. Please follow the instructions provided by the support team and the instructions provided here.
Superuser mode is required to enable the rescue feature.
The setting can be found in Settings -> Bitcoin Settings -> Manual Swap Status Reset
Enter your swap id of your failed swap and click the Reset Swap button.
If you face an error on this screen, take a screenshot and share it with the support team.
If you see no error, then go back home and pull down to refresh and wait for the swap to complete processing.
If the swap still fails, share logs with the support team so we can debug the issue further.