fix(consensus): fix error invalid merkle root on pre-tip-signing replay#2275
fix(consensus): fix error invalid merkle root on pre-tip-signing replay#2275gzliudan wants to merge 1 commit intoXinFinOrg:dev-upgradefrom
invalid merkle root on pre-tip-signing replay#2275Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Fixes a consensus checkpoint validation failure (“invalid merkle root”) that could occur after a node restart when replaying pre-TIPSigning blocks, by ensuring signing transactions can be reconstructed from raw receipts even when receipt TxHash metadata is missing.
Changes:
- Updated pre-TIP signing-tx caching to locate the corresponding receipt by transaction index when
TxHashmetadata is unavailable, while preserving the “skip failed receipt” behavior. - Added unit tests in the XDPoS engine to cover raw-receipt scenarios (no
TxHash) and failed-receipt filtering. - Added a higher-level regression test ensuring checkpoint reward replay correctly reconstructs signers after “restart-like” conditions (empty cache + raw receipts).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
consensus/XDPoS/XDPoS.go |
Adds receipt lookup fallback by tx index to correctly cache pre-TIP signing txs from raw receipts without TxHash. |
consensus/XDPoS/XDPoS_test.go |
Adds focused unit tests covering raw receipts without TxHash, failed receipts by index, and rawdb round-trip behavior. |
contracts/utils_test.go |
Adds regression test verifying checkpoint reward replay reconstructs signing txs/signers from raw receipts after cache reset. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…play Symptom: nodes that resumed syncing from local state could fail checkpoint validation with an invalid merkle root while replaying pre-TIPSigning blocks after restart. Cause: the non-TIP signing transaction replay path rebuilt signer data from raw receipts, but raw receipts may not carry TxHash metadata. As a result, signing transactions could be dropped and checkpoint rewards recalculated with totalSigner=0. Fix: match non-TIP signing transactions to receipts by transaction index when receipt metadata is unavailable, keep the failed-receipt filter intact, and add regression tests covering both raw-receipt matching and end-to-end checkpoint reward replay through GetRewardForCheckpoint.
5473595 to
dcf2f26
Compare
Proposed changes
Symptom: nodes that resumed syncing from local state could fail checkpoint validation with an invalid merkle root while replaying pre-TIPSigning blocks after restart.
Cause: the non-TIP signing transaction replay path rebuilt signer data from raw receipts, but raw receipts may not carry TxHash metadata. As a result, signing transactions could be dropped and checkpoint rewards recalculated with totalSigner=0.
Fix: match non-TIP signing transactions to receipts by transaction index when receipt metadata is unavailable, keep the failed-receipt filter intact, and add regression tests covering both raw-receipt matching and end-to-end checkpoint reward replay through GetRewardForCheckpoint.
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that