Skip to content

Conversation

@frenzox
Copy link

@frenzox frenzox commented Jan 6, 2026

Previously, the mailbox only stored the merkle root, which meant the on-chain validator couldn't verify that the merkle tree was correctly updated during dispatch - it had to trust the submitted root.

By storing the full branch state (32 branches × 32 bytes), the mailbox validator can now compute and verify the merkle root on-chain after each message insertion, providing cryptographic guarantees that the tree is correctly maintained.

This costs ~4.4 ADA more in minUTxO but eliminates the trust assumption and simplifies the validator/relayer architecture since tree.root() now returns the correct value directly from chain state.

Updates task-1.1 documentation to reflect the new full-branch storage design and marks implementation as complete.

Previously, the mailbox only stored the merkle root, which meant the
on-chain validator couldn't verify that the merkle tree was correctly
updated during dispatch - it had to trust the submitted root.

By storing the full branch state (32 branches × 32 bytes), the mailbox
validator can now compute and verify the merkle root on-chain after
each message insertion, providing cryptographic guarantees that the
tree is correctly maintained.

This costs ~4.4 ADA more in minUTxO but eliminates the trust assumption
and simplifies the validator/relayer architecture since tree.root()
now returns the correct value directly from chain state.

Updates task-1.1 documentation to reflect the new full-branch storage
design and marks implementation as complete.
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