MerkleTree insertion proofs (#344)
* implement merkletree insert & insert-proof-verification * add merkletree circuit to verify insertion proof wip * fix merkletree's GraphViz generation for cases with empty siblings * implement tree insert-verif circuit siblings checks Note: I've implemented also an alternative version which instead of inputting a witness value 'divergence_level' it inputs a bitmask. Both approaches (divergence_level and divergence_bitmask) take the same amount of constraints (336 constraints for a tree of 32 levels, and for an hybrid approach it takes 331 constraints but the code gets a bit less readable). So I've kept with the current implementation (using divergence_level) which is more easy to follow. * [tree] modify the strategy for the insert-proof (out-circuit) * re-implement insert-proof verification circuit * add pending checks and polish * add tests for disabled(&enabled) cases that should fail * update typos.toml config * Add test with tampering * add check 5.3, to prevent tampering (at insertion proof circuit) * move old_leaf_hash computation outside the loop, simplify check 5.3 booleans * apply @ed255 review suggestions --------- Co-authored-by: Ahmad <root@ahmadafuni.com>
This commit is contained in:
parent
89dfc4e214
commit
745d654048
4 changed files with 695 additions and 31 deletions
1
.github/workflows/typos.toml
vendored
1
.github/workflows/typos.toml
vendored
|
|
@ -8,3 +8,4 @@ nin = "nin" # not in
|
|||
kow = "kow" # key or wildcard
|
||||
KOW = "KOW" # Key Or Wildcard
|
||||
datas = "datas" # plural (for 'verifier_datas', a vector of 'verifier_data')
|
||||
typ = "typ" # from 'type', which can not be used as variable name since it is a keyword
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue