Skip to content

wallet: fix crash on double block disconnection

The wallet crashes if it processes the same block disconnection event twice in a row due to an incompatible coinbase transaction state. This happens because disconnectBlock provides TxStateInactive without the "abandoned" flag for coinbase transactions to SyncTransaction, while AddToWallet() internally modifies it to retain the abandoned state.

The crash flow is as follows:

  1. On the first disconnection, the transaction state transitions from "confirmed" to "inactive," bypassing the state equality check since the provided state differs. Then, AddToWallet internally updates the state to "inactive + abandoned"

  2. On the second disconnection, as we provide only the "inactive" state to SyncTransaction(), the state equality assertion fails and crashes the wallet.

Reviewers Note: The crash can easily be replicated by cherry-picking the test commit in master.

Merge request reports

Loading