Skip to content

Commit 57c1f2e

Browse files
authored
docs(readme): add api reference
1 parent 14b0d57 commit 57c1f2e

File tree

1 file changed

+88
-51
lines changed

1 file changed

+88
-51
lines changed

README.md

Lines changed: 88 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -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(""))
94101
const 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

124153
console.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

138167
console.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
150187
console.log(tree.verifyProof(nonMembershipProof)) // true
151188
```
152189

0 commit comments

Comments
 (0)