Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(stdlib): SMT with foreign merkle_membership #1108

Closed
wants to merge 6 commits into from
Closed

Conversation

joss-aztec
Copy link
Contributor

Related issue(s)

Resolves #1080

Description

Summary of changes

Simple helper for implementing sparse merkle tree operations in terms of the black box foreign function check_membership.

Dependency additions / changes

Test additions / changes

Checklist

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt with default settings.
  • I have linked this PR to the issue(s) that it resolves.
  • I have reviewed the changes on GitHub, line by line.
  • I have ensured all changes are covered in the description.

Documentation needs

  • This PR requires documentation updates when merged.

Additional context

@joss-aztec joss-aztec marked this pull request as draft April 6, 2023 14:27
@joss-aztec joss-aztec marked this pull request as ready for review April 6, 2023 15:10
@@ -0,0 +1,84 @@
use crate::merkle;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we add some comments to the functions here and is there a way to test functionality?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure. Relatedly, I've not noticed any explicit comments/docs on the hash check_membership expects the tree to have used. This should probably be added too. I'm guessing it's pedersen?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah that would be great!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spoke too soon. The test proves, but doesn't verify D:
Guessing this test has exposed a bug that deserves a separate issue?

Failed to verify proof
thread 'tests::noir_integration' panicked at 'verification fail for "sparse_merkle_tree"', crates/nargo_cli/tests/prove_and_verify.rs:61:25

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noticed when proving from nargo it logs:

linear_eval is not 0.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we have an issue with a similar bug, can you link this PR to it as another corpus?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would also be good if you could add a stripped down example into the program (We can revisit this and the other issue once we switch to ultra plonk)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Guessing you mean this one?: #1045

I've opened an issue containing a reduced example:
#1134

}

impl SparseMerkleTree {
/// Constrains that the new leaf is located in the new tree at an index
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't have doc comments in noir yet, only regular comments

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now changed to regular comments

Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
@kevaundray
Copy link
Contributor

Tracking issue : #1252

Copy link
Member

@TomAFrench TomAFrench left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably shouldn't include this in the stdlib for reasons mentioned in #1258

* master: (63 commits)
  feat(nargo): Remove usage of `CompiledProgram` in CLI code and use separate ABI/bytecode (#1269)
  feat: add integration tests for bitshift operators (#1272)
  chore: Replace explicit if-elses with `FieldElement::from<bool>()` for boolean fields (#1266)
  chore(noir): constrain expr; -> assert(expr); (#1276)
  chore: fix clippy warning (#1270)
  chore(ssa refactor): Add all remaining doc comments to ssa generation pass (#1256)
  chore(noir): Release 0.5.1 (#1264)
  fix: Add Poseidon examples into integration tests (#1257)
  chore(nargo): replace `aztec_backend` with `acvm-backend-barretenberg` (#1226)
  chore(noir): Release 0.5.0 (#1202)
  chore(ci): Utilize new workflow to build binaries (#1250)
  chore(ssa refactor): Fix loading from mutable parameters (#1248)
  fix(wasm): add std after dependencies (#1245)
  chore(ssa refactor): Fix no returns & duplicate main (#1243)
  chore(ssa refactor): Implement intrinsics (#1241)
  chore(ssa refactor): Implement first-class functions (#1238)
  chore: address clippy warnings (#1239)
  chore(ssa refactor): Implement function calls (#1235)
  chore(ssa refactor): Implement mutable and immutable variables (#1234)
  chore(ssa refactor): Fix recursive printing of blocks (#1230)
  ...
@TomAFrench
Copy link
Member

Closing this PR for thin stdlib reasons and it's out of date..

@TomAFrench TomAFrench closed this Jul 11, 2023
@TomAFrench TomAFrench deleted the joss/smt branch July 11, 2023 06:53
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.

Add convenience structure for sparse merkle trees
4 participants