@aztec/bb-prover 0.0.0-test.0 → 0.0.1-commit.0208eb9

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 (112) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +14 -18
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
  3. package/dest/avm_proving_tests/avm_proving_tester.js +146 -79
  4. package/dest/bb/cli.d.ts +1 -1
  5. package/dest/bb/execute.d.ts +17 -50
  6. package/dest/bb/execute.d.ts.map +1 -1
  7. package/dest/bb/execute.js +145 -278
  8. package/dest/bb/index.d.ts +1 -1
  9. package/dest/config.d.ts +3 -1
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/honk.d.ts +3 -3
  12. package/dest/honk.d.ts.map +1 -1
  13. package/dest/honk.js +3 -2
  14. package/dest/index.d.ts +2 -1
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +1 -0
  17. package/dest/instrumentation.d.ts +3 -3
  18. package/dest/instrumentation.d.ts.map +1 -1
  19. package/dest/instrumentation.js +11 -43
  20. package/dest/prover/client/bb_private_kernel_prover.d.ts +38 -0
  21. package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -0
  22. package/dest/prover/{bb_private_kernel_prover.js → client/bb_private_kernel_prover.js} +53 -21
  23. package/dest/prover/client/bundle.d.ts +6 -0
  24. package/dest/prover/client/bundle.d.ts.map +1 -0
  25. package/dest/prover/client/bundle.js +7 -0
  26. package/dest/prover/client/lazy.d.ts +6 -0
  27. package/dest/prover/client/lazy.d.ts.map +1 -0
  28. package/dest/prover/client/lazy.js +7 -0
  29. package/dest/prover/index.d.ts +3 -4
  30. package/dest/prover/index.d.ts.map +1 -1
  31. package/dest/prover/index.js +2 -3
  32. package/dest/prover/proof_utils.d.ts +19 -0
  33. package/dest/prover/proof_utils.d.ts.map +1 -0
  34. package/dest/prover/proof_utils.js +72 -0
  35. package/dest/prover/server/bb_prover.d.ts +97 -0
  36. package/dest/prover/server/bb_prover.d.ts.map +1 -0
  37. package/dest/prover/server/bb_prover.js +712 -0
  38. package/dest/test/delay_values.d.ts +1 -1
  39. package/dest/test/delay_values.d.ts.map +1 -1
  40. package/dest/test/delay_values.js +37 -23
  41. package/dest/test/index.d.ts +2 -1
  42. package/dest/test/index.d.ts.map +1 -1
  43. package/dest/test/index.js +1 -0
  44. package/dest/test/test_circuit_prover.d.ts +27 -36
  45. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  46. package/dest/test/test_circuit_prover.js +517 -88
  47. package/dest/test/test_verifier.d.ts +6 -3
  48. package/dest/test/test_verifier.d.ts.map +1 -1
  49. package/dest/test/test_verifier.js +23 -1
  50. package/dest/verification_key/verification_key_data.d.ts +1 -2
  51. package/dest/verification_key/verification_key_data.d.ts.map +1 -1
  52. package/dest/verification_key/verification_key_data.js +9 -34
  53. package/dest/verifier/bb_verifier.d.ts +6 -5
  54. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  55. package/dest/verifier/bb_verifier.js +45 -27
  56. package/dest/verifier/index.d.ts +2 -1
  57. package/dest/verifier/index.d.ts.map +1 -1
  58. package/dest/verifier/index.js +1 -0
  59. package/dest/verifier/queued_chonk_verifier.d.ts +15 -0
  60. package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -0
  61. package/dest/verifier/queued_chonk_verifier.js +101 -0
  62. package/package.json +35 -33
  63. package/src/avm_proving_tests/avm_proving_tester.ts +223 -113
  64. package/src/bb/execute.ts +116 -291
  65. package/src/config.ts +2 -0
  66. package/src/honk.ts +3 -2
  67. package/src/index.ts +1 -0
  68. package/src/instrumentation.ts +10 -43
  69. package/src/prover/{bb_private_kernel_prover.ts → client/bb_private_kernel_prover.ts} +94 -33
  70. package/src/prover/client/bundle.ts +10 -0
  71. package/src/prover/client/lazy.ts +10 -0
  72. package/src/prover/index.ts +2 -3
  73. package/src/prover/proof_utils.ts +115 -0
  74. package/src/prover/server/bb_prover.ts +718 -0
  75. package/src/test/delay_values.ts +38 -22
  76. package/src/test/index.ts +1 -0
  77. package/src/test/test_circuit_prover.ts +264 -154
  78. package/src/test/test_verifier.ts +15 -3
  79. package/src/verification_key/verification_key_data.ts +11 -31
  80. package/src/verifier/bb_verifier.ts +62 -35
  81. package/src/verifier/index.ts +1 -0
  82. package/src/verifier/queued_chonk_verifier.ts +109 -0
  83. package/dest/prover/bb_native_private_kernel_prover.d.ts +0 -25
  84. package/dest/prover/bb_native_private_kernel_prover.d.ts.map +0 -1
  85. package/dest/prover/bb_native_private_kernel_prover.js +0 -69
  86. package/dest/prover/bb_private_kernel_prover.d.ts +0 -32
  87. package/dest/prover/bb_private_kernel_prover.d.ts.map +0 -1
  88. package/dest/prover/bb_prover.d.ts +0 -120
  89. package/dest/prover/bb_prover.d.ts.map +0 -1
  90. package/dest/prover/bb_prover.js +0 -423
  91. package/dest/prover/client_ivc_proof_utils.d.ts +0 -25
  92. package/dest/prover/client_ivc_proof_utils.d.ts.map +0 -1
  93. package/dest/prover/client_ivc_proof_utils.js +0 -43
  94. package/dest/stats.d.ts +0 -5
  95. package/dest/stats.d.ts.map +0 -1
  96. package/dest/stats.js +0 -62
  97. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +0 -17
  98. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +0 -1
  99. package/dest/wasm/bb_wasm_private_kernel_prover.js +0 -46
  100. package/dest/wasm/bundle.d.ts +0 -6
  101. package/dest/wasm/bundle.d.ts.map +0 -1
  102. package/dest/wasm/bundle.js +0 -8
  103. package/dest/wasm/lazy.d.ts +0 -6
  104. package/dest/wasm/lazy.d.ts.map +0 -1
  105. package/dest/wasm/lazy.js +0 -8
  106. package/src/prover/bb_native_private_kernel_prover.ts +0 -119
  107. package/src/prover/bb_prover.ts +0 -781
  108. package/src/prover/client_ivc_proof_utils.ts +0 -42
  109. package/src/stats.ts +0 -64
  110. package/src/wasm/bb_wasm_private_kernel_prover.ts +0 -55
  111. package/src/wasm/bundle.ts +0 -11
  112. package/src/wasm/lazy.ts +0 -11
