zkjson 0.1.11 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,7 +14,7 @@ contract ZKRollup is ZKQuery {
14
14
  address public committer;
15
15
  uint public root;
16
16
 
17
- function _verifyRU(uint[] calldata zkp) internal view returns (bool) {
17
+ function _verifyRU(uint[] calldata zkp) private view returns (bool) {
18
18
  uint[2] memory _pA;
19
19
  uint[2][2] memory _pB;
20
20
  uint[2] memory _pC;
@@ -48,7 +48,7 @@ contract ZKRollup is ZKQuery {
48
48
  return root;
49
49
  }
50
50
 
51
- function verifyRU(uint[] calldata zkp) public view returns (bool) {
51
+ function verifyRU(uint[] calldata zkp) private view returns (bool) {
52
52
  return _verifyRU(zkp);
53
53
  }
54
54
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Zero Knowledge Provable JSON",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
package/rollup.js DELETED
@@ -1,224 +0,0 @@
1
- const snarkjs = require("snarkjs")
2
- const { resolve } = require("path")
3
- const { pad, toSignal, encode, encodePath, encodeVal } = require("./encoder")
4
- const DB = require("./db")
5
- const { range } = require("ramda")
6
-
7
- module.exports = class Rollup {
8
- constructor({
9
- size_val = 5,
10
- size_path = 5,
11
- size_json = 256,
12
- level = 100,
13
- size_txs = 10,
14
- level_col = 8,
15
- wasm,
16
- zkey,
17
- }) {
18
- this.size_val = size_val
19
- this.size_path = size_path
20
- this.size_json = size_json
21
- this.size_txs = size_txs
22
- this.level = level
23
- this.level_col = level_col
24
- this.wasm = wasm
25
- this.zkey = zkey
26
- }
27
- async init() {
28
- this.db = new DB({
29
- level: this.level,
30
- size_path: this.size_path,
31
- size_val: this.size_val,
32
- size_json: this.size_json,
33
- size_txs: this.size_txs,
34
- level_col: this.level_col,
35
- })
36
- await this.db.init()
37
- }
38
- async getInputs(queries) {
39
- let write, _json
40
- let oldRoot = []
41
- let newRoot = []
42
- let oldKey = []
43
- let oldValue = []
44
- let siblings = []
45
- let isOld0 = []
46
- let oldRoot_db = []
47
- let newRoot_db = []
48
- let oldKey_db = []
49
- let oldValue_db = []
50
- let siblings_db = []
51
- let isOld0_db = []
52
- let newKey_db = []
53
- let newKey = []
54
- let _res
55
- let json = []
56
- let fnc = []
57
- for (let i = 0; i < this.size_txs; i++) {
58
- const v = queries[i]
59
- if (!v) {
60
- json.push(range(0, this.size_json).map(() => "0"))
61
- fnc.push([0, 0])
62
- newRoot.push(newRoot[i - 1])
63
- oldRoot.push("0")
64
- oldKey.push("0")
65
- oldValue.push("0")
66
- siblings.push(range(0, this.level).map(() => "0"))
67
- isOld0.push("0")
68
- oldRoot_db.push(newRoot_db[i - 1])
69
- oldKey_db.push("0")
70
- oldValue_db.push("0")
71
- siblings_db.push(range(0, this.level_col).map(() => "0"))
72
- isOld0_db.push("0")
73
- newKey_db.push("0")
74
- newKey.push("0")
75
- continue
76
- }
77
- _json = v[2]
78
- const { update, tree, col: res2, doc: res } = await this.insert(...v)
79
- const icol = this.parse(res, tree, this.level)
80
- const idb = this.parse(res2, this.tree, this.level_col)
81
- _res = idb
82
- const _newKey = str2id(v[1])
83
- json.push(pad(val2str(encode(_json)), this.size_json))
84
- const _newKey_db = v[0]
85
- fnc.push(update ? [0, 1] : [1, 0])
86
- newRoot.push(idb.newRoot)
87
- oldRoot.push(icol.oldRoot)
88
- oldKey.push(icol.oldKey)
89
- oldValue.push(icol.oldValue)
90
- siblings.push(icol.siblings)
91
- isOld0.push(icol.isOld0)
92
- oldRoot_db.push(idb.oldRoot)
93
- newRoot_db.push(idb.newRoot)
94
- oldKey_db.push(idb.oldKey)
95
- oldValue_db.push(idb.oldValue)
96
- siblings_db.push(idb.siblings)
97
- isOld0_db.push(idb.isOld0)
98
- newKey_db.push(_newKey_db)
99
- newKey.push(_newKey)
100
- }
101
-
102
- return {
103
- fnc,
104
- oldRoot,
105
- newRoot,
106
- oldKey,
107
- oldValue,
108
- siblings,
109
- isOld0,
110
- oldRoot_db,
111
- oldKey_db,
112
- oldValue_db,
113
- siblings_db,
114
- isOld0_db,
115
- newKey_db,
116
- newKey,
117
- json,
118
- }
119
- }
120
- async genProof(queries) {
121
- const inputs = await this.getInputs(queries)
122
- console.log(inputs)
123
- return 3
124
- }
125
- async genProof2(col, doc, tar, path) {
126
- const val = this.getVal(tar, path)
127
-
128
- const col_root = this.db.tree.F.toObject(this.db.tree.root).toString()
129
- const col_res = await this.db.getCol(doc)
130
-
131
- let col_siblings = col_res.siblings
132
- for (let i = 0; i < col_siblings.length; i++)
133
- col_siblings[i] = this.db.tree.F.toObject(col_siblings[i])
134
- while (col_siblings.length < this.level_col) col_siblings.push(0)
135
- col_siblings = col_siblings.map(s => s.toString())
136
- const col_key = col
137
-
138
- const _col = this.db.getColTree(col)
139
- const root = _col.tree.F.toObject(_col.tree.root).toString()
140
- const res = await _col.get(doc)
141
- let _siblings = res.siblings
142
- for (let i = 0; i < _siblings.length; i++)
143
- _siblings[i] = _col.tree.F.toObject(_siblings[i])
144
- while (_siblings.length < this.level) _siblings.push(0)
145
- _siblings = _siblings.map(s => s.toString())
146
- const key = toIndex(doc)
147
-
148
- const _json = pad(toSignal(encode(tar)), this.size_json)
149
- const _path = pad(toSignal(encodePath(path)), this.size_path)
150
- const _val = pad(toSignal(encodeVal(val)), this.size)
151
- const _write = {
152
- json: _json,
153
- path: _path,
154
- val: _val,
155
- root,
156
- siblings: _siblings,
157
- key,
158
- col_key,
159
- col_siblings,
160
- col_root,
161
- }
162
- const { proof: proof2, publicSignals: sigs } =
163
- await snarkjs.groth16.fullProve(
164
- _write,
165
- resolve(
166
- __dirname,
167
- "../../circom/build/circuits/db/index_js/index.wasm"
168
- ),
169
- resolve(__dirname, "../../circom/build/circuits/db/index_0001.zkey")
170
- )
171
- return [
172
- ...proof2.pi_a.slice(0, 2),
173
- ...proof2.pi_b[0].slice(0, 2).reverse(),
174
- ...proof2.pi_b[1].slice(0, 2).reverse(),
175
- ...proof2.pi_c.slice(0, 2),
176
- ...sigs,
177
- ]
178
- }
179
-
180
- async getInputs2({ json, path }) {
181
- return {
182
- json: pad(toSignal(encode(json)), this.size_json),
183
- path: pad(toSignal(encodePath(path)), this.size_path),
184
- val: pad(toSignal(encodeVal(this.getVal(json, path))), this.size_val),
185
- }
186
- }
187
-
188
- _getVal(j, p) {
189
- if (p.length === 0) {
190
- return j
191
- } else {
192
- const sp = p[0].split("[")
193
- for (let v of sp) {
194
- if (/]$/.test(v)) {
195
- j = j[v.replace(/]$/, "") * 1]
196
- } else {
197
- j = j[v]
198
- }
199
- }
200
- return this._getVal(j, p.slice(1))
201
- }
202
- }
203
-
204
- getVal(j, p) {
205
- if (p === "") return j
206
- return this._getVal(j, p.split("."))
207
- }
208
-
209
- async genProof2(json, path) {
210
- const inputs = await this.getInputs(json, path)
211
- const { proof, publicSignals } = await snarkjs.groth16.fullProve(
212
- inputs,
213
- this.wasm,
214
- this.zkey
215
- )
216
- return [
217
- ...proof.pi_a.slice(0, 2),
218
- ...proof.pi_b[0].slice(0, 2).reverse(),
219
- ...proof.pi_b[1].slice(0, 2).reverse(),
220
- ...proof.pi_c.slice(0, 2),
221
- ...publicSignals,
222
- ]
223
- }
224
- }