@aztec/bb-prover 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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 (70) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.js +12 -11
  2. package/dest/bb/cli.js +4 -9
  3. package/dest/bb/execute.js +395 -267
  4. package/dest/bb/index.js +4 -6
  5. package/dest/config.js +1 -2
  6. package/dest/honk.js +8 -5
  7. package/dest/index.js +0 -1
  8. package/dest/instrumentation.js +44 -41
  9. package/dest/prover/bb_native_private_kernel_prover.js +19 -19
  10. package/dest/prover/bb_private_kernel_prover.js +11 -11
  11. package/dest/prover/bb_prover.js +431 -445
  12. package/dest/prover/client_ivc_proof_utils.js +15 -9
  13. package/dest/prover/index.js +0 -1
  14. package/dest/stats.js +15 -14
  15. package/dest/test/index.js +0 -1
  16. package/dest/test/test_circuit_prover.js +156 -160
  17. package/dest/test/test_verifier.js +0 -1
  18. package/dest/verification_key/verification_key_data.js +10 -8
  19. package/dest/verifier/bb_verifier.js +13 -13
  20. package/dest/verifier/index.js +0 -1
  21. package/dest/wasm/bb_wasm_private_kernel_prover.js +11 -10
  22. package/dest/wasm/bundle.js +1 -2
  23. package/dest/wasm/lazy.js +1 -2
  24. package/package.json +10 -10
  25. package/dest/avm_proving_tests/avm_proving_tester.d.ts +0 -24
  26. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +0 -1
  27. package/dest/bb/cli.d.ts +0 -12
  28. package/dest/bb/cli.d.ts.map +0 -1
  29. package/dest/bb/execute.d.ts +0 -170
  30. package/dest/bb/execute.d.ts.map +0 -1
  31. package/dest/bb/index.d.ts +0 -3
  32. package/dest/bb/index.d.ts.map +0 -1
  33. package/dest/config.d.ts +0 -13
  34. package/dest/config.d.ts.map +0 -1
  35. package/dest/honk.d.ts +0 -13
  36. package/dest/honk.d.ts.map +0 -1
  37. package/dest/index.d.ts +0 -8
  38. package/dest/index.d.ts.map +0 -1
  39. package/dest/instrumentation.d.ts +0 -47
  40. package/dest/instrumentation.d.ts.map +0 -1
  41. package/dest/prover/bb_native_private_kernel_prover.d.ts +0 -25
  42. package/dest/prover/bb_native_private_kernel_prover.d.ts.map +0 -1
  43. package/dest/prover/bb_private_kernel_prover.d.ts +0 -31
  44. package/dest/prover/bb_private_kernel_prover.d.ts.map +0 -1
  45. package/dest/prover/bb_prover.d.ts +0 -123
  46. package/dest/prover/bb_prover.d.ts.map +0 -1
  47. package/dest/prover/client_ivc_proof_utils.d.ts +0 -25
  48. package/dest/prover/client_ivc_proof_utils.d.ts.map +0 -1
  49. package/dest/prover/index.d.ts +0 -4
  50. package/dest/prover/index.d.ts.map +0 -1
  51. package/dest/stats.d.ts +0 -5
  52. package/dest/stats.d.ts.map +0 -1
  53. package/dest/test/index.d.ts +0 -3
  54. package/dest/test/index.d.ts.map +0 -1
  55. package/dest/test/test_circuit_prover.d.ts +0 -72
  56. package/dest/test/test_circuit_prover.d.ts.map +0 -1
  57. package/dest/test/test_verifier.d.ts +0 -5
  58. package/dest/test/test_verifier.d.ts.map +0 -1
  59. package/dest/verification_key/verification_key_data.d.ts +0 -9
  60. package/dest/verification_key/verification_key_data.d.ts.map +0 -1
  61. package/dest/verifier/bb_verifier.d.ts +0 -15
  62. package/dest/verifier/bb_verifier.d.ts.map +0 -1
  63. package/dest/verifier/index.d.ts +0 -2
  64. package/dest/verifier/index.d.ts.map +0 -1
  65. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +0 -16
  66. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +0 -1
  67. package/dest/wasm/bundle.d.ts +0 -6
  68. package/dest/wasm/bundle.d.ts.map +0 -1
  69. package/dest/wasm/lazy.d.ts +0 -6
  70. package/dest/wasm/lazy.d.ts.map +0 -1
