Skip to content

spike: investigate missing UTXO metadata causing storage root panic (PM-21781)#656

Draft
m2ux wants to merge 1 commit intomainfrom
fix/PM-21781-storage-root-panic
Draft

spike: investigate missing UTXO metadata causing storage root panic (PM-21781)#656
m2ux wants to merge 1 commit intomainfrom
fix/PM-21781-storage-root-panic

Conversation

@m2ux
Copy link
Contributor

@m2ux m2ux commented Feb 11, 2026

Summary

Investigate the root cause of the storage root mismatch panic on QANet (Feb 10 2026). Initial hypothesis (non-deterministic dust fee calculation) was invalidated by domain expert review. The actual divergence source is unknown and requires log-level investigation.

🎫 Ticket 📐 Engineering


Motivation

On Feb 10 2026, QANet experienced a ~5-minute block time spike with all node types panicking: "Storage root must match that calculated." The warning "couldn't get metadata of input utxo, it's likely invalid" appeared in logs preceding the panic.

An initial fix targeting midnight-ledger dust fee calculation (PR #184) was closed after domain expert review confirmed the code path is deterministic across all nodes — if UTXO metadata is missing, all nodes (including the block author) return the same value, producing no state divergence. The WARN log was a red herring.

The actual root cause of the storage root mismatch remains unknown.


Investigation Plan

  • Obtain DataDog access for QANet log analysis
  • Enable debug logging on a QANet node to replicate the panic
  • Gather complete logs for both entities with mismatching state (block author + importing node)
  • Compare state roots at the divergence point to identify which storage key(s) differ
  • Narrow down to the specific state transition producing non-deterministic results

Previous investigation (ruled out)

The generationless_fee_availability() code path in midnight-ledger/ledger/src/dust.rs was analyzed in depth and is not the cause. All nodes execute the same deterministic code. See closure report for details.


📌 Submission Checklist

  • Changes are backward-compatible (or flagged if breaking)
  • Pull request description explains why the change is needed
  • Self-reviewed the diff
  • I have included a change file, or skipped for this reason: spike/investigation only
  • If the changes introduce a new feature, I have bumped the node minor version
  • Update documentation (if relevant)
  • No new todos introduced

🔱 Fork Strategy

  • Node Runtime Update
  • Node Client Update
  • Other
  • N/A

🗹 TODO before merging

  • Root cause identified
  • Fix implemented based on log evidence
  • Ready for review

Storage root mismatch panic in frame_executive::Executive::execute_block
triggered by invalid UTXO metadata in midnight_ledger::dust. Caused
~5-minute block time spike on QANet affecting all node types.

Co-authored-by: Cursor <cursoragent@cursor.com>
@m2ux m2ux self-assigned this Feb 11, 2026
@github-actions
Copy link
Contributor

kics-logo

KICS version: v2.1.16

Category Results
CRITICAL CRITICAL 0
HIGH HIGH 0
MEDIUM MEDIUM 96
LOW LOW 12
INFO INFO 83
TRACE TRACE 0
TOTAL TOTAL 191
Metric Values
Files scanned placeholder 31
Files parsed placeholder 31
Files failed to scan placeholder 0
Total executed queries placeholder 73
Queries failed to execute placeholder 0
Execution time placeholder 8

@m2ux m2ux changed the title fix: resolve storage root mismatch panic during block execution (PM-21781) spike: investigate missing UTXO metadata causing storage root panic (PM-21781) Feb 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant