Skip to content

fix: preserve a root cert's ZK receipt on a receipt-less re-send - #91

Merged
buffrr merged 1 commit into
mainfrom
fix-preserve-receipt
Aug 10, 2026
Merged

fix: preserve a root cert's ZK receipt on a receipt-less re-send#91
buffrr merged 1 commit into
mainfrom
fix-preserve-receipt

Conversation

@buffrr

@buffrr buffrr commented Aug 10, 2026

Copy link
Copy Markdown
Member

A root cert re-sent for the same commitment often omits its ZK receipt (the sender assumes the relay still holds it — a valid client optimization). is_better_than accepts the fresher-anchor cert, so the receipt-less cert overwrote the receipt-bearing one and the relay could no longer prove the commitment to a fresh client: every sub-handle then failed with "receipt required"

A root cert re-sent for the same commitment often omits its ZK receipt (the sender
assumes the relay still holds it — a valid client optimization). is_better_than accepts
the fresher-anchor cert, so the receipt-less cert overwrote the receipt-bearing one and
the relay could no longer prove the commitment to a fresh client: every sub-handle then
failed with "receipt required".

When storing an update whose incoming root cert has no receipt and whose commitment root
is unchanged, keep the existing cert_data. The bulk INSERT reads the existing cert_data
in-place via a subquery (no extra fetch), and since the value is unchanged the storage-
byte trigger nets out. The zone still updates to the fresher anchor.

Adds test_receiptless_root_update_preserves_receipt using two_commits_both_finalized
(a second commit carries a real receipt).
@buffrr
buffrr merged commit ccb7121 into main Aug 10, 2026
@buffrr
buffrr deleted the fix-preserve-receipt branch August 10, 2026 13:20
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