@aztec/bb-prover 0.60.0 → 0.62.0

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.
@@ -1,10 +1,10 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { makeProofAndVerificationKey, makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types';
3
- import { AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, EmptyNestedData, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, TUBE_PROOF_LENGTH, VerificationKeyData, makeEmptyProof, makeEmptyRecursiveProof, makeRecursiveProof, } from '@aztec/circuits.js';
3
+ import { AVM_PROOF_LENGTH_IN_FIELDS, AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, EmptyNestedData, NESTED_RECURSIVE_PROOF_LENGTH, PrivateKernelEmptyInputs, RECURSIVE_PROOF_LENGTH, RootParityInput, TUBE_PROOF_LENGTH, VerificationKeyData, makeEmptyRecursiveProof, makeRecursiveProof, } from '@aztec/circuits.js';
4
4
  import { createDebugLogger } from '@aztec/foundation/log';
5
5
  import { sleep } from '@aztec/foundation/sleep';
6
6
  import { Timer } from '@aztec/foundation/timer';
7
- import { ProtocolCircuitVkIndexes, ProtocolCircuitVks, SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap, convertBlockRootRollupInputsToWitnessMap, convertBlockRootRollupOutputsFromWitnessMap, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, convertSimulatedPublicInnerInputsToWitnessMap, convertSimulatedPublicInnerOutputFromWitnessMap, convertSimulatedPublicMergeInputsToWitnessMap, convertSimulatedPublicMergeOutputFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, getVKSiblingPath, } from '@aztec/noir-protocol-circuits-types';
7
+ import { ProtocolCircuitVkIndexes, ProtocolCircuitVks, SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap, convertBlockRootRollupInputsToWitnessMap, convertBlockRootRollupOutputsFromWitnessMap, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap, getVKSiblingPath, } from '@aztec/noir-protocol-circuits-types';
8
8
  import { WASMSimulator, emitCircuitSimulationStats } from '@aztec/simulator';
9
9
  import { trackSpan } from '@aztec/telemetry-client';
10
10
  import { ProverInstrumentation } from '../instrumentation.js';
@@ -18,15 +18,13 @@ let TestCircuitProver = (() => {
18
18
  let _instanceExtraInitializers = [];
19
19
  let _getBaseParityProof_decorators;
20
20
  let _getRootParityProof_decorators;
21
- let _getBaseRollupProof_decorators;
21
+ let _getPrivateBaseRollupProof_decorators;
22
+ let _getPublicBaseRollupProof_decorators;
22
23
  let _getMergeRollupProof_decorators;
23
24
  let _getBlockRootRollupProof_decorators;
24
25
  let _getEmptyBlockRootRollupProof_decorators;
25
26
  let _getBlockMergeRollupProof_decorators;
26
27
  let _getRootRollupProof_decorators;
27
- let _getPublicKernelInnerProof_decorators;
28
- let _getPublicKernelMergeProof_decorators;
29
- let _getPublicTailProof_decorators;
30
28
  return _a = class TestCircuitProver {
31
29
  constructor(telemetry, simulationProvider, opts = { proverTestDelayMs: 0 }) {
32
30
  this.simulationProvider = (__runInitializers(this, _instanceExtraInitializers), simulationProvider);
@@ -41,20 +39,12 @@ let TestCircuitProver = (() => {
41
39
  async getEmptyPrivateKernelProof(inputs) {
42
40
  const emptyNested = new EmptyNestedData(makeRecursiveProof(RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['EmptyNestedArtifact'].keyAsFields);
43
41
  const kernelInputs = new PrivateKernelEmptyInputs(emptyNested, inputs.header, inputs.chainId, inputs.version, inputs.vkTreeRoot, inputs.protocolContractTreeRoot);
44
- const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
45
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact);
46
- const result = convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap(witness);
47
- await this.delay();
48
- return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['PrivateKernelEmptyArtifact']);
42
+ return await this.simulate(kernelInputs, 'PrivateKernelEmptyArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertPrivateKernelEmptyInputsToWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap);
49
43
  }
50
44
  async getEmptyTubeProof(inputs) {
51
45
  const emptyNested = new EmptyNestedData(makeRecursiveProof(RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['EmptyNestedArtifact'].keyAsFields);
52
46
  const kernelInputs = new PrivateKernelEmptyInputs(emptyNested, inputs.header, inputs.chainId, inputs.version, inputs.vkTreeRoot, inputs.protocolContractTreeRoot);
53
- const witnessMap = convertPrivateKernelEmptyInputsToWitnessMap(kernelInputs);
54
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.PrivateKernelEmptyArtifact);
55
- const result = convertPrivateKernelEmptyOutputsFromWitnessMap(witness);
56
- await this.delay();
57
- return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), VerificationKeyData.makeFakeHonk());
47
+ return await this.simulate(kernelInputs, 'EmptyNestedArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap);
58
48
  }
59
49
  /**
60
50
  * Simulates the base parity circuit from its inputs.
@@ -62,16 +52,8 @@ let TestCircuitProver = (() => {
62
52
  * @returns The public inputs of the parity circuit.
63
53
  */
64
54
  async getBaseParityProof(inputs) {
65
- const timer = new Timer();
66
- const witnessMap = convertBaseParityInputsToWitnessMap(inputs);
67
- // use WASM here as it is faster for small circuits
68
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.BaseParityArtifact);
69
- const result = convertBaseParityOutputsFromWitnessMap(witness);
70
- const rootParityInput = new RootParityInput(makeRecursiveProof(RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BaseParityArtifact'].keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['BaseParityArtifact']), result);
71
- this.instrumentation.recordDuration('simulationDuration', 'base-parity', timer);
72
- emitCircuitSimulationStats('base-parity', timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
73
- await this.delay();
74
- return Promise.resolve(rootParityInput);
55
+ const result = await this.simulate(inputs, 'BaseParityArtifact', RECURSIVE_PROOF_LENGTH, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap);
56
+ return new RootParityInput(result.proof, result.verificationKey.keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['BaseParityArtifact']), result.inputs);
75
57
  }
76
58
  /**
77
59
  * Simulates the root parity circuit from its inputs.
@@ -79,52 +61,26 @@ let TestCircuitProver = (() => {
79
61
  * @returns The public inputs of the parity circuit.
80
62
  */
81
63
  async getRootParityProof(inputs) {
82
- const timer = new Timer();
83
- const witnessMap = convertRootParityInputsToWitnessMap(inputs);
84
- // use WASM here as it is faster for small circuits
85
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.RootParityArtifact);
86
- const result = convertRootParityOutputsFromWitnessMap(witness);
87
- const rootParityInput = new RootParityInput(makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['RootParityArtifact'].keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['RootParityArtifact']), result);
88
- this.instrumentation.recordDuration('simulationDuration', 'root-parity', timer);
89
- emitCircuitSimulationStats('root-parity', timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
90
- await this.delay();
91
- return Promise.resolve(rootParityInput);
92
- }
93
- /**
94
- * Simulates the base rollup circuit from its inputs.
95
- * @param input - Inputs to the circuit.
96
- * @returns The public inputs as outputs of the simulation.
97
- */
98
- async getBaseRollupProof(input) {
99
- const timer = new Timer();
100
- const witnessMap = convertSimulatedBaseRollupInputsToWitnessMap(input);
101
- const simulationProvider = this.simulationProvider ?? this.wasmSimulator;
102
- const witness = await simulationProvider.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.BaseRollupArtifact);
103
- const result = convertSimulatedBaseRollupOutputsFromWitnessMap(witness);
104
- this.instrumentation.recordDuration('simulationDuration', 'base-rollup', timer);
105
- emitCircuitSimulationStats('base-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
106
- await this.delay();
107
- return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BaseRollupArtifact']);
64
+ const result = await this.simulate(inputs, 'RootParityArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap);
65
+ return new RootParityInput(result.proof, result.verificationKey.keyAsFields, getVKSiblingPath(ProtocolCircuitVkIndexes['RootParityArtifact']), result.inputs);
108
66
  }
109
67
  async getTubeProof(_tubeInput) {
110
68
  await this.delay();
111
69
  return makeProofAndVerificationKey(makeEmptyRecursiveProof(TUBE_PROOF_LENGTH), VerificationKeyData.makeFakeHonk());
112
70
  }
71
+ async getPrivateBaseRollupProof(inputs) {
72
+ return await this.simulate(inputs, 'PrivateBaseRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap);
73
+ }
74
+ async getPublicBaseRollupProof(inputs) {
75
+ return await this.simulate(inputs, 'PublicBaseRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap);
76
+ }
113
77
  /**
114
78
  * Simulates the merge rollup circuit from its inputs.
115
79
  * @param input - Inputs to the circuit.
116
80
  * @returns The public inputs as outputs of the simulation.
117
81
  */
118
82
  async getMergeRollupProof(input) {
119
- const timer = new Timer();
120
- const witnessMap = convertMergeRollupInputsToWitnessMap(input);
121
- // use WASM here as it is faster for small circuits
122
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.MergeRollupArtifact);
123
- const result = convertMergeRollupOutputsFromWitnessMap(witness);
124
- this.instrumentation.recordDuration('simulationDuration', 'merge-rollup', timer);
125
- emitCircuitSimulationStats('merge-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
126
- await this.delay();
127
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['MergeRollupArtifact']);
83
+ return await this.simulate(input, 'MergeRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap);
128
84
  }
129
85
  /**
130
86
  * Simulates the block root rollup circuit from its inputs.
@@ -132,14 +88,7 @@ let TestCircuitProver = (() => {
132
88
  * @returns The public inputs as outputs of the simulation.
133
89
  */
134
90
  async getBlockRootRollupProof(input) {
135
- const timer = new Timer();
136
- const witnessMap = convertBlockRootRollupInputsToWitnessMap(input);
137
- // use WASM here as it is faster for small circuits
138
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.BlockRootRollupArtifact);
139
- const result = convertBlockRootRollupOutputsFromWitnessMap(witness);
140
- this.instrumentation.recordDuration('simulationDuration', 'block-root-rollup', timer);
141
- emitCircuitSimulationStats('block-root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
142
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BlockRootRollupArtifact']);
91
+ return await this.simulate(input, 'BlockRootRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertBlockRootRollupInputsToWitnessMap, convertBlockRootRollupOutputsFromWitnessMap);
143
92
  }
144
93
  /**
145
94
  * Simulates the empty block root rollup circuit from its inputs.
@@ -147,14 +96,7 @@ let TestCircuitProver = (() => {
147
96
  * @returns The public inputs as outputs of the simulation.
148
97
  */
149
98
  async getEmptyBlockRootRollupProof(input) {
150
- const timer = new Timer();
151
- const witnessMap = convertEmptyBlockRootRollupInputsToWitnessMap(input);
152
- // use WASM here as it is faster for small circuits
153
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.EmptyBlockRootRollupArtifact);
154
- const result = convertEmptyBlockRootRollupOutputsFromWitnessMap(witness);
155
- this.instrumentation.recordDuration('simulationDuration', 'empty-block-root-rollup', timer);
156
- emitCircuitSimulationStats('empty-block-root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
157
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['EmptyBlockRootRollupArtifact']);
99
+ return await this.simulate(input, 'EmptyBlockRootRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap);
158
100
  }
159
101
  /**
160
102
  * Simulates the block merge rollup circuit from its inputs.
@@ -162,14 +104,7 @@ let TestCircuitProver = (() => {
162
104
  * @returns The public inputs as outputs of the simulation.
163
105
  */
164
106
  async getBlockMergeRollupProof(input) {
165
- const timer = new Timer();
166
- const witnessMap = convertBlockMergeRollupInputsToWitnessMap(input);
167
- // use WASM here as it is faster for small circuits
168
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.BlockMergeRollupArtifact);
169
- const result = convertBlockMergeRollupOutputsFromWitnessMap(witness);
170
- this.instrumentation.recordDuration('simulationDuration', 'block-merge-rollup', timer);
171
- emitCircuitSimulationStats('block-merge-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
172
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BlockMergeRollupArtifact']);
107
+ return await this.simulate(input, 'BlockMergeRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap);
173
108
  }
174
109
  /**
175
110
  * Simulates the root rollup circuit from its inputs.
@@ -177,59 +112,14 @@ let TestCircuitProver = (() => {
177
112
  * @returns The public inputs as outputs of the simulation.
178
113
  */
179
114
  async getRootRollupProof(input) {
180
- const timer = new Timer();
181
- const witnessMap = convertRootRollupInputsToWitnessMap(input);
182
- // use WASM here as it is faster for small circuits
183
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts.RootRollupArtifact);
184
- const result = convertRootRollupOutputsFromWitnessMap(witness);
185
- this.instrumentation.recordDuration('simulationDuration', 'root-rollup', timer);
186
- emitCircuitSimulationStats('root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
187
- await this.delay();
188
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['RootRollupArtifact']);
189
- }
190
- async getPublicKernelInnerProof(inputs) {
191
- const timer = new Timer();
192
- const artifact = 'PublicKernelInnerArtifact';
193
- const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
194
- const witnessMap = convertSimulatedPublicInnerInputsToWitnessMap(inputs);
195
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
196
- const result = convertSimulatedPublicInnerOutputFromWitnessMap(witness);
197
- this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
198
- emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
199
- await this.delay();
200
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
201
- }
202
- async getPublicKernelMergeProof(inputs) {
203
- const timer = new Timer();
204
- const artifact = 'PublicKernelMergeArtifact';
205
- const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
206
- const witnessMap = convertSimulatedPublicMergeInputsToWitnessMap(inputs);
207
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
208
- const result = convertSimulatedPublicMergeOutputFromWitnessMap(witness);
209
- this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
210
- emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
211
- await this.delay();
212
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
213
- }
214
- async getPublicTailProof(inputs) {
215
- const timer = new Timer();
216
- const artifact = 'PublicKernelTailArtifact';
217
- const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
218
- const witnessMap = convertSimulatedPublicTailInputsToWitnessMap(inputs);
219
- // use WASM here as it is faster for small circuits
220
- const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
221
- const result = convertSimulatedPublicTailOutputFromWitnessMap(witness);
222
- this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
223
- emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
224
- await this.delay();
225
- return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
115
+ return await this.simulate(input, 'RootRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap);
226
116
  }
227
117
  async getAvmProof(_inputs) {
228
118
  // We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
229
119
  // We just return an empty proof and VK data.
230
120
  this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
231
121
  await this.delay();
232
- return makeProofAndVerificationKey(makeEmptyProof(), VerificationKeyData.makeFake(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS));
122
+ return makeProofAndVerificationKey(makeEmptyRecursiveProof(AVM_PROOF_LENGTH_IN_FIELDS), VerificationKeyData.makeFake(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS));
233
123
  }
234
124
  async delay() {
235
125
  if (this.opts.proverTestDelayMs > 0) {
@@ -240,34 +130,42 @@ let TestCircuitProver = (() => {
240
130
  verifyProof(_1, _2) {
241
131
  return Promise.reject(new Error('Method not implemented.'));
242
132
  }
133
+ async simulate(input, artifactName, proofLength, convertInput, convertOutput) {
134
+ const timer = new Timer();
135
+ const witnessMap = convertInput(input);
136
+ const circuitName = mapProtocolArtifactNameToCircuitName(artifactName);
137
+ const simulationProvider = this.simulationProvider ?? this.wasmSimulator;
138
+ const witness = await simulationProvider.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifactName]);
139
+ const result = convertOutput(witness);
140
+ this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
141
+ emitCircuitSimulationStats(circuitName, timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
142
+ await this.delay();
143
+ return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(proofLength), ProtocolCircuitVks[artifactName]);
144
+ }
243
145
  },
244
146
  (() => {
245
147
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
246
148
  _getBaseParityProof_decorators = [trackSpan('TestCircuitProver.getBaseParityProof')];
247
149
  _getRootParityProof_decorators = [trackSpan('TestCircuitProver.getRootParityProof')];
248
- _getBaseRollupProof_decorators = [trackSpan('TestCircuitProver.getBaseRollupProof')];
150
+ _getPrivateBaseRollupProof_decorators = [trackSpan('TestCircuitProver.getPrivateBaseRollupProof')];
151
+ _getPublicBaseRollupProof_decorators = [trackSpan('TestCircuitProver.getPublicBaseRollupProof')];
249
152
  _getMergeRollupProof_decorators = [trackSpan('TestCircuitProver.getMergeRollupProof')];
250
153
  _getBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockRootRollupProof')];
251
154
  _getEmptyBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getEmptyBlockRootRollupProof')];
252
155
  _getBlockMergeRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockMergeRollupProof')];
253
156
  _getRootRollupProof_decorators = [trackSpan('TestCircuitProver.getRootRollupProof')];
254
- _getPublicKernelInnerProof_decorators = [trackSpan('TestCircuitProver.getPublicKernelInnerProof')];
255
- _getPublicKernelMergeProof_decorators = [trackSpan('TestCircuitProver.getPublicKernelMergeProof')];
256
- _getPublicTailProof_decorators = [trackSpan('TestCircuitProver.getPublicTailProof')];
257
157
  __esDecorate(_a, null, _getBaseParityProof_decorators, { kind: "method", name: "getBaseParityProof", static: false, private: false, access: { has: obj => "getBaseParityProof" in obj, get: obj => obj.getBaseParityProof }, metadata: _metadata }, null, _instanceExtraInitializers);
258
158
  __esDecorate(_a, null, _getRootParityProof_decorators, { kind: "method", name: "getRootParityProof", static: false, private: false, access: { has: obj => "getRootParityProof" in obj, get: obj => obj.getRootParityProof }, metadata: _metadata }, null, _instanceExtraInitializers);
259
- __esDecorate(_a, null, _getBaseRollupProof_decorators, { kind: "method", name: "getBaseRollupProof", static: false, private: false, access: { has: obj => "getBaseRollupProof" in obj, get: obj => obj.getBaseRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
159
+ __esDecorate(_a, null, _getPrivateBaseRollupProof_decorators, { kind: "method", name: "getPrivateBaseRollupProof", static: false, private: false, access: { has: obj => "getPrivateBaseRollupProof" in obj, get: obj => obj.getPrivateBaseRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
160
+ __esDecorate(_a, null, _getPublicBaseRollupProof_decorators, { kind: "method", name: "getPublicBaseRollupProof", static: false, private: false, access: { has: obj => "getPublicBaseRollupProof" in obj, get: obj => obj.getPublicBaseRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
260
161
  __esDecorate(_a, null, _getMergeRollupProof_decorators, { kind: "method", name: "getMergeRollupProof", static: false, private: false, access: { has: obj => "getMergeRollupProof" in obj, get: obj => obj.getMergeRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
261
162
  __esDecorate(_a, null, _getBlockRootRollupProof_decorators, { kind: "method", name: "getBlockRootRollupProof", static: false, private: false, access: { has: obj => "getBlockRootRollupProof" in obj, get: obj => obj.getBlockRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
262
163
  __esDecorate(_a, null, _getEmptyBlockRootRollupProof_decorators, { kind: "method", name: "getEmptyBlockRootRollupProof", static: false, private: false, access: { has: obj => "getEmptyBlockRootRollupProof" in obj, get: obj => obj.getEmptyBlockRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
263
164
  __esDecorate(_a, null, _getBlockMergeRollupProof_decorators, { kind: "method", name: "getBlockMergeRollupProof", static: false, private: false, access: { has: obj => "getBlockMergeRollupProof" in obj, get: obj => obj.getBlockMergeRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
264
165
  __esDecorate(_a, null, _getRootRollupProof_decorators, { kind: "method", name: "getRootRollupProof", static: false, private: false, access: { has: obj => "getRootRollupProof" in obj, get: obj => obj.getRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
265
- __esDecorate(_a, null, _getPublicKernelInnerProof_decorators, { kind: "method", name: "getPublicKernelInnerProof", static: false, private: false, access: { has: obj => "getPublicKernelInnerProof" in obj, get: obj => obj.getPublicKernelInnerProof }, metadata: _metadata }, null, _instanceExtraInitializers);
266
- __esDecorate(_a, null, _getPublicKernelMergeProof_decorators, { kind: "method", name: "getPublicKernelMergeProof", static: false, private: false, access: { has: obj => "getPublicKernelMergeProof" in obj, get: obj => obj.getPublicKernelMergeProof }, metadata: _metadata }, null, _instanceExtraInitializers);
267
- __esDecorate(_a, null, _getPublicTailProof_decorators, { kind: "method", name: "getPublicTailProof", static: false, private: false, access: { has: obj => "getPublicTailProof" in obj, get: obj => obj.getPublicTailProof }, metadata: _metadata }, null, _instanceExtraInitializers);
268
166
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
269
167
  })(),
270
168
  _a;
271
169
  })();
272
170
  export { TestCircuitProver };
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJTCwyQkFBMkIsRUFDM0IsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLHFDQUFxQyxFQVNyQyxlQUFlLEVBR2YsNkJBQTZCLEVBRTdCLHdCQUF3QixFQU14QixzQkFBc0IsRUFFdEIsZUFBZSxFQUlmLGlCQUFpQixFQUdqQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHlDQUF5QyxFQUN6Qyw0Q0FBNEMsRUFDNUMsd0NBQXdDLEVBQ3hDLDJDQUEyQyxFQUMzQyw2Q0FBNkMsRUFDN0MsZ0RBQWdELEVBQ2hELG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsNENBQTRDLEVBQzVDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsNkNBQTZDLEVBQzdDLCtDQUErQyxFQUMvQyw2Q0FBNkMsRUFDN0MsK0NBQStDLEVBQy9DLDRDQUE0QyxFQUM1Qyw4Q0FBOEMsRUFDOUMsZ0JBQWdCLEdBQ2pCLE1BQU0scUNBQXFDLENB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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJTCwyQkFBMkIsRUFDM0IsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixxQ0FBcUMsRUFRckMsZUFBZSxFQUdmLDZCQUE2QixFQUc3Qix3QkFBd0IsRUFHeEIsc0JBQXNCLEVBRXRCLGVBQWUsRUFJZixpQkFBaUIsRUFFakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixrQkFBa0IsR0FDbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBRWxCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHlDQUF5QyxFQUN6Qyw0Q0FBNEMsRUFDNUMsd0NBQXdDLEVBQ3hDLDJDQUEyQyxFQUMzQyw2Q0FBNkMsRUFDN0MsZ0RBQWdELEVBQ2hELG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsbURBQW1ELEVBQ25ELHNEQUFzRCxFQUN0RCx1REFBdUQsRUFDdkQsa0RBQWtELEVBQ2xELHFEQUFxRCxFQUNyRCxnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQTJCLGFBQWEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtC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
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@aztec/bb-prover",
3
- "version": "0.60.0",
3
+ "version": "0.62.0",
4
4
  "type": "module",
5
5
  "exports": {
6
- ".": "./dest/index.js"
6
+ ".": "./dest/index.js",
7
+ "./prover": "./dest/prover/index.js",
8
+ "./verifier": "./dest/verifier/index.js",
9
+ "./test": "./dest/test/index.js"
7
10
  },
8
11
  "bin": {
9
12
  "bb-cli": "./dest/bb/index.js"
@@ -62,12 +65,12 @@
62
65
  ]
63
66
  },
64
67
  "dependencies": {
65
- "@aztec/circuit-types": "0.60.0",
66
- "@aztec/circuits.js": "0.60.0",
67
- "@aztec/foundation": "0.60.0",
68
- "@aztec/noir-protocol-circuits-types": "0.60.0",
69
- "@aztec/simulator": "0.60.0",
70
- "@aztec/telemetry-client": "0.60.0",
68
+ "@aztec/circuit-types": "0.62.0",
69
+ "@aztec/circuits.js": "0.62.0",
70
+ "@aztec/foundation": "0.62.0",
71
+ "@aztec/noir-protocol-circuits-types": "0.62.0",
72
+ "@aztec/simulator": "0.62.0",
73
+ "@aztec/telemetry-client": "0.62.0",
71
74
  "@msgpack/msgpack": "^3.0.0-beta2",
72
75
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
73
76
  "@noir-lang/types": "portal:../../noir/packages/types",
package/src/bb/cli.ts CHANGED
@@ -90,6 +90,7 @@ export function getProgram(log: LogFn): Command {
90
90
  compiledCircuit,
91
91
  options.contractName,
92
92
  log,
93
+ /*force= */ true,
93
94
  );
94
95
  });
95
96
 
package/src/bb/execute.ts CHANGED
@@ -151,6 +151,7 @@ export async function generateKeyForNoirCircuit(
151
151
  const args = ['-o', `${outputPath}/${VK_FILENAME}`, '-b', bytecodePath];
152
152
  const timer = new Timer();
153
153
  let result = await executeBB(pathToBB, `write_vk_${flavor}`, args, log);
154
+
154
155
  // If we succeeded and the type of key if verification, have bb write the 'fields' version too
155
156
  if (result.status == BB_RESULT.SUCCESS) {
156
157
  const asFieldsArgs = ['-k', `${outputPath}/${VK_FILENAME}`, '-o', `${outputPath}/${VK_FIELDS_FILENAME}`, '-v'];
@@ -504,7 +505,6 @@ export async function generateAvmProof(
504
505
  }
505
506
 
506
507
  // Paths for the inputs
507
- const bytecodePath = join(workingDirectory, AVM_BYTECODE_FILENAME);
508
508
  const calldataPath = join(workingDirectory, AVM_CALLDATA_FILENAME);
509
509
  const publicInputsPath = join(workingDirectory, AVM_PUBLIC_INPUTS_FILENAME);
510
510
  const avmHintsPath = join(workingDirectory, AVM_HINTS_FILENAME);
@@ -525,10 +525,6 @@ export async function generateAvmProof(
525
525
 
526
526
  try {
527
527
  // Write the inputs to the working directory.
528
- await fs.writeFile(bytecodePath, input.bytecode);
529
- if (!filePresent(bytecodePath)) {
530
- return { status: BB_RESULT.FAILURE, reason: `Could not write bytecode at ${bytecodePath}` };
531
- }
532
528
  await fs.writeFile(
533
529
  calldataPath,
534
530
  input.calldata.map(fr => fr.toBuffer()),
@@ -553,8 +549,6 @@ export async function generateAvmProof(
553
549
  }
554
550
 
555
551
  const args = [
556
- '--avm-bytecode',
557
- bytecodePath,
558
552
  '--avm-calldata',
559
553
  calldataPath,
560
554
  '--avm-public-inputs',
@@ -376,6 +376,7 @@ export class BBNativePrivateKernelProver implements PrivateKernelProver {
376
376
  fieldsWithoutPublicInputs,
377
377
  new Proof(binaryProof, vkData.numPublicInputs),
378
378
  true,
379
+ fieldsWithoutPublicInputs.length,
379
380
  );
380
381
  return proof;
381
382
  }