@@ -42,7 +42,7 @@ A sparse Merkle tree (SMT) is a data structure useful for storing a key/value ma
4242## Table of Contents
4343
4444- 🛠 [ Install] ( #install )
45- - 🕹 [ Usage ] ( #usage )
45+ - 📜 [ API reference ] ( #api-reference )
4646- 🔬 [ Development] ( #development )
4747 - [ Rules] ( #scroll-rules )
4848 - [ Commits] ( https://github.com/cedoor/cedoor/tree/main/git#commits-rules )
@@ -81,72 +81,109 @@ or [JSDelivr](https://www.jsdelivr.com/):
8181<script src =" https://cdn.jsdelivr.net/npm/@cedoor/smt/" ></script >
8282```
8383
84- ## Usage
84+ ## API reference
8585
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 )
8993
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"
9399
100+ const hash = (childNodes : ChildNodes ) => sha256 (childNodes .join (" " ))
94101const tree = new SMT (hash )
95102
96- console .log (tree .root ) // 0n
103+ console .log (tree .root ) // 0
104+ ```
97105
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*
101107
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.
123152
124153console .log (membershipProof )
125- /* {
126- entry: [5n, 7n],
154+ /*
155+ {
156+ entry: [ '2b', '44', '1' ],
157+ matchingEntry: undefined,
127158 sidenodes: [
128- 15327728699193584933541192058597044258439932792728427746424913008102980962481n
159+ '006a0ab15a212e0e0126b81e056b11576628b1ad80792403dbb3a90be2e71d64',
160+ 'f786ce5a843614d7da216d95c0087c1eb29244927feeeeeb658aa60cf124cd5e'
129161 ],
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+ */
137166
138167console .log (nonMembershipProof )
139- /* {
140- entry: [6n, undefined],
141- matchingEntry: [2n, 10n, true],
168+ /*
169+ {
170+ entry: [ '16' ],
171+ matchingEntry: undefined,
142172 sidenodes: [
143- 8260015537657879578719447560255924901314166820152114369890800384322230220665n ,
144- 18913408186443965331523640610196519845260984945962861132244194469219759309914n
173+ '960f23d9fbb44241be53efb7c4d69ac129bb1cb9482dcb6789d3cc7e6de2de2b' ,
174+ '2a1aef839e68d1bdf43c1b3b1ed9ef16c27162e8a175898c9ac64a679b0fc825'
145175 ],
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+
149184
185+ ``` typescript
186+ console .log (tree .verifyProof (membershipProof )) // true
150187console .log (tree .verifyProof (nonMembershipProof )) // true
151188```
152189
0 commit comments