SIGN IN SIGN UP
FuelLabs / fuel-core UNCLAIMED

Rust full node implementation of the Fuel v2 protocol.

0 0 15 Rust

Rollback unsuccessful preconfs in the mempool (#3264)

Closes #3098.

## Problem

When a block producer sends preconfirmation updates, sentry nodes
optimistically treat the included transactions as committed, removing
them from the mempool and marking their inputs as spent. If the producer
crashes and re-produces a block at the same height without those
transactions, the mempool is left in a stale state: inputs stay marked
as spent and outputs linger in `extracted_outputs`, preventing
re-submission of rolled-back transactions and causing dependents to
reference non-existent UTXOs.

## Solution

This PR makes preconfirmed transactions tentative until the canonical
block at their height is imported. On import, preconfirmed txs present
in the block are confirmed and their tracking is cleared; those absent
are rolled back by restoring inputs, purging dependents, and emitting
`SqueezedOut` notifications. It also adds integration tests:
re-insertion after rollback, dependent eviction, normal confirmation,
and stale-height cleanup.

## Checklist
- [x] Breaking changes are clearly marked as such in the PR description
and changelog
- [x] New behavior is reflected in tests
- [x] [The specification](https://github.com/FuelLabs/fuel-specs/)
matches the implemented behavior (link update PR if changes are needed)

### Before requesting review
- [ ] I have reviewed the code myself
- [x] I have created follow-up issues caused by this PR and linked them
here
H
Hannes Karppila committed
85eedad7195af765881c07ba93c191dbc25cee0a
Parent: a4767fb
Committed by GitHub <noreply@github.com> on 4/16/2026, 8:18:37 PM