Description
Transaction confirmations can get stuck at 0 in Cake Wallet even when the connected node has fully confirmed the transaction. Both mobile and desktop are affected. Restarting the wallet or triggering a manual resync fixes it.
Steps to reproduce
- Send a Monero transaction using Cake Wallet connected to a personal full node
- Transaction appears with 0 confirmations
- Wait for the transaction to be mined and confirmed (verified via direct RPC query to the node — 16 confirmations)
- Cake Wallet still shows 0 confirmations on both sender and receiver wallets
- Restart the wallet → confirmations update correctly
Environment
- Cake Wallet (both mobile and desktop, latest versions)
- Connected to a personal monerod node (v0.18.4.6, fully synced, healthy)
- Node verified serving correct data: direct RPC call to
get_transactions returned "confirmations": 16, "in_pool": false, "block_height": 3633552
Analysis
The confirmation count in Cake is a snapshot value set when updateTransactions() runs, stored as a property on MoneroTransactionInfo. It's only refreshed when:
- A new block arrives and the
SyncListener detects a height change
onNewTransaction fires (which, due to a separate bug in monero_c, is tied to the refresh cycle rather than actual new transactions)
If the daemon connection is interrupted or the wallet is backgrounded and the listener state becomes stale, confirmations freeze. The _lastKnownBlockHeight == syncHeight early-return in SyncListener prevents updateTransactions() from firing until a height change is detected, but if the cached height matches the current height on reconnect, no update is triggered.
Additionally, there's no mechanism to re-query confirmation state for transactions already in the local transaction history. Once a MoneroTransactionInfo object is created with confirmations: 0, it persists until the entire transaction list is rebuilt.
Related
Description
Transaction confirmations can get stuck at 0 in Cake Wallet even when the connected node has fully confirmed the transaction. Both mobile and desktop are affected. Restarting the wallet or triggering a manual resync fixes it.
Steps to reproduce
Environment
get_transactionsreturned"confirmations": 16, "in_pool": false, "block_height": 3633552Analysis
The confirmation count in Cake is a snapshot value set when
updateTransactions()runs, stored as a property onMoneroTransactionInfo. It's only refreshed when:SyncListenerdetects a height changeonNewTransactionfires (which, due to a separate bug in monero_c, is tied to the refresh cycle rather than actual new transactions)If the daemon connection is interrupted or the wallet is backgrounded and the listener state becomes stale, confirmations freeze. The
_lastKnownBlockHeight == syncHeightearly-return inSyncListenerpreventsupdateTransactions()from firing until a height change is detected, but if the cached height matches the current height on reconnect, no update is triggered.Additionally, there's no mechanism to re-query confirmation state for transactions already in the local transaction history. Once a
MoneroTransactionInfoobject is created withconfirmations: 0, it persists until the entire transaction list is rebuilt.Related