@aztec/bb-prover 0.0.0-test.1 → 0.0.1-commit.017a351

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 (130) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +21 -20
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
  3. package/dest/avm_proving_tests/avm_proving_tester.js +196 -87
  4. package/dest/bb/bb_js_backend.d.ts +196 -0
  5. package/dest/bb/bb_js_backend.d.ts.map +1 -0
  6. package/dest/bb/bb_js_backend.js +379 -0
  7. package/dest/bb/bb_js_debug.d.ts +52 -0
  8. package/dest/bb/bb_js_debug.d.ts.map +1 -0
  9. package/dest/bb/bb_js_debug.js +176 -0
  10. package/dest/bb/cli.d.ts +1 -1
  11. package/dest/bb/file_names.d.ts +4 -0
  12. package/dest/bb/file_names.d.ts.map +1 -0
  13. package/dest/bb/file_names.js +5 -0
  14. package/dest/bb/index.d.ts +1 -1
  15. package/dest/config.d.ts +19 -1
  16. package/dest/config.d.ts.map +1 -1
  17. package/dest/honk.d.ts +3 -3
  18. package/dest/honk.d.ts.map +1 -1
  19. package/dest/honk.js +3 -2
  20. package/dest/index.d.ts +4 -2
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +3 -1
  23. package/dest/instrumentation.d.ts +3 -3
  24. package/dest/instrumentation.d.ts.map +1 -1
  25. package/dest/instrumentation.js +22 -46
  26. package/dest/prover/client/bb_private_kernel_prover.d.ts +46 -0
  27. package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -0
  28. package/dest/prover/client/bb_private_kernel_prover.js +177 -0
  29. package/dest/prover/client/bundle.d.ts +6 -0
  30. package/dest/prover/client/bundle.d.ts.map +1 -0
  31. package/dest/prover/client/bundle.js +7 -0
  32. package/dest/prover/client/lazy.d.ts +6 -0
  33. package/dest/prover/client/lazy.d.ts.map +1 -0
  34. package/dest/prover/client/lazy.js +7 -0
  35. package/dest/prover/index.d.ts +3 -4
  36. package/dest/prover/index.d.ts.map +1 -1
  37. package/dest/prover/index.js +2 -3
  38. package/dest/prover/proof_utils.d.ts +29 -0
  39. package/dest/prover/proof_utils.d.ts.map +1 -0
  40. package/dest/prover/proof_utils.js +95 -0
  41. package/dest/prover/server/bb_prover.d.ts +96 -0
  42. package/dest/prover/server/bb_prover.d.ts.map +1 -0
  43. package/dest/prover/server/bb_prover.js +841 -0
  44. package/dest/test/delay_values.d.ts +1 -1
  45. package/dest/test/delay_values.d.ts.map +1 -1
  46. package/dest/test/delay_values.js +37 -23
  47. package/dest/test/index.d.ts +2 -1
  48. package/dest/test/index.d.ts.map +1 -1
  49. package/dest/test/index.js +1 -0
  50. package/dest/test/test_circuit_prover.d.ts +27 -36
  51. package/dest/test/test_circuit_prover.d.ts.map +1 -1
  52. package/dest/test/test_circuit_prover.js +517 -88
  53. package/dest/test/test_verifier.d.ts +6 -3
  54. package/dest/test/test_verifier.d.ts.map +1 -1
  55. package/dest/test/test_verifier.js +23 -1
  56. package/dest/verification_key/verification_key_data.d.ts +1 -2
  57. package/dest/verification_key/verification_key_data.d.ts.map +1 -1
  58. package/dest/verification_key/verification_key_data.js +9 -34
  59. package/dest/verifier/batch_chonk_verifier.d.ts +56 -0
  60. package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -0
  61. package/dest/verifier/batch_chonk_verifier.js +384 -0
  62. package/dest/verifier/bb_verifier.d.ts +9 -5
  63. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  64. package/dest/verifier/bb_verifier.js +156 -49
  65. package/dest/verifier/index.d.ts +3 -1
  66. package/dest/verifier/index.d.ts.map +1 -1
  67. package/dest/verifier/index.js +2 -0
  68. package/dest/verifier/queued_chonk_verifier.d.ts +14 -0
  69. package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -0
  70. package/dest/verifier/queued_chonk_verifier.js +102 -0
  71. package/package.json +38 -34
  72. package/src/avm_proving_tests/avm_proving_tester.ts +163 -126
  73. package/src/bb/bb_js_backend.ts +435 -0
  74. package/src/bb/bb_js_debug.ts +227 -0
  75. package/src/bb/file_names.ts +6 -0
  76. package/src/config.ts +18 -0
  77. package/src/honk.ts +3 -2
  78. package/src/index.ts +3 -1
  79. package/src/instrumentation.ts +22 -47
  80. package/src/prover/client/bb_private_kernel_prover.ts +423 -0
  81. package/src/prover/client/bundle.ts +10 -0
  82. package/src/prover/client/lazy.ts +10 -0
  83. package/src/prover/index.ts +2 -3
  84. package/src/prover/proof_utils.ts +155 -0
  85. package/src/prover/server/bb_prover.ts +713 -0
  86. package/src/test/delay_values.ts +38 -22
  87. package/src/test/index.ts +1 -0
  88. package/src/test/test_circuit_prover.ts +264 -154
  89. package/src/test/test_verifier.ts +15 -3
  90. package/src/verification_key/verification_key_data.ts +11 -31
  91. package/src/verifier/batch_chonk_verifier.ts +415 -0
  92. package/src/verifier/bb_verifier.ts +93 -76
  93. package/src/verifier/index.ts +2 -0
  94. package/src/verifier/queued_chonk_verifier.ts +108 -0
  95. package/dest/bb/execute.d.ts +0 -140
  96. package/dest/bb/execute.d.ts.map +0 -1
  97. package/dest/bb/execute.js +0 -780
  98. package/dest/prover/bb_native_private_kernel_prover.d.ts +0 -25
  99. package/dest/prover/bb_native_private_kernel_prover.d.ts.map +0 -1
  100. package/dest/prover/bb_native_private_kernel_prover.js +0 -69
  101. package/dest/prover/bb_private_kernel_prover.d.ts +0 -32
  102. package/dest/prover/bb_private_kernel_prover.d.ts.map +0 -1
  103. package/dest/prover/bb_private_kernel_prover.js +0 -109
  104. package/dest/prover/bb_prover.d.ts +0 -120
  105. package/dest/prover/bb_prover.d.ts.map +0 -1
  106. package/dest/prover/bb_prover.js +0 -423
  107. package/dest/prover/client_ivc_proof_utils.d.ts +0 -25
  108. package/dest/prover/client_ivc_proof_utils.d.ts.map +0 -1
  109. package/dest/prover/client_ivc_proof_utils.js +0 -43
  110. package/dest/stats.d.ts +0 -5
  111. package/dest/stats.d.ts.map +0 -1
  112. package/dest/stats.js +0 -62
  113. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +0 -17
  114. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +0 -1
  115. package/dest/wasm/bb_wasm_private_kernel_prover.js +0 -46
  116. package/dest/wasm/bundle.d.ts +0 -6
  117. package/dest/wasm/bundle.d.ts.map +0 -1
  118. package/dest/wasm/bundle.js +0 -8
  119. package/dest/wasm/lazy.d.ts +0 -6
  120. package/dest/wasm/lazy.d.ts.map +0 -1
  121. package/dest/wasm/lazy.js +0 -8
  122. package/src/bb/execute.ts +0 -853
  123. package/src/prover/bb_native_private_kernel_prover.ts +0 -119
  124. package/src/prover/bb_private_kernel_prover.ts +0 -249
  125. package/src/prover/bb_prover.ts +0 -781
  126. package/src/prover/client_ivc_proof_utils.ts +0 -42
  127. package/src/stats.ts +0 -64
  128. package/src/wasm/bb_wasm_private_kernel_prover.ts +0 -55
  129. package/src/wasm/bundle.ts +0 -11
  130. package/src/wasm/lazy.ts +0 -11