package/dest/bb/index.js CHANGED
@@ -3,16 +3,14 @@ import { createConsoleLogger } from '@aztec/foundation/log';
3
3
  import 'source-map-support/register.js';
4
4
  import { getProgram } from './cli.js';
5
5
  const log = createConsoleLogger();
6
- /** CLI main entrypoint */
7
- async function main() {
8
- process.once('SIGINT', () => process.exit(0));
9
- process.once('SIGTERM', () => process.exit(0));
6
+ /** CLI main entrypoint */ async function main() {
7
+ process.once('SIGINT', ()=>process.exit(0));
8
+ process.once('SIGTERM', ()=>process.exit(0));
10
9
  const program = getProgram(log);
11
10
  await program.parseAsync(process.argv);
12
11
  }
13
- main().catch(err => {
12
+ main().catch((err)=>{
14
13
  log(`Error in command execution`);
15
14
  log(err);
16
15
  process.exit(1);
17
16
  });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV0QyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0FBRWxDLDBCQUEwQjtBQUMxQixLQUFLLFVBQVUsSUFBSTtJQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDakIsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyJ9
package/dest/config.js CHANGED
@@ -1,2 +1 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
1
+ export { };
package/dest/honk.js CHANGED
@@ -1,10 +1,14 @@
1
- const UltraKeccakHonkCircuits = ['RootRollupArtifact'];
2
- const UltraHonkCircuits = ['BaseParityArtifact', 'RootParityArtifact'];
1
+ const UltraKeccakHonkCircuits = [
2
+ 'RootRollupArtifact'
3
+ ];
4
+ const UltraHonkCircuits = [
5
+ 'BaseParityArtifact',
6
+ 'RootParityArtifact'
7
+ ];
3
8
  export function getUltraHonkFlavorForCircuit(artifact) {
4
9
  if (isUltraKeccakHonkCircuit(artifact)) {
5
10
  return 'ultra_keccak_honk';
6
- }
7
- else if (UltraHonkCircuits.includes(artifact)) {
11
+ } else if (UltraHonkCircuits.includes(artifact)) {
8
12
  return 'ultra_honk';
9
13
  }
10
14
  return 'ultra_rollup_honk';
@@ -12,4 +16,3 @@ export function getUltraHonkFlavorForCircuit(artifact) {
12
16
  function isUltraKeccakHonkCircuit(artifact) {
13
17
  return UltraKeccakHonkCircuits.includes(artifact);
14
18
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ob25rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBNkMsQ0FBQztBQUNuRyxNQUFNLGlCQUFpQixHQUFHLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQTZDLENBQUM7QUFhbkgsTUFBTSxVQUFVLDRCQUE0QixDQUFDLFFBQWdDO0lBQzNFLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUEyQyxDQUFDLEVBQUUsQ0FBQztRQUNuRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0QsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxRQUFnQztJQUNoRSxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxRQUFpRCxDQUFDLENBQUM7QUFDN0YsQ0FBQyJ9
package/dest/index.js CHANGED
@@ -4,4 +4,3 @@ export * from './verifier/index.js';
4
4
  export * from './config.js';
5
5
  export * from './bb/execute.js';
6
6
  export * from './honk.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFdBQVcsQ0FBQyJ9
@@ -1,97 +1,100 @@
1
- import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
1
+ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
2
  /**
3
3
  * Instrumentation class for Prover implementations.
4
- */
5
- export class ProverInstrumentation {
6
- constructor(telemetry, name) {
4
+ */ export class ProverInstrumentation {
5
+ simulationDuration;
6
+ witGenDuration;
7
+ provingDuration;
8
+ witGenInputSize;
9
+ witGenOutputSize;
10
+ proofSize;
11
+ circuitSize;
12
+ circuitPublicInputCount;
13
+ tracer;
14
+ constructor(telemetry, name){
7
15
  this.tracer = telemetry.getTracer(name);
8
16
  const meter = telemetry.getMeter(name);
9
17
  this.simulationDuration = meter.createHistogram(Metrics.CIRCUIT_SIMULATION_DURATION, {
10
18
  description: 'Records how long it takes to simulate a circuit',
11
19
  unit: 'ms',
12
- valueType: ValueType.INT,
20
+ valueType: ValueType.INT
13
21
  });
14
22
  this.witGenDuration = meter.createHistogram(Metrics.CIRCUIT_WITNESS_GEN_DURATION, {
15
23
  description: 'Records how long it takes to generate the partial witness for a circuit',
16
24
  unit: 'ms',
17
- valueType: ValueType.INT,
25
+ valueType: ValueType.INT
18
26
  });
19
27
  this.provingDuration = meter.createHistogram(Metrics.CIRCUIT_PROVING_DURATION, {
20
28
  unit: 'ms',
21
29
  description: 'Records how long it takes to prove a circuit',
22
- valueType: ValueType.INT,
30
+ valueType: ValueType.INT
23
31
  });
24
32
  this.witGenInputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_INPUT_SIZE, {
25
33
  unit: 'By',
26
34
  description: 'Records the size of the input to the witness generation',
27
- valueType: ValueType.INT,
35
+ valueType: ValueType.INT
28
36
  });
29
37
  this.witGenOutputSize = meter.createGauge(Metrics.CIRCUIT_WITNESS_GEN_OUTPUT_SIZE, {
30
38
  unit: 'By',
31
39
  description: 'Records the size of the output of the witness generation',
32
- valueType: ValueType.INT,
40
+ valueType: ValueType.INT
33
41
  });
34
42
  this.proofSize = meter.createGauge(Metrics.CIRCUIT_PROVING_PROOF_SIZE, {
35
43
  unit: 'By',
36
44
  description: 'Records the size of the proof generated for a circuit',
37
- valueType: ValueType.INT,
45
+ valueType: ValueType.INT
38
46
  });
39
47
  this.circuitPublicInputCount = meter.createGauge(Metrics.CIRCUIT_PUBLIC_INPUTS_COUNT, {
40
48
  description: 'Records the number of public inputs in a circuit',
41
- valueType: ValueType.INT,
49
+ valueType: ValueType.INT
42
50
  });
43
51
  this.circuitSize = meter.createGauge(Metrics.CIRCUIT_SIZE, {
44
52
  description: 'Records the size of the circuit in gates',
45
- valueType: ValueType.INT,
53
+ valueType: ValueType.INT
46
54
  });
47
55
  }
48
56
  /**
49
- * Records the duration of a circuit operation.
50
- * @param metric - The metric to record
51
- * @param circuitName - The name of the circuit
52
- * @param timerOrMS - The duration
53
- */
54
- recordDuration(metric, circuitName, timerOrMS) {
57
+ * Records the duration of a circuit operation.
58
+ * @param metric - The metric to record
59
+ * @param circuitName - The name of the circuit
60
+ * @param timerOrMS - The duration
61
+ */ recordDuration(metric, circuitName, timerOrMS) {
55
62
  const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.ms();
56
63
  this[metric].record(Math.ceil(ms), {
57
64
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
58
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
65
+ [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server'
59
66
  });
60
67
  }
61
68
  /**
62
- * Records the duration of an AVM circuit operation.
63
- * @param metric - The metric to record
64
- * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
65
- * @param timerOrMS - The duration
66
- */
67
- recordAvmDuration(metric, appCircuitName, timerOrMS) {
69
+ * Records the duration of an AVM circuit operation.
70
+ * @param metric - The metric to record
71
+ * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
72
+ * @param timerOrMS - The duration
73
+ */ recordAvmDuration(metric, appCircuitName, timerOrMS) {
68
74
  const ms = typeof timerOrMS === 'number' ? timerOrMS : timerOrMS.s();
69
75
  this[metric].record(Math.ceil(ms), {
70
- [Attributes.APP_CIRCUIT_NAME]: appCircuitName,
76
+ [Attributes.APP_CIRCUIT_NAME]: appCircuitName
71
77
  });
72
78
  }
73
79
  /**
74
- * Records the size of a circuit operation.
75
- * @param metric - Records the size of a circuit operation.
76
- * @param circuitName - The name of the circuit
77
- * @param size - The size
78
- */
79
- recordSize(metric, circuitName, size) {
80
+ * Records the size of a circuit operation.
81
+ * @param metric - Records the size of a circuit operation.
82
+ * @param circuitName - The name of the circuit
83
+ * @param size - The size
84
+ */ recordSize(metric, circuitName, size) {
80
85
  this[metric].record(Math.ceil(size), {
81
86
  [Attributes.PROTOCOL_CIRCUIT_NAME]: circuitName,
82
- [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server',
87
+ [Attributes.PROTOCOL_CIRCUIT_TYPE]: 'server'
83
88
  });
84
89
  }
85
90
  /**
86
- * Records the size of an AVM circuit operation.
87
- * @param metric - The metric to record
88
- * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
89
- * @param size - The size
90
- */
91
- recordAvmSize(metric, appCircuitName, size) {
91
+ * Records the size of an AVM circuit operation.
92
+ * @param metric - The metric to record
93
+ * @param appCircuitName - The name of the function circuit (should be a `contract:function` string)
94
+ * @param size - The size
95
+ */ recordAvmSize(metric, appCircuitName, size) {
92
96
  this[metric].record(Math.ceil(size), {
93
- [Attributes.APP_CIRCUIT_NAME]: appCircuitName,
97
+ [Attributes.APP_CIRCUIT_NAME]: appCircuitName
94
98
  });
95
99
  }
96
100
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsVUFBVSxFQUdWLE9BQU8sRUFHUCxTQUFTLEdBQ1YsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFjaEMsWUFBWSxTQUEwQixFQUFFLElBQVk7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFO1lBQ25GLFdBQVcsRUFBRSxpREFBaUQ7WUFDOUQsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUNoRixXQUFXLEVBQUUseUVBQXlFO1lBQ3RGLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUU7WUFDN0UsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsOENBQThDO1lBQzNELFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFF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
@@ -10,25 +10,26 @@ import { BBPrivateKernelProver } from './bb_private_kernel_prover.js';
10
10
  import { readFromOutputDirectory } from './client_ivc_proof_utils.js';
11
11
  /**
12
12
  * This proof creator implementation uses the native bb binary.
13
- */
14
- export class BBNativePrivateKernelProver extends BBPrivateKernelProver {
15
- constructor(bbBinaryPath, bbWorkingDirectory, skipCleanup, simulationProvider, log = createLogger('bb-prover:native')) {
16
- super(new BundleArtifactProvider(), simulationProvider, log);
17
- this.bbBinaryPath = bbBinaryPath;
18
- this.bbWorkingDirectory = bbWorkingDirectory;
19
- this.skipCleanup = skipCleanup;
20
- this.simulationProvider = simulationProvider;
21
- this.log = log;
13
+ */ export class BBNativePrivateKernelProver extends BBPrivateKernelProver {
14
+ bbBinaryPath;
15
+ bbWorkingDirectory;
16
+ skipCleanup;
17
+ simulationProvider;
18
+ log;
19
+ constructor(bbBinaryPath, bbWorkingDirectory, skipCleanup, simulationProvider, log = createLogger('bb-prover:native')){
20
+ super(new BundleArtifactProvider(), simulationProvider, log), this.bbBinaryPath = bbBinaryPath, this.bbWorkingDirectory = bbWorkingDirectory, this.skipCleanup = skipCleanup, this.simulationProvider = simulationProvider, this.log = log;
22
21
  }
23
22
  static async new(config, simulationProvider, log) {
24
- await fs.mkdir(config.bbWorkingDirectory, { recursive: true });
23
+ await fs.mkdir(config.bbWorkingDirectory, {
24
+ recursive: true
25
+ });
25
26
  return new BBNativePrivateKernelProver(config.bbBinaryPath, config.bbWorkingDirectory, !!config.bbSkipCleanup, simulationProvider, log);
26
27
  }
27
28
  async _createClientIvcProof(directory, acirs, witnessStack) {
28
29
  // TODO(#7371): Longer term we won't use this hacked together msgpack format
29
30
  // and instead properly create the bincode serialization from rust
30
31
  await fs.writeFile(path.join(directory, 'acir.msgpack'), encode(acirs));
31
- await fs.writeFile(path.join(directory, 'witnesses.msgpack'), encode(witnessStack.map(map => serializeWitness(map))));
32
+ await fs.writeFile(path.join(directory, 'witnesses.msgpack'), encode(witnessStack.map((map)=>serializeWitness(map))));
32
33
  const provingResult = await executeBbClientIvcProof(this.bbBinaryPath, directory, path.join(directory, 'acir.msgpack'), path.join(directory, 'witnesses.msgpack'), this.log.info);
33
34
  if (provingResult.status === BB_RESULT.FAILURE) {
34
35
  this.log.error(`Failed to generate client ivc proof`);
@@ -37,19 +38,19 @@ export class BBNativePrivateKernelProver extends BBPrivateKernelProver {
37
38
  const proof = await readFromOutputDirectory(directory);
38
39
  this.log.info(`Generated IVC proof`, {
39
40
  duration: provingResult.durationMs,
40
- eventName: 'circuit-proving',
41
+ eventName: 'circuit-proving'
41
42
  });
42
43
  return proof;
43
44
  }
44
45
  async createClientIvcProof(acirs, witnessStack) {
45
46
  this.log.info(`Generating Client IVC proof`);
46
- const operation = async (directory) => {
47
+ const operation = async (directory)=>{
47
48
  return await this._createClientIvcProof(directory, acirs, witnessStack);
48
49
  };
49
50
  return await this.runInDirectory(operation);
50
51
  }
51
52
  async computeGateCountForCircuit(bytecode, circuitName) {
52
- const logFunction = (message) => {
53
+ const logFunction = (message)=>{
53
54
  this.log.debug(`$bb gates ${circuitName} - ${message}`);
54
55
  };
55
56
  const result = await computeGateCountForCircuit(this.bbBinaryPath, this.bbWorkingDirectory, circuitName, bytecode, 'mega_honk', logFunction);
@@ -60,10 +61,9 @@ export class BBNativePrivateKernelProver extends BBPrivateKernelProver {
60
61
  }
61
62
  runInDirectory(fn) {
62
63
  const log = this.log;
63
- return runInDirectory(this.bbWorkingDirectory, (dir) => fn(dir).catch(err => {
64
- log.error(`Error running operation at ${dir}: ${err}`);
65
- throw err;
66
- }), this.skipCleanup);
64
+ return runInDirectory(this.bbWorkingDirectory, (dir)=>fn(dir).catch((err)=>{
65
+ log.error(`Error running operation at ${dir}: ${err}`);
66
+ throw err;
67
+ }), this.skipCleanup);
67
68
  }
68
69
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfbmF0aXZlX3ByaXZhdGVfa2VybmVsX3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXIvYmJfbmF0aXZlX3ByaXZhdGVfa2VybmVsX3Byb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRzNGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHFCQUFxQjtJQUNwRSxZQUNVLFlBQW9CLEVBQ3BCLGtCQUEwQixFQUMxQixXQUFvQixFQUNULGtCQUFzQyxFQUN0QyxNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztRQUV6RCxLQUFLLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBTnJELGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FB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
@@ -1,10 +1,13 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { Timer } from '@aztec/foundation/timer';
3
- import { convertPrivateKernelInitInputsToWitnessMapWithAbi, convertPrivateKernelInitOutputsFromWitnessMapWithAbi, convertPrivateKernelInnerInputsToWitnessMapWithAbi, convertPrivateKernelInnerOutputsFromWitnessMapWithAbi, convertPrivateKernelResetInputsToWitnessMapWithAbi, convertPrivateKernelResetOutputsFromWitnessMapWithAbi, convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi, convertPrivateKernelTailInputsToWitnessMapWithAbi, convertPrivateKernelTailOutputsFromWitnessMapWithAbi, convertPrivateKernelTailToPublicInputsToWitnessMapWithAbi, getPrivateKernelResetArtifactName, updateResetCircuitSampleInputs, } from '@aztec/noir-protocol-circuits-types/client';
3
+ import { convertPrivateKernelInitInputsToWitnessMapWithAbi, convertPrivateKernelInitOutputsFromWitnessMapWithAbi, convertPrivateKernelInnerInputsToWitnessMapWithAbi, convertPrivateKernelInnerOutputsFromWitnessMapWithAbi, convertPrivateKernelResetInputsToWitnessMapWithAbi, convertPrivateKernelResetOutputsFromWitnessMapWithAbi, convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi, convertPrivateKernelTailInputsToWitnessMapWithAbi, convertPrivateKernelTailOutputsFromWitnessMapWithAbi, convertPrivateKernelTailToPublicInputsToWitnessMapWithAbi, getPrivateKernelResetArtifactName, updateResetCircuitSampleInputs } from '@aztec/noir-protocol-circuits-types/client';
4
4
  import { ClientCircuitVks } from '@aztec/noir-protocol-circuits-types/vks';
5
5
  import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
6
6
  export class BBPrivateKernelProver {
7
- constructor(artifactProvider, simulationProvider, log = createLogger('bb-prover')) {
7
+ artifactProvider;
8
+ simulationProvider;
9
+ log;
10
+ constructor(artifactProvider, simulationProvider, log = createLogger('bb-prover')){
8
11
  this.artifactProvider = artifactProvider;
9
12
  this.simulationProvider = simulationProvider;
10
13
  this.log = log;
@@ -48,12 +51,10 @@ export class BBPrivateKernelProver {
48
51
  const compiledCircuit = await this.artifactProvider.getSimulatedClientCircuitArtifactByName(circuitType);
49
52
  const witnessMap = convertInputs(inputs, compiledCircuit.abi);
50
53
  const timer = new Timer();
51
- const outputWitness = await this.simulationProvider
52
- .executeProtocolCircuit(witnessMap, compiledCircuit)
53
- .catch((err) => {
54
+ const outputWitness = await this.simulationProvider.executeProtocolCircuit(witnessMap, compiledCircuit).catch((err)=>{
54
55
  this.log.debug(`Failed to simulate ${circuitType}`, {
55
56
  circuitName: mapProtocolArtifactNameToCircuitName(circuitType),
56
- error: err,
57
+ error: err
57
58
  });
58
59
  throw err;
59
60
  });
@@ -63,7 +64,7 @@ export class BBPrivateKernelProver {
63
64
  circuitName: mapProtocolArtifactNameToCircuitName(circuitType),
64
65
  duration: timer.ms(),
65
66
  inputSize: inputs.toBuffer().length,
66
- outputSize: output.toBuffer().length,
67
+ outputSize: output.toBuffer().length
67
68
  });
68
69
  return this.makeEmptyKernelSimulateOutput(output, circuitType);
69
70
  }
@@ -79,7 +80,7 @@ export class BBPrivateKernelProver {
79
80
  circuitName: mapProtocolArtifactNameToCircuitName(circuitType),
80
81
  duration: timer.ms(),
81
82
  inputSize: inputs.toBuffer().length,
82
- outputSize: output.toBuffer().length,
83
+ outputSize: output.toBuffer().length
83
84
  });
84
85
  const verificationKey = ClientCircuitVks[circuitType].keyAsFields;
85
86
  const bytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
@@ -87,7 +88,7 @@ export class BBPrivateKernelProver {
87
88
  publicInputs: output,
88
89
  verificationKey,
89
90
  outputWitness,
90
- bytecode,
91
+ bytecode
91
92
  };
92
93
  return kernelOutput;
93
94
  }
@@ -96,7 +97,7 @@ export class BBPrivateKernelProver {
96
97
  publicInputs,
97
98
  verificationKey: ClientCircuitVks[circuitType].keyAsFields,
98
99
  outputWitness: new Map(),
99
- bytecode: Buffer.from([]),
100
+ bytecode: Buffer.from([])
100
101
  };
101
102
  return kernelProofOutput;
102
103
  }
@@ -107,4 +108,3 @@ export class BBPrivateKernelProver {
107
108
  throw new Error('Not implemented');
108
109
  }
109
110
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfcHJpdmF0ZV9rZXJuZWxfcHJvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zlci9iYl9wcml2YXRlX2tlcm5lbF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsaURBQWlELEVBQ2pELG9EQUFvRCxFQUNwRCxrREFBa0QsRUFDbEQscURBQXFELEVBQ3JELGtEQUFrRCxFQUNsRCxxREFBcUQsRUFDckQsNkRBQTZELEVBQzdELGlEQUFpRCxFQUNqRCxvREFBb0QsRUFDcEQseURBQXlELEVBQ3pELGlDQUFpQyxFQUNqQyw4QkFBOEIsR0FDL0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU0zRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsTUFBTSxPQUFnQixxQkFBcUI7SUFDekMsWUFDWSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUYvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7SUFDeEMsQ0FBQztJQUVHLEtBQUssQ0FBQyxrQkFBa0IsQ0FDN0IsTUFBNkM7UUFFN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FDckMsTUFBTSxFQUNOLDJCQUEyQixFQUMzQixpREFBaUQsRUFDakQsb0RBQW9ELENBQ3JELENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FDdkIsTUFBNkM7UUFFN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxxQkFBcUIs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