@@ -1,6 +1,9 @@
1
- import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
1
+ import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '@aztec/stdlib/interfaces/server';
2
2
  import type { Tx } from '@aztec/stdlib/tx';
3
3
  export declare class TestCircuitVerifier implements ClientProtocolCircuitVerifier {
4
- verifyProof(_tx: Tx): Promise<boolean>;
4
+ private verificationDelayMs?;
5
+ constructor(verificationDelayMs?: number | undefined);
6
+ verifyProof(_tx: Tx): Promise<IVCProofVerificationResult>;
7
+ stop(): Promise<void>;
5
8
  }
6
- //# sourceMappingURL=test_verifier.d.ts.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF92ZXJpZmllci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvdGVzdF92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLHFCQUFhLG1CQUFvQixZQUFXLDZCQUE2QjtJQUMzRCxPQUFPLENBQUMsbUJBQW1CLENBQUM7SUFBeEMsWUFBb0IsbUJBQW1CLENBQUMsb0JBQVEsRUFBSTtJQUNwRCxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FTeEQ7SUFFTSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUUzQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"test_verifier.d.ts","sourceRoot":"","sources":["../../src/test/test_verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,mBAAoB,YAAW,6BAA6B;IACvE,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAGvC"}
1
+ {"version":3,"file":"test_verifier.d.ts","sourceRoot":"","sources":["../../src/test/test_verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,mBAAoB,YAAW,6BAA6B;IAC3D,OAAO,CAAC,mBAAmB,CAAC;IAAxC,YAAoB,mBAAmB,CAAC,oBAAQ,EAAI;IACpD,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CASxD;IAEM,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
@@ -1,5 +1,27 @@
1
1
  export class TestCircuitVerifier {
2
+ verificationDelayMs;
3
+ constructor(verificationDelayMs){
4
+ this.verificationDelayMs = verificationDelayMs;
5
+ }
2
6
  verifyProof(_tx) {
3
- return Promise.resolve(true);
7
+ if (this.verificationDelayMs !== undefined && this.verificationDelayMs > 0) {
8
+ return new Promise((resolve)=>{
9
+ setTimeout(()=>{
10
+ resolve({
11
+ valid: true,
12
+ durationMs: this.verificationDelayMs,
13
+ totalDurationMs: this.verificationDelayMs
14
+ });
15
+ }, this.verificationDelayMs);
16
+ });
17
+ }
18
+ return Promise.resolve({
19
+ valid: true,
20
+ durationMs: 0,
21
+ totalDurationMs: 0
22
+ });
23
+ }
24
+ stop() {
25
+ return Promise.resolve();
4
26
  }
5
27
  }
@@ -5,5 +5,4 @@ import { VerificationKeyData } from '@aztec/stdlib/vks';
5
5
  * @returns The verification key data
6
6
  */
7
7
  export declare function extractVkData(vkDirectoryPath: string): Promise<VerificationKeyData>;
8
- export declare function extractAvmVkData(vkDirectoryPath: string): Promise<VerificationKeyData>;
9
- //# sourceMappingURL=verification_key_data.d.ts.map
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpY2F0aW9uX2tleV9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpY2F0aW9uX2tleS92ZXJpZmljYXRpb25fa2V5X2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUEyQixtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT2pGOzs7O0dBSUc7QUFDSCx3QkFBc0IsYUFBYSxDQUFDLGVBQWUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBVXpGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"verification_key_data.d.ts","sourceRoot":"","sources":["../../src/verification_key/verification_key_data.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQjF;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAWzF;AAGD,wBAAsB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAc5F"}
1
+ {"version":3,"file":"verification_key_data.d.ts","sourceRoot":"","sources":["../../src/verification_key/verification_key_data.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOjF;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAUzF"}
@@ -1,44 +1,19 @@
1
- import { AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/fields';
3
- import { hashVK } from '@aztec/stdlib/hash';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { BufferReader } from '@aztec/foundation/serialize';
4
3
  import { VerificationKeyAsFields, VerificationKeyData } from '@aztec/stdlib/vks';
5
- import { strict as assert } from 'assert';
6
4
  import { promises as fs } from 'fs';
7
5
  import * as path from 'path';
8
- import { VK_FIELDS_FILENAME, VK_FILENAME } from '../bb/execute.js';
6
+ import { VK_FILENAME } from '../bb/execute.js';
9
7
  /**
10
8
  * Reads the verification key data stored at the specified location and parses into a VerificationKeyData
11
9
  * @param vkDirectoryPath - The directory containing the verification key data files
12
10
  * @returns The verification key data
13
11
  */ export async function extractVkData(vkDirectoryPath) {
14
- const [rawFields, rawBinary] = await Promise.all([
15
- fs.readFile(path.join(vkDirectoryPath, VK_FIELDS_FILENAME), {
16
- encoding: 'utf-8'
17
- }),
18
- fs.readFile(path.join(vkDirectoryPath, VK_FILENAME))
19
- ]);
20
- const fieldsJson = JSON.parse(rawFields);
21
- const fields = fieldsJson.map(Fr.fromHexString);
22
- // The hash is not included in the BB response
23
- const vkHash = await hashVK(fields);
24
- const vkAsFields = new VerificationKeyAsFields(fields, vkHash);
12
+ const rawBinary = await fs.readFile(path.join(vkDirectoryPath, VK_FILENAME));
13
+ // Convert binary to field elements (32 bytes per field)
14
+ const numFields = rawBinary.length / Fr.SIZE_IN_BYTES;
15
+ const reader = BufferReader.asReader(rawBinary);
16
+ const fields = reader.readArray(numFields, Fr);
17
+ const vkAsFields = await VerificationKeyAsFields.fromKey(fields);
25
18
  return new VerificationKeyData(vkAsFields, rawBinary);
26
19
  }
27
- // TODO: This was adapted from the above function. A refactor might be needed.
28
- export async function extractAvmVkData(vkDirectoryPath) {
29
- const [rawFields, rawBinary] = await Promise.all([
30
- fs.readFile(path.join(vkDirectoryPath, VK_FIELDS_FILENAME), {
31
- encoding: 'utf-8'
32
- }),
33
- fs.readFile(path.join(vkDirectoryPath, VK_FILENAME))
34
- ]);
35
- const fieldsJson = JSON.parse(rawFields);
36
- const fields = fieldsJson.map(Fr.fromHexString);
37
- // The first item is the hash, this is not part of the actual VK
38
- // TODO: is the above actually the case?
39
- const vkHash = fields[0];
40
- assert(fields.length === AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, 'Invalid AVM verification key length');
41
- const vkAsFields = new VerificationKeyAsFields(fields, vkHash);
42
- const vk = new VerificationKeyData(vkAsFields, rawBinary);
43
- return vk;
44
- }
@@ -1,6 +1,6 @@
1
1
  import { type Logger } from '@aztec/foundation/log';
2
- import type { ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types/types';
3
- import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
2
+ import { type ProtocolArtifact, type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types/types';
3
+ import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '@aztec/stdlib/interfaces/server';
4
4
  import type { Proof } from '@aztec/stdlib/proofs';
5
5
  import { Tx } from '@aztec/stdlib/tx';
6
6
  import type { VerificationKeyData } from '@aztec/stdlib/vks';
@@ -9,9 +9,10 @@ export declare class BBCircuitVerifier implements ClientProtocolCircuitVerifier
9
9
  private config;
10
10
  private logger;
11
11
  private constructor();
12
+ stop(): Promise<void>;
12
13
  static new(config: BBConfig, logger?: Logger): Promise<BBCircuitVerifier>;
13
- getVerificationKeyData(circuitType: ServerProtocolArtifact): VerificationKeyData;
14
+ getVerificationKeyData(circuit: ProtocolArtifact): VerificationKeyData;
14
15
  verifyProofForCircuit(circuit: ServerProtocolArtifact, proof: Proof): Promise<void>;
15
- verifyProof(tx: Tx): Promise<boolean>;
16
+ verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
16
17
  }
17
- //# sourceMappingURL=bb_verifier.d.ts.map
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfdmVyaWZpZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9iYl92ZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUVMLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0sMkNBQTJDLENBQUM7QUFDbkQsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqSCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWE3RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBRW5FLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE1BQU07SUFGaEIsT0FBTyxlQUdIO0lBRUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFM0I7SUFFRCxPQUFvQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQXFDLDhCQU1wRjtJQUVNLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FNNUU7SUFFWSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLEtBQUssaUJBbUMvRTtJQUVZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQTZDcEU7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAA0B,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAChH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAM7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAK7C,qBAAa,iBAAkB,YAAW,6BAA6B;IACjD,OAAO,CAAC,MAAM;IAAY,OAAO,CAAC,MAAM;IAA5D,OAAO;WAEa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAqC;IAK9E,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,GAAG,mBAAmB;IAQ1E,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK;IAkCnE,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA4CnD"}
1
+ {"version":3,"file":"bb_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/bb_verifier.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAa7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAEnE,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAFhB,OAAO,eAGH;IAEG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,OAAoB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAqC,8BAMpF;IAEM,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,mBAAmB,CAM5E;IAEY,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,iBAmC/E;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA6CpE;CACF"}
@@ -1,13 +1,13 @@
1
1
  import { runInDirectory } from '@aztec/foundation/fs';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
- import { ServerCircuitVks } from '@aztec/noir-protocol-circuits-types/server/vks';
4
- import { Tx } from '@aztec/stdlib/tx';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import { ProtocolCircuitVks } from '@aztec/noir-protocol-circuits-types/server/vks';
5
+ import { mapProtocolArtifactNameToCircuitName } from '@aztec/noir-protocol-circuits-types/types';
5
6
  import { promises as fs } from 'fs';
6
7
  import * as path from 'path';
7
- import { BB_RESULT, PROOF_FILENAME, VK_FILENAME, verifyClientIvcProof, verifyProof } from '../bb/execute.js';
8
+ import { BB_RESULT, PROOF_FILENAME, PUBLIC_INPUTS_FILENAME, VK_FILENAME, verifyChonkProof, verifyProof } from '../bb/execute.js';
8
9
  import { getUltraHonkFlavorForCircuit } from '../honk.js';
9
- import { writeToOutputDirectory } from '../prover/client_ivc_proof_utils.js';
10
- import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
10
+ import { writeChonkProofToPath } from '../prover/proof_utils.js';
11
11
  export class BBCircuitVerifier {
12
12
  config;
13
13
  logger;
@@ -15,26 +15,35 @@ export class BBCircuitVerifier {
15
15
  this.config = config;
16
16
  this.logger = logger;
17
17
  }
18
+ stop() {
19
+ return Promise.resolve();
20
+ }
18
21
  static async new(config, logger = createLogger('bb-prover:verifier')) {
22
+ if (!config.bbWorkingDirectory) {
23
+ throw new Error(`Barretenberg working directory (BB_WORKING_DIRECTORY) is not set`);
24
+ }
19
25
  await fs.mkdir(config.bbWorkingDirectory, {
20
26
  recursive: true
21
27
  });
22
28
  return new BBCircuitVerifier(config, logger);
23
29
  }
24
- getVerificationKeyData(circuitType) {
25
- const vk = ServerCircuitVks[circuitType];
30
+ getVerificationKeyData(circuit) {
31
+ const vk = ProtocolCircuitVks[circuit];
26
32
  if (vk === undefined) {
27
- throw new Error('Could not find VK for server artifact ' + circuitType);
33
+ throw new Error(`Could not find VK for artifact ${circuit}`);
28
34
  }
29
35
  return vk;
30
36
  }
31
37
  async verifyProofForCircuit(circuit, proof) {
32
38
  const operation = async (bbWorkingDirectory)=>{
39
+ const publicInputsFileName = path.join(bbWorkingDirectory, PUBLIC_INPUTS_FILENAME);
33
40
  const proofFileName = path.join(bbWorkingDirectory, PROOF_FILENAME);
34
41
  const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
35
42
  const verificationKey = this.getVerificationKeyData(circuit);
36
43
  this.logger.debug(`${circuit} Verifying with key: ${verificationKey.keyAsFields.hash.toString()}`);
37
- await fs.writeFile(proofFileName, proof.buffer);
44
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/13189): Put this proof parsing logic in the proof class.
45
+ await fs.writeFile(publicInputsFileName, proof.buffer.slice(0, proof.numPublicInputs * 32));
46
+ await fs.writeFile(proofFileName, proof.buffer.slice(proof.numPublicInputs * 32));
38
47
  await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
39
48
  const result = await verifyProof(this.config.bbBinaryPath, proofFileName, verificationKeyPath, getUltraHonkFlavorForCircuit(circuit), this.logger);
40
49
  if (result.status === BB_RESULT.FAILURE) {
@@ -51,36 +60,45 @@ export class BBCircuitVerifier {
51
60
  await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup, this.logger);
52
61
  }
53
62
  async verifyProof(tx) {
63
+ const proofType = 'Chonk';
54
64
  try {
55
- // TODO(#7370) The verification keys should be supplied separately and based on the expectedCircuit
56
- // rather than read from the tx object itself. We also need the vks for the translator and ecc, which
57
- // are not being saved along the other vks yet. Reuse the 'verifyProofForCircuit' method above once
58
- // we have all the verification keys available.
59
- const expectedCircuit = tx.data.forPublic ? 'PrivateKernelTailToPublicArtifact' : 'PrivateKernelTailArtifact';
60
- const circuit = 'ClientIVC';
65
+ const totalTimer = new Timer();
66
+ let verificationDuration = 0;
67
+ const circuit = tx.data.forPublic ? 'HidingKernelToPublic' : 'HidingKernelToRollup';
61
68
  // Block below is almost copy-pasted from verifyProofForCircuit
62
69
  const operation = async (bbWorkingDirectory)=>{
63
- const logFunction = (message)=>{
64
- this.logger.debug(`${circuit} BB out - ${message}`);
65
- };
66
- await writeToOutputDirectory(tx.clientIvcProof, bbWorkingDirectory);
67
- const result = await verifyClientIvcProof(this.config.bbBinaryPath, bbWorkingDirectory.concat('/proof'), bbWorkingDirectory.concat('/vk'), logFunction);
70
+ const proofPath = path.join(bbWorkingDirectory, PROOF_FILENAME);
71
+ await writeChonkProofToPath(tx.chonkProof.attachPublicInputs(tx.data.publicInputs().toFields()), proofPath);
72
+ const verificationKeyPath = path.join(bbWorkingDirectory, VK_FILENAME);
73
+ const verificationKey = this.getVerificationKeyData(circuit);
74
+ await fs.writeFile(verificationKeyPath, verificationKey.keyAsBytes);
75
+ const timer = new Timer();
76
+ const result = await verifyChonkProof(this.config.bbBinaryPath, proofPath, verificationKeyPath, this.logger, this.config.bbIVCConcurrency);
77
+ verificationDuration = timer.ms();
68
78
  if (result.status === BB_RESULT.FAILURE) {
69
- const errorMessage = `Failed to verify ${circuit} proof!`;
79
+ const errorMessage = `Failed to verify ${proofType} proof for ${circuit}!`;
70
80
  throw new Error(errorMessage);
71
81
  }
72
- this.logger.debug(`${circuit} verification successful`, {
73
- circuitName: mapProtocolArtifactNameToCircuitName(expectedCircuit),
82
+ this.logger.debug(`${proofType} verification successful`, {
83
+ circuitName: mapProtocolArtifactNameToCircuitName(circuit),
74
84
  duration: result.durationMs,
75
85
  eventName: 'circuit-verification',
76
- proofType: 'client-ivc'
86
+ proofType: 'chonk'
77
87
  });
78
88
  };
79
89
  await runInDirectory(this.config.bbWorkingDirectory, operation, this.config.bbSkipCleanup, this.logger);
80
- return true;
90
+ return {
91
+ valid: true,
92
+ durationMs: verificationDuration,
93
+ totalDurationMs: totalTimer.ms()
94
+ };
81
95
  } catch (err) {
82
- this.logger.warn(`Failed to verify ClientIVC proof for tx ${Tx.getHash(tx)}: ${String(err)}`);
83
- return false;
96
+ this.logger.warn(`Failed to verify ${proofType} proof for tx ${tx.getTxHash().toString()}: ${String(err)}`);
97
+ return {
98
+ valid: false,
99
+ durationMs: 0,
100
+ totalDurationMs: 0
101
+ };
84
102
  }
85
103
  }
86
104
  }
@@ -1,2 +1,3 @@
1
1
  export * from './bb_verifier.js';
2
- //# sourceMappingURL=index.d.ts.map
2
+ export * from './queued_chonk_verifier.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsNEJBQTRCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verifier/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verifier/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC"}
@@ -1 +1,2 @@
1
1
  export * from './bb_verifier.js';
2
+ export * from './queued_chonk_verifier.js';
@@ -0,0 +1,15 @@
1
+ import type { ClientProtocolCircuitVerifier, IVCProofVerificationResult } from '@aztec/stdlib/interfaces/server';
2
+ import type { Tx } from '@aztec/stdlib/tx';
3
+ import { type TelemetryClient } from '@aztec/telemetry-client';
4
+ import type { BBConfig } from '../config.js';
5
+ export declare class QueuedIVCVerifier implements ClientProtocolCircuitVerifier {
6
+ private verifier;
7
+ private telemetry;
8
+ private logger;
9
+ private queue;
10
+ private metrics;
11
+ constructor(config: BBConfig, verifier: ClientProtocolCircuitVerifier, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
12
+ verifyProof(tx: Tx): Promise<IVCProofVerificationResult>;
13
+ stop(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkX2Nob25rX3ZlcmlmaWVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyaWZpZXIvcXVldWVkX2Nob25rX3ZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQU1MLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBSWpDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWlFN0MscUJBQWEsaUJBQWtCLFlBQVcsNkJBQTZCO0lBTW5FLE9BQU8sQ0FBQyxRQUFRO0lBQ2hCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxNQUFNO0lBUGhCLE9BQU8sQ0FBQyxLQUFLLENBQWM7SUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBcUI7SUFFcEMsWUFDRSxNQUFNLEVBQUUsUUFBUSxFQUNSLFFBQVEsRUFBRSw2QkFBNkIsRUFDdkMsU0FBUyxHQUFFLGVBQXNDLEVBQ2pELE1BQU0seUNBQWtELEVBTWpFO0lBRVksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBSXBFO0lBRUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFcEI7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queued_chonk_verifier.d.ts","sourceRoot":"","sources":["../../src/verifier/queued_chonk_verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACjH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiE7C,qBAAa,iBAAkB,YAAW,6BAA6B;IAMnE,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAqB;IAEpC,YACE,MAAM,EAAE,QAAQ,EACR,QAAQ,EAAE,6BAA6B,EACvC,SAAS,GAAE,eAAsC,EACjD,MAAM,yCAAkD,EAMjE;IAEY,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAIpE;IAED,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpB;CACF"}
@@ -0,0 +1,101 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { SerialQueue } from '@aztec/foundation/queue';
3
+ import { Attributes, Metrics, createUpDownCounterWithDefault, getTelemetryClient } from '@aztec/telemetry-client';
4
+ import { createHistogram } from 'node:perf_hooks';
5
+ class IVCVerifierMetrics {
6
+ ivcVerificationHistogram;
7
+ ivcTotalVerificationHistogram;
8
+ ivcFailureCount;
9
+ localHistogramOk = createHistogram({
10
+ min: 1,
11
+ max: 5 * 60 * 1000
12
+ });
13
+ localHistogramFails = createHistogram({
14
+ min: 1,
15
+ max: 5 * 60 * 1000
16
+ });
17
+ aggDurationMetrics;
18
+ constructor(client, name = 'QueuedIVCVerifier'){
19
+ const meter = client.getMeter(name);
20
+ this.ivcVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TIME);
21
+ this.ivcTotalVerificationHistogram = meter.createHistogram(Metrics.IVC_VERIFIER_TOTAL_TIME);
22
+ this.ivcFailureCount = createUpDownCounterWithDefault(meter, Metrics.IVC_VERIFIER_FAILURE_COUNT);
23
+ this.aggDurationMetrics = {
24
+ avg: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_AVG),
25
+ max: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MAX),
26
+ min: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_MIN),
27
+ p50: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P50),
28
+ p90: meter.createObservableGauge(Metrics.IVC_VERIFIER_AGG_DURATION_P90)
29
+ };
30
+ meter.addBatchObservableCallback(this.aggregate, Object.values(this.aggDurationMetrics));
31
+ }
32
+ recordIVCVerification(result) {
33
+ this.ivcVerificationHistogram.record(Math.ceil(result.durationMs), {
34
+ [Attributes.OK]: result.valid
35
+ });
36
+ this.ivcTotalVerificationHistogram.record(Math.ceil(result.totalDurationMs), {
37
+ [Attributes.OK]: result.valid
38
+ });
39
+ if (!result.valid) {
40
+ this.ivcFailureCount.add(1);
41
+ this.localHistogramFails.record(Math.max(Math.ceil(result.durationMs), 1));
42
+ } else {
43
+ this.localHistogramOk.record(Math.max(Math.ceil(result.durationMs), 1));
44
+ }
45
+ }
46
+ aggregate = (res)=>{
47
+ for (const [histogram, ok] of [
48
+ [
49
+ this.localHistogramOk,
50
+ true
51
+ ],
52
+ [
53
+ this.localHistogramFails,
54
+ false
55
+ ]
56
+ ]){
57
+ if (histogram.count === 0) {
58
+ continue;
59
+ }
60
+ res.observe(this.aggDurationMetrics.avg, histogram.mean, {
61
+ [Attributes.OK]: ok
62
+ });
63
+ res.observe(this.aggDurationMetrics.max, histogram.max, {
64
+ [Attributes.OK]: ok
65
+ });
66
+ res.observe(this.aggDurationMetrics.min, histogram.min, {
67
+ [Attributes.OK]: ok
68
+ });
69
+ res.observe(this.aggDurationMetrics.p50, histogram.percentile(50), {
70
+ [Attributes.OK]: ok
71
+ });
72
+ res.observe(this.aggDurationMetrics.p90, histogram.percentile(90), {
73
+ [Attributes.OK]: ok
74
+ });
75
+ }
76
+ };
77
+ }
78
+ export class QueuedIVCVerifier {
79
+ verifier;
80
+ telemetry;
81
+ logger;
82
+ queue;
83
+ metrics;
84
+ constructor(config, verifier, telemetry = getTelemetryClient(), logger = createLogger('bb-prover:queued_chonk_verifier')){
85
+ this.verifier = verifier;
86
+ this.telemetry = telemetry;
87
+ this.logger = logger;
88
+ this.metrics = new IVCVerifierMetrics(this.telemetry, 'QueuedIVCVerifier');
89
+ this.queue = new SerialQueue();
90
+ this.logger.info(`Starting QueuedIVCVerifier with ${config.numConcurrentIVCVerifiers} concurrent verifiers`);
91
+ this.queue.start(config.numConcurrentIVCVerifiers);
92
+ }
93
+ async verifyProof(tx) {
94
+ const result = await this.queue.put(()=>this.verifier.verifyProof(tx));
95
+ this.metrics.recordIVCVerification(result);
96
+ return result;
97
+ }
98
+ stop() {
99
+ return this.queue.end();
100
+ }
101
+ }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.0.0-test.0",
3
+ "version": "0.0.1-commit.0208eb9",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
- "./wasm/bundle": "./dest/wasm/bundle.js",
8
- "./wasm/lazy": "./dest/wasm/lazy.js",
9
- "./prover": "./dest/prover/index.js",
7
+ "./client/bundle": "./dest/prover/client/bundle.js",
8
+ "./client/lazy": "./dest/prover/client/lazy.js",
9
+ "./client": "./dest/prover/client/bb_private_kernel_prover.js",
10
10
  "./verifier": "./dest/verifier/index.js",
11
11
  "./test": "./dest/test/index.js",
12
12
  "./config": "./dest/config.js"
@@ -25,11 +25,9 @@
25
25
  "../package.common.json"
26
26
  ],
27
27
  "scripts": {
28
- "build": "yarn clean && tsc -b",
29
- "build:dev": "tsc -b --watch",
28
+ "build": "yarn clean && ../scripts/tsc.sh",
29
+ "build:dev": "../scripts/tsc.sh --watch",
30
30
  "clean": "rm -rf ./dest .tsbuildinfo",
31
- "formatting": "run -T prettier --check ./src && run -T eslint ./src",
32
- "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
33
31
  "bb": "node --no-warnings ./dest/bb/index.js",
34
32
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
35
33
  },
@@ -64,40 +62,44 @@
64
62
  "testTimeout": 120000,
65
63
  "setupFiles": [
66
64
  "../../foundation/src/jest/setup.mjs"
65
+ ],
66
+ "testEnvironment": "../../foundation/src/jest/env.mjs",
67
+ "setupFilesAfterEnv": [
68
+ "../../foundation/src/jest/setupAfterEnv.mjs"
67
69
  ]
68
70
  },
69
71
  "dependencies": {
70
- "@aztec/bb.js": "0.0.0-test.0",
71
- "@aztec/constants": "0.0.0-test.0",
72
- "@aztec/foundation": "0.0.0-test.0",
73
- "@aztec/noir-protocol-circuits-types": "0.0.0-test.0",
74
- "@aztec/simulator": "0.0.0-test.0",
75
- "@aztec/stdlib": "0.0.0-test.0",
76
- "@aztec/telemetry-client": "0.0.0-test.0",
77
- "@aztec/world-state": "0.0.0-test.0",
78
- "@msgpack/msgpack": "^3.0.0-beta2",
72
+ "@aztec/bb.js": "0.0.1-commit.0208eb9",
73
+ "@aztec/constants": "0.0.1-commit.0208eb9",
74
+ "@aztec/foundation": "0.0.1-commit.0208eb9",
75
+ "@aztec/noir-noirc_abi": "0.0.1-commit.0208eb9",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.0208eb9",
77
+ "@aztec/noir-types": "0.0.1-commit.0208eb9",
78
+ "@aztec/simulator": "0.0.1-commit.0208eb9",
79
+ "@aztec/stdlib": "0.0.1-commit.0208eb9",
80
+ "@aztec/telemetry-client": "0.0.1-commit.0208eb9",
81
+ "@aztec/world-state": "0.0.1-commit.0208eb9",
79
82
  "commander": "^12.1.0",
80
83
  "pako": "^2.1.0",
81
84
  "source-map-support": "^0.5.21",
82
- "tslib": "^2.4.0",
83
- "@aztec/noir-noirc_abi": "0.0.0-test.0",
84
- "@aztec/noir-types": "0.0.0-test.0"
85
+ "tslib": "^2.4.0"
85
86
  },
86
87
  "devDependencies": {
87
- "@aztec/ethereum": "0.0.0-test.0",
88
- "@aztec/kv-store": "0.0.0-test.0",
89
- "@aztec/noir-contracts.js": "0.0.0-test.0",
90
- "@aztec/protocol-contracts": "0.0.0-test.0",
91
- "@jest/globals": "^29.5.0",
92
- "@types/jest": "^29.5.0",
93
- "@types/memdown": "^3.0.0",
94
- "@types/node": "^18.7.23",
88
+ "@aztec/ethereum": "0.0.1-commit.0208eb9",
89
+ "@aztec/kv-store": "0.0.1-commit.0208eb9",
90
+ "@aztec/noir-contracts.js": "0.0.1-commit.0208eb9",
91
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.0208eb9",
92
+ "@aztec/protocol-contracts": "0.0.1-commit.0208eb9",
93
+ "@jest/globals": "^30.0.0",
94
+ "@types/jest": "^30.0.0",
95
+ "@types/node": "^22.15.17",
95
96
  "@types/source-map-support": "^0.5.10",
96
- "jest": "^29.5.0",
97
- "jest-mock-extended": "^3.0.3",
97
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
98
+ "jest": "^30.0.0",
99
+ "jest-mock-extended": "^4.0.0",
98
100
  "ts-node": "^10.9.1",
99
- "typescript": "^5.0.4",
100
- "viem": "2.22.8"
101
+ "typescript": "^5.3.3",
102
+ "viem": "npm:@aztec/viem@2.38.2"
101
103
  },
102
104
  "files": [
103
105
  "dest",
@@ -106,6 +108,6 @@
106
108
  ],
107
109
  "types": "./dest/index.d.ts",
108
110
  "engines": {
109
- "node": ">=18"
111
+ "node": ">=20.10"
110
112
  }
111
113
  }