@@ -6,6 +6,7 @@ use plonky2::plonk::config::Hasher;
66use std:: collections:: HashMap ;
77
88use super :: { Hash , Value , EMPTY } ;
9+ use crate :: constants:: MAX_DEPTH ;
910use crate :: primitives:: merkletree:: { MerkleProof , MerkleTree } ;
1011
1112/// Dictionary: the user original keys and values are hashed to be used in the leaf.
@@ -18,37 +19,37 @@ pub struct Dictionary {
1819}
1920
2021impl Dictionary {
21- pub fn new ( kvs : & HashMap < Hash , Value > ) -> Self {
22+ pub fn new ( kvs : & HashMap < Hash , Value > ) -> Result < Self > {
2223 let kvs: HashMap < Value , Value > = kvs. into_iter ( ) . map ( |( & k, & v) | ( Value ( k. 0 ) , v) ) . collect ( ) ;
23- Self {
24- mt : MerkleTree :: new ( & kvs) ,
25- }
24+ Ok ( Self {
25+ mt : MerkleTree :: new ( MAX_DEPTH , & kvs) ? ,
26+ } )
2627 }
2728 pub fn commitment ( & self ) -> Hash {
2829 self . mt . root ( )
2930 }
3031 pub fn get ( & self , key : & Value ) -> Result < Value > {
3132 self . mt . get ( key)
3233 }
33- pub fn prove ( & self , key : & Value ) -> Result < MerkleProof > {
34+ pub fn prove ( & self , key : & Value ) -> Result < ( Value , MerkleProof ) > {
3435 self . mt . prove ( key)
3536 }
3637 pub fn prove_nonexistence ( & self , key : & Value ) -> Result < MerkleProof > {
3738 self . mt . prove_nonexistence ( key)
3839 }
3940 pub fn verify ( root : Hash , proof : & MerkleProof , key : & Value , value : & Value ) -> Result < ( ) > {
40- MerkleTree :: verify ( root, proof, key, value)
41+ MerkleTree :: verify ( MAX_DEPTH , root, proof, key, value)
4142 }
4243 pub fn verify_nonexistence ( root : Hash , proof : & MerkleProof , key : & Value ) -> Result < ( ) > {
43- MerkleTree :: verify_nonexistence ( root, proof, key)
44+ MerkleTree :: verify_nonexistence ( MAX_DEPTH , root, proof, key)
4445 }
45- pub fn iter ( & self ) -> std :: collections :: hash_map :: Iter < Value , Value > {
46+ pub fn iter ( & self ) -> crate :: primitives :: merkletree :: Iter {
4647 self . mt . iter ( )
4748 }
4849}
4950impl < ' a > IntoIterator for & ' a Dictionary {
5051 type Item = ( & ' a Value , & ' a Value ) ;
51- type IntoIter = std :: collections :: hash_map :: Iter < ' a , Value , Value > ;
52+ type IntoIter = crate :: primitives :: merkletree :: Iter < ' a > ;
5253
5354 fn into_iter ( self ) -> Self :: IntoIter {
5455 self . mt . iter ( )
@@ -71,37 +72,38 @@ pub struct Set {
7172}
7273
7374impl Set {
74- pub fn new ( set : & Vec < Value > ) -> Self {
75+ pub fn new ( set : & Vec < Value > ) -> Result < Self > {
7576 let kvs: HashMap < Value , Value > = set
7677 . into_iter ( )
7778 . map ( |e| {
7879 let h = PoseidonHash :: hash_no_pad ( & e. 0 ) . elements ;
7980 ( Value ( h) , EMPTY )
8081 } )
8182 . collect ( ) ;
82- Self {
83- mt : MerkleTree :: new ( & kvs) ,
84- }
83+ Ok ( Self {
84+ mt : MerkleTree :: new ( MAX_DEPTH , & kvs) ? ,
85+ } )
8586 }
8687 pub fn commitment ( & self ) -> Hash {
8788 self . mt . root ( )
8889 }
89- pub fn contains ( & self , value : & Value ) -> bool {
90+ pub fn contains ( & self , value : & Value ) -> Result < bool > {
9091 self . mt . contains ( value)
9192 }
9293 pub fn prove ( & self , value : & Value ) -> Result < MerkleProof > {
93- self . mt . prove ( value)
94+ let ( _, proof) = self . mt . prove ( value) ?;
95+ Ok ( proof)
9496 }
9597 pub fn prove_nonexistence ( & self , value : & Value ) -> Result < MerkleProof > {
9698 self . mt . prove_nonexistence ( value)
9799 }
98100 pub fn verify ( root : Hash , proof : & MerkleProof , value : & Value ) -> Result < ( ) > {
99- MerkleTree :: verify ( root, proof, value, & EMPTY )
101+ MerkleTree :: verify ( MAX_DEPTH , root, proof, value, & EMPTY )
100102 }
101103 pub fn verify_nonexistence ( root : Hash , proof : & MerkleProof , value : & Value ) -> Result < ( ) > {
102- MerkleTree :: verify_nonexistence ( root, proof, value)
104+ MerkleTree :: verify_nonexistence ( MAX_DEPTH , root, proof, value)
103105 }
104- pub fn iter ( & self ) -> std :: collections :: hash_map :: Iter < Value , Value > {
106+ pub fn iter ( & self ) -> crate :: primitives :: merkletree :: Iter {
105107 self . mt . iter ( )
106108 }
107109}
@@ -123,30 +125,30 @@ pub struct Array {
123125}
124126
125127impl Array {
126- pub fn new ( array : & Vec < Value > ) -> Self {
128+ pub fn new ( array : & Vec < Value > ) -> Result < Self > {
127129 let kvs: HashMap < Value , Value > = array
128130 . into_iter ( )
129131 . enumerate ( )
130132 . map ( |( i, & e) | ( Value :: from ( i as i64 ) , e) )
131133 . collect ( ) ;
132134
133- Self {
134- mt : MerkleTree :: new ( & kvs) ,
135- }
135+ Ok ( Self {
136+ mt : MerkleTree :: new ( MAX_DEPTH , & kvs) ? ,
137+ } )
136138 }
137139 pub fn commitment ( & self ) -> Hash {
138140 self . mt . root ( )
139141 }
140142 pub fn get ( & self , i : usize ) -> Result < Value > {
141143 self . mt . get ( & Value :: from ( i as i64 ) )
142144 }
143- pub fn prove ( & self , i : usize ) -> Result < MerkleProof > {
145+ pub fn prove ( & self , i : usize ) -> Result < ( Value , MerkleProof ) > {
144146 self . mt . prove ( & Value :: from ( i as i64 ) )
145147 }
146148 pub fn verify ( root : Hash , proof : & MerkleProof , i : usize , value : & Value ) -> Result < ( ) > {
147- MerkleTree :: verify ( root, proof, & Value :: from ( i as i64 ) , value)
149+ MerkleTree :: verify ( MAX_DEPTH , root, proof, & Value :: from ( i as i64 ) , value)
148150 }
149- pub fn iter ( & self ) -> std :: collections :: hash_map :: Iter < Value , Value > {
151+ pub fn iter ( & self ) -> crate :: primitives :: merkletree :: Iter {
150152 self . mt . iter ( )
151153 }
152154}
0 commit comments