@proto-kit/common 0.1.1-develop.1665 → 0.1.1-develop.1689

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/dependencyFactory/injectOptional.d.ts +16 -0
  2. package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
  3. package/dist/dependencyFactory/injectOptional.js +40 -0
  4. package/dist/dependencyFactory/injectOptional.js.map +1 -0
  5. package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
  6. package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
  7. package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
  8. package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
  9. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  10. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  11. package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
  12. package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  13. package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
  14. package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  15. package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
  16. package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
  17. package/dist/trees/LinkedMerkleTree.d.ts +345 -0
  18. package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
  19. package/dist/trees/LinkedMerkleTree.js +337 -0
  20. package/dist/trees/LinkedMerkleTree.js.map +1 -0
  21. package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
  22. package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
  23. package/dist/trees/LinkedMerkleTreeStore.js +2 -0
  24. package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
  25. package/dist/trees/MerkleTreeStore.d.ts +5 -0
  26. package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
  27. package/dist/trees/MerkleTreeStore.js +2 -0
  28. package/dist/trees/MerkleTreeStore.js.map +1 -0
  29. package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
  30. package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
  31. package/dist/trees/MockAsyncMerkleStore.js +20 -0
  32. package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
  33. package/dist/trees/RollupMerkleTree.d.ts +147 -0
  34. package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
  35. package/dist/trees/RollupMerkleTree.js +218 -0
  36. package/dist/trees/RollupMerkleTree.js.map +1 -0
  37. package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
  38. package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
  39. package/dist/trees/VirtualMerkleTreeStore.js +18 -0
  40. package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
  41. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  42. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  43. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
  44. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  45. package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
  46. package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
  47. package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
  48. package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
  49. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
  50. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
  51. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
  52. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
  53. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
  54. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
  55. package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
  56. package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
  57. package/dist/zkProgrammable/ZkProgrammable.d.ts +9 -3
  58. package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
  59. package/dist/zkProgrammable/ZkProgrammable.js.map +1 -1
  60. package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
  61. package/dist/zkProgrammable/provableMethod.js +15 -2
  62. package/dist/zkProgrammable/provableMethod.js.map +1 -1
  63. package/package.json +3 -3
  64. package/src/zkProgrammable/ZkProgrammable.ts +12 -3
  65. package/src/zkProgrammable/provableMethod.ts +15 -3
  66. package/test/zkProgrammable/ZkProgrammable.test.ts +11 -7
