Release v3.0.2: Atomic data sync, API resilience, progress indicators & fiat currency fix#62
Closed
boldbitcoin wants to merge 53 commits intomainfrom
Closed
Release v3.0.2: Atomic data sync, API resilience, progress indicators & fiat currency fix#62boldbitcoin wants to merge 53 commits intomainfrom
boldbitcoin wants to merge 53 commits intomainfrom
Conversation
…t/details) Made-with: Cursor
Made-with: Cursor
Both MpcSendBTCWithUTXOs and NostrMpcSendBTCWithUTXOs were calling
FetchUTXODetails (GET /tx/{txid}) twice per input inside the signing
loop. A single API failure mid-session aborted the entire MPC round.
Changes:
- UTXOWithPath and utxoWithPathJSON now carry a scriptpubkey field (hex)
- Both signing functions build prevOuts from inline scriptpubkey;
FetchUTXODetails is called only as a fallback when scriptpubkey is empty
(backward-compatible: old callers without scriptpubkey continue to work)
- WalletService.enrichUtxosWithScriptpubkey() fetches /tx/{txid} per
unique txid in TypeScript before MPC starts, with per-tx caching to
avoid duplicate fetches for multi-input transactions
- MobilesPairing and MobileNostrPairing call enrichUtxosWithScriptpubkey
and include scriptpubkey in the JSON passed to the native bridge
- NostrMpcSendBTCWithUTXOs and MpcSendBTCWithUTXOs now return errors on
invalid amountSatoshi/estimatedFee strings instead of silently using 0
Made-with: Cursor
… UTXO summary card
- Add MempoolClient: in-memory cache + in-flight dedup + per-endpoint TTL
(30 s default, 5 min tx, 60 s fees/price) + universal 10 s timeout
- Switch getWalletBalanceAggregate to /api/address/:address (chain_stats +
mempool_stats); ~50x smaller responses; expose pendingSats in WalletBalance
- WalletHome: shimmer replaces ActivityIndicator; displayFiat via useMemo
(fixes 0 BTC / non-zero fiat mismatch); amber pending chip for unconfirmed sats
- UtxosScreen: static balance summary card (Total / Confirmed / Pending with
UTXO counts) pinned above scrollable list
- Fix receive-flow address mismatch: getCurrentReceivePathInfo atomically
returns {path, index, address}; eliminates QR flicker at index boundary
- TransactionList: migrate axios → mempoolClient; remove manual timeout race
- TransactionDetailsModal: tighten flow-item accent bar style
- Update CHANGELOG.md with all v3.0.0 additions
Made-with: Cursor
…ansport - pump.go: fix TOCTOU race in processEvent — move the processed-map check to AFTER assembly under a single lock acquisition; parallel initial-query goroutines can no longer double-dispatch the TSS handler for single-chunk messages (root cause of the reported signing failure with multiple relays) - pump.go: replace fixed 1s retryTicker with exponential backoff (0→500ms→1s) for subscription failures and channel-close reconnects; reduces blind-spot window for messages arriving during relay reconnection - session.go: parallelize AwaitPeers initial relay query using sync.WaitGroup; a slow/offline relay no longer blocks the others from being scanned within the timeout budget (previously sequential) - session.go: continue publishing ready/complete wraps to all peers even when one peer's publish fails; report first error only after all peers attempted - session.go: replace fixed 1s retryTicker with exponential backoff for AwaitPeers subscription setup and channel-close resubscription; eliminates duplicated nested retry loop - config.go: increase ConnectTimeout default from 20s to 45s to give more room for mobile networks during peer rendezvous Made-with: Cursor
Remove trailing newlines flagged by `gofmt -s -l .` in CI. Made-with: Cursor
… balance consistency fixes Made-with: Cursor
- Central ApiQueue serializing balance/price/UTXO/tx operations with progress reporting (current/total) to CacheIndicator and RestoringIndexesModal - Atomic sync: BalanceSyncer, UtxoSyncer, TransactionSyncer collect all data in memory and only write to DB when every address succeeds - 429 rate-limit retry with backoff, Retry-After header support, and inter-address throttling (rateLimitRetry module) - Descriptive failure toasts per sync type - Fix: fiat currency (EUR etc) overwritten to USD on every cold start - Fix: MobilesPairing modal close navigates back - UtxosScreen dedicated header style, derivation path right-aligned - LoadingScreen version:build display - Mempool Playground: GET Historical Price endpoint - Updated CHANGELOG.md for v3.0.1 Made-with: Cursor
…HANGELOG Made-with: Cursor
- TransactionSyncer: always fetch from /txs first (forward pass) to find newly confirmed transactions, then backfill from stored cursor. Fixes devices missing transactions confirmed after initial sync. - WalletService: overlay DB is_confirmed/block_height/block_time onto parsed rawJson so the UI reflects confirmed status even when rawJson is stale. Fixes "Consolidating" shown for already-confirmed txs. - SyncCoordinator: periodic HD index re-discovery (24h staleness) to converge address ranges across multi-device wallets. Notifies UI via onAddressesChanged when new addresses are found. - Bump build number to 53 (Android versionCode + iOS build). Made-with: Cursor
Contributor
Author
|
Superseded by v3.0.3 release PR. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges all v3.0.1 work to main — full SQLite DB-first architecture with atomic sync operations, centralized API queue, rate-limit resilience, and multiple UX improvements.
Core Infrastructure
ApiQueue) — serializes all logical API operations (balance, price, UTXOs, transactions); drives CacheIndicator status text and progressBalanceSyncError,UtxoSyncError,TxSyncError)Retry-Afterheader parsing, inter-address throttling (300ms); sharedrateLimitRetrymoduleUX Improvements
current/total(e.g. "Fetching balance… 3/5")Bug Fixes
breakon!res.okchanged tothrowto prevent partial DB writesTest plan - e2e ok