@aztec/bb-prover 0.55.0 → 0.56.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.
- package/dest/honk.d.ts +1 -1
- package/dest/honk.d.ts.map +1 -1
- package/dest/honk.js +5 -2
- package/dest/index.d.ts +1 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/prover/bb_prover.d.ts +19 -5
- package/dest/prover/bb_prover.d.ts.map +1 -1
- package/dest/prover/bb_prover.js +50 -26
- package/dest/stats.d.ts +0 -1
- package/dest/stats.d.ts.map +1 -1
- package/dest/stats.js +7 -8
- package/dest/test/index.d.ts +1 -0
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +2 -1
- package/dest/test/test_avm.d.ts +4 -0
- package/dest/test/test_avm.d.ts.map +1 -0
- package/dest/test/test_avm.js +33 -0
- package/dest/test/test_circuit_prover.d.ts +6 -4
- package/dest/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/test/test_circuit_prover.js +40 -24
- package/package.json +8 -7
- package/src/honk.ts +4 -1
- package/src/index.ts +2 -0
- package/src/prover/bb_prover.ts +86 -35
- package/src/stats.ts +6 -8
- package/src/test/index.ts +1 -0
- package/src/test/test_avm.ts +85 -0
- package/src/test/test_circuit_prover.ts +66 -30
- package/dest/mappings/mappings.d.ts +0 -13
- package/dest/mappings/mappings.d.ts.map +0 -1
- package/dest/mappings/mappings.js +0 -41
- package/src/mappings/mappings.ts +0 -67
|
@@ -4,12 +4,11 @@ import { AvmVerificationKeyData, EmptyNestedData, NESTED_RECURSIVE_PROOF_LENGTH,
|
|
|
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, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, getVKSiblingPath, } from '@aztec/noir-protocol-circuits-types';
|
|
7
|
+
import { ProtocolCircuitVkIndexes, ProtocolCircuitVks, SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap, convertBlockRootRollupInputsToWitnessMap, convertBlockRootRollupOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertPrivateKernelEmptyInputsToWitnessMap, convertPrivateKernelEmptyOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBaseRollupInputsToWitnessMap, convertSimulatedBaseRollupOutputsFromWitnessMap, convertSimulatedPrivateKernelEmptyOutputsFromWitnessMap, convertSimulatedPublicInnerInputsToWitnessMap, convertSimulatedPublicInnerOutputFromWitnessMap, convertSimulatedPublicMergeInputsToWitnessMap, convertSimulatedPublicMergeOutputFromWitnessMap, convertSimulatedPublicTailInputsToWitnessMap, convertSimulatedPublicTailOutputFromWitnessMap, 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';
|
|
11
|
-
import {
|
|
12
|
-
import { mapPublicKernelToCircuitName } from '../stats.js';
|
|
11
|
+
import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
|
|
13
12
|
/**
|
|
14
13
|
* A class for use in testing situations (e2e, unit test, etc) and temporarily for assembling a block in the sequencer.
|
|
15
14
|
* Simulates circuits using the most efficient method and performs no proving.
|
|
@@ -24,7 +23,8 @@ let TestCircuitProver = (() => {
|
|
|
24
23
|
let _getBlockRootRollupProof_decorators;
|
|
25
24
|
let _getBlockMergeRollupProof_decorators;
|
|
26
25
|
let _getRootRollupProof_decorators;
|
|
27
|
-
let
|
|
26
|
+
let _getPublicKernelInnerProof_decorators;
|
|
27
|
+
let _getPublicKernelMergeProof_decorators;
|
|
28
28
|
let _getPublicTailProof_decorators;
|
|
29
29
|
return _a = class TestCircuitProver {
|
|
30
30
|
constructor(telemetry, simulationProvider, opts = { proverTestDelayMs: 0 }) {
|
|
@@ -143,6 +143,9 @@ let TestCircuitProver = (() => {
|
|
|
143
143
|
emitCircuitSimulationStats('block-root-rollup', timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
|
|
144
144
|
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['BlockRootRollupArtifact']);
|
|
145
145
|
}
|
|
146
|
+
getBlockRootRollupFinalProof(input) {
|
|
147
|
+
return this.getBlockRootRollupProof(input);
|
|
148
|
+
}
|
|
146
149
|
/**
|
|
147
150
|
* Simulates the block merge rollup circuit from its inputs.
|
|
148
151
|
* @param input - Inputs to the circuit.
|
|
@@ -174,31 +177,42 @@ let TestCircuitProver = (() => {
|
|
|
174
177
|
await this.delay();
|
|
175
178
|
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks['RootRollupArtifact']);
|
|
176
179
|
}
|
|
177
|
-
async
|
|
180
|
+
async getPublicKernelInnerProof(inputs) {
|
|
178
181
|
const timer = new Timer();
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
184
|
-
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[kernelOps.artifact]);
|
|
185
|
-
const result = kernelOps.convertOutputs(witness);
|
|
186
|
-
const circuitName = mapPublicKernelToCircuitName(kernelRequest.type);
|
|
182
|
+
const artifact = 'PublicKernelInnerArtifact';
|
|
183
|
+
const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
|
|
184
|
+
const witnessMap = convertSimulatedPublicInnerInputsToWitnessMap(inputs);
|
|
185
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
|
|
186
|
+
const result = convertSimulatedPublicInnerOutputFromWitnessMap(witness);
|
|
187
187
|
this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
|
|
188
|
-
emitCircuitSimulationStats(circuitName, timer.ms(),
|
|
188
|
+
emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
|
|
189
189
|
await this.delay();
|
|
190
|
-
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[
|
|
190
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
|
|
191
191
|
}
|
|
192
|
-
async
|
|
192
|
+
async getPublicKernelMergeProof(inputs) {
|
|
193
193
|
const timer = new Timer();
|
|
194
|
-
const
|
|
194
|
+
const artifact = 'PublicKernelMergeArtifact';
|
|
195
|
+
const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
|
|
196
|
+
const witnessMap = convertSimulatedPublicMergeInputsToWitnessMap(inputs);
|
|
197
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
|
|
198
|
+
const result = convertSimulatedPublicMergeOutputFromWitnessMap(witness);
|
|
199
|
+
this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
|
|
200
|
+
emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
|
|
201
|
+
await this.delay();
|
|
202
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
|
|
203
|
+
}
|
|
204
|
+
async getPublicTailProof(inputs) {
|
|
205
|
+
const timer = new Timer();
|
|
206
|
+
const artifact = 'PublicKernelTailArtifact';
|
|
207
|
+
const circuitName = mapProtocolArtifactNameToCircuitName(artifact);
|
|
208
|
+
const witnessMap = convertSimulatedPublicTailInputsToWitnessMap(inputs);
|
|
195
209
|
// use WASM here as it is faster for small circuits
|
|
196
|
-
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[
|
|
210
|
+
const witness = await this.wasmSimulator.simulateCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifact]);
|
|
197
211
|
const result = convertSimulatedPublicTailOutputFromWitnessMap(witness);
|
|
198
|
-
this.instrumentation.recordDuration('simulationDuration',
|
|
199
|
-
emitCircuitSimulationStats(
|
|
212
|
+
this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
|
|
213
|
+
emitCircuitSimulationStats(circuitName, timer.ms(), inputs.toBuffer().length, result.toBuffer().length, this.logger);
|
|
200
214
|
await this.delay();
|
|
201
|
-
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[
|
|
215
|
+
return makePublicInputsAndRecursiveProof(result, makeEmptyRecursiveProof(NESTED_RECURSIVE_PROOF_LENGTH), ProtocolCircuitVks[artifact]);
|
|
202
216
|
}
|
|
203
217
|
async getAvmProof(_inputs) {
|
|
204
218
|
// We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
|
|
@@ -226,7 +240,8 @@ let TestCircuitProver = (() => {
|
|
|
226
240
|
_getBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockRootRollupProof')];
|
|
227
241
|
_getBlockMergeRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockMergeRollupProof')];
|
|
228
242
|
_getRootRollupProof_decorators = [trackSpan('TestCircuitProver.getRootRollupProof')];
|
|
229
|
-
|
|
243
|
+
_getPublicKernelInnerProof_decorators = [trackSpan('TestCircuitProver.getPublicKernelInnerProof')];
|
|
244
|
+
_getPublicKernelMergeProof_decorators = [trackSpan('TestCircuitProver.getPublicKernelMergeProof')];
|
|
230
245
|
_getPublicTailProof_decorators = [trackSpan('TestCircuitProver.getPublicTailProof')];
|
|
231
246
|
__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);
|
|
232
247
|
__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);
|
|
@@ -235,11 +250,12 @@ let TestCircuitProver = (() => {
|
|
|
235
250
|
__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);
|
|
236
251
|
__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);
|
|
237
252
|
__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);
|
|
238
|
-
__esDecorate(_a, null,
|
|
253
|
+
__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);
|
|
254
|
+
__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);
|
|
239
255
|
__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);
|
|
240
256
|
if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
241
257
|
})(),
|
|
242
258
|
_a;
|
|
243
259
|
})();
|
|
244
260
|
export { TestCircuitProver };
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFNTCxpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsc0JBQXNCLEVBT3RCLGVBQWUsRUFHZiw2QkFBNkIsRUFFN0Isd0JBQXdCLEVBR3hCLHNCQUFzQixFQUV0QixlQUFlLEVBSWYsaUJBQWlCLEVBRWpCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFFbEIsK0JBQStCLEVBQy9CLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMseUNBQXlDLEVBQ3pDLDRDQUE0QyxFQUM1Qyx3Q0FBd0MsRUFDeEMsMkNBQTJDLEVBQzNDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsNENBQTRDLEVBQzVDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsNENBQTRDLEVBQzVDLDhDQUE4QyxFQUM5QyxnQkFBZ0IsR0FDakIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQTJCLGFBQWEsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RHLE9BQU8sRUFBd0IsU0FBUyxFQUFFLE1BQU0s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
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJTCxpQ0FBaUMsR0FDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsc0JBQXNCLEVBT3RCLGVBQWUsRUFHZiw2QkFBNkIsRUFFN0Isd0JBQXdCLEVBTXhCLHNCQUFzQixFQUV0QixlQUFlLEVBSWYsaUJBQWlCLEVBR2pCLG1CQUFtQixFQUNuQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLGtCQUFrQixHQUNuQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFFbEIsK0JBQStCLEVBQy9CLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMseUNBQXlDLEVBQ3pDLDRDQUE0QyxFQUM1Qyx3Q0FBd0MsRUFDeEMsMkNBQTJDLEVBQzNDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsRUFDdkMsMkNBQTJDLEVBQzNDLDhDQUE4QyxFQUM5QyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsNENBQTRDLEVBQzVDLCtDQUErQyxFQUMvQyx1REFBdUQsRUFDdkQsNkNBQTZDLEVBQzdDLCtDQUErQyxFQUMvQyw2Q0FBNkMsRUFDN0MsK0NBQStDLEVBQy9DLDRDQUE0QyxFQUM1Qyw4Q0FBOEMsRUFDOUMsZ0JBQWdCLEdBQ2pCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUEyQixhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRTs7O0dBR0c7SUFDVSxpQkFBaUI7Ozs7Ozs7Ozs7Ozs7c0JBQWpCLGlCQUFpQjtZQUs1QixZQUNFLFNBQTBCLEVBQ2xCLGtCQUF1QyxFQUN2QyxPQUFzQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRTtnQkFEOUQsdUJBQWtCLElBUGpCLG1EQUFpQixFQU9sQixrQkFBa0IsRUFBcUI7Z0JBQ3ZDLFNBQUksR0FBSixJQUFJLENBQTBEO2dCQVBoRSxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBRXBDLFdBQU0sR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQU90RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkscUJBQXFCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUVELElBQUksTUFBTTtnQkFDUixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQ3JDLENBQUM7WUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQ3JDLE1BQW1DO2dCQUVuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FDckMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsRUFDMUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQ3RELENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBd0IsQ0FDL0MsV0FBVyxFQUNYLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE9BQU8sRUFDZCxNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUM7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsMkNBQTJDLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQywwQkFBMEIsQ0FDM0QsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyx1REFBdUQsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNqRCxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUNqRCxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsTUFBbUM7Z0JBRW5DLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUNyQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUMxQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFdBQVcsQ0FDdEQsQ0FBQztnQkFDRixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUF3QixDQUMvQyxXQUFXLEVBQ1gsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztnQkFDRixNQUFNLFVBQVUsR0FBRywyQ0FBMkMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLDBCQUEwQixDQUMzRCxDQUFDO2dCQUNGLE1BQU0sTUFBTSxHQUFHLDhDQUE4QyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxpQ0FBaUMsQ0FDdEMsTUFBTSxFQUNOLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLEVBQ2pELG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUMvQixDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBd0I7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUvRCxtREFBbUQ7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxrQkFBa0IsQ0FDbkQsQ0FBQztnQkFDRixNQUFNLE1BQU0sR0FBRyxzQ0FBc0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFL0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQ3pDLGtCQUFrQixDQUFnQyxzQkFBc0IsQ0FBQyxFQUN6RSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsRUFDcEQsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUNoRSxNQUFNLENBQ1AsQ0FBQztnQkFFRixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRWhGLDBCQUEwQixDQUN4QixhQUFhLEVBQ2IsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUNWLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFFRDs7OztlQUlHO1lBRUksS0FBSyxDQUFDLGtCQUFrQixDQUM3QixNQUF3QjtnQkFFeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxVQUFVLEdBQUcsbUNBQW1DLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRS9ELG1EQUFtRDtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLGtCQUFrQixDQUNuRCxDQUFDO2dCQUVGLE1BQU0sTUFBTSxHQUFHLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUUvRCxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDekMsa0JBQWtCLENBQXVDLDZCQUE2QixDQUFDLEVBQ3ZGLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxFQUNwRCxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQ2hFLE1BQU0sQ0FDUCxDQUFDO2dCQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEYsMEJBQTBCLENBQ3hCLGFBQWEsRUFDYixLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLEtBQXVCO2dCQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxrQkFBa0IsQ0FDbkQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRywrQ0FBK0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoRiwwQkFBMEIsQ0FDeEIsYUFBYSxFQUNiLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTixrQkFBa0IsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNqRCxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUN6QyxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxZQUFZLENBQ3ZCLFVBQXNCO2dCQUV0QixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztvQkFDTCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsaUJBQWlCLENBQUM7aUJBQ3RELENBQUM7WUFDSixDQUFDO1lBRUQ7Ozs7ZUFJRztZQUVJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsS0FBd0I7Z0JBRXhCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUUvRCxtREFBbUQ7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyxtQkFBbUIsQ0FDcEQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyx1Q0FBdUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRiwwQkFBMEIsQ0FDeEIsY0FBYyxFQUNkLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTix1QkFBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxFQUN0RCxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMxQyxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsdUJBQXVCLENBQ2xDLEtBQTRCO2dCQUU1QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyx3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbkUsbURBQW1EO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUN0RCxVQUFVLEVBQ1YsK0JBQStCLENBQUMsdUJBQXVCLENBQ3hELENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsMkNBQTJDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0RiwwQkFBMEIsQ0FDeEIsbUJBQW1CLEVBQ25CLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsT0FBTyxpQ0FBaUMsQ0FDdEMsTUFBTSxFQUNOLHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLEVBQ3RELGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLENBQzlDLENBQUM7WUFDSixDQUFDO1lBRU0sNEJBQTRCLENBQ2pDLEtBQTRCO2dCQUU1QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBRUQ7Ozs7ZUFJRztZQUVJLEtBQUssQ0FBQyx3QkFBd0IsQ0FDbkMsS0FBNkI7Z0JBRTdCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLHlDQUF5QyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVwRSxtREFBbUQ7Z0JBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ3RELFVBQVUsRUFDViwrQkFBK0IsQ0FBQyx3QkFBd0IsQ0FDekQsQ0FBQztnQkFFRixNQUFNLE1BQU0sR0FBRyw0Q0FBNEMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZGLDBCQUEwQixDQUN4QixvQkFBb0IsRUFDcEIsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUNWLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztnQkFDRixPQUFPLGlDQUFpQyxDQUN0QyxNQUFNLEVBQ04sdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsRUFDdEQsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FDL0MsQ0FBQztZQUNKLENBQUM7WUFFRDs7OztlQUlHO1lBRUksS0FBSyxDQUFDLGtCQUFrQixDQUM3QixLQUF1QjtnQkFFdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxVQUFVLEdBQUcsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTlELG1EQUFtRDtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FDdEQsVUFBVSxFQUNWLCtCQUErQixDQUFDLGtCQUFrQixDQUNuRCxDQUFDO2dCQUVGLE1BQU0sTUFBTSxHQUFHLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUUvRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hGLDBCQUEwQixDQUN4QixhQUFhLEVBQ2IsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUNWLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxpQ0FBaUMsQ0FDdEMsTUFBTSxFQUNOLHVCQUF1QixDQUFDLDZCQUE2QixDQUFDLEVBQ3RELGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQ3pDLENBQUM7WUFDSixDQUFDO1lBR00sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxNQUE2QztnQkFFN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFFMUIsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUM7Z0JBQzdDLE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuRSxNQUFNLFVBQVUsR0FBRyw2Q0FBNkMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsK0JBQStCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFFaEgsTUFBTSxNQUFNLEdBQUcsK0NBQStDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUUsMEJBQTBCLENBQ3hCLFdBQVcsRUFDWCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLGlDQUFpQyxDQUN0QyxNQUFNLEVBQ04sdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsRUFDdEQsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQzdCLENBQUM7WUFDSixDQUFDO1lBR00sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxNQUF3QztnQkFFeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFFMUIsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUM7Z0JBQzdDLE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuRSxNQUFNLFVBQVUsR0FBRyw2Q0FBNkMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsK0JBQStCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFFaEgsTUFBTSxNQUFNLEdBQUcsK0NBQStDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUUsMEJBQTBCLENBQ3hCLFdBQVcsRUFDWCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQ1YsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLGlDQUFpQyxDQUN0QyxNQUFNLEVBQ04sdUJBQXVCLENBQUMsNkJBQTZCLENBQUMsRUFDdEQsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQzdCLENBQUM7WUFDSixDQUFDO1lBR00sS0FBSyxDQUFDLGtCQUFrQixDQUM3QixNQUE0QztnQkFFNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFFMUIsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLENBQUM7Z0JBQzVDLE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuRSxNQUFNLFVBQVUsR0FBRyw0Q0FBNEMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEUsbURBQW1EO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSwrQkFBK0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUVoSCxNQUFNLE1BQU0sR0FBRyw4Q0FBOEMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5RSwwQkFBMEIsQ0FDeEIsV0FBVyxFQUNYLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFDVixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUN4QixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQ3RDLE1BQU0sRUFDTix1QkFBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxFQUN0RCxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FDN0IsQ0FBQztZQUNKLENBQUM7WUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXlCO2dCQUNoRCx1RkFBdUY7Z0JBQ3ZGLDZDQUE2QztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDekYsQ0FBQztZQUVPLEtBQUssQ0FBQyxLQUFLO2dCQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFFRCxvQ0FBb0M7WUFDN0IsV0FBVyxDQUFDLEVBQTBCLEVBQUUsRUFBUztnQkFDdEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDOzs7OzhDQWxYQSxTQUFTLENBQUMsc0NBQXNDLENBQUM7OENBcUNqRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7OENBdUNqRCxTQUFTLENBQUMsc0NBQXNDLENBQUM7K0NBOENqRCxTQUFTLENBQUMsdUNBQXVDLENBQUM7bURBb0NsRCxTQUFTLENBQUMsMkNBQTJDLENBQUM7b0RBeUN0RCxTQUFTLENBQUMsNENBQTRDLENBQUM7OENBbUN2RCxTQUFTLENBQUMsc0NBQXNDLENBQUM7cURBK0JqRCxTQUFTLENBQUMsNkNBQTZDLENBQUM7cURBNkJ4RCxTQUFTLENBQUMsNkNBQTZDLENBQUM7OENBNkJ4RCxTQUFTLENBQUMsc0NBQXNDLENBQUM7WUFsVWxELHVNQUFhLGtCQUFrQiw2REE2QjlCO1lBUUQsdU1BQWEsa0JBQWtCLDZEQStCOUI7WUFRRCx1TUFBYSxrQkFBa0IsNkRBNEI5QjtZQWtCRCwwTUFBYSxtQkFBbUIsNkRBNEIvQjtZQVFELHNOQUFhLHVCQUF1Qiw2REEyQm5DO1lBY0QseU5BQWEsd0JBQXdCLDZEQTJCcEM7WUFRRCx1TUFBYSxrQkFBa0IsNkRBNEI5QjtZQUdELDROQUFhLHlCQUF5Qiw2REEwQnJDO1lBR0QsNE5BQWEseUJBQXlCLDZEQTBCckM7WUFHRCx1TUFBYSxrQkFBa0IsNkRBMkI5Qjs7Ozs7U0E3YVUsaUJBQWlCIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/bb-prover",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.56.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js"
|
|
@@ -59,12 +59,12 @@
|
|
|
59
59
|
]
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@aztec/circuit-types": "0.
|
|
63
|
-
"@aztec/circuits.js": "0.
|
|
64
|
-
"@aztec/foundation": "0.
|
|
65
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
66
|
-
"@aztec/simulator": "0.
|
|
67
|
-
"@aztec/telemetry-client": "0.
|
|
62
|
+
"@aztec/circuit-types": "0.56.0",
|
|
63
|
+
"@aztec/circuits.js": "0.56.0",
|
|
64
|
+
"@aztec/foundation": "0.56.0",
|
|
65
|
+
"@aztec/noir-protocol-circuits-types": "0.56.0",
|
|
66
|
+
"@aztec/simulator": "0.56.0",
|
|
67
|
+
"@aztec/telemetry-client": "0.56.0",
|
|
68
68
|
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
69
69
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
70
70
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@aztec/ethereum": "workspace:^",
|
|
77
|
+
"@aztec/types": "workspace:^",
|
|
77
78
|
"@jest/globals": "^29.5.0",
|
|
78
79
|
"@types/jest": "^29.5.0",
|
|
79
80
|
"@types/memdown": "^3.0.0",
|
package/src/honk.ts
CHANGED
|
@@ -2,7 +2,10 @@ import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
|
2
2
|
|
|
3
3
|
export type UltraHonkFlavor = 'ultra_honk' | 'ultra_keccak_honk';
|
|
4
4
|
|
|
5
|
-
const UltraKeccakHonkCircuits = [
|
|
5
|
+
const UltraKeccakHonkCircuits = [
|
|
6
|
+
'BlockRootRollupFinalArtifact',
|
|
7
|
+
'RootRollupArtifact',
|
|
8
|
+
] as const satisfies ProtocolArtifact[];
|
|
6
9
|
type UltraKeccakHonkCircuits = (typeof UltraKeccakHonkCircuits)[number];
|
|
7
10
|
type UltraHonkCircuits = Exclude<ProtocolArtifact, UltraKeccakHonkCircuits>;
|
|
8
11
|
|
package/src/index.ts
CHANGED
package/src/prover/bb_prover.ts
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
import {
|
|
3
3
|
type AvmProofAndVerificationKey,
|
|
4
4
|
type PublicInputsAndRecursiveProof,
|
|
5
|
-
type PublicKernelNonTailRequest,
|
|
6
|
-
type PublicKernelTailRequest,
|
|
7
5
|
type ServerCircuitProver,
|
|
8
6
|
makePublicInputsAndRecursiveProof,
|
|
9
7
|
} from '@aztec/circuit-types';
|
|
@@ -27,7 +25,10 @@ import {
|
|
|
27
25
|
type PrivateKernelEmptyInputData,
|
|
28
26
|
PrivateKernelEmptyInputs,
|
|
29
27
|
Proof,
|
|
28
|
+
type PublicKernelCircuitPrivateInputs,
|
|
30
29
|
type PublicKernelCircuitPublicInputs,
|
|
30
|
+
type PublicKernelInnerCircuitPrivateInputs,
|
|
31
|
+
type PublicKernelTailCircuitPrivateInputs,
|
|
31
32
|
RECURSIVE_PROOF_LENGTH,
|
|
32
33
|
RecursiveProof,
|
|
33
34
|
RootParityInput,
|
|
@@ -36,6 +37,7 @@ import {
|
|
|
36
37
|
type RootRollupPublicInputs,
|
|
37
38
|
TUBE_PROOF_LENGTH,
|
|
38
39
|
type TubeInputs,
|
|
40
|
+
type VMCircuitPublicInputs,
|
|
39
41
|
type VerificationKeyAsFields,
|
|
40
42
|
type VerificationKeyData,
|
|
41
43
|
makeRecursiveProofFromBinary,
|
|
@@ -59,6 +61,10 @@ import {
|
|
|
59
61
|
convertMergeRollupOutputsFromWitnessMap,
|
|
60
62
|
convertPrivateKernelEmptyInputsToWitnessMap,
|
|
61
63
|
convertPrivateKernelEmptyOutputsFromWitnessMap,
|
|
64
|
+
convertPublicInnerInputsToWitnessMap,
|
|
65
|
+
convertPublicInnerOutputFromWitnessMap,
|
|
66
|
+
convertPublicMergeInputsToWitnessMap,
|
|
67
|
+
convertPublicMergeOutputFromWitnessMap,
|
|
62
68
|
convertPublicTailInputsToWitnessMap,
|
|
63
69
|
convertPublicTailOutputFromWitnessMap,
|
|
64
70
|
convertRootParityInputsToWitnessMap,
|
|
@@ -94,7 +100,6 @@ import {
|
|
|
94
100
|
import type { ACVMConfig, BBConfig } from '../config.js';
|
|
95
101
|
import { type UltraHonkFlavor, getUltraHonkFlavorForCircuit } from '../honk.js';
|
|
96
102
|
import { ProverInstrumentation } from '../instrumentation.js';
|
|
97
|
-
import { PublicKernelArtifactMapping } from '../mappings/mappings.js';
|
|
98
103
|
import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
|
|
99
104
|
import { extractAvmVkData, extractVkData } from '../verification_key/verification_key_data.js';
|
|
100
105
|
|
|
@@ -206,47 +211,70 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
/**
|
|
209
|
-
* Requests that a public kernel circuit be executed and the proof generated
|
|
214
|
+
* Requests that a public kernel inner circuit be executed and the proof generated
|
|
210
215
|
* @param kernelRequest - The object encapsulating the request for a proof
|
|
211
216
|
* @returns The requested circuit's public inputs and proof
|
|
212
217
|
*/
|
|
213
|
-
@trackSpan('BBNativeRollupProver.
|
|
214
|
-
[Attributes.PROTOCOL_CIRCUIT_NAME]:
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
@trackSpan('BBNativeRollupProver.getPublicKernelInnerProof', {
|
|
219
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'public-kernel-inner',
|
|
220
|
+
})
|
|
221
|
+
public async getPublicKernelInnerProof(
|
|
222
|
+
inputs: PublicKernelInnerCircuitPrivateInputs,
|
|
223
|
+
): Promise<PublicInputsAndRecursiveProof<VMCircuitPublicInputs>> {
|
|
224
|
+
const artifact = 'PublicKernelInnerArtifact';
|
|
225
|
+
|
|
226
|
+
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
227
|
+
inputs,
|
|
228
|
+
artifact,
|
|
229
|
+
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
230
|
+
convertPublicInnerInputsToWitnessMap,
|
|
231
|
+
convertPublicInnerOutputFromWitnessMap,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const verificationKey = await this.getVerificationKeyDataForCircuit(artifact);
|
|
235
|
+
|
|
236
|
+
await this.verifyProof(artifact, proof.binaryProof);
|
|
237
|
+
|
|
238
|
+
return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Requests that a public kernel merge circuit be executed and the proof generated
|
|
243
|
+
* @param kernelRequest - The object encapsulating the request for a proof
|
|
244
|
+
* @returns The requested circuit's public inputs and proof
|
|
245
|
+
*/
|
|
246
|
+
@trackSpan('BBNativeRollupProver.getPublicKernelMergeProof', {
|
|
247
|
+
[Attributes.PROTOCOL_CIRCUIT_NAME]: 'public-kernel-merge',
|
|
248
|
+
})
|
|
249
|
+
public async getPublicKernelMergeProof(
|
|
250
|
+
inputs: PublicKernelCircuitPrivateInputs,
|
|
220
251
|
): Promise<PublicInputsAndRecursiveProof<PublicKernelCircuitPublicInputs>> {
|
|
221
|
-
const
|
|
222
|
-
if (kernelOps === undefined) {
|
|
223
|
-
throw new Error(`Unable to prove kernel type ${kernelRequest.type}`);
|
|
224
|
-
}
|
|
252
|
+
const artifact = 'PublicKernelMergeArtifact';
|
|
225
253
|
|
|
226
254
|
// We may need to convert the recursive proof into fields format
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
255
|
+
inputs.previousKernel.proof = await this.ensureValidProof(
|
|
256
|
+
inputs.previousKernel.proof,
|
|
257
|
+
artifact,
|
|
258
|
+
inputs.previousKernel.vk,
|
|
231
259
|
);
|
|
232
260
|
|
|
233
261
|
await this.verifyWithKey(
|
|
234
|
-
getUltraHonkFlavorForCircuit(
|
|
235
|
-
|
|
236
|
-
|
|
262
|
+
getUltraHonkFlavorForCircuit(artifact),
|
|
263
|
+
inputs.previousKernel.vk,
|
|
264
|
+
inputs.previousKernel.proof.binaryProof,
|
|
237
265
|
);
|
|
238
266
|
|
|
239
267
|
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
240
|
-
|
|
241
|
-
|
|
268
|
+
inputs,
|
|
269
|
+
artifact,
|
|
242
270
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
243
|
-
|
|
244
|
-
|
|
271
|
+
convertPublicMergeInputsToWitnessMap,
|
|
272
|
+
convertPublicMergeOutputFromWitnessMap,
|
|
245
273
|
);
|
|
246
274
|
|
|
247
|
-
const verificationKey = await this.getVerificationKeyDataForCircuit(
|
|
275
|
+
const verificationKey = await this.getVerificationKeyDataForCircuit(artifact);
|
|
248
276
|
|
|
249
|
-
await this.verifyProof(
|
|
277
|
+
await this.verifyProof(artifact, proof.binaryProof);
|
|
250
278
|
|
|
251
279
|
return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey);
|
|
252
280
|
}
|
|
@@ -257,10 +285,10 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
257
285
|
* @returns The requested circuit's public inputs and proof
|
|
258
286
|
*/
|
|
259
287
|
public async getPublicTailProof(
|
|
260
|
-
|
|
288
|
+
inputs: PublicKernelTailCircuitPrivateInputs,
|
|
261
289
|
): Promise<PublicInputsAndRecursiveProof<KernelCircuitPublicInputs>> {
|
|
262
290
|
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
263
|
-
|
|
291
|
+
inputs,
|
|
264
292
|
'PublicKernelTailArtifact',
|
|
265
293
|
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
266
294
|
convertPublicTailInputsToWitnessMap,
|
|
@@ -337,20 +365,43 @@ export class BBNativeRollupProver implements ServerCircuitProver {
|
|
|
337
365
|
public async getBlockRootRollupProof(
|
|
338
366
|
input: BlockRootRollupInputs,
|
|
339
367
|
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
340
|
-
|
|
341
|
-
// since we will no longer be verifying it directly on L1
|
|
342
|
-
const { circuitOutput, proof } = await this.createProof(
|
|
368
|
+
const { circuitOutput, proof } = await this.createRecursiveProof(
|
|
343
369
|
input,
|
|
344
370
|
'BlockRootRollupArtifact',
|
|
371
|
+
NESTED_RECURSIVE_PROOF_LENGTH,
|
|
372
|
+
convertBlockRootRollupInputsToWitnessMap,
|
|
373
|
+
convertBlockRootRollupOutputsFromWitnessMap,
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupArtifact');
|
|
377
|
+
|
|
378
|
+
await this.verifyProof('BlockRootRollupArtifact', proof.binaryProof);
|
|
379
|
+
|
|
380
|
+
return makePublicInputsAndRecursiveProof(circuitOutput, proof, verificationKey);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Simulates the block root rollup circuit from its inputs.
|
|
385
|
+
* Returns a non-recursive proof to verify on L1.
|
|
386
|
+
* @dev TODO(palla/prover): This is a temporary workaround to get the proof to L1 with the old block flow.
|
|
387
|
+
* @param input - Inputs to the circuit.
|
|
388
|
+
* @returns The public inputs as outputs of the simulation.
|
|
389
|
+
*/
|
|
390
|
+
public async getBlockRootRollupFinalProof(
|
|
391
|
+
input: BlockRootRollupInputs,
|
|
392
|
+
): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs>> {
|
|
393
|
+
const { circuitOutput, proof } = await this.createProof(
|
|
394
|
+
input,
|
|
395
|
+
'BlockRootRollupFinalArtifact',
|
|
345
396
|
convertBlockRootRollupInputsToWitnessMap,
|
|
346
397
|
convertBlockRootRollupOutputsFromWitnessMap,
|
|
347
398
|
);
|
|
348
399
|
|
|
349
400
|
const recursiveProof = makeRecursiveProofFromBinary(proof, NESTED_RECURSIVE_PROOF_LENGTH);
|
|
350
401
|
|
|
351
|
-
const verificationKey = await this.getVerificationKeyDataForCircuit('
|
|
402
|
+
const verificationKey = await this.getVerificationKeyDataForCircuit('BlockRootRollupFinalArtifact');
|
|
352
403
|
|
|
353
|
-
await this.verifyProof('
|
|
404
|
+
await this.verifyProof('BlockRootRollupFinalArtifact', proof);
|
|
354
405
|
|
|
355
406
|
return makePublicInputsAndRecursiveProof(circuitOutput, recursiveProof, verificationKey);
|
|
356
407
|
}
|
package/src/stats.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { CircuitName } from '@aztec/circuit-types/stats';
|
|
2
2
|
import { type ClientProtocolArtifact, type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
|
|
3
3
|
|
|
4
|
-
export { mapPublicKernelToCircuitName } from '@aztec/circuit-types';
|
|
5
|
-
|
|
6
4
|
export function mapProtocolArtifactNameToCircuitName(
|
|
7
5
|
artifact: ServerProtocolArtifact | ClientProtocolArtifact,
|
|
8
6
|
): CircuitName {
|
|
@@ -21,12 +19,10 @@ export function mapProtocolArtifactNameToCircuitName(
|
|
|
21
19
|
return 'block-merge-rollup';
|
|
22
20
|
case 'RootRollupArtifact':
|
|
23
21
|
return 'root-rollup';
|
|
24
|
-
case '
|
|
25
|
-
return 'public-kernel-
|
|
26
|
-
case '
|
|
27
|
-
return 'public-kernel-
|
|
28
|
-
case 'PublicKernelTeardownArtifact':
|
|
29
|
-
return 'public-kernel-teardown';
|
|
22
|
+
case 'PublicKernelInnerArtifact':
|
|
23
|
+
return 'public-kernel-inner';
|
|
24
|
+
case 'PublicKernelMergeArtifact':
|
|
25
|
+
return 'public-kernel-merge';
|
|
30
26
|
case 'PublicKernelTailArtifact':
|
|
31
27
|
return 'public-kernel-tail';
|
|
32
28
|
case 'PrivateKernelInitArtifact':
|
|
@@ -53,6 +49,8 @@ export function mapProtocolArtifactNameToCircuitName(
|
|
|
53
49
|
return 'empty-nested';
|
|
54
50
|
case 'PrivateKernelEmptyArtifact':
|
|
55
51
|
return 'private-kernel-empty';
|
|
52
|
+
case 'BlockRootRollupFinalArtifact':
|
|
53
|
+
return 'block-root-rollup-final';
|
|
56
54
|
default: {
|
|
57
55
|
const _foo: never = artifact;
|
|
58
56
|
throw new Error(`Unknown circuit type: ${artifact}`);
|
package/src/test/index.ts
CHANGED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AztecAddress,
|
|
3
|
+
ContractStorageRead,
|
|
4
|
+
ContractStorageUpdateRequest,
|
|
5
|
+
Gas,
|
|
6
|
+
GlobalVariables,
|
|
7
|
+
Header,
|
|
8
|
+
L2ToL1Message,
|
|
9
|
+
LogHash,
|
|
10
|
+
MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL,
|
|
11
|
+
MAX_L2_TO_L1_MSGS_PER_CALL,
|
|
12
|
+
MAX_NOTE_HASHES_PER_CALL,
|
|
13
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,
|
|
14
|
+
MAX_NULLIFIERS_PER_CALL,
|
|
15
|
+
MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,
|
|
16
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_CALL,
|
|
17
|
+
MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,
|
|
18
|
+
MAX_PUBLIC_DATA_READS_PER_CALL,
|
|
19
|
+
MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,
|
|
20
|
+
MAX_UNENCRYPTED_LOGS_PER_CALL,
|
|
21
|
+
NoteHash,
|
|
22
|
+
Nullifier,
|
|
23
|
+
PublicCircuitPublicInputs,
|
|
24
|
+
PublicInnerCallRequest,
|
|
25
|
+
ReadRequest,
|
|
26
|
+
RevertCode,
|
|
27
|
+
TreeLeafReadRequest,
|
|
28
|
+
} from '@aztec/circuits.js';
|
|
29
|
+
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
30
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
31
|
+
import { type PublicExecutionResult } from '@aztec/simulator';
|
|
32
|
+
|
|
33
|
+
// TODO: pub somewhere more usable - copied from abstract phase manager
|
|
34
|
+
export function getPublicInputs(result: PublicExecutionResult): PublicCircuitPublicInputs {
|
|
35
|
+
return PublicCircuitPublicInputs.from({
|
|
36
|
+
callContext: result.executionRequest.callContext,
|
|
37
|
+
proverAddress: AztecAddress.ZERO,
|
|
38
|
+
argsHash: computeVarArgsHash(result.executionRequest.args),
|
|
39
|
+
noteHashes: padArrayEnd(result.noteHashes, NoteHash.empty(), MAX_NOTE_HASHES_PER_CALL),
|
|
40
|
+
nullifiers: padArrayEnd(result.nullifiers, Nullifier.empty(), MAX_NULLIFIERS_PER_CALL),
|
|
41
|
+
l2ToL1Msgs: padArrayEnd(result.l2ToL1Messages, L2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_CALL),
|
|
42
|
+
startSideEffectCounter: result.startSideEffectCounter,
|
|
43
|
+
endSideEffectCounter: result.endSideEffectCounter,
|
|
44
|
+
returnsHash: computeVarArgsHash(result.returnValues),
|
|
45
|
+
noteHashReadRequests: padArrayEnd(
|
|
46
|
+
result.noteHashReadRequests,
|
|
47
|
+
TreeLeafReadRequest.empty(),
|
|
48
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,
|
|
49
|
+
),
|
|
50
|
+
nullifierReadRequests: padArrayEnd(
|
|
51
|
+
result.nullifierReadRequests,
|
|
52
|
+
ReadRequest.empty(),
|
|
53
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_CALL,
|
|
54
|
+
),
|
|
55
|
+
nullifierNonExistentReadRequests: padArrayEnd(
|
|
56
|
+
result.nullifierNonExistentReadRequests,
|
|
57
|
+
ReadRequest.empty(),
|
|
58
|
+
MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,
|
|
59
|
+
),
|
|
60
|
+
l1ToL2MsgReadRequests: padArrayEnd(
|
|
61
|
+
result.l1ToL2MsgReadRequests,
|
|
62
|
+
TreeLeafReadRequest.empty(),
|
|
63
|
+
MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL,
|
|
64
|
+
),
|
|
65
|
+
contractStorageReads: padArrayEnd(
|
|
66
|
+
result.contractStorageReads,
|
|
67
|
+
ContractStorageRead.empty(),
|
|
68
|
+
MAX_PUBLIC_DATA_READS_PER_CALL,
|
|
69
|
+
),
|
|
70
|
+
contractStorageUpdateRequests: padArrayEnd(
|
|
71
|
+
result.contractStorageUpdateRequests,
|
|
72
|
+
ContractStorageUpdateRequest.empty(),
|
|
73
|
+
MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL,
|
|
74
|
+
),
|
|
75
|
+
publicCallRequests: padArrayEnd([], PublicInnerCallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL),
|
|
76
|
+
unencryptedLogsHashes: padArrayEnd(result.unencryptedLogsHashes, LogHash.empty(), MAX_UNENCRYPTED_LOGS_PER_CALL),
|
|
77
|
+
historicalHeader: Header.empty(),
|
|
78
|
+
globalVariables: GlobalVariables.empty(),
|
|
79
|
+
startGasLeft: Gas.from(result.startGasLeft),
|
|
80
|
+
endGasLeft: Gas.from(result.endGasLeft),
|
|
81
|
+
transactionFee: result.transactionFee,
|
|
82
|
+
// TODO(@just-mitch): need better mapping from simulator to revert code.
|
|
83
|
+
revertCode: result.reverted ? RevertCode.APP_LOGIC_REVERTED : RevertCode.OK,
|
|
84
|
+
});
|
|
85
|
+
}
|