@@ -0,0 +1,218 @@
1
+ import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
2
+ import { range } from "../utils";
3
+ import { InMemoryMerkleTreeStorage } from "./InMemoryMerkleTreeStorage";
4
+ class StructTemplate extends Struct({
5
+ path: Provable.Array(Field, 0),
6
+ isLeft: Provable.Array(Bool, 0),
7
+ }) {
8
+ }
9
+ /**
10
+ * A [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree) is a binary tree in
11
+ * which every leaf is the cryptography hash of a piece of data,
12
+ * and every node is the hash of the concatenation of its two child nodes.
13
+ *
14
+ * A Merkle Tree allows developers to easily and securely verify
15
+ * the integrity of large amounts of data.
16
+ *
17
+ * Take a look at our [documentation](https://docs.minaprotocol.com/en/zkapps)
18
+ * on how to use Merkle Trees in combination with zkApps and
19
+ * zero knowledge programming!
20
+ *
21
+ * Levels are indexed from leaves (level 0) to root (level N - 1).
22
+ *
23
+ * This function takes a height as argument and returns a class
24
+ * that implements a merkletree with that specified height.
25
+ *
26
+ * It also holds the Witness class under tree.WITNESS
27
+ */
28
+ export function createMerkleTree(height) {
29
+ var _a;
30
+ /**
31
+ * The {@link BaseMerkleWitness} class defines a circuit-compatible base class
32
+ * for [Merkle Witness'](https://computersciencewiki.org/index.php/Merkle_proof).
33
+ */
34
+ class RollupMerkleWitness extends Struct({
35
+ path: Provable.Array(Field, height - 1),
36
+ isLeft: Provable.Array(Bool, height - 1),
37
+ }) {
38
+ height() {
39
+ return RollupMerkleWitness.height;
40
+ }
41
+ /**
42
+ * Calculates a root depending on the leaf value.
43
+ * @param leaf Value of the leaf node that belongs to this Witness.
44
+ * @returns The calculated root.
45
+ */
46
+ calculateRoot(leaf) {
47
+ let hash = leaf;
48
+ const n = this.height();
49
+ for (let index = 1; index < n; ++index) {
50
+ const isLeft = this.isLeft[index - 1];
51
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
52
+ const [left, right] = maybeSwap(isLeft, hash, this.path[index - 1]);
53
+ hash = Poseidon.hash([left, right]);
54
+ }
55
+ return hash;
56
+ }
57
+ /**
58
+ * Calculates the index of the leaf node that belongs to this Witness.
59
+ * @returns Index of the leaf.
60
+ */
61
+ calculateIndex() {
62
+ let powerOfTwo = Field(1);
63
+ let index = Field(0);
64
+ const n = this.height();
65
+ for (let i = 1; i < n; ++i) {
66
+ index = Provable.if(this.isLeft[i - 1], index, index.add(powerOfTwo));
67
+ powerOfTwo = powerOfTwo.mul(2);
68
+ }
69
+ return index;
70
+ }
71
+ checkMembership(root, key, value) {
72
+ const calculatedRoot = this.calculateRoot(value);
73
+ const calculatedKey = this.calculateIndex();
74
+ // We don't have to range-check the key, because if it would be greater
75
+ // than leafCount, it would not match the computedKey
76
+ key.assertEquals(calculatedKey, "Keys of MerkleWitness does not match");
77
+ return root.equals(calculatedRoot);
78
+ }
79
+ checkMembershipGetRoots(root, key, value) {
80
+ const calculatedRoot = this.calculateRoot(value);
81
+ const calculatedKey = this.calculateIndex();
82
+ key.assertEquals(calculatedKey, "Keys of MerkleWitness does not match");
83
+ return [root.equals(calculatedRoot), root, calculatedRoot];
84
+ }
85
+ toShortenedEntries() {
86
+ return range(0, 5)
87
+ .concat(range(this.height() - 4, this.height()))
88
+ .map((index) => [
89
+ this.path[index].toString(),
90
+ this.isLeft[index].toString(),
91
+ ].toString());
92
+ }
93
+ static dummy() {
94
+ return new RollupMerkleWitness({
95
+ isLeft: Array(height - 1).fill(Bool(true)),
96
+ path: Array(height - 1).fill(Field(0)),
97
+ });
98
+ }
99
+ }
100
+ RollupMerkleWitness.height = height;
101
+ return _a = class AbstractRollupMerkleTree {
102
+ static get leafCount() {
103
+ return 2n ** BigInt(AbstractRollupMerkleTree.HEIGHT - 1);
104
+ }
105
+ constructor(store) {
106
+ this.store = store;
107
+ this.zeroes = [0n];
108
+ for (let index = 1; index < AbstractRollupMerkleTree.HEIGHT; index += 1) {
109
+ const previousLevel = Field(this.zeroes[index - 1]);
110
+ this.zeroes.push(Poseidon.hash([previousLevel, previousLevel]).toBigInt());
111
+ }
112
+ }
113
+ assertIndexRange(index) {
114
+ if (index > this.leafCount) {
115
+ throw new Error("Index greater than maximum leaf number");
116
+ }
117
+ }
118
+ /**
119
+ * Returns a node which lives at a given index and level.
120
+ * @param level Level of the node.
121
+ * @param index Index of the node.
122
+ * @returns The data of the node.
123
+ */
124
+ getNode(level, index) {
125
+ this.assertIndexRange(index);
126
+ return Field(this.store.getNode(index, level) ?? this.zeroes[level]);
127
+ }
128
+ /**
129
+ * Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
130
+ * @returns The root of the Merkle Tree.
131
+ */
132
+ getRoot() {
133
+ return this.getNode(AbstractRollupMerkleTree.HEIGHT - 1, 0n).toConstant();
134
+ }
135
+ // private in interface
136
+ setNode(level, index, value) {
137
+ this.store.setNode(index, level, value.toBigInt());
138
+ }
139
+ /**
140
+ * Sets the value of a leaf node at a given index to a given value.
141
+ * @param index Position of the leaf node.
142
+ * @param leaf New value.
143
+ */
144
+ setLeaf(index, leaf) {
145
+ this.assertIndexRange(index);
146
+ this.setNode(0, index, leaf);
147
+ let currentIndex = index;
148
+ for (let level = 1; level < AbstractRollupMerkleTree.HEIGHT; level += 1) {
149
+ currentIndex /= 2n;
150
+ const left = this.getNode(level - 1, currentIndex * 2n);
151
+ const right = this.getNode(level - 1, currentIndex * 2n + 1n);
152
+ this.setNode(level, currentIndex, Poseidon.hash([left, right]));
153
+ }
154
+ }
155
+ /**
156
+ * Returns the witness (also known as
157
+ * [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
158
+ * for the leaf at the given index.
159
+ * @param index Position of the leaf node.
160
+ * @returns The witness that belongs to the leaf.
161
+ */
162
+ getWitness(index) {
163
+ this.assertIndexRange(index);
164
+ const path = [];
165
+ const isLefts = [];
166
+ let currentIndex = index;
167
+ for (let level = 0; level < AbstractRollupMerkleTree.HEIGHT - 1; level += 1) {
168
+ const isLeft = currentIndex % 2n === 0n;
169
+ const sibling = this.getNode(level, isLeft ? currentIndex + 1n : currentIndex - 1n);
170
+ isLefts.push(Bool(isLeft));
171
+ path.push(sibling);
172
+ currentIndex /= 2n;
173
+ }
174
+ return new RollupMerkleWitness({
175
+ isLeft: isLefts,
176
+ path,
177
+ });
178
+ }
179
+ // TODO: should this take an optional offset? should it fail if the array is too long?
180
+ /**
181
+ * Fills all leaves of the tree.
182
+ * @param leaves Values to fill the leaves with.
183
+ */
184
+ fill(leaves) {
185
+ leaves.forEach((value, index) => {
186
+ this.setLeaf(BigInt(index), value);
187
+ });
188
+ }
189
+ /**
190
+ * Returns the amount of leaf nodes.
191
+ * @returns Amount of leaf nodes.
192
+ */
193
+ get leafCount() {
194
+ return AbstractRollupMerkleTree.leafCount;
195
+ }
196
+ },
197
+ _a.HEIGHT = height,
198
+ _a.EMPTY_ROOT = new _a(new InMemoryMerkleTreeStorage())
199
+ .getRoot()
200
+ .toBigInt(),
201
+ _a.WITNESS = RollupMerkleWitness,
202
+ _a;
203
+ }
204
+ export class RollupMerkleTree extends createMerkleTree(256) {
205
+ }
206
+ export class RollupMerkleTreeWitness extends RollupMerkleTree.WITNESS {
207
+ }
208
+ /**
209
+ * More efficient version of `maybeSwapBad` which
210
+ * reuses an intermediate variable
211
+ */
212
+ function maybeSwap(b, x, y) {
213
+ const m = b.toField().mul(x.sub(y)); // b*(x - y)
214
+ const x1 = y.add(m); // y + b*(x - y)
215
+ const y2 = x.sub(m); // x - b*(x - y) = x + b*(y - x)
216
+ return [x1, y2];
217
+ }
218
+ //# sourceMappingURL=RollupMerkleTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RollupMerkleTree.js","sourceRoot":"","sources":["../../src/trees/RollupMerkleTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,cAAe,SAAQ,MAAM,CAAC;IAClC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;CAChC,CAAC;CAAG;AAqFL;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;;IAC7C;;;OAGG;IACH,MAAM,mBACJ,SAAQ,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;QACvC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;KACzC,CAAC;QAKK,MAAM;YACX,OAAO,mBAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;QAED;;;;WAIG;QACI,aAAa,CAAC,IAAW;YAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAExB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACtC,mEAAmE;gBACnE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aACrC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;WAGG;QACI,cAAc;YACnB,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC1B,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtE,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAChC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAEM,eAAe,CAAC,IAAW,EAAE,GAAU,EAAE,KAAY;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,uEAAuE;YACvE,qDAAqD;YACrD,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QAEM,uBAAuB,CAC5B,IAAW,EACX,GAAU,EACV,KAAY;YAEZ,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC7D,CAAC;QAEM,kBAAkB;YACvB,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;iBAC/C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb;gBACE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;aAC9B,CAAC,QAAQ,EAAE,CACb,CAAC;QACN,CAAC;QAEM,MAAM,CAAC,KAAK;YACjB,OAAO,IAAI,mBAAmB,CAAC;gBAC7B,MAAM,EAAE,KAAK,CAAO,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,EAAE,KAAK,CAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;;IA9Ea,0BAAM,GAAG,MAAM,CAAC;IAiFhC,YAAO,MAAM,wBAAwB;YAS5B,MAAM,KAAK,SAAS;gBACzB,OAAO,EAAE,IAAI,MAAM,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YAUD,YAAmB,KAAsB;gBACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;oBACvE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CACzD,CAAC;iBACH;YACH,CAAC;YAEM,gBAAgB,CAAC,KAAa;gBACnC,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;oBAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;iBAC3D;YACH,CAAC;YAED;;;;;eAKG;YACI,OAAO,CAAC,KAAa,EAAE,KAAa;gBACzC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;YAED;;;eAGG;YACI,OAAO;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5E,CAAC;YAED,uBAAuB;YACf,OAAO,CAAC,KAAa,EAAE,KAAa,EAAE,KAAY;gBACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrD,CAAC;YAED;;;;eAIG;YACI,OAAO,CAAC,KAAa,EAAE,IAAW;gBACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAE7B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7B,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;oBACvE,YAAY,IAAI,EAAE,CAAC;oBAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;oBAE9D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACjE;YACH,CAAC;YAED;;;;;;eAMG;YACI,UAAU,CAAC,KAAa;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAE7B,MAAM,IAAI,GAAG,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,KACE,IAAI,KAAK,GAAG,CAAC,EACb,KAAK,GAAG,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAC3C,KAAK,IAAI,CAAC,EACV;oBACA,MAAM,MAAM,GAAG,YAAY,GAAG,EAAE,KAAK,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAC1B,KAAK,EACL,MAAM,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAC/C,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACnB,YAAY,IAAI,EAAE,CAAC;iBACpB;gBACD,OAAO,IAAI,mBAAmB,CAAC;oBAC7B,MAAM,EAAE,OAAO;oBACf,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YAED,sFAAsF;YACtF;;;eAGG;YACI,IAAI,CAAC,MAAe;gBACzB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC;YAED;;;eAGG;YACH,IAAW,SAAS;gBAClB,OAAO,wBAAwB,CAAC,SAAS,CAAC;YAC5C,CAAC;SACF;QApIe,SAAM,GAAG,MAAO;QAEhB,aAAU,GAAG,IAAI,EAAwB,CACrD,IAAI,yBAAyB,EAAE,CAChC;aACE,OAAO,EAAE;aACT,QAAQ,EAAG;QAMA,UAAO,GAAG,mBAAoB;WAwH5C;AACJ,CAAC;AAED,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB,CAAC,GAAG,CAAC;CAAG;AAC9D,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB,CAAC,OAAO;CAAG;AAExE;;;GAGG;AACH,SAAS,SAAS,CAAC,CAAO,EAAE,CAAQ,EAAE,CAAQ;IAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;IACjD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;IACrD,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { MerkleTreeStore } from "./MerkleTreeStore";
2
+ import { InMemoryMerkleTreeStorage } from "./InMemoryMerkleTreeStorage";
3
+ /**
4
+ * A MemoryMerkleTreeStore that, if falls back to a parent store if it
5
+ * has no data
6
+ */
7
+ export declare class VirtualMerkleTreeStore extends InMemoryMerkleTreeStorage {
8
+ private readonly parent;
9
+ constructor(parent: MerkleTreeStore);
10
+ getNode(key: bigint, level: number): bigint | undefined;
11
+ setNode(key: bigint, level: number, value: bigint): void;
12
+ }
13
+ //# sourceMappingURL=VirtualMerkleTreeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualMerkleTreeStore.d.ts","sourceRoot":"","sources":["../../src/trees/VirtualMerkleTreeStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,yBAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAIpD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGhE"}
@@ -0,0 +1,18 @@
1
+ import { InMemoryMerkleTreeStorage } from "./InMemoryMerkleTreeStorage";
2
+ /**
3
+ * A MemoryMerkleTreeStore that, if falls back to a parent store if it
4
+ * has no data
5
+ */
6
+ export class VirtualMerkleTreeStore extends InMemoryMerkleTreeStorage {
7
+ constructor(parent) {
8
+ super();
9
+ this.parent = parent;
10
+ }
11
+ getNode(key, level) {
12
+ return super.getNode(key, level) ?? this.parent.getNode(key, level);
13
+ }
14
+ setNode(key, level, value) {
15
+ super.setNode(key, level, value);
16
+ }
17
+ }
18
+ //# sourceMappingURL=VirtualMerkleTreeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualMerkleTreeStore.js","sourceRoot":"","sources":["../../src/trees/VirtualMerkleTreeStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,yBAAyB;IACnE,YAAoC,MAAuB;QACzD,KAAK,EAAE,CAAC;QAD0B,WAAM,GAAN,MAAM,CAAiB;IAE3D,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,KAAa;QACtD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { InMemoryLinkedLeafStore } from "./InMemoryLinkedLeafStore";
2
+ import { InMemoryMerkleTreeStorage } from "../sparse/InMemoryMerkleTreeStorage";
3
+ declare const InMemoryLinkedMerkleLeafStore_base: import("ts-mixer/dist/types/types").Class<any[], InMemoryLinkedLeafStore & InMemoryMerkleTreeStorage, typeof InMemoryLinkedLeafStore & typeof InMemoryMerkleTreeStorage>;
4
+ export declare class InMemoryLinkedMerkleLeafStore extends InMemoryLinkedMerkleLeafStore_base {
5
+ }
6
+ export {};
7
+ //# sourceMappingURL=InMemoryLinkedMerkleLeafStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryLinkedMerkleLeafStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/InMemoryLinkedMerkleLeafStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;;AAEhF,qBAAa,6BAA8B,SAAQ,kCAGlD;CAAG"}
@@ -0,0 +1,6 @@
1
+ import { Mixin } from "ts-mixer";
2
+ import { InMemoryLinkedLeafStore } from "./InMemoryLinkedLeafStore";
3
+ import { InMemoryMerkleTreeStorage } from "../sparse/InMemoryMerkleTreeStorage";
4
+ export class InMemoryLinkedMerkleLeafStore extends Mixin(InMemoryLinkedLeafStore, InMemoryMerkleTreeStorage) {
5
+ }
6
+ //# sourceMappingURL=InMemoryLinkedMerkleLeafStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryLinkedMerkleLeafStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/InMemoryLinkedMerkleLeafStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,MAAM,OAAO,6BAA8B,SAAQ,KAAK,CACtD,uBAAuB,EACvB,yBAAyB,CAC1B;CAAG"}
@@ -0,0 +1,16 @@
1
+ export type LinkedLeaf = {
2
+ value: bigint;
3
+ path: bigint;
4
+ nextPath: bigint;
5
+ };
6
+ export type StoredLeaf = {
7
+ leaf: LinkedLeaf;
8
+ index: bigint;
9
+ };
10
+ export interface LinkedLeafStore {
11
+ setLeaf: (index: bigint, value: LinkedLeaf) => void;
12
+ getLeaf: (path: bigint) => StoredLeaf | undefined;
13
+ getLeafLessOrEqual: (path: bigint) => StoredLeaf | undefined;
14
+ getMaximumIndex: () => bigint | undefined;
15
+ }
16
+ //# sourceMappingURL=LinkedLinkedStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLinkedStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLinkedStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAEpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAElD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAE7D,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedLinkedStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLinkedStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLinkedStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { MerkleTreeStore } from "../sparse/MerkleTreeStore";
2
+ import { LinkedLeafStore } from "./LinkedLinkedStore";
3
+ export interface SyncLinkedMerkleTreeDatabase {
4
+ treeStore: MerkleTreeStore;
5
+ leafStore: LinkedLeafStore;
6
+ }
7
+ //# sourceMappingURL=LinkedMerkleTreeDatabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeDatabase.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeDatabase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedMerkleTreeDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeDatabase.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeDatabase.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export type LinkedLeaf = {
2
+ value: bigint;
3
+ path: bigint;
4
+ nextPath: bigint;
5
+ };
6
+ export type StoredLeaf = {
7
+ leaf: LinkedLeaf;
8
+ index: bigint;
9
+ };
10
+ export interface LinkedLeafStore {
11
+ setLeaf: (index: bigint, value: LinkedLeaf) => void;
12
+ getLeaf: (path: bigint) => StoredLeaf | undefined;
13
+ getLeafLessOrEqual: (path: bigint) => StoredLeaf | undefined;
14
+ getMaximumIndex: () => bigint | undefined;
15
+ }
16
+ //# sourceMappingURL=LinkedMerkleTreeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAEpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAElD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAE7D,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedMerkleTreeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeStore.ts"],"names":[],"mappings":""}
@@ -16,16 +16,22 @@ export interface Verify<PublicInput, PublicOutput> {
16
16
  export interface Compile {
17
17
  (): Promise<CompileArtifact>;
18
18
  }
19
- export interface PlainZkProgram<PublicInput = undefined, PublicOutput = void> {
19
+ export interface PlainZkProgram<PublicInput = undefined, PublicOutput = undefined> {
20
20
  name: string;
21
21
  compile: Compile;
22
22
  verify: Verify<PublicInput, PublicOutput>;
23
23
  Proof: ReturnType<typeof ZkProgram.Proof<FlexibleProvablePure<PublicInput>, FlexibleProvablePure<PublicOutput>>>;
24
- methods: Record<string, ((...args: any) => Promise<Proof<PublicInput, PublicOutput>>) | ((publicInput: PublicInput, ...args: any) => Promise<Proof<PublicInput, PublicOutput>>)>;
24
+ methods: Record<string, ((...args: any) => Promise<{
25
+ proof: Proof<PublicInput, PublicOutput>;
26
+ auxiliaryOutput: any;
27
+ }>) | ((publicInput: PublicInput, ...args: any) => Promise<{
28
+ proof: Proof<PublicInput, PublicOutput>;
29
+ auxiliaryOutput: any;
30
+ }>)>;
25
31
  analyzeMethods: () => Promise<Record<string, Awaited<ReturnType<typeof Provable.constraintSystem>>>>;
26
32
  }
27
33
  export declare function verifyToMockable<PublicInput, PublicOutput>(verify: Verify<PublicInput, PublicOutput>, { areProofsEnabled }: AreProofsEnabled): (proof: Proof<PublicInput, PublicOutput>) => Promise<boolean>;
28
- export declare const MOCK_VERIFICATION_KEY: import("o1js/dist/node/lib/proof-system/zkprogram").VerificationKey;
34
+ export declare const MOCK_VERIFICATION_KEY: import("o1js/dist/node/lib/proof-system/verification-key").VerificationKey;
29
35
  export declare function compileToMockable(compile: Compile, { areProofsEnabled }: AreProofsEnabled): () => Promise<CompileArtifact>;
30
36
  export declare abstract class ZkProgrammable<PublicInput = undefined, PublicOutput = void> {
31
37
  abstract get areProofsEnabled(): AreProofsEnabled | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ZkProgrammable.d.ts","sourceRoot":"","sources":["../../src/zkProgrammable/ZkProgrammable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAM/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AASpE,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,MAAM,CAAC,WAAW,EAAE,YAAY;IAC/C,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,WAAW,GAAG,SAAS,EAAE,YAAY,GAAG,IAAI;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1C,KAAK,EAAE,UAAU,CACf,OAAO,SAAS,CAAC,KAAK,CACpB,oBAAoB,CAAC,WAAW,CAAC,EACjC,oBAAoB,CAAC,YAAY,CAAC,CACnC,CACF,CAAC;IACF,OAAO,EAAE,MAAM,CACb,MAAM,EACJ,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,GAC7D,CAAC,CACC,WAAW,EAAE,WAAW,EACxB,GAAG,IAAI,EAAE,GAAG,KACT,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAClD,CAAC;IACF,cAAc,EAAE,MAAM,OAAO,CAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtE,CAAC;CACH;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,YAAY,EACxD,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,EACzC,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,WAEjB,MAAM,WAAW,EAAE,YAAY,CAAC,sBAiBtD;AAED,eAAO,MAAM,qBAAqB,qEAAyB,CAAC;AAE5D,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,GACrC,MAAM,OAAO,CAAC,eAAe,CAAC,CAUhC;AAED,8BAAsB,cAAc,CAClC,WAAW,GAAG,SAAS,EACvB,YAAY,GAAG,IAAI;IAEnB,aAAoB,gBAAgB,IAAI,gBAAgB,GAAG,SAAS,CAAC;aAErD,gBAAgB,IAAI,cAAc,CAChD,WAAW,EACX,YAAY,CACb,EAAE;IAEH,OAAO,CAAC,kBAAkB,CAAC,CAA8C;IAEzE,IACW,SAAS,IAAI,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAelE;IAEY,OAAO,CAAC,QAAQ,EAAE,eAAe;CAc/C;AAED,MAAM,WAAW,kBAAkB,CACjC,WAAW,GAAG,SAAS,EACvB,YAAY,GAAG,IAAI;IAEnB,cAAc,EAAE,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"ZkProgrammable.d.ts","sourceRoot":"","sources":["../../src/zkProgrammable/ZkProgrammable.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZkProgrammable.js","sourceRoot":"","sources":["../../src/zkProgrammable/ZkProgrammable.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,GAAG;IACb,sBAAsB,EAAE,CAAC,IAAY,EAAE,EAAE,CACvC,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC;CAC9D,CAAC;AA6CF,MAAM,UAAU,gBAAgB,CAC9B,MAAyC,EACzC,EAAE,gBAAgB,EAAoB;IAEtC,OAAO,KAAK,EAAE,KAAuC,EAAE,EAAE;QACvD,IAAI,gBAAgB,EAAE;YACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI;gBACF,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;aAChC;YAAC,OAAO,KAAc,EAAE;gBACvB,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,QAAQ,GAAG,KAAK,CAAC;aAClB;YAED,OAAO,QAAQ,CAAC;SACjB;QAED,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,EAAE,CAAC;AAE5D,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,EAAE,gBAAgB,EAAoB;IAEtC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,gBAAgB,EAAE;YACpB,OAAO,MAAM,OAAO,EAAE,CAAC;SACxB;QAED,OAAO;YACL,eAAe,EAAE,qBAAqB;SACvC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAgB,cAAc;IAalC,IACW,SAAS;QAClB,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACnD;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,MAAM,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC5D;YACD,OAAO;gBACL,GAAG,MAAM;gBACT,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAC9D,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC;aAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAyB;QAC5C,OAAO,MAAM,gBAAgB,CAC3B,IAAI,CAAC,SAAS,EACd,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO;gBACL,GAAG,GAAG;gBACN,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;aACvB,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,EAAqC,CACtC,CAAC;IACJ,CAAC;CACF;AAhCC;IAAC,OAAO,EAAE;;;+CAgBT"}
1
+ {"version":3,"file":"ZkProgrammable.js","sourceRoot":"","sources":["../../src/zkProgrammable/ZkProgrammable.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,GAAG;IACb,sBAAsB,EAAE,CAAC,IAAY,EAAE,EAAE,CACvC,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC;CAC9D,CAAC;AAsDF,MAAM,UAAU,gBAAgB,CAC9B,MAAyC,EACzC,EAAE,gBAAgB,EAAoB;IAEtC,OAAO,KAAK,EAAE,KAAuC,EAAE,EAAE;QACvD,IAAI,gBAAgB,EAAE;YACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,IAAI;gBACF,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;aAChC;YAAC,OAAO,KAAc,EAAE;gBACvB,6BAA6B;gBAC7B,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,QAAQ,GAAG,KAAK,CAAC;aAClB;YAED,OAAO,QAAQ,CAAC;SACjB;QAED,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,EAAE,CAAC;AAE5D,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,EAAE,gBAAgB,EAAoB;IAEtC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,gBAAgB,EAAE;YACpB,OAAO,MAAM,OAAO,EAAE,CAAC;SACxB;QAED,OAAO;YACL,eAAe,EAAE,qBAAqB;SACvC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAgB,cAAc;IAalC,IACW,SAAS;QAClB,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACnD;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,MAAM,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC5D;YACD,OAAO;gBACL,GAAG,MAAM;gBACT,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBAC9D,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC;aAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAyB;QAC5C,OAAO,MAAM,gBAAgB,CAC3B,IAAI,CAAC,SAAS,EACd,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO;gBACL,GAAG,GAAG;gBACN,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;aACvB,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,EAAqC,CACtC,CAAC;IACJ,CAAC;CACF;AAhCC;IAAC,OAAO,EAAE;;;+CAgBT"}
@@ -1 +1 @@
1
- {"version":3,"file":"provableMethod.d.ts","sourceRoot":"","sources":["../../src/zkProgrammable/provableMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAG3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG3E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,CACxB,aAAa,GACb,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,GACvB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CACjC,EAAE,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3E,eAAO,MAAM,UAAU,eAAe,CAAC;AAGvC,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,eAAe,EAChC,2BAA2B,EAAE,OAAO,EACpC,GAAG,IAAI,EAAE,aAAa,UAEa,eAAe,GAAG,EAAE,GAAG,CAAC,8BAmC5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,2BAA2B,UAAO,EAClC,gBAAgB,GAAE,8BAEjB,wGAMa,MAAM,gDAC4B,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,wCAA5B,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,EA2C7E"}
1
+ {"version":3,"file":"provableMethod.d.ts","sourceRoot":"","sources":["../../src/zkProgrammable/provableMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAG3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG3E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,CACxB,aAAa,GACb,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,GACvB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CACjC,EAAE,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3E,eAAO,MAAM,UAAU,eAAe,CAAC;AAGvC,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,eAAe,EAChC,2BAA2B,EAAE,OAAO,EACpC,GAAG,IAAI,EAAE,aAAa,UAEa,eAAe,GAAG,EAAE,GAAG,CAAC,8BA+C5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,2BAA2B,UAAO,EAClC,gBAAgB,GAAE,8BAEjB,wGAMa,MAAM,gDAC4B,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,wCAA5B,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,EA2C7E"}
@@ -11,7 +11,9 @@ export function toProver(methodName, simulatedMethod, isFirstParameterPublicInpu
11
11
  }
12
12
  if (areProofsEnabled) {
13
13
  const programProvableMethod = zkProgram.methods[methodName];
14
- return await Reflect.apply(programProvableMethod, this, args);
14
+ const result = await Reflect.apply(programProvableMethod, this, args);
15
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
16
+ return result.proof;
15
17
  }
16
18
  // create a mock proof by simulating method> execution in JS
17
19
  const publicOutput = await Reflect.apply(simulatedMethod, this, args);
@@ -19,7 +21,18 @@ export function toProver(methodName, simulatedMethod, isFirstParameterPublicInpu
19
21
  proof: MOCK_PROOF,
20
22
  // TODO: provide undefined if public input is not used
21
23
  publicInput: isFirstParameterPublicInput ? args[0] : undefined,
22
- publicOutput,
24
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
25
+ publicOutput: (() => {
26
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
27
+ if (!publicOutput || typeof publicOutput !== "object") {
28
+ return undefined;
29
+ }
30
+ if ("publicOutput" in publicOutput) {
31
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
32
+ return publicOutput.publicOutput;
33
+ }
34
+ return publicOutput;
35
+ })(),
23
36
  /**
24
37
  * We set this to the max possible number, to avoid having
25
38
  * to manually count in-circuit proof verifications
@@ -1 +1 @@
1
- {"version":3,"file":"provableMethod.js","sourceRoot":"","sources":["../../src/zkProgrammable/provableMethod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAalF,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,8DAA8D;AAE9D,MAAM,UAAU,QAAQ,CACtB,UAAkB,EAClB,eAAgC,EAChC,2BAAoC,EACpC,GAAG,IAAmB;IAEtB,OAAO,KAAK,UAAU,MAAM;QAC1B,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,gBAAiB,CAAC;QAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAC/C,CAAC;QAEF,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,KAAK,CACb,qDAAqD,UAAU,GAAG,CACnE,CAAC;SACH;QAED,IAAI,gBAAgB,EAAE;YACpB,MAAM,qBAAqB,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAC/D;QAED,4DAA4D;QAC5D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEtE,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC;YACzB,KAAK,EAAE,UAAU;YAEjB,sDAAsD;YACtD,WAAW,EAAE,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9D,YAAY;YAEZ;;;eAGG;YACH,iBAAiB,EAAE,CAAC;SACrB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,2BAA2B,GAAG,IAAI,EAClC,mBAAmD,SAAS,CAAC,OAAO,CAClE,8BAA8B,CAC/B;IAED,OAAO,CAGL,MAAc,EACd,UAAkB,EAClB,UAA2E,EAC3E,EAAE;QACF,yEAAyE;QACzE,MAAM,eAAe,GAAG,UAAU,CAAC,KAAwB,CAAC;QAE5D,UAAU,CAAC,KAAK,GAAG,KAAK,UAAU,KAAK,CAErC,GAAG,IAAmB;YAEtB,MAAM,MAAM,GAAG,QAAQ,CACrB,UAAU,EACV,eAAe,EACf,2BAA2B,EAC3B,GAAG,IAAI,CACR,CAAC;YAEF,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAEvE;;;eAGG;YACH,IAAI,gBAAgB,CAAC,UAAU,EAAE;gBAC/B,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/C;YAED;;;;eAIG;YACH,IAAI,MAAe,CAAC;YACpB,IAAI;gBACF,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;aACrD;oBAAS;gBACR,gBAAgB,CAAC,WAAW,EAAE,CAAC;aAChC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"provableMethod.js","sourceRoot":"","sources":["../../src/zkProgrammable/provableMethod.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "license": "MIT",
4
4
  "private": false,
5
5
  "type": "module",
6
- "version": "0.1.1-develop.1665+66550e65",
6
+ "version": "0.1.1-develop.1689+67e6fdf4",
7
7
  "scripts": {
8
8
  "build": "tsc -p tsconfig.json",
9
9
  "dev": "tsc -p tsconfig.json --watch",
@@ -24,12 +24,12 @@
24
24
  "typescript-memoize": "^1.1.1"
25
25
  },
26
26
  "peerDependencies": {
27
- "o1js": "^1.6.0",
27
+ "o1js": "^2.10.0",
28
28
  "tsyringe": "^4.10.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@jest/globals": "^29.5.0",
32
32
  "@types/lodash": "^4.14.194"
33
33
  },
34
- "gitHead": "66550e6515f3194fc9495f4474f3a08bb24a6130"
34
+ "gitHead": "67e6fdf49caf9744de439fcc564874f2420b8b97"
35
35
  }
@@ -33,7 +33,10 @@ export interface Compile {
33
33
  (): Promise<CompileArtifact>;
34
34
  }
35
35
 
36
- export interface PlainZkProgram<PublicInput = undefined, PublicOutput = void> {
36
+ export interface PlainZkProgram<
37
+ PublicInput = undefined,
38
+ PublicOutput = undefined,
39
+ > {
37
40
  name: string;
38
41
  compile: Compile;
39
42
  verify: Verify<PublicInput, PublicOutput>;
@@ -45,11 +48,17 @@ export interface PlainZkProgram<PublicInput = undefined, PublicOutput = void> {
45
48
  >;
46
49
  methods: Record<
47
50
  string,
48
- | ((...args: any) => Promise<Proof<PublicInput, PublicOutput>>)
51
+ | ((...args: any) => Promise<{
52
+ proof: Proof<PublicInput, PublicOutput>;
53
+ auxiliaryOutput: any;
54
+ }>)
49
55
  | ((
50
56
  publicInput: PublicInput,
51
57
  ...args: any
52
- ) => Promise<Proof<PublicInput, PublicOutput>>)
58
+ ) => Promise<{
59
+ proof: Proof<PublicInput, PublicOutput>;
60
+ auxiliaryOutput: any;
61
+ }>)
53
62
  >;
54
63
  analyzeMethods: () => Promise<
55
64
  Record<string, Awaited<ReturnType<typeof Provable.constraintSystem>>>
@@ -38,7 +38,9 @@ export function toProver(
38
38
 
39
39
  if (areProofsEnabled) {
40
40
  const programProvableMethod = zkProgram.methods[methodName];
41
- return await Reflect.apply(programProvableMethod, this, args);
41
+ const result = await Reflect.apply(programProvableMethod, this, args);
42
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
43
+ return result.proof as Proof<any, any>;
42
44
  }
43
45
 
44
46
  // create a mock proof by simulating method> execution in JS
@@ -49,8 +51,18 @@ export function toProver(
49
51
 
50
52
  // TODO: provide undefined if public input is not used
51
53
  publicInput: isFirstParameterPublicInput ? args[0] : undefined,
52
- publicOutput,
53
-
54
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
55
+ publicOutput: (() => {
56
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
57
+ if (!publicOutput || typeof publicOutput !== "object") {
58
+ return undefined;
59
+ }
60
+ if ("publicOutput" in publicOutput) {
61
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
62
+ return (publicOutput as any).publicOutput;
63
+ }
64
+ return publicOutput;
65
+ })(),
54
66
  /**
55
67
  * We set this to the max possible number, to avoid having
56
68
  * to manually count in-circuit proof verifications
@@ -42,18 +42,22 @@ class TestProgrammable extends ZkProgrammable<
42
42
  @provableMethod()
43
43
  public async foo(publicInput: TestPublicInput, bar: Balance) {
44
44
  // expose the private input as public output again for testing purposes
45
- return new TestPublicOutput({
46
- bar,
47
- });
45
+ return {
46
+ publicOutput: new TestPublicOutput({
47
+ bar,
48
+ }),
49
+ };
48
50
  }
49
51
 
50
52
  @provableMethod()
51
53
  public async fail(publicInput: TestPublicInput) {
52
54
  publicInput.foo.assertEquals(1, failErrorMessage);
53
55
 
54
- return new TestPublicOutput({
55
- bar: Field(0),
56
- });
56
+ return {
57
+ publicOutput: new TestPublicOutput({
58
+ bar: Field(0),
59
+ }),
60
+ };
57
61
  }
58
62
 
59
63
  public zkProgramFactory() {
@@ -272,7 +276,7 @@ describe("zkProgrammable", () => {
272
276
  // proof bar
273
277
  const otherTestProof = await executionContext
274
278
  .current()
275
- .result.prove<Proof<undefined, void>>();
279
+ .result.prove<Proof<undefined, undefined>>();
276
280
  const otherTestProofVerified =
277
281
  await otherTestProgrammable.zkProgram[0].verify(otherTestProof);
278
282