@@ -42,7 +42,7 @@ A sparse Merkle tree (SMT) is a data structure useful for storing a key/value ma
42
42
## Table of Contents
43
43
44
44
- 🛠 [ Install] ( #install )
45
- - 🕹 [ Usage ] ( #usage )
45
+ - 📜 [ API reference ] ( #api-reference )
46
46
- 🔬 [ Development] ( #development )
47
47
- [ Rules] ( #scroll-rules )
48
48
- [ Commits] ( https://github.com/cedoor/cedoor/tree/main/git#commits-rules )
@@ -81,72 +81,109 @@ or [JSDelivr](https://www.jsdelivr.com/):
81
81
<script src =" https://cdn.jsdelivr.net/npm/@cedoor/smt/" ></script >
82
82
```
83
83
84
- ## Usage
84
+ ## API reference
85
85
86
- ``` typescript
87
- import { SMT } from " @cedoor/smt"
88
- import { poseidon } from " circomlib"
86
+ * [ Creating trees] ( #smt-new )
87
+ * [ Adding entries] ( #smt-add )
88
+ * [ Getting values] ( #smt-get )
89
+ * [ Updating values] ( #smt-update )
90
+ * [ Deleting entries] ( #smt-delete )
91
+ * [ Creating proofs] ( #smt-create-proof )
92
+ * [ Verifying proofs] ( #smt-verify-proof )
89
93
90
- function hash(... values : bigint []) {
91
- return poseidon (values )
92
- }
94
+ <a name =" smt-new " href =" #smt-new " >#</a > ** new SMT** (hash: * HashFunction* ): * SMT*
95
+
96
+ ``` typescript
97
+ import { SMT , hexToDec } from " @cedoor/smt"
98
+ import { sha256 } from " js-sha256"
93
99
100
+ const hash = (childNodes : ChildNodes ) => sha256 (childNodes .join (" " ))
94
101
const tree = new SMT (hash )
95
102
96
- console .log (tree .root ) // 0n
103
+ console .log (tree .root ) // 0
104
+ ```
97
105
98
- tree .add (2n , 10n )
99
- tree .add (4n , 3n )
100
- tree .add (5n , 7n )
106
+ <a name =" smt-add " href =" #smt-add " >#</a > ** add** (key: * string* | * number* , value: * string* | * number* ): * void*
101
107
102
- console .log (tree .root ) // 5137374885430375729214487766088114111148149461453301548120767853134034722842n
103
- {
104
- entry : [ 6n , undefined ],
105
- matchingEntry : [ 2n , 10n , true ],
106
- sidenodes : [
107
- 8260015537657879578719447560255924901314166820152114369890800384322230220665n ,
108
- 18913408186443965331523640610196519845260984945962861132244194469219759309914n
109
- ],
110
- root : 5137374885430375729214487766088114111148149461453301548120767853134034722842n ,
111
- existence : false
112
- }
113
- const { value, sidenodes } = tree .get (4n )
114
-
115
- console .log (value ) // 3n
116
- console .log (sidenodes )
117
- /* [
118
- 8260015537657879578719447560255924901314166820152114369890800384322230220665n,
119
- 5425677653063334718369405482428677484996329809930801119387142625676133786812n
120
- ]*/
121
-
122
- const membershipProof = tree .createProof (5n )
108
+ ``` typescript
109
+ tree .add (22 , 120 ) // Decimal key/value.
110
+ tree .add (" 2b" , " 44" ) // Hexadecimal key/value.
111
+ tree .add (13 , 231 )
112
+ tree .add (16 , 321 )
113
+ tree .add (32 , 832 )
114
+
115
+ console .log (tree .root ) // 31ee2a59741c9c32a32d8c7fafe461cca1ccaf5986c2d592586e3e6482a48645
116
+ ```
117
+
118
+ <a name =" smt-get " href =" #smt-get " >#</a > ** get** (key: * string* | * number* ): * undefined* | * string*
119
+
120
+ ``` typescript
121
+ const value = tree .get (22 )
122
+
123
+ console .log (value ) // 78
124
+ console .log (hexToDec (value )) // 120
125
+ ```
126
+
127
+ <a name =" smt-update " href =" #smt-update " >#</a > ** update** (key: * string* | * number* , value: * string* | * number* ): * void*
128
+
129
+ ``` typescript
130
+ tree .update (22 , 121 )
131
+
132
+ const value = tree .get (22 )
133
+
134
+ console .log (hexToDec (value )) // 121
135
+ ```
136
+
137
+ <a name =" smt-delete " href =" #smt-delete " >#</a > ** delete** (key: * string* | * number* ): * void*
138
+
139
+ ``` typescript
140
+ tree .delete (22 )
141
+
142
+ const value = tree .get (22 )
143
+
144
+ console .log (value ) // undefined
145
+ ```
146
+
147
+ <a name =" smt-create-proof " href =" #smt-create-proof " >#</a > ** createProof** (key: * string* | * number* ): * Proof*
148
+
149
+ ``` typescript
150
+ const membershipProof = tree .createProof (" 2b" )
151
+ const nonMembershipProof = tree .createProof (22 ) // This key has been deleted.
123
152
124
153
console .log (membershipProof )
125
- /* {
126
- entry: [5n, 7n],
154
+ /*
155
+ {
156
+ entry: [ '2b', '44', '1' ],
157
+ matchingEntry: undefined,
127
158
sidenodes: [
128
- 15327728699193584933541192058597044258439932792728427746424913008102980962481n
159
+ '006a0ab15a212e0e0126b81e056b11576628b1ad80792403dbb3a90be2e71d64',
160
+ 'f786ce5a843614d7da216d95c0087c1eb29244927feeeeeb658aa60cf124cd5e'
129
161
],
130
- root: 5137374885430375729214487766088114111148149461453301548120767853134034722842n,
131
- existence: true
132
- }*/
133
-
134
- console .log (tree .verifyProof (membershipProof )) // true
135
-
136
- const nonMembershipProof = tree .createProof (6n )
162
+ root: 'c3c023c84afc0a7bab1dbebcef5f7beaf3d6af4af98e8f481620dec052be7d0d',
163
+ membership: true
164
+ }
165
+ */
137
166
138
167
console .log (nonMembershipProof )
139
- /* {
140
- entry: [6n, undefined],
141
- matchingEntry: [2n, 10n, true],
168
+ /*
169
+ {
170
+ entry: [ '16' ],
171
+ matchingEntry: undefined,
142
172
sidenodes: [
143
- 8260015537657879578719447560255924901314166820152114369890800384322230220665n ,
144
- 18913408186443965331523640610196519845260984945962861132244194469219759309914n
173
+ '960f23d9fbb44241be53efb7c4d69ac129bb1cb9482dcb6789d3cc7e6de2de2b' ,
174
+ '2a1aef839e68d1bdf43c1b3b1ed9ef16c27162e8a175898c9ac64a679b0fc825'
145
175
],
146
- root: 5137374885430375729214487766088114111148149461453301548120767853134034722842n,
147
- existence: false
148
- }*/
176
+ root: 'c3c023c84afc0a7bab1dbebcef5f7beaf3d6af4af98e8f481620dec052be7d0d',
177
+ membership: false
178
+ }
179
+ */
180
+ ```
181
+
182
+ <a name =" smt-verify-proof " href =" #smt-verify-proof " >#</a > ** verifyProof** (proof: * Proof* ): * boolean*
183
+
149
184
185
+ ``` typescript
186
+ console .log (tree .verifyProof (membershipProof )) // true
150
187
console .log (tree .verifyProof (nonMembershipProof )) // true
151
188
```
152
189
0 commit comments