Closed rach-id closed 6 days ago
The changes introduce methods to compute and verify inner nodes' roots in a Namespaced Merkle Tree (NMT). This includes adding methods for subtree root computation (ComputeSubtreeRoot
), validation (VerifySubtreeRootInclusion
), and accompanying utility functions. The updates also refactor related struct field names and enhance testing with new test cases for the added functionality.
Files | Change Summary |
---|---|
nmt.go | Added ComputeSubtreeRoot method, isPowerOfTwo function, and updated struct field names. |
nmt_test.go | Added exampleNMT2 and TestComputeSubtreeRoot functions for testing subtree root computation. |
proof.go | Added VerifySubtreeRootInclusion , ToLeafRanges , nextLeafRange , and other utility functions. |
proof_test.go | Added multiple test functions to verify new utility functions and subtree root inclusion. |
Objective (Issue #256) | Addressed | Explanation |
---|---|---|
Support inner nodes proving/verification | ✅ | |
Computation and validation of subtree roots | ✅ |
In the realm of code where bytes dance free,
A tree gains wisdom, roots we now see.
With leaves that whisper of proofs and might,
Inner nodes' secrets come to light.
Hail to the Merkle, strong and true,
Verified roots, a dream come through. 🌳🚀
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Attention: Patch coverage is 82.14286%
with 20 lines
in your changes missing coverage. Please review.
Project coverage is 67.84%. Comparing base (
3539dc8
) to head (680faca
).
Files | Patch % | Lines |
---|---|---|
proof.go | 82.22% | 8 Missing and 8 partials :warning: |
nmt.go | 81.81% | 2 Missing and 2 partials :warning: |
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
Making this a draft because I want to finish the implementation downstream to be sure this PR contains all the changes needed
have we thought about combining the leaf proving mech w/ this one? We would still maintain the same apis for users, but use the same backend
Certainly doable. However, my worry is for people who will not be familiar with this and need to maintain the repo. They will need extra time to get used to the ranges, how they're calculated etc. Getting onboarded to the NMT implementation itself takes some time. Adding the ranges might make it even harder. And if someone only wants to change something regarding the leaves proving, they would also need to understand how the ranges work, subtree roots, ADR-013 to be able to do that change.
However, if you guys prefer it to be that way, I can open an issue to combine them both.
Haven't yet reviewed but will this mean we will be able to fill out this missing section of the specs: https://celestiaorg.github.io/celestia-app/specs/fraud_proofs.html#blob-inclusion
@cmwaters yes. With this, we will be able to have compact fraud proofs. But this is just the proving part, I am not sure if the remaining logic like creating the proof, propagating it and acting upon it is implemented.
Compact fraud proofs of what? My understanding was this was a more compact way of proving the inclusion of a blob by proving the inclusion of sub tree roots (rather than all the leaf nodes themselves).
Also will this repo host the logic for creating these proofs as well. I would have through that creation and validation will have been done side by side
Compact fraud proofs of what? My understanding was this was a more compact way of proving the inclusion of a blob by proving the inclusion of sub tree roots (rather than all the leaf nodes themselves).
Yes. And blobstream rollups for example, if they choose to use the share commitments instead of the sequence of spans to reference the location of their data, they can use this to verify inclusion of a share commitment to a data root tuple root. Then, prove the inclusion of a share to a subtree roots. And then, parse the share to verify if the state transitions there are valid or not.
Also will this repo host the logic for creating these proofs as well. I would have through that creation and validation will have been done side by side
I think the creation and validation will be done in other repos. This only provides a way to verify the inclusion of subtree roots.
Overview
Closes https://github.com/celestiaorg/nmt/issues/256
I added this change here so that we have a reference implementation of the algorithm that we will implement in Solidity.
Also, adds a method to generate the subtree roots, which didn't exist before and will be needed during proof generation in Celestia-node.
The codecov missing coverage complaints are for conditions that are checked twice in different contexts. So there is no way to bypass the first check to arrive at the second check. So, I guess they're fine.
Summary by CodeRabbit
New Features
Tests