[DO NOT MERGE] FCMP++: CurveTrees class & implementation of ed25519 outputs -> curve tree leaves function#10360
Open
j-berman wants to merge 11 commits intomonero-project:masterfrom
Open
[DO NOT MERGE] FCMP++: CurveTrees class & implementation of ed25519 outputs -> curve tree leaves function#10360j-berman wants to merge 11 commits intomonero-project:masterfrom
j-berman wants to merge 11 commits intomonero-project:masterfrom
Conversation
https://iacr.org/archive/pkc2004/29470042/29470042.pdf 2.2 Co-authored-by: Jeffro <jeffro256@tutanota.com>
monero-project/research-lab#142 Co-authored-by: Jeffro <jeffro256@tutanota.com> Co-authored-by: Luke Parker <lukeparker5132@gmail.com>
- Function to convert an {output pubkey, commitment} to an output
tuple {O,I,C} in prepartion to insert the output tuple into the
curve tree.
- O = torsion cleared valid output pubkey checked for identity.
- I = key image generator.
- C = torsion cleared valid Commitment checked for identity.
- None of {O,I,C} should have torsion nor == identity.
- Introduces the OutputPair variant, which can either be Legacy
or Carrot V1 types. Legacy outputs are not checked for torsion
at consensus, and use the legacy biased hash to point fn to derive
the key image generator (I). Carrot V1 outputs **are** checked for
torsion at consensus, and use the unbiased hash to point to derive
the key image generator (I).
- The CurveTrees class is a useful object for updating the curve trees merkle tree. It is instantiated with the widths of each layer in the tree, as well as the curve objects themselves. - The outputs_to_leaves function takes in outputs that enter the chain, and converts them into valid leaves prepared to be inserted to the curve trees merkle tree. We do not add invalid outputs to the tree, so outputs_to_leaves checks outputs for validity and only includes the valid outputs in the final response.
This was referenced Mar 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds on top of:
selene_scalar_from_bytes#10359The
outputs_to_leavesfunction introduced in this PR takes in outputs that enter the chain, and converts them into valid leaves prepared to be inserted to the curve trees merkle tree. We do not add invalid outputs tothe tree, so
outputs_to_leaveschecks outputs for validity and only includes the valid outputs in the final response.The
CurveTreesclass is a useful object for updating the curve trees merkle tree. It is instantiated with the widths of each layer in the tree, as well as the curve objects themselves."Unified Outputs" are the set of all outputs in the chain (pre-RCT, RCT, and Carrot). Each output has a
unified_id, which is the ordered index given to the output upon entering the chain (when the tx that creates the output enters a block in the chain). We use theunified_idto determine the order to insert a batch of outputs into the curve tree merkle tree.