The "Friday the 13th" Bug: Inside the ckBTC Double-Minting Postmortem
During the March 2026 Global R&D session, DFINITY engineers revealed the root cause behind a rare timing bug in the ckBTC minter canister. A cache race condition, triggered by a UTXO consolidation update, briefly allowed a double-minting event before being swiftly patched.
Key takeaways
- • During the March 2026 Global R&D session, DFINITY engineers revealed the root cause behind a rare timing bug in the ckBTC minter canister
- • A cache race condition, triggered by a UTXO consolidation update, briefly allowed a double-minting event before being swiftly patched

The "Friday the 13th" Bug: Inside the ckBTC Double-Minting Postmortem
In decentralized finance, bridging native assets across independent blockchains is a high-stakes engineering feat. On the Internet Computer (ICP), the chain-key Bitcoin (ckBTC) standard avoids centralized bridges by interacting directly with the Bitcoin network. However, during the March 2026 Global R&D session, DFINITY engineers shared a gripping postmortem of a subtle caching race condition that led to a rare double-minting event on a recent Friday the 13th.
Here is exactly how the bug slipped through, how it was resolved, and what it teaches us about high-throughput state machines.
How the Minter's Cache Failed
To understand the bug, you have to understand the normal ckBTC minting lifecycle:
- A user sends native Bitcoin to a unique address controlled by the ckBTC Minter Canister.
- The minter canister queries ICP’s native Bitcoin canister to get an updated list of Unspent Transaction Outputs (UTXOs).
- If a new UTXO is discovered, the minter mints the equivalent amount of ckBTC to the user.
To minimize state bloat and reduce transaction fees, DFINITY had previously introduced a UTXO consolidation feature, which merges thousands of scattered UTXOs into larger, consolidated outputs. Ironically, this consolidation set the stage for a timing collision.
During the incident on Friday the 13th, a specific UTXO was detected, ckBTC was minted, and the user immediately withdrew their Bitcoin, consuming that UTXO. Under normal conditions, the output should have vanished from the minter's tracking state. However, less than 60 seconds later, a query triggered a cache hit from a stale local query cache. Because the minter had "forgotten" the just-consumed UTXO in its active memory but received it again from the stale cache, it treated it as a brand-new deposit and minted ckBTC a second time.

The Fix and Future Safeguards
Fortunately, the DFINITY engineering team acted immediately upon detecting the anomaly. The cache mismatch was patched by strictly aligning the lifecycle state of queried UTXOs with the minter's active ledger, ensuring that once a UTXO is consumed, it can never be treated as "fresh" again even if returned by a cached query.
Furthermore, DFINITY implemented:
- Enhanced Alerting Protocols: Automatic triggers that freeze minting if mismatch anomalies are detected on-chain.
- Stricter Validation Rules: Verification of state transition timelines before issuing mint requests.
Crucially, the 1:1 backing of ckBTC was preserved, and no user funds were lost. For the broader Web3 developer community, this postmortem highlights that optimization features—like UTXO consolidation—can introduce subtle timing side effects, proving once again that in the world of trustless state machines, "verify, then cache" is the safest path forward.
Check out the sources list to view the full video breakdown of the March 2026 R&D updates.
Tags
Grounded sources & citations
What to read next

The Battle Over Geopolitics in Web3: Inside Internet Computer’s Rejected "G20 Subnet" Proposal

The Double-Time Shift: Why Internet Computer's Internet Identity is Moving to a Twice-Weekly Release Cadence

Inside the "Tiered Canister Economy": The Bold New Proposal to Reshape Internet Computer Tokenomics
Enjoyed this? Get the next one
Subscribe to the newsletter and the next playbook lands in your inbox — no spam, unsubscribe anytime.