@proto-kit/common 0.1.1-develop.651 → 0.1.1-develop.833

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 (74) hide show
  1. package/LICENSE.md +201 -201
  2. package/dist/config/ChildContainerFactory.d.ts +10 -0
  3. package/dist/config/ChildContainerFactory.d.ts.map +1 -0
  4. package/dist/config/ChildContainerFactory.js +23 -0
  5. package/dist/config/ChildContainerStartable.d.ts +5 -0
  6. package/dist/config/ChildContainerStartable.d.ts.map +1 -0
  7. package/dist/config/ChildContainerStartable.js +1 -0
  8. package/dist/config/ConfigurableModule.d.ts +1 -1
  9. package/dist/config/ConfigurableModule.d.ts.map +1 -1
  10. package/dist/config/ConfigurableModule.js +0 -1
  11. package/dist/config/ModuleContainer.d.ts +10 -2
  12. package/dist/config/ModuleContainer.d.ts.map +1 -1
  13. package/dist/config/ModuleContainer.js +6 -10
  14. package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
  15. package/dist/dependencyFactory/injectOptional.d.ts.map +1 -1
  16. package/dist/dependencyFactory/injectOptional.js +1 -4
  17. package/dist/events/EventEmitter.d.ts.map +1 -1
  18. package/dist/events/EventEmitter.js +0 -1
  19. package/dist/events/EventEmitterProxy.d.ts.map +1 -1
  20. package/dist/events/EventEmitterProxy.js +2 -0
  21. package/dist/log.d.ts +3 -2
  22. package/dist/log.d.ts.map +1 -1
  23. package/dist/log.js +11 -4
  24. package/dist/quickmaths.d.ts +7 -0
  25. package/dist/quickmaths.d.ts.map +1 -0
  26. package/dist/quickmaths.js +24 -0
  27. package/dist/test/equalProvable.d.ts +20 -0
  28. package/dist/test/equalProvable.d.ts.map +1 -0
  29. package/dist/test/equalProvable.js +13 -0
  30. package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -1
  31. package/dist/trees/MockAsyncMerkleStore.js +1 -1
  32. package/dist/trees/RollupMerkleTree.d.ts +35 -16
  33. package/dist/trees/RollupMerkleTree.d.ts.map +1 -1
  34. package/dist/trees/RollupMerkleTree.js +8 -13
  35. package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
  36. package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
  37. package/dist/trees/VirtualMerkleTreeStore.js +17 -0
  38. package/dist/types.d.ts +2 -2
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/utils.d.ts +12 -7
  41. package/dist/utils.d.ts.map +1 -1
  42. package/dist/utils.js +31 -10
  43. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
  44. package/dist/zkProgrammable/ProvableMethodExecutionContext.js +1 -3
  45. package/dist/zkProgrammable/ZkProgrammable.d.ts +11 -5
  46. package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
  47. package/dist/zkProgrammable/ZkProgrammable.js +7 -2
  48. package/dist/zkProgrammable/provableMethod.d.ts +5 -6
  49. package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
  50. package/dist/zkProgrammable/provableMethod.js +2 -5
  51. package/package.json +5 -5
  52. package/src/config/ChildContainerCreatable.ts +1 -1
  53. package/src/config/ConfigurableModule.ts +1 -2
  54. package/src/config/ModuleContainer.ts +17 -13
  55. package/src/dependencyFactory/DependencyFactory.ts +5 -4
  56. package/src/dependencyFactory/injectOptional.ts +0 -1
  57. package/src/events/EventEmitter.ts +0 -2
  58. package/src/events/EventEmitterProxy.ts +7 -5
  59. package/src/log.ts +20 -6
  60. package/src/trees/MockAsyncMerkleStore.ts +2 -1
  61. package/src/trees/RollupMerkleTree.ts +11 -17
  62. package/src/trees/VirtualMerkleTreeStore.ts +2 -3
  63. package/src/types.ts +2 -4
  64. package/src/utils.ts +77 -19
  65. package/src/zkProgrammable/ProvableMethodExecutionContext.ts +2 -4
  66. package/src/zkProgrammable/ZkProgrammable.ts +19 -13
  67. package/src/zkProgrammable/provableMethod.ts +13 -15
  68. package/test/config/ContainerEvents.test.ts +6 -25
  69. package/test/config/ModuleContainer.test.ts +10 -25
  70. package/test/trees/MerkleTree.test.ts +3 -2
  71. package/test/tsconfig.json +5 -2
  72. package/test/zkProgrammable/ZkProgrammable.test.ts +104 -83
  73. package/tsconfig.json +1 -1
  74. package/tsconfig.test.json +0 -9
@@ -1,18 +1,16 @@
1
- /* eslint-disable max-classes-per-file */
2
1
  import "reflect-metadata";
3
- // eslint-disable-next-line @typescript-eslint/no-shadow
4
2
  import { jest } from "@jest/globals";
5
3
  import { container } from "tsyringe";
6
- import { Experimental, Field, Struct, Proof } from "o1js";
4
+ import { Field, Struct, Proof, ZkProgram } from "o1js";
7
5
 
8
6
  import {
9
- mockProof,
7
+ MOCK_PROOF,
10
8
  provableMethod,
11
9
  } from "../../src/zkProgrammable/provableMethod";
12
10
  import {
13
11
  AreProofsEnabled,
14
12
  CompileArtifact,
15
- mockVerificationKey,
13
+ MOCK_VERIFICATION_KEY,
16
14
  PlainZkProgram,
17
15
  ZkProgrammable,
18
16
  } from "../../src/zkProgrammable/ZkProgrammable";
@@ -36,6 +34,8 @@ class TestPublicOutput extends Struct({
36
34
 
37
35
  const failErrorMessage = "test failure";
38
36
 
37
+ type Balance = Field;
38
+
39
39
  class TestProgrammable extends ZkProgrammable<
40
40
  TestPublicInput,
41
41
  TestPublicOutput
@@ -43,7 +43,7 @@ class TestProgrammable extends ZkProgrammable<
43
43
  public appChain: AreProofsEnabled = appChainMock;
44
44
 
45
45
  @provableMethod()
46
- public foo(publicInput: TestPublicInput, bar: Field) {
46
+ public async foo(publicInput: TestPublicInput, bar: Balance) {
47
47
  // expose the private input as public output again for testing purposes
48
48
  return new TestPublicOutput({
49
49
  bar,
@@ -51,7 +51,7 @@ class TestProgrammable extends ZkProgrammable<
51
51
  }
52
52
 
53
53
  @provableMethod()
54
- public fail(publicInput: TestPublicInput) {
54
+ public async fail(publicInput: TestPublicInput) {
55
55
  publicInput.foo.assertEquals(1, failErrorMessage);
56
56
 
57
57
  return new TestPublicOutput({
@@ -60,7 +60,8 @@ class TestProgrammable extends ZkProgrammable<
60
60
  }
61
61
 
62
62
  public zkProgramFactory() {
63
- const program = Experimental.ZkProgram({
63
+ const program = ZkProgram({
64
+ name: "testprogram",
64
65
  publicInput: TestPublicInput,
65
66
  publicOutput: TestPublicOutput,
66
67
 
@@ -77,7 +78,7 @@ class TestProgrammable extends ZkProgrammable<
77
78
  },
78
79
  });
79
80
 
80
- const SelfProof = Experimental.ZkProgram.Proof(program);
81
+ const SelfProof = ZkProgram.Proof(program);
81
82
 
82
83
  const methods = {
83
84
  foo: program.foo.bind(program),
@@ -87,6 +88,7 @@ class TestProgrammable extends ZkProgrammable<
87
88
  return {
88
89
  compile: program.compile.bind(program),
89
90
  verify: program.verify.bind(program),
91
+ analyzeMethods: program.analyzeMethods.bind(program),
90
92
  Proof: SelfProof,
91
93
  methods,
92
94
  };
@@ -101,7 +103,7 @@ class OtherTestProgrammable extends ZkProgrammable {
101
103
  }
102
104
 
103
105
  @provableMethod()
104
- public bar(
106
+ public async bar(
105
107
  testProgrammableProof: InstanceType<
106
108
  typeof this.testProgrammable.zkProgram.Proof
107
109
  >
@@ -110,7 +112,8 @@ class OtherTestProgrammable extends ZkProgrammable {
110
112
  }
111
113
 
112
114
  public zkProgramFactory(): PlainZkProgram {
113
- const program = Experimental.ZkProgram({
115
+ const program = ZkProgram({
116
+ name: "testprogram2",
114
117
  methods: {
115
118
  bar: {
116
119
  privateInputs: [this.testProgrammable.zkProgram.Proof],
@@ -123,40 +126,58 @@ class OtherTestProgrammable extends ZkProgrammable {
123
126
  bar: program.bar.bind(program),
124
127
  };
125
128
 
126
- const SelfProof = Experimental.ZkProgram.Proof(program);
129
+ const SelfProof = ZkProgram.Proof(program);
127
130
 
128
131
  return {
129
132
  compile: program.compile.bind(program),
130
133
  verify: program.verify.bind(program),
134
+ analyzeMethods: program.analyzeMethods.bind(program),
131
135
  Proof: SelfProof,
132
136
  methods,
133
137
  };
134
138
  }
135
139
  }
136
140
 
141
+ const testWithProofs = false;
142
+
137
143
  describe("zkProgrammable", () => {
138
144
  let testProgrammable: TestProgrammable;
139
145
  let artifact: CompileArtifact;
140
146
  let zkProgramFactorySpy: ReturnType<typeof jest.spyOn>;
141
147
 
142
- describe.each([
148
+ const testCases: [
149
+ boolean,
150
+ {
151
+ verificationKey: CompileArtifact["verificationKey"];
152
+ shouldVerifyMockProofs: boolean;
153
+ },
154
+ ][] = [
143
155
  [
144
156
  false,
145
157
  {
146
- verificationKey: mockVerificationKey,
158
+ verificationKey: MOCK_VERIFICATION_KEY,
147
159
  shouldVerifyMockProofs: true,
148
160
  },
149
161
  ],
150
- [
151
- true,
152
- {
153
- verificationKey:
154
- "AAA32/LNoPxEfDF5UkwfEetd5jiVLDF/Ul3N+Q2wKNcqFZm7FRScVoJylKe73IAPgAcadZ/vFAeIuDuAPFx1FaoIIoGAq5LAKNNrkU8EnWUJgSmKm2rJ3uNkJifAf116Aja8pacHExKqq5WblExBpsV/ET9JavLBZSql4zYEIvj9KfYfAz2DV6a0/jRWJAiF2xBaK2UIyga33djCkw3Lk/UC3DjVrt2EysRhypmelSlnf+XKLECQMQSk8RH9/YlNvyBZpqiNt2FlUphQazs7tArBs1eMd8Zn5BE7gszpmPaIBOtcvVRRaoXc/9FRX89st9IEWtFf8MCMV5kDlKOGk7wCKMz8HjgfMG5ux/3FCHeQiJdfk1USn9oER3MsAsOUsziPykhVZkOHTXvVphx27cZwnf2iUIIEZgJ/GvKXv9ZRAPEQsf3bP6yoKoazBlJYJZVwJ4aidwzIHiqcMJmfUYoxL512IZf6WYCGHaisgzdOw7TSGo4LDc8IjqMT1fcqqziBQw5iZbeJ9JQwPFai1PkJQnD2Yh+XfclzWkCC9uJVEFUmidAVVw3DeMlCb77ylJUd9nVCi+MfElf+x2xqKyELAPU2Hf5+05yTxvFR6B+n1y1MEeOZsMpcWt11zHMC5aMGTiOLUZ6zJb9lAr5GuDaWTBTcRkzBp4sWaQ58MLNygBNfVgmLkp2N5ItRcyQPo138oegzHf1obQa8D6Id32K2DfDUXcvgcgo2Q6GSrTc55iNzoFEEnszUKAyi4usWdLQATzgC0CgbEaN54nF7JD1417PipM6skAf4fB31aqCEATAP+QVDRQTIrYkHJ4gykPi8QCTVk497d3wkJVioAtqWDiIoGlSITUmhBoj05xN6cndvsMrzaKQz420nYy/Nw1EIqL0yq71q2w/eRqnezVxOAjuoyAzo0ss9hT9C9OUhOxq7H0CPcRiPBFFSelqjsO/g0FD/RuuRzeNS8IwBpViTNDoNfKjTjQIA2Rvdn8TniKe2OXfwFb4f/+B1LEUHbeA9D4aCojFAs/U1D+KsyQ3POBklNQvw3lJEv4n8wjbXHzAnk+d4pkHG16gSpwp1IPbEZuQv/yQeU9e5SNuNMxR6BKwZs/3LLXASCppG7W4g7fXmJ5Obzdn7V2OHejsQNdcQ3r3ImJ3gfugi5tDEq63oO8BGGtMhHFbJD/aGiYggPSQpWxcCGjoOStt5x9jDra37fkaowxt63JU/idlqGvM3NCguIz0OMHFD30sXE/Ctf9JcBptLSQXxlKD3zX27vKwcYgsNyY7dkWA9I2XE+Lqn2VNXnswX2uN5aqu7MqwSUTuf/H5AyW1TOoF3tpHQpfmx5ZYZfNNIDrtJSOeDiNgWKGgHWj2HirSLyRjHkbAhEQ6kH/BkRbsTXmtZhRSdgdQe2gKDnhtDyE8nxhqHxc8C5zznmhk9PeJsD0CUwL9FqRQ0t31h2zVQ+V/DcDWkZC1lY32O3kxRjYQy2ZQHjLrnLlB9U9eWwRjw6533dW0fwOAPRZ/LIKkEUDj7xGdkIh41GEmEFfHGUJ2cGul1I0EU41YmnQl7xDuz2KX7stk0Rj8/Nw+pjbF8klv/zEEy5MZSmNHnYnpDMVB/lP3/adIIPQ/sqGwf/JbdIJSGSsxMfEHlToUJnt4oK4vf4FEQEeAx36h3hrDTLb+w2yg9/tvctlmozFR40US7LOTTi340MhaWSCB3i7mHFbicLRXi178Mbj8qelbiSbvDcUTOgJMlD5kaRoGMs7X6fcVBhOz8F0q6Ty1qFN1wqjgJpknYbPsatVbunR36XacWlDHuAwYx9Rh3IjC+kH6kzLmqB5ADggniTRj+IxQh+ItPFVmKrCjXqlzZJNTHjBr0wvwaeIRjCwA0A99RlRl+apkAvwKKmLFzZKTt7/TmhhNR+WAeprMEP4I8mS9pWqm7BbWK2AbAv6KrVeDaf0V7rBaDMQL/oDc++F6rmBgDC1G8viAUfmqAiWq/9+g0Z189fJVmwRni+i1qIIBb38UpVA4Tt0wJzYGRsnZM5uev3IfIe1sRTvYsIAT/WeFRq43GLL5xelWjKnmEOr9yjzQj2uTelZU6PFknB3dlo5ybe2i6dpHoAU/vZvgdHKJ6ApSKnlCWEtbd4QG5Rc7vBt2Kj4/AxK1jp6/MLA/+p5dUlF+8682seKFHLAdKGxaE2d18jjnLdRZ5+YHcCE0TdnKateX+EToGKZkW9znPIweZGEgTKwXn3GUaBh+LX59g3KpRFPldlKt7KghKyMRpHE+NUpxXsvRi8Nil93U+BWB7hC1msGRoAK+fMsmH1e+ZCActSz0ZP074iKPZGLa/CZwkxCqUS7tPOqEOomk5PtUCjLaVxmu/m/Icw9sE18n1bhexuNgU6dVWRSs=",
162
+ ];
163
+
164
+ // We want to disable testing with proofs enabled for the CI and other stuff,
165
+ // as it is quite expensive. But we should find a better pattern than this
166
+ if (testWithProofs) {
167
+ // TODO Migrate to new o1js compile artifact format
168
+ // testCases.push([
169
+ // true,
170
+ // {
171
+ // verificationKey:
172
+ // eslint-disable-next-line max-len
173
+ // "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",
174
+ //
175
+ // shouldVerifyMockProofs: false,
176
+ // },
177
+ // ]);
178
+ }
155
179
 
156
- shouldVerifyMockProofs: false,
157
- },
158
- ],
159
- ])(
180
+ describe.each(testCases)(
160
181
  "areProofsEnabled",
161
182
  (areProofsEnabled, { verificationKey, shouldVerifyMockProofs }) => {
162
183
  beforeAll(async () => {
@@ -191,7 +212,7 @@ describe("zkProgrammable", () => {
191
212
  expect.assertions(1);
192
213
 
193
214
  const proof = new testProgrammable.zkProgram.Proof({
194
- proof: mockProof,
215
+ proof: MOCK_PROOF,
195
216
 
196
217
  publicInput: new TestPublicInput({
197
218
  foo: Field(0),
@@ -212,71 +233,71 @@ describe("zkProgrammable", () => {
212
233
  // const json = proof.toJSON();
213
234
  // expect(json).toBeDefined();
214
235
  });
215
- }
216
- );
217
236
 
218
- describe("provableMethod", () => {
219
- const executionContext = container.resolve<ProvableMethodExecutionContext>(
220
- ProvableMethodExecutionContext
221
- );
237
+ describe("provableMethod", () => {
238
+ const executionContext =
239
+ container.resolve<ProvableMethodExecutionContext>(
240
+ ProvableMethodExecutionContext
241
+ );
222
242
 
223
- let otherTestProgrammable: OtherTestProgrammable;
224
-
225
- const testPublicInput = new TestPublicInput({
226
- foo: Field(0),
227
- });
228
-
229
- describe("zkProgram interoperability", () => {
230
- beforeAll(async () => {
231
- otherTestProgrammable = new OtherTestProgrammable(testProgrammable);
232
- await otherTestProgrammable.zkProgram.compile();
233
- }, 500_000);
243
+ let otherTestProgrammable: OtherTestProgrammable;
234
244
 
235
- it("should successfully pass proof of one zkProgram as input to another zkProgram", async () => {
236
- expect.assertions(3);
237
-
238
- // execute foo
239
- testProgrammable.foo(testPublicInput, Field(0));
240
-
241
- // prove foo
242
- const testProof = await executionContext
243
- .current()
244
- .result.prove<Proof<TestPublicInput, TestPublicOutput>>();
245
- const testProofVerified = await testProgrammable.zkProgram.verify(
246
- testProof
247
- );
248
-
249
- // execute bar
250
- otherTestProgrammable.bar(testProof);
251
-
252
- // proof bar
253
- const otherTestProof = await executionContext
254
- .current()
255
- .result.prove<Proof<undefined, void>>();
256
- const otherTestProofVerified =
257
- await otherTestProgrammable.zkProgram.verify(otherTestProof);
258
-
259
- expect(testProof.publicOutput.bar.toString()).toBe(
260
- testPublicInput.foo.toString()
261
- );
245
+ const testPublicInput = new TestPublicInput({
246
+ foo: Field(0),
247
+ });
262
248
 
263
- expect(testProofVerified).toBe(true);
264
- expect(otherTestProofVerified).toBe(true);
265
- }, 500_000);
266
- });
249
+ describe("zkProgram interoperability", () => {
250
+ beforeAll(async () => {
251
+ otherTestProgrammable = new OtherTestProgrammable(testProgrammable);
252
+ await otherTestProgrammable.zkProgram.compile();
253
+ }, 500_000);
254
+
255
+ it("should successfully pass proof of one zkProgram as input to another zkProgram", async () => {
256
+ expect.assertions(3);
257
+
258
+ // execute foo
259
+ await testProgrammable.foo(testPublicInput, Field(0));
260
+
261
+ // prove foo
262
+ const testProof = await executionContext
263
+ .current()
264
+ .result.prove<Proof<TestPublicInput, TestPublicOutput>>();
265
+ const testProofVerified =
266
+ await testProgrammable.zkProgram.verify(testProof);
267
+
268
+ // execute bar
269
+ await otherTestProgrammable.bar(testProof);
270
+
271
+ // proof bar
272
+ const otherTestProof = await executionContext
273
+ .current()
274
+ .result.prove<Proof<undefined, void>>();
275
+ const otherTestProofVerified =
276
+ await otherTestProgrammable.zkProgram.verify(otherTestProof);
277
+
278
+ expect(testProof.publicOutput.bar.toString()).toBe(
279
+ testPublicInput.foo.toString()
280
+ );
281
+
282
+ expect(testProofVerified).toBe(true);
283
+ expect(otherTestProofVerified).toBe(true);
284
+ }, 500_000);
285
+ });
267
286
 
268
- describe("failed method execution", () => {
269
- it("if the method fails, it should fail to execute and prove", async () => {
270
- expect.assertions(2);
287
+ describe("failed method execution", () => {
288
+ it("if the method fails, it should fail to execute and prove", async () => {
289
+ expect.assertions(2);
271
290
 
272
- expect(() => {
273
- testProgrammable.fail(testPublicInput);
274
- }).toThrow(failErrorMessage);
291
+ await expect(
292
+ testProgrammable.fail(testPublicInput)
293
+ ).rejects.toThrow(failErrorMessage);
275
294
 
276
- await expect(async () => {
277
- await executionContext.current().result.prove();
278
- }).rejects.toThrow(failErrorMessage);
295
+ await expect(async () => {
296
+ await executionContext.current().result.prove();
297
+ }).rejects.toThrow(failErrorMessage);
298
+ });
299
+ });
279
300
  });
280
- });
281
- });
301
+ }
302
+ );
282
303
  });
package/tsconfig.json CHANGED
@@ -3,6 +3,6 @@
3
3
  "compilerOptions": {
4
4
  "outDir": "./dist"
5
5
  },
6
- "include": ["./src/index.ts"],
6
+ "include": ["./src/**/*.ts", "./src/*.ts"],
7
7
  "exclude": ["./dist/**/*.ts"]
8
8
  }
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "./../../tsconfig.json",
3
- "include": [
4
- "./src/**/*.test.ts",
5
- "./test/**/*.ts",
6
- "./test/*.ts",
7
- "./src/**/*.ts"
8
- ]
9
- }