Disclosure of the details of a mempool inconsistency due to TRUC “sibling eviction” rules firing on reorg. A fix was released on October 10th 2025 in Bitcoin Core v30.0. Affected versions are 28.0 to 28.2 and 29.0 to 29.1.

This issue is considered High severity.

Details

Transaction relay policy applies extra topology restrictions to version 3 (“TRUC”) transactions (see BIP 431): a TRUC transaction may have at most one unconfirmed ancestor and at most one unconfirmed descendant. These are mempool policy rules, not consensus rules, so a valid block may contain any topology, including a TRUC parent with several children. When a transaction submitted to the mempool would give a TRUC parent a second unconfirmed child, Bitcoin Core’s “sibling eviction” logic (introduced in v28.0) treats the existing child as a replacement candidate and, if the new transaction pays enough, evicts it under replace-by-fee rules.

During a chain reorganization, the transactions from the disconnected blocks are re-added to the mempool with bypass_limits=true. This is meant to restore previously-confirmed transactions faithfully, without applying mempool anti-DoS or topology policy. The bug was that the sibling-eviction branch was not gated on bypass_limits, so TRUC enforcement still ran while transactions were being re-added.

A reorg can restore a transaction topology that violates TRUC’s descendant limit: valid in a block but impossible to form in the mempool. Re-adding such transactions with sibling eviction still active could evict a restored transaction while leaving its in-mempool descendants behind, so the mempool held transactions spending outputs that no longer existed.

The main effect of this inconsistent state is that a miner’s block template creation can no longer succeed: the assembled template fails its validity check, so a node that performed such a reorg cannot produce blocks until it is restarted, which reloads the mempool in a consistent state. This was fixed in PR #33504 by gating the TRUC checks on bypass_limits, so that sibling eviction no longer runs during reorg re-addition.

Attribution

Credit goes to Niklas Goegge for discovering and responsibly disclosing this issue.

Timeline

  • 2025-09-26 - Niklas Goegge reports this issue to the Bitcoin Core security mailing list
  • 2025-09-29 - Greg Sanders opens PR #33504 with the fix
  • 2025-10-02 - PR #33504 is merged into master
  • 2025-10-03 - The fix is backported to the 29.x branch in PR #33474
  • 2025-10-06 - The fix is backported to the 30.x branch in PR #33473
  • 2025-10-07 - The fix is backported to the 28.x branch in PR #33535
  • 2025-10-10 - Bitcoin Core 30.0 is released with a fix
  • 2025-10-14 - Bitcoin Core 29.2 is released with a fix
  • 2025-10-17 - Bitcoin Core 28.3 is released with a fix
  • 2026-10-27 - The last vulnerable Bitcoin Core version (29.x) goes end of life
  • 2026-11-10 - Public Disclosure