Releases: FreeOnlineUser/bitcoin-pocket-node
v0.34.1-alpha - Data Usage Fixes + Smart Burst Sync
Smart Burst Sync
- Polls headers to detect new blocks (10s) instead of fixed delay
- Stays online until fully synced when new blocks exist (10min cap)
- 15s grace period after sync for LDK gossip/HTLCs/scoring
- No new blocks = fast disconnect
Data Usage Fixes
- Disconnect all peers when network goes offline (was only preventing new connections)
- Disconnect peers on mode transition to Low/Away
- Subtract loopback/localhost traffic from data usage counter (TrafficStats includes RPC to bitcoind)
- Skip Electrum wallet RPC polling when no addresses are tracked (fixes listtransactions error spam)
Full Changelog: v0.34-alpha...v0.34.1-alpha
v0.34-alpha - Reliable Chainstate Sharing
Share The Freedom - Now Reliable
Chainstate Consistency
- Always clean chainstate + block index before download, prevents corruption from mismatched snapshots
- Delete partial files on download failure, resume never skips corrupt data
- Check file dates in resume logic, updated files get re-downloaded
Peer Channel Limits
- Export/import floor, ceiling, and anchor support metadata
- Robust type handling (fixes silent import failures)
- Smallest tab populates correctly on received data
UI Polish
- Fix 99% stuck on sender (receiver now sends completion signal)
- Hide progress bar and file count when transfer completes
- Hide default port in address field
Internal
- Add lastModified timestamps to file manifest
- Dual completion detection (receiver signal OR file count match)
Full Changelog: v0.32.1-alpha...v0.34-alpha
v0.33-alpha: Lightning Unlocked + Relay Sharing
Lightning Unlocked
- Lightning works without block filters (LDK uses bitcoind RPC directly)
- Lightning button always visible, LDK Lightning toggle in settings
- Block filters default OFF (saves 13 GB). Total node: ~13 GB with full Lightning
- Fee estimate retry shows progress during first start
Share & Receive
- 'Copy from a trusted Pocket Node or relay' is the top bootstrap option
- Session progress, resume support, QR scan fixed
- Go to Dashboard button, services stop before download
- Cleartext HTTP for LAN connections
Channel Management
- Cooperative close fee floor (253 sat/kw)
- Force close confirmation, detailed balance breakdown
- Events drained every 10s
Cleanup
- Removed 'Add Lightning', 'Remove Lightning' buttons (obsolete)
- All docs corrected: filters for Neutrino wallets, not Lightning
- Default power mode: Max for first-run
v0.32.1-alpha: Stability + Safety
Initial Sync Fix
- Burst sync cycle no longer runs during initial block download (IBD). Was killing peers after ~50 blocks on LTE.
setNetworkActive(false)blocked during IBD. No code path can disable network mid-sync.
Power Mode Fix
- Mode no longer reverts to Low on service restart.
reloadFromPrefs()ensures saved mode persists.
Graceful Lightning Shutdown
All restart/update paths now stop Lightning cleanly before stopping bitcoind:
- Tor toggle
- Version switch (Core/Knots)
- BIP 110 toggle
- In-app update
- AdminReceiver (ADB)
Previously, version switch, BIP 110 toggle, and in-app updates killed Lightning without flushing state, risking channel corruption.
Other Fixes
- Stale error messages ("sync stalled") cleared on successful Lightning start
- AdminReceiver stays stopped (clears auto-restart flag)
- PowerModeManager architecture documented
Thanks to @MoneysNotNeeded for the detailed bug reports on the sync issue.
v0.32-alpha: Channel Safety + Recovery
Channel Safety
- WAL checkpoint after every channel/payment event. Forces SQLite writes to disk immediately. Prevents channel state loss on unexpected process termination. The fix for the mystery channel losses.
- WAL integrity check + TRUNCATE on startup. Detects corrupt WAL frames, merges everything into main DB file before LDK reads it.
- All auto-restarts disabled. Orphan rebroadcast and sync watchdog no longer silently restart Lightning. Shows error message instead. Manual restart is safer.
- Gossip logs dropped. LDK gossip (36k+ channel updates) was flooding the 256 KB logcat buffer, wiping all crash/debug logs. Now silenced.
Recovery
- Static Channel Backup (SCB). Saves peer pubkey, funding outpoint, and addresses on every channel open. On channel loss: connect to peer, they detect state mismatch, force-close. Proven to recover funds.
- Recovery UI. Lost channels card (red) shows SCB entries with recovery instructions. Missing on-chain funds card explains seed export to external wallet.
- Stale monitor injection removed. Was causing native crashes (SIGABRT in libldk_node.so). SCB is the correct recovery path.
Channel Management
- Event-driven network hold. Keeps peers connected while channel funding tx confirms in Low/Away mode. Holds on ChannelPending, releases on ChannelReady or ChannelClosed.
- Peer browser: Smallest tab. Shows all peers with known minimum channel sizes from probe results and rejection data, sorted smallest first.
Documentation
- Mobile Lightning Playbook. Consolidated hard-won techniques from 16 incident reports and design docs into one reference. WAL management, SCB, Tor routing, power modes, channel open UX, and more.
- Removed 16 obsolete docs (2,835 lines).
v0.31-alpha
Reliability, code quality, and UX improvements.
Balance and display fixes:
- On-chain balance no longer double-counts pending close funds
- Pending close hides after 6 confirmations (was lingering ~1 month)
- Blocks remaining countdown on pending close
- 'Catching up' status when blocks behind headers (was falsely showing 'Synced')
- Low Data banners show peer count during sync
Lightning fixes:
- Channel rejection banner with peer message
- Lightning Pay home screen re-locks correctly when no channels
- Min channel parsing fixed for integer BTC amounts (e.g. '2 BTC')
- Circuit breaker: auto-restart disabled after 3 consecutive crashes
- ANR fix: state refresh moved off main thread
Network and privacy:
- NetworkMonitor singleton (was 5x instantiated, inflating data usage)
- Reactive data usage flow (instant reset, no stale caches)
- Reset data usage button with confirmation
- Network privacy info panel (expandable, shows Tor routing per component)
- Approximate usage disclaimer
Architecture:
- LightningService reduced from 1172 to 989 lines
- Extracted: BalanceTracker, ChannelEventHandler, StateRefreshLoop
- Prune recovery moved to RecoveryManager
- 124 unit tests (was 53): balance, rejection, seed derivation, backup health, lifecycle, circuit breaker
Documentation:
- Disaster recovery path (seed + channel restore)
v0.30-alpha
UI polish and share improvements.
- Phone-to-phone share: clear completion indicator on both sender and receiver (safe to disconnect)
- Lightning screen layout: fund wallet, seed backup, channels, watchtower reordered
- Hide send/receive buttons until channel is open
- Removed legacy flat-file migration warning (was always SQLite)
- Channel loss prevention documentation
v0.29-alpha
Full Tor privacy, state backup, sync indicator
Tor Privacy Mode
- One-tap toggle routes all traffic through embedded Arti (0.39.0) SOCKS proxy
- bitcoind peers, LDK Lightning peers, RGS/scoring fetches all go through Tor
- .onion watchtower connection verified
- Hides your IP from the network. Node pubkey is still public (Tor hides location, not identity)
State Backup & Recovery
- Rolling SQLite state backups (3 slots) with health checks and auto-restore
- Detects state corruption on startup, restores from last healthy backup
- Legacy monitor fallback as last resort
- Smarter backup health check (compares against previous backup, not just thresholds)
Sync Indicator
- LDK sync progress shown on Lightning screen
- Orange spinner with blocks-behind count while catching up
- Grey block height when synced
Fixes
- Fix orphan funds restart loop
- Fix periodic backup interval (5 min, was firing every 10s)
- Fix HTTP timeouts for Tor (30s, was 5s)
v0.27.1-alpha (Pre-Tor Snapshot)
Pre-Tor Snapshot
Stable snapshot before Tor integration work begins.
Power-Aware Invoice Expiry
- BOLT11 invoices expire in 5 minutes on Low/Away mode (matches network hold)
- BOLT11 invoices expire in 24 hours on Max mode (always online)
- Toggle descriptions explain expiry and suggest Max mode for longer invoices
- BOLT12 toggle explains why it works best on Max mode (requires online for onion messages)
Peer Count Explainer
- Tap the B:N L:N badge for a popup explaining both peer types
- B: Bitcoin P2P peers for block sync, temporarily connects for Lightning operations
- L: Lightning peers for payments, stay connected even when Bitcoin network is paused
Full Changelog: v0.27-alpha...v0.27.1-alpha
v0.27-alpha
What's New
Dual Peer Count Badge
- Shows both bitcoind (B:N) and Lightning (L:N) peer counts on Lightning Pay screen
- Positioned below fold opposite Balance label
- Lightning peers stay connected independently of bitcoind network state
- Lightning gossip uses ~5-10 KB/hour, essentially free
Route Visualization Fixes
- Successful payment route now correctly displayed (was showing last failed attempt)
- Route data captured on fast payments (polls up to 3s after success)
- Failed routes shown as one-liners above successful route
Receive Screen UX
- Keyboard auto-dismisses when invoice generated
- Auto-scrolls to show QR code and copy button
- Auto-scrolls to payment received confirmation
Critical Bug Fix
- Burst sync was not starting on cold boot (network stayed fully open for ~15 min)
- Root cause: setRpc() called before setMode() in startup, activeScope was null
- Fixed in both cold-start and attach-to-running paths
Documentation
- New RELIABILITY.md: comprehensive reference for all reliability settings
- LDK safety buffers, chain polling, network holds, routing fees
- BIP-110 support claims corrected in README
Tests
- 12 new tests for startup order and network hold patterns
- Total: 53 tests across 7 suites
Full Changelog: v0.26-alpha...v0.27-alpha