@@ -1,25 +1,26 @@
1
- import { PublicTxSimulationTester, type TestEnqueuedCall } from '@aztec/simulator/public/fixtures';
2
- import { SimpleContractDataSource, WorldStateDB } from '@aztec/simulator/server';
3
- import type { AvmCircuitInputs } from '@aztec/stdlib/avm';
1
+ import { PublicTxSimulationTester, SimpleContractDataSource, type TestEnqueuedCall, type TestExecutorMetrics, type TestPrivateInsertions } from '@aztec/simulator/public/fixtures';
2
+ import type { PublicTxResult } from '@aztec/simulator/server';
3
+ import { AvmCircuitInputs, AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
4
4
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ import type { Gas } from '@aztec/stdlib/gas';
5
6
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
6
- import { type BBResult, type BBSuccess } from '../bb/execute.js';
7
+ import type { GlobalVariables } from '@aztec/stdlib/tx';
8
+ import { NativeWorldStateService } from '@aztec/world-state';
7
9
  export declare class AvmProvingTester extends PublicTxSimulationTester {
8
- private bbWorkingDirectory;
9
10
  private checkCircuitOnly;
10
- constructor(bbWorkingDirectory: string, checkCircuitOnly: boolean, worldStateDB: WorldStateDB, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations);
11
- static create(checkCircuitOnly?: boolean): Promise<AvmProvingTester>;
12
- prove(avmCircuitInputs: AvmCircuitInputs): Promise<BBResult>;
13
- verify(proofRes: BBSuccess): Promise<BBResult>;
14
- simProveVerify(sender: AztecAddress, setupCalls: TestEnqueuedCall[], appCalls: TestEnqueuedCall[], teardownCall: TestEnqueuedCall | undefined, expectRevert: boolean | undefined, feePayer?: AztecAddress): Promise<void>;
15
- simProveVerifyAppLogic(appCall: TestEnqueuedCall, expectRevert?: boolean): Promise<void>;
11
+ private readonly bbJsFactory;
12
+ constructor(checkCircuitOnly: boolean, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, globals?: GlobalVariables, metrics?: TestExecutorMetrics);
13
+ static new(worldStateService: NativeWorldStateService, checkCircuitOnly?: boolean, globals?: GlobalVariables, metrics?: TestExecutorMetrics): Promise<AvmProvingTester>;
14
+ /**
15
+ * Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
16
+ * Returns the in-memory proof fields on success; throws via jest expect() on failure.
17
+ */
18
+ prove(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<Uint8Array[]>;
19
+ verify(proof: Uint8Array[], publicInputs: AvmCircuitPublicInputs): Promise<void>;
20
+ proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<void>;
21
+ private recordProverMetrics;
22
+ simProveVerify(sender: AztecAddress, setupCalls: TestEnqueuedCall[], appCalls: TestEnqueuedCall[], teardownCall: TestEnqueuedCall | undefined, expectRevert: boolean | undefined, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, txLabel?: string, disableRevertCheck?: boolean, gasLimits?: Gas): Promise<PublicTxResult>;
23
+ executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
24
+ simProveVerifyAppLogic(appCall: TestEnqueuedCall, expectRevert?: boolean, txLabel?: string, gasLimits?: Gas): Promise<void>;
16
25
  }
17
- export declare class AvmProvingTesterV2 extends PublicTxSimulationTester {
18
- private bbWorkingDirectory;
19
- constructor(bbWorkingDirectory: string, worldStateDB: WorldStateDB, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations);
20
- static create(): Promise<AvmProvingTesterV2>;
21
- proveV2(avmCircuitInputs: AvmCircuitInputs): Promise<BBResult>;
22
- verifyV2(proofRes: BBSuccess): Promise<BBResult>;
23
- simProveVerifyV2(sender: AztecAddress, setupCalls: TestEnqueuedCall[], appCalls: TestEnqueuedCall[], teardownCall: TestEnqueuedCall | undefined, expectRevert: boolean | undefined, feePayer?: AztecAddress): Promise<void>;
24
- }
25
- //# sourceMappingURL=avm_proving_tester.d.ts.map
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3Byb3ZpbmdfdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtX3Byb3ZpbmdfdGVzdHMvYXZtX3Byb3ZpbmdfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUsscUJBQXFCLEVBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBa0I3RCxxQkFBYSxnQkFBaUIsU0FBUSx3QkFBd0I7SUFJMUQsT0FBTyxDQUFDLGdCQUFnQjtJQUgxQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBNEI7SUFFeEQsWUFDVSxnQkFBZ0IsRUFBRSxPQUFPLEVBQ2pDLGtCQUFrQixFQUFFLHdCQUF3QixFQUM1QyxXQUFXLEVBQUUseUJBQXlCLEVBQ3RDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFDekIsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLEVBSTlCO0lBRUQsT0FBYSxHQUFHLENBQ2QsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQzFDLGdCQUFnQixHQUFFLE9BQWUsRUFDakMsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUN6QixPQUFPLENBQUMsRUFBRSxtQkFBbUIsNkJBSzlCO0lBRUQ7OztPQUdHO0lBQ0csS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sR0FBRSxNQUFzQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWV0RztJQUVLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTckY7SUFFWSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxHQUFFLE1BQXNCLGlCQUczRjtJQUVELE9BQU8sQ0FBQyxtQkFBbUI7SUE0QmQsY0FBYyxDQUN6QixNQUFNLEVBQUUsWUFBWSxFQUNwQixVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFDOUIsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQzVCLFlBQVksRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBQzFDLFlBQVksRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUNqQyxRQUFRLGVBQVMsRUFDakIsaUJBQWlCLENBQUMsRUFBRSxxQkFBcUIsRUFDekMsT0FBTyxHQUFFLE1BQXNCLEVBQy9CLGtCQUFrQixHQUFFLE9BQWUsRUFDbkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUNkLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EyQnpCO0lBRXFCLGtCQUFrQixDQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUNmLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQy9CLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQzdCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixFQUMvQixRQUFRLENBQUMsRUFBRSxZQUFZLEVBQ3ZCLGlCQUFpQixDQUFDLEVBQUUscUJBQXFCLEVBQ3pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsMkJBY2hCO0lBRVksc0JBQXNCLENBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUN0QixPQUFPLEdBQUUsTUFBc0IsRUFDL0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxpQkFjaEI7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACnG,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AASjF,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,SAAS,EAMf,MAAM,kBAAkB,CAAC;AAK1B,qBAAa,gBAAiB,SAAQ,wBAAwB;IAE1D,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,gBAAgB;gBADhB,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,OAAO,EACjC,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB;WAKlB,MAAM,CAAC,gBAAgB,GAAE,OAAe;IASxD,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAe5D,MAAM,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgBvC,cAAc,CACzB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS;IAWN,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,OAAO;CAWtF;AAED,qBAAa,kBAAmB,SAAQ,wBAAwB;IAE5D,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,MAAM,EAClC,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB;WAKlB,MAAM;IAStB,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAU9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAezC,gBAAgB,CAC3B,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS;CAYpB"}
1
+ {"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAkB7D,qBAAa,gBAAiB,SAAQ,wBAAwB;IAI1D,OAAO,CAAC,gBAAgB;IAH1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAExD,YACU,gBAAgB,EAAE,OAAO,EACjC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAI9B;IAED,OAAa,GAAG,CACd,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,GAAE,OAAe,EACjC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,6BAK9B;IAED;;;OAGG;IACG,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAetG;IAEK,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;IAEY,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,iBAG3F;IAED,OAAO,CAAC,mBAAmB;IA4Bd,cAAc,CACzB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS,EACjB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,EAC/B,kBAAkB,GAAE,OAAe,EACnC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CA2BzB;IAEqB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,2BAchB;IAEY,sBAAsB,CACjC,OAAO,EAAE,gBAAgB,EACzB,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,MAAsB,EAC/B,SAAS,CAAC,EAAE,GAAG,iBAchB;CACF"}
@@ -1,105 +1,214 @@
1
- import { PublicTxSimulationTester } from '@aztec/simulator/public/fixtures';
2
- import { SimpleContractDataSource, WorldStateDB } from '@aztec/simulator/server';
1
+ function _ts_add_disposable_resource(env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ env.stack.push({
23
+ value: value,
24
+ dispose: dispose,
25
+ async: async
26
+ });
27
+ } else if (async) {
28
+ env.stack.push({
29
+ async: true
30
+ });
31
+ }
32
+ return value;
33
+ }
34
+ function _ts_dispose_resources(env) {
35
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
36
+ var e = new Error(message);
37
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
+ };
39
+ return (_ts_dispose_resources = function _ts_dispose_resources(env) {
40
+ function fail(e) {
41
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
42
+ env.hasError = true;
43
+ }
44
+ var r, s = 0;
45
+ function next() {
46
+ while(r = env.stack.pop()){
47
+ try {
48
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
49
+ if (r.dispose) {
50
+ var result = r.dispose.call(r.value);
51
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
52
+ fail(e);
53
+ return next();
54
+ });
55
+ } else s |= 1;
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
61
+ if (env.hasError) throw env.error;
62
+ }
63
+ return next();
64
+ })(env);
65
+ }
66
+ import { Timer } from '@aztec/foundation/timer';
67
+ import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
68
+ import { AvmCircuitInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
3
69
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
- import { makeAvmCircuitInputs } from '@aztec/stdlib/testing';
5
- import { VerificationKeyData } from '@aztec/stdlib/vks';
6
- import { NativeWorldStateService } from '@aztec/world-state';
7
- import fs from 'node:fs/promises';
8
- import { tmpdir } from 'node:os';
9
70
  import path from 'path';
10
- import { BB_RESULT, generateAvmProof, generateAvmProofV2, verifyAvmProof, verifyAvmProofV2 } from '../bb/execute.js';
11
- import { extractAvmVkData } from '../verification_key/verification_key_data.js';
12
- const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb');
71
+ import { BBJsFactory } from '../bb/bb_js_backend.js';
72
+ const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
73
+ // Config with collectHints enabled for proving tests
74
+ const provingConfig = PublicSimulatorConfig.from({
75
+ skipFeeEnforcement: false,
76
+ collectCallMetadata: true,
77
+ collectDebugLogs: false,
78
+ collectHints: true,
79
+ collectPublicInputs: true,
80
+ collectStatistics: false
81
+ });
13
82
  export class AvmProvingTester extends PublicTxSimulationTester {
14
- bbWorkingDirectory;
15
83
  checkCircuitOnly;
16
- constructor(bbWorkingDirectory, checkCircuitOnly, worldStateDB, contractDataSource, merkleTrees){
17
- super(worldStateDB, contractDataSource, merkleTrees), this.bbWorkingDirectory = bbWorkingDirectory, this.checkCircuitOnly = checkCircuitOnly;
84
+ bbJsFactory;
85
+ constructor(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics){
86
+ // simulator factory is undefined because for proving, we use the default C++ simulator
87
+ super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.bbJsFactory = new BBJsFactory(BB_PATH);
18
88
  }
19
- static async create(checkCircuitOnly = false) {
20
- const bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-'));
89
+ static async new(worldStateService, checkCircuitOnly = false, globals, metrics) {
21
90
  const contractDataSource = new SimpleContractDataSource();
22
- const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
23
- const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
24
- return new AvmProvingTester(bbWorkingDirectory, checkCircuitOnly, worldStateDB, contractDataSource, merkleTrees);
91
+ const merkleTrees = await worldStateService.fork();
92
+ return new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics);
25
93
  }
26
- async prove(avmCircuitInputs) {
27
- // Then we prove.
28
- const proofRes = await generateAvmProof(BB_PATH, this.bbWorkingDirectory, avmCircuitInputs, this.logger, this.checkCircuitOnly);
29
- if (proofRes.status === BB_RESULT.FAILURE) {
30
- this.logger.error(`Proof generation failed: ${proofRes.reason}`);
94
+ /**
95
+ * Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
96
+ * Returns the in-memory proof fields on success; throws via jest expect() on failure.
97
+ */ async prove(avmCircuitInputs, txLabel = 'unlabeledTx') {
98
+ const env = {
99
+ stack: [],
100
+ error: void 0,
101
+ hasError: false
102
+ };
103
+ try {
104
+ const inputsBuffer = avmCircuitInputs.serializeWithMessagePack();
105
+ if (this.checkCircuitOnly) {
106
+ const env = {
107
+ stack: [],
108
+ error: void 0,
109
+ hasError: false
110
+ };
111
+ try {
112
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
113
+ const { passed, stats } = await instance.checkAvmCircuit(inputsBuffer);
114
+ this.recordProverMetrics(stats, txLabel);
115
+ expect(passed).toBe(true);
116
+ return [];
117
+ } catch (e) {
118
+ env.error = e;
119
+ env.hasError = true;
120
+ } finally{
121
+ const result = _ts_dispose_resources(env);
122
+ if (result) await result;
123
+ }
124
+ }
125
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
126
+ const { proof, stats } = await instance.generateAvmProof(inputsBuffer);
127
+ this.recordProverMetrics(stats, txLabel);
128
+ return proof;
129
+ } catch (e) {
130
+ env.error = e;
131
+ env.hasError = true;
132
+ } finally{
133
+ const result = _ts_dispose_resources(env);
134
+ if (result) await result;
31
135
  }
32
- return proofRes;
33
136
  }
34
- async verify(proofRes) {
35
- if (this.checkCircuitOnly) {
36
- // Skip verification if we're only checking the circuit.
37
- // Check-circuit doesn't generate a proof to verify.
38
- return proofRes;
137
+ async verify(proof, publicInputs) {
138
+ const env = {
139
+ stack: [],
140
+ error: void 0,
141
+ hasError: false
142
+ };
143
+ try {
144
+ if (this.checkCircuitOnly) {
145
+ // Check-circuit did not generate a proof; nothing to verify.
146
+ return;
147
+ }
148
+ const piBuffer = publicInputs.serializeWithMessagePack();
149
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
150
+ const { verified } = await instance.verifyAvmProof(proof, piBuffer);
151
+ expect(verified).toBe(true);
152
+ } catch (e) {
153
+ env.error = e;
154
+ env.hasError = true;
155
+ } finally{
156
+ const result = _ts_dispose_resources(env);
157
+ if (result) await result;
39
158
  }
40
- // Then we test VK extraction and serialization.
41
- const succeededRes = proofRes;
42
- const vkData = await extractAvmVkData(succeededRes.vkPath);
43
- VerificationKeyData.fromBuffer(vkData.toBuffer());
44
- // Then we verify.
45
- const rawVkPath = path.join(succeededRes.vkPath, 'vk');
46
- return await verifyAvmProof(BB_PATH, succeededRes.proofPath, rawVkPath, this.logger);
47
159
  }
48
- async simProveVerify(sender, setupCalls, appCalls, teardownCall, expectRevert, feePayer = sender) {
49
- const simRes = await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer);
50
- expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
51
- const avmCircuitInputs = simRes.avmProvingRequest.inputs;
52
- const provingRes = await this.prove(avmCircuitInputs);
53
- expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
54
- const verificationRes = await this.verify(provingRes);
55
- expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
160
+ async proveVerify(avmCircuitInputs, txLabel = 'unlabeledTx') {
161
+ const proof = await this.prove(avmCircuitInputs, txLabel);
162
+ await this.verify(proof, avmCircuitInputs.publicInputs);
56
163
  }
57
- async simProveVerifyAppLogic(appCall, expectRevert) {
58
- const simRes = await this.simulateTx(/*sender=*/ AztecAddress.fromNumber(42), /*setupCalls=*/ [], [
59
- appCall
60
- ]);
61
- expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
62
- const avmCircuitInputs = simRes.avmProvingRequest.inputs;
63
- const provingRes = await this.prove(avmCircuitInputs);
64
- expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
65
- const verificationRes = await this.verify(provingRes);
66
- expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
67
- }
68
- }
69
- export class AvmProvingTesterV2 extends PublicTxSimulationTester {
70
- bbWorkingDirectory;
71
- constructor(bbWorkingDirectory, worldStateDB, contractDataSource, merkleTrees){
72
- super(worldStateDB, contractDataSource, merkleTrees), this.bbWorkingDirectory = bbWorkingDirectory;
73
- }
74
- static async create() {
75
- const bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-'));
76
- const contractDataSource = new SimpleContractDataSource();
77
- const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
78
- const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
79
- return new AvmProvingTesterV2(bbWorkingDirectory, worldStateDB, contractDataSource, merkleTrees);
164
+ recordProverMetrics(stats, txLabel) {
165
+ // Build a lookup keyed on the stage name with the `_ms` suffix stripped, matching the legacy
166
+ // stdout-scraped shape. bb::avm2::Stats::time() stores keys with `_ms` appended.
167
+ const times = {};
168
+ for (const { name, valueMs } of stats){
169
+ const key = name.endsWith('_ms') ? name.slice(0, -'_ms'.length) : name;
170
+ times[key] = valueMs;
171
+ }
172
+ if (Object.keys(times).length === 0) {
173
+ throw new Error('AVM response did not contain any proving-stage timings!');
174
+ }
175
+ // Hack to make labels match.
176
+ const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
177
+ // Cast because TS doesn't realize `metrics` is protected, not private on the parent class.
178
+ this.metrics?.recordProverMetrics(txLabelWithCount, {
179
+ proverSimulationStepMs: times['simulation/all'],
180
+ proverProvingStepMs: times['proving/all'],
181
+ proverTraceGenerationStepMs: times['tracegen/all'],
182
+ traceGenerationInteractionsMs: times['tracegen/interactions'],
183
+ traceGenerationTracesMs: times['tracegen/traces'],
184
+ provingSumcheckMs: times['prove/sumcheck'],
185
+ provingPcsMs: times['prove/pcs_rounds'],
186
+ provingLogDerivativeInverseMs: times['prove/log_derivative_inverse_round'],
187
+ provingLogDerivativeInverseCommitmentsMs: times['prove/log_derivative_inverse_commitments_round'],
188
+ provingWireCommitmentsMs: times['prove/wire_commitments_round']
189
+ });
80
190
  }
81
- async proveV2(avmCircuitInputs) {
82
- // Then we prove.
83
- const proofRes = await generateAvmProofV2(BB_PATH, this.bbWorkingDirectory, avmCircuitInputs, this.logger);
84
- if (proofRes.status === BB_RESULT.FAILURE) {
85
- this.logger.error(`Proof generation failed: ${proofRes.reason}`);
191
+ async simProveVerify(sender, setupCalls, appCalls, teardownCall, expectRevert, feePayer = sender, privateInsertions, txLabel = 'unlabeledTx', disableRevertCheck = false, gasLimits) {
192
+ const simTimer = new Timer();
193
+ const simRes = await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel, gasLimits);
194
+ const simDuration = simTimer.ms();
195
+ this.logger.info(`Simulation took ${simDuration} ms for tx ${txLabel}`);
196
+ if (!disableRevertCheck) {
197
+ expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
86
198
  }
87
- expect(proofRes.status).toEqual(BB_RESULT.SUCCESS);
88
- return proofRes;
199
+ const opString = this.checkCircuitOnly ? 'Check circuit' : 'Proving and verification';
200
+ const avmCircuitInputs = new AvmCircuitInputs(simRes.hints, simRes.publicInputs);
201
+ const timer = new Timer();
202
+ await this.proveVerify(avmCircuitInputs, txLabel);
203
+ this.logger.info(`${opString} took ${timer.ms()} ms for tx ${txLabel}`);
204
+ return simRes;
89
205
  }
90
- async verifyV2(proofRes) {
91
- // TODO: Placeholder for now. They get ignored in C++.
92
- const inputs = await makeAvmCircuitInputs();
93
- const rawVkPath = path.join(proofRes.vkPath, 'vk');
94
- return await verifyAvmProofV2(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath, inputs.publicInputs, rawVkPath, this.logger);
206
+ async executeTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits) {
207
+ return await this.simProveVerify(sender, setupCalls ?? [], appCalls ?? [], teardownCall, undefined, feePayer, privateInsertions, txLabel, true, gasLimits);
95
208
  }
96
- async simProveVerifyV2(sender, setupCalls, appCalls, teardownCall, expectRevert, feePayer = sender) {
97
- const simRes = await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer);
98
- expect(simRes.revertCode.isOK()).toBe(expectRevert ? false : true);
99
- const avmCircuitInputs = simRes.avmProvingRequest.inputs;
100
- const provingRes = await this.proveV2(avmCircuitInputs);
101
- expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
102
- const verificationRes = await this.verifyV2(provingRes);
103
- expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
209
+ async simProveVerifyAppLogic(appCall, expectRevert, txLabel = 'unlabeledTx', gasLimits) {
210
+ await this.simProveVerify(/*sender=*/ AztecAddress.fromNumber(42), /*setupCalls=*/ [], [
211
+ appCall
212
+ ], undefined, expectRevert, /*feePayer=*/ undefined, /*privateInsertions=*/ undefined, txLabel, /*disableRevertCheck=*/ false, gasLimits);
104
213
  }
105
214
  }
@@ -0,0 +1,196 @@
1
+ import { type AvmStat } from '@aztec/bb.js';
2
+ import type { LogFn, Logger } from '@aztec/foundation/log';
3
+ import type { UltraHonkFlavor } from '../honk.js';
4
+ /** Result of a successful proof generation via bb.js. */
5
+ export type BBJsProofResult = {
6
+ /** Proof fields as 32-byte Uint8Arrays. */
7
+ proofFields: Uint8Array[];
8
+ /** Public input fields as 32-byte Uint8Arrays. */
9
+ publicInputFields: Uint8Array[];
10
+ /** Duration of the proving operation in ms. */
11
+ durationMs: number;
12
+ };
13
+ /** Public API surface of a bb.js instance, used by the factory and debug wrapper. */
14
+ export interface BBJsApi {
15
+ generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
16
+ verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
17
+ verified: boolean;
18
+ durationMs: number;
19
+ }>;
20
+ verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
21
+ verified: boolean;
22
+ durationMs: number;
23
+ }>;
24
+ computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
25
+ circuitSize: number;
26
+ durationMs: number;
27
+ }>;
28
+ generateContract(verificationKey: Uint8Array): Promise<{
29
+ solidityCode: string;
30
+ durationMs: number;
31
+ }>;
32
+ /** Generate an AVM proof from serialized inputs. Callers should call verifyAvmProof separately. */
33
+ generateAvmProof(inputs: Uint8Array): Promise<{
34
+ proof: Uint8Array[];
35
+ stats: AvmStat[];
36
+ durationMs: number;
37
+ }>;
38
+ /** Verify an AVM proof against serialized public inputs. */
39
+ verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
40
+ verified: boolean;
41
+ durationMs: number;
42
+ }>;
43
+ /** Check the AVM circuit from serialized inputs. Returns pass/fail and per-stage timings. */
44
+ checkAvmCircuit(inputs: Uint8Array): Promise<{
45
+ passed: boolean;
46
+ stats: AvmStat[];
47
+ durationMs: number;
48
+ }>;
49
+ destroy(): Promise<void>;
50
+ }
51
+ /**
52
+ * Thin wrapper around a single Barretenberg instance.
53
+ * Each instance spawns its own bb process via the NativeUnixSocket backend.
54
+ */
55
+ export declare class BBJsInstance implements BBJsApi {
56
+ private api;
57
+ private constructor();
58
+ /** Creates a new Barretenberg instance connected to a fresh bb process. */
59
+ static create(bbPath: string, logger?: LogFn, threads?: number): Promise<BBJsInstance>;
60
+ /**
61
+ * Generate an UltraHonk proof for a circuit.
62
+ * @param circuitName - Identifier for the circuit (used by bb internally).
63
+ * @param bytecode - Uncompressed ACIR bytecode.
64
+ * @param verificationKey - The circuit's verification key bytes.
65
+ * @param witness - Uncompressed witness bytes.
66
+ * @param flavor - The UltraHonk flavor to use.
67
+ */
68
+ generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
69
+ /**
70
+ * Verify an UltraHonk proof.
71
+ * @param proofFields - Proof fields as 32-byte Uint8Arrays.
72
+ * @param verificationKey - The VK bytes.
73
+ * @param publicInputFields - Public input fields as 32-byte Uint8Arrays.
74
+ * @param flavor - The UltraHonk flavor.
75
+ * @returns Whether the proof is valid.
76
+ */
77
+ verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
78
+ verified: boolean;
79
+ durationMs: number;
80
+ }>;
81
+ /**
82
+ * Compute circuit gate count / circuit size.
83
+ * @param circuitName - Identifier for the circuit.
84
+ * @param bytecode - Uncompressed ACIR bytecode.
85
+ * @param flavor - 'mega_honk' for chonk circuits, or an UltraHonk flavor.
86
+ * @returns The dyadic circuit size (next power of 2 of gate count).
87
+ */
88
+ computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
89
+ circuitSize: number;
90
+ durationMs: number;
91
+ }>;
92
+ /**
93
+ * Generate a Solidity verifier contract from a verification key.
94
+ * @param verificationKey - The VK bytes.
95
+ * @returns The Solidity source code.
96
+ */
97
+ generateContract(verificationKey: Uint8Array): Promise<{
98
+ solidityCode: string;
99
+ durationMs: number;
100
+ }>;
101
+ /**
102
+ * Verify a Chonk (IVC) proof passed as flat field elements (with public inputs prepended).
103
+ * The split into structured sub-proofs happens server-side in `ChonkProof::from_field_elements`,
104
+ * so this layer doesn't need to know per-component sub-proof sizes.
105
+ * @param fieldsWithPublicInputs - Flat proof fields as 32-byte Uint8Arrays (public inputs prepended).
106
+ * @param verificationKey - The VK bytes.
107
+ */
108
+ verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
109
+ verified: boolean;
110
+ durationMs: number;
111
+ }>;
112
+ /** Generate an AVM proof from serialized inputs. */
113
+ generateAvmProof(inputs: Uint8Array): Promise<{
114
+ proof: Uint8Array[];
115
+ stats: AvmStat[];
116
+ durationMs: number;
117
+ }>;
118
+ /** Verify an AVM proof against serialized public inputs. */
119
+ verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
120
+ verified: boolean;
121
+ durationMs: number;
122
+ }>;
123
+ /** Check the AVM circuit from serialized inputs. */
124
+ checkAvmCircuit(inputs: Uint8Array): Promise<{
125
+ passed: boolean;
126
+ stats: AvmStat[];
127
+ durationMs: number;
128
+ }>;
129
+ /** Destroy this instance and kill the underlying bb process. */
130
+ destroy(): Promise<void>;
131
+ }
132
+ /** Options for {@link BBJsFactory}. */
133
+ export interface BBJsFactoryOptions {
134
+ /**
135
+ * Number of long-lived bb processes to keep in the pool.
136
+ * If omitted, every `getInstance()` call spawns a fresh bb that is destroyed on dispose.
137
+ */
138
+ poolSize?: number;
139
+ logger?: Logger;
140
+ threads?: number;
141
+ debugDir?: string;
142
+ }
143
+ /**
144
+ * Manages bb.js instance lifecycle. By default every `getInstance()` call spawns a fresh
145
+ * bb process that is destroyed when the borrow is disposed. Pass `poolSize` to keep a fixed
146
+ * set of long-lived bb processes that are reused across calls — useful when the per-call
147
+ * bb startup cost dominates the workload (e.g. high-rate IVC verification).
148
+ *
149
+ * Idiomatic usage:
150
+ * ```
151
+ * await using inst = await factory.getInstance();
152
+ * await inst.someMethod(...);
153
+ * // disposed automatically when `inst` goes out of scope
154
+ * ```
155
+ */
156
+ export declare class BBJsFactory {
157
+ private bbPath;
158
+ private readonly poolSize?;
159
+ private readonly logger?;
160
+ private readonly threads?;
161
+ private readonly debugDir?;
162
+ /** Available pooled instances when poolSize is set; otherwise undefined. */
163
+ private pool?;
164
+ /** Lazily-resolved on first `getInstance()` call to prevent racing pool initialization. */
165
+ private initPromise?;
166
+ private destroyed;
167
+ constructor(bbPath: string, options?: BBJsFactoryOptions);
168
+ /**
169
+ * Acquire a bb instance. The returned object implements `BBJsApi` and `AsyncDisposable`.
170
+ * With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows from
171
+ * the pool and returns to it on dispose.
172
+ */
173
+ getInstance(): Promise<BBJsApi & AsyncDisposable>;
174
+ /**
175
+ * Tear down all pooled instances. Idempotent. No-op when no pool is configured (fresh-per-call
176
+ * instances are destroyed by their own dispose callbacks). Instances currently held by an
177
+ * in-flight pooled borrow are destroyed by their dispose callback when released.
178
+ */
179
+ destroy(): Promise<void>;
180
+ private initPool;
181
+ private createInstance;
182
+ private maybeWrapDebug;
183
+ /**
184
+ * Wrap a fresh instance with an `AsyncDisposable` that destroys it on dispose. Used when no
185
+ * pool is configured. Destroy errors are propagated so that a teardown failure (e.g. a bb child
186
+ * that didn't shut down cleanly) surfaces instead of being silently swallowed.
187
+ */
188
+ private makeOwned;
189
+ /**
190
+ * Wrap a pooled instance with an `AsyncDisposable` that returns it to the pool (or destroys it
191
+ * if the factory was destroyed in the meantime). Destroy errors are propagated.
192
+ */
193
+ private makeBorrowed;
194
+ private makeDisposable;
195
+ }
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfanNfYmFja2VuZC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2JiX2pzX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBb0JsRCx5REFBeUQ7QUFDekQsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwyQ0FBMkM7SUFDM0MsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFCLGtEQUFrRDtJQUNsRCxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNoQywrQ0FBK0M7SUFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQixDQUFDO0FBRUYscUZBQXFGO0FBQ3JGLE1BQU0sV0FBVyxPQUFPO0lBQ3RCLGFBQWEsQ0FDWCxXQUFXLEVBQUUsTUFBTSxFQUNuQixRQUFRLEVBQUUsVUFBVSxFQUNwQixlQUFlLEVBQUUsVUFBVSxFQUMzQixPQUFPLEVBQUUsVUFBVSxFQUNuQixNQUFNLEVBQUUsZUFBZSxHQUN0QixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUIsV0FBVyxDQUNULFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFDekIsZUFBZSxFQUFFLFVBQVUsRUFDM0IsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQy9CLE1BQU0sRUFBRSxlQUFlLEdBQ3RCLE9BQU8sQ0FBQztRQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixDQUNkLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxFQUNwQyxlQUFlLEVBQUUsVUFBVSxHQUMxQixPQUFPLENBQUM7UUFB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bb_js_backend.d.ts","sourceRoot":"","sources":["../../src/bb/bb_js_backend.ts"],"names":[],"mappings":"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"}