Skip to content

fix: strip BlobTx wrappers in ExecCommitBlock during crash replay (backport #2846)#2935

Merged
rootulp merged 2 commits intov0.39.x-celestiafrom
mergify/bp/v0.39.x-celestia/pr-2846
Apr 17, 2026
Merged

fix: strip BlobTx wrappers in ExecCommitBlock during crash replay (backport #2846)#2935
rootulp merged 2 commits intov0.39.x-celestiafrom
mergify/bp/v0.39.x-celestia/pr-2846

Conversation

@mergify
Copy link
Copy Markdown
Contributor

@mergify mergify Bot commented Apr 16, 2026

Fixes https://dashboard.hackenproof.com/manager/companies/celestia/celestia/reports/CELESTIA-215

Summary

  • ExecCommitBlock (used during crash recovery replay) was sending raw BlobTx-wrapped transactions to FinalizeBlock, while applyBlock (normal execution) strips the wrappers and sends only inner transactions
  • This inconsistency causes the application to compute a different AppHash during replay, preventing recovery when the app is multiple blocks behind the store
  • Added the same BlobTx stripping loop from applyBlock to ExecCommitBlock

Test plan

  • Added TestExecCommitBlockBlobTxStripping that verifies both ApplyBlock and ExecCommitBlock send identical transaction bytes to FinalizeBlock
  • Existing TestFinalizeBlockValidators and TestApplyBlock tests continue to pass

🤖 Generated with Claude Code


Open with Devin
This is an automatic backport of pull request #2846 done by [Mergify](https://mergify.com).
Open with Devin

)

Fixes
https://dashboard.hackenproof.com/manager/companies/celestia/celestia/reports/CELESTIA-215

## Summary
- `ExecCommitBlock` (used during crash recovery replay) was sending raw
BlobTx-wrapped transactions to `FinalizeBlock`, while `applyBlock`
(normal execution) strips the wrappers and sends only inner transactions
- This inconsistency causes the application to compute a different
`AppHash` during replay, preventing recovery when the app is multiple
blocks behind the store
- Added the same BlobTx stripping loop from `applyBlock` to
`ExecCommitBlock`

## Test plan
- [x] Added `TestExecCommitBlockBlobTxStripping` that verifies both
`ApplyBlock` and `ExecCommitBlock` send identical transaction bytes to
`FinalizeBlock`
- [ ] Existing `TestFinalizeBlockValidators` and `TestApplyBlock` tests
continue to pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- devin-review-badge-begin -->

---

<a
href="https://app.devin.ai/review/celestiaorg/celestia-core/pull/2846"
target="_blank">
  <picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
<img
src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
alt="Open with Devin">
  </picture>
</a>
<!-- devin-review-badge-end -->

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
(cherry picked from commit f73b81b)
Copy link
Copy Markdown

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@rootulp rootulp self-assigned this Apr 17, 2026
@rootulp rootulp merged commit 02c3517 into v0.39.x-celestia Apr 17, 2026
22 checks passed
@rootulp rootulp deleted the mergify/bp/v0.39.x-celestia/pr-2846 branch April 17, 2026 15:57
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.

2 participants