@aztec/ivc-integration 1.0.0-staging.2 → 1.0.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.
@@ -29,7 +29,7 @@ import { makeProofAndVerificationKey } from '@aztec/stdlib/interfaces/server';
29
29
  import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
30
30
  import type { ClientIvcProof, Proof } from '@aztec/stdlib/proofs';
31
31
  import { enhanceProofWithPiValidationFlag } from '@aztec/stdlib/rollup';
32
- import { VerificationKeyAsFields, type VerificationKeyData } from '@aztec/stdlib/vks';
32
+ import type { VerificationKeyData } from '@aztec/stdlib/vks';
33
33
 
34
34
  import * as fs from 'fs/promises';
35
35
  import { Encoder } from 'msgpackr';
@@ -189,7 +189,7 @@ export async function proveAvm(
189
189
  logger: Logger,
190
190
  skipPublicInputsValidation: boolean = false,
191
191
  ): Promise<{
192
- vk: VerificationKeyAsFields;
192
+ vk: Fr[];
193
193
  proof: Fr[];
194
194
  publicInputs: AvmCircuitPublicInputs;
195
195
  }> {
@@ -259,7 +259,7 @@ export async function proveAvm(
259
259
 
260
260
  return {
261
261
  proof: proofWithPublicInputsValidationFlag,
262
- vk: await VerificationKeyAsFields.fromKey(vk),
262
+ vk,
263
263
  publicInputs: avmCircuitInputs.publicInputs,
264
264
  };
265
265
  }
@@ -22,11 +22,6 @@ export type TxRequest = {
22
22
  number_of_calls: u32;
23
23
  }
24
24
 
25
- export type VerificationKey<A extends number> = {
26
- key: FixedLengthArray<Field, A>;
27
- hash: Field;
28
- }
29
-
30
25
  export type PrivateKernelPublicInputs = {
31
26
  remaining_calls: u32;
32
27
  commitments: FixedLengthArray<Field, 4>;
@@ -40,7 +35,12 @@ export type KernelPublicInputs = {
40
35
  export type TubeData = {
41
36
  public_inputs: KernelPublicInputs;
42
37
  proof: FixedLengthArray<Field, 535>;
43
- vk_data: VerificationKey<113>;
38
+ vk_data: VerificationKey;
39
+ }
40
+
41
+ export type VerificationKey = {
42
+ key: FixedLengthArray<Field, 113>;
43
+ hash: Field;
44
44
  }
45
45
 
46
46
  export type AvmCircuitPublicInputs = {
@@ -187,7 +187,7 @@ export type RollupPublicInputs = {
187
187
  export type PreviousRollupData = {
188
188
  base_or_merge_public_inputs: RollupPublicInputs;
189
189
  proof: FixedLengthArray<Field, 535>;
190
- vk: VerificationKey<113>;
190
+ vk: VerificationKey;
191
191
  }
192
192
 
193
193
 
@@ -220,13 +220,13 @@ export async function AppReader(commitments_to_read: FixedLengthArray<Field, 2>,
220
220
  export type MockPrivateKernelInitInputType = {
221
221
  tx: TxRequest;
222
222
  app_inputs: AppPublicInputs;
223
- app_vk: VerificationKey<127>;
223
+ app_vk: FixedLengthArray<Field, 127>;
224
224
  }
225
225
 
226
226
  export type MockPrivateKernelInitReturnType = PrivateKernelPublicInputs;
227
227
 
228
228
 
229
- export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublicInputs, app_vk: VerificationKey<127>, MockPrivateKernelInit_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
229
+ export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublicInputs, app_vk: FixedLengthArray<Field, 127>, MockPrivateKernelInit_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
230
230
  const program = new Noir(MockPrivateKernelInit_circuit);
231
231
  const args: InputMap = { tx, app_inputs, app_vk };
232
232
  const { returnValue } = await program.execute(args, foreignCallHandler);
@@ -234,15 +234,15 @@ export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublic
234
234
  }
235
235
  export type MockPrivateKernelInnerInputType = {
236
236
  prev_kernel_public_inputs: PrivateKernelPublicInputs;
237
- kernel_vk: VerificationKey<127>;
237
+ kernel_vk: FixedLengthArray<Field, 127>;
238
238
  app_inputs: AppPublicInputs;
239
- app_vk: VerificationKey<127>;
239
+ app_vk: FixedLengthArray<Field, 127>;
240
240
  }
241
241
 
242
242
  export type MockPrivateKernelInnerReturnType = PrivateKernelPublicInputs;
243
243
 
244
244
 
245
- export async function MockPrivateKernelInner(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: VerificationKey<127>, app_inputs: AppPublicInputs, app_vk: VerificationKey<127>, MockPrivateKernelInner_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
245
+ export async function MockPrivateKernelInner(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field, 127>, app_inputs: AppPublicInputs, app_vk: FixedLengthArray<Field, 127>, MockPrivateKernelInner_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
246
246
  const program = new Noir(MockPrivateKernelInner_circuit);
247
247
  const args: InputMap = { prev_kernel_public_inputs, kernel_vk, app_inputs, app_vk };
248
248
  const { returnValue } = await program.execute(args, foreignCallHandler);
@@ -250,14 +250,14 @@ export async function MockPrivateKernelInner(prev_kernel_public_inputs: PrivateK
250
250
  }
251
251
  export type MockPrivateKernelResetInputType = {
252
252
  prev_kernel_public_inputs: PrivateKernelPublicInputs;
253
- kernel_vk: VerificationKey<127>;
253
+ kernel_vk: FixedLengthArray<Field, 127>;
254
254
  commitment_read_hints: FixedLengthArray<u32, 4>;
255
255
  }
256
256
 
257
257
  export type MockPrivateKernelResetReturnType = PrivateKernelPublicInputs;
258
258
 
259
259
 
260
- export async function MockPrivateKernelReset(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: VerificationKey<127>, commitment_read_hints: FixedLengthArray<u32, 4>, MockPrivateKernelReset_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
260
+ export async function MockPrivateKernelReset(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field, 127>, commitment_read_hints: FixedLengthArray<u32, 4>, MockPrivateKernelReset_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
261
261
  const program = new Noir(MockPrivateKernelReset_circuit);
262
262
  const args: InputMap = { prev_kernel_public_inputs, kernel_vk, commitment_read_hints };
263
263
  const { returnValue } = await program.execute(args, foreignCallHandler);
@@ -265,13 +265,13 @@ export async function MockPrivateKernelReset(prev_kernel_public_inputs: PrivateK
265
265
  }
266
266
  export type MockPrivateKernelTailInputType = {
267
267
  prev_kernel_public_inputs: PrivateKernelPublicInputs;
268
- kernel_vk: VerificationKey<127>;
268
+ kernel_vk: FixedLengthArray<Field, 127>;
269
269
  }
270
270
 
271
271
  export type MockPrivateKernelTailReturnType = KernelPublicInputs;
272
272
 
273
273
 
274
- export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: VerificationKey<127>, MockPrivateKernelTail_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<KernelPublicInputs> {
274
+ export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field, 127>, MockPrivateKernelTail_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<KernelPublicInputs> {
275
275
  const program = new Noir(MockPrivateKernelTail_circuit);
276
276
  const args: InputMap = { prev_kernel_public_inputs, kernel_vk };
277
277
  const { returnValue } = await program.execute(args, foreignCallHandler);
@@ -279,7 +279,7 @@ export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKe
279
279
  }
280
280
  export type MockRollupBasePublicInputType = {
281
281
  tube_data: TubeData;
282
- verification_key: VerificationKey<1000>;
282
+ verification_key: FixedLengthArray<Field, 1000>;
283
283
  proof: FixedLengthArray<Field, 20000>;
284
284
  public_inputs: AvmCircuitPublicInputs;
285
285
  }
@@ -287,7 +287,7 @@ export type MockRollupBasePublicInputType = {
287
287
  export type MockRollupBasePublicReturnType = RollupPublicInputs;
288
288
 
289
289
 
290
- export async function MockRollupBasePublic(tube_data: TubeData, verification_key: VerificationKey<1000>, proof: FixedLengthArray<Field, 20000>, public_inputs: AvmCircuitPublicInputs, MockRollupBasePublic_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<RollupPublicInputs> {
290
+ export async function MockRollupBasePublic(tube_data: TubeData, verification_key: FixedLengthArray<Field, 1000>, proof: FixedLengthArray<Field, 20000>, public_inputs: AvmCircuitPublicInputs, MockRollupBasePublic_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<RollupPublicInputs> {
291
291
  const program = new Noir(MockRollupBasePublic_circuit);
292
292
  const args: InputMap = { tube_data, verification_key, proof, public_inputs };
293
293
  const { returnValue } = await program.execute(args, foreignCallHandler);
package/src/witgen.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AVM_CIRCUIT_PUBLIC_INPUTS_LENGTH,
3
3
  AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED,
4
+ AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED,
4
5
  CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS,
5
6
  } from '@aztec/constants';
6
7
  import { Fr } from '@aztec/foundation/fields';
@@ -8,7 +9,7 @@ import { applyStringFormatting, createLogger } from '@aztec/foundation/log';
8
9
  import { type ForeignCallInput, type ForeignCallOutput, Noir } from '@aztec/noir-noir_js';
9
10
  import type { AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
10
11
  import type { RecursiveProof } from '@aztec/stdlib/proofs';
11
- import { VerificationKeyAsFields } from '@aztec/stdlib/vks';
12
+ import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
12
13
 
13
14
  import { strict as assert } from 'assert';
14
15
 
@@ -48,30 +49,29 @@ import type {
48
49
  MockRollupRootInputType,
49
50
  PrivateKernelPublicInputs,
50
51
  RollupPublicInputs,
51
- VerificationKey,
52
52
  } from './types/index.js';
53
53
 
54
54
  // Re export the circuit jsons
55
55
  export {
56
56
  MockAppCreatorCircuit,
57
- MockAppCreatorVk,
58
57
  MockAppReaderCircuit,
59
- MockAppReaderVk,
60
58
  MockPrivateKernelInitCircuit,
61
- MockPrivateKernelInitVk,
62
59
  MockPrivateKernelInnerCircuit,
63
- MockPrivateKernelInnerVk,
64
60
  MockPrivateKernelResetCircuit,
65
- MockPrivateKernelResetVk,
66
61
  MockPrivateKernelTailCircuit,
67
- MockPrivateKernelTailVk,
68
- MockRollupBasePrivateCircuit,
69
- MockRollupBasePrivateVk,
70
62
  MockRollupBasePublicCircuit,
71
- MockRollupBasePublicVk,
63
+ MockRollupBasePrivateCircuit,
72
64
  MockRollupMergeCircuit,
73
- MockRollupMergeVk,
74
65
  MockRollupRootCircuit,
66
+ MockAppCreatorVk,
67
+ MockAppReaderVk,
68
+ MockPrivateKernelInitVk,
69
+ MockPrivateKernelInnerVk,
70
+ MockPrivateKernelResetVk,
71
+ MockPrivateKernelTailVk,
72
+ MockRollupBasePublicVk,
73
+ MockRollupBasePrivateVk,
74
+ MockRollupMergeVk,
75
75
  MockRollupRootVk,
76
76
  };
77
77
 
@@ -79,14 +79,11 @@ export {
79
79
 
80
80
  const log = createLogger('aztec:ivc-test');
81
81
 
82
- export async function getVkAsFields({
83
- keyAsFields,
84
- }: {
82
+ export function getVkAsFields(vk: {
83
+ keyAsBytes: string;
85
84
  keyAsFields: string[];
86
- }): Promise<VerificationKey<typeof CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS>> {
87
- const key = keyAsFields.map(f => Fr.fromString(f));
88
- const vk = await VerificationKeyAsFields.fromKey(key);
89
- return mapVerificationKeyToNoir(vk, CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS);
85
+ }): FixedLengthArray<string, typeof CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS> {
86
+ return vk.keyAsFields as FixedLengthArray<string, typeof CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS>;
90
87
  }
91
88
 
92
89
  export const MOCK_MAX_COMMITMENTS_PER_TX = 4;
@@ -233,13 +230,13 @@ export async function generate3FunctionTestingIVCStack(): Promise<
233
230
  const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({
234
231
  app_inputs: appWitnessGenResult.publicInputs,
235
232
  tx,
236
- app_vk: await getVkAsFields(MockAppCreatorVk),
233
+ app_vk: getVkAsFields(MockAppCreatorVk),
237
234
  });
238
235
  log.debug('generated mock private kernel init witness');
239
236
 
240
237
  const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({
241
238
  prev_kernel_public_inputs: initWitnessGenResult.publicInputs,
242
- kernel_vk: await getVkAsFields(MockPrivateKernelInitVk),
239
+ kernel_vk: getVkAsFields(MockPrivateKernelInitVk),
243
240
  });
244
241
  log.debug('generated mock private kernel tail witness');
245
242
 
@@ -273,13 +270,13 @@ export async function generate6FunctionTestingIVCStack(): Promise<
273
270
  const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({
274
271
  app_inputs: creatorAppWitnessGenResult.publicInputs,
275
272
  tx,
276
- app_vk: await getVkAsFields(MockAppCreatorVk),
273
+ app_vk: getVkAsFields(MockAppCreatorVk),
277
274
  });
278
275
  const innerWitnessGenResult = await witnessGenMockPrivateKernelInnerCircuit({
279
276
  prev_kernel_public_inputs: initWitnessGenResult.publicInputs,
280
277
  app_inputs: readerAppWitnessGenResult.publicInputs,
281
- app_vk: await getVkAsFields(MockAppReaderVk),
282
- kernel_vk: await getVkAsFields(MockPrivateKernelInitVk),
278
+ app_vk: getVkAsFields(MockAppReaderVk),
279
+ kernel_vk: getVkAsFields(MockPrivateKernelInitVk),
283
280
  });
284
281
 
285
282
  const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({
@@ -290,12 +287,12 @@ export async function generate6FunctionTestingIVCStack(): Promise<
290
287
  MOCK_MAX_COMMITMENTS_PER_TX.toString(),
291
288
  MOCK_MAX_COMMITMENTS_PER_TX.toString(),
292
289
  ],
293
- kernel_vk: await getVkAsFields(MockPrivateKernelInnerVk),
290
+ kernel_vk: getVkAsFields(MockPrivateKernelInnerVk),
294
291
  });
295
292
 
296
293
  const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({
297
294
  prev_kernel_public_inputs: resetWitnessGenResult.publicInputs,
298
- kernel_vk: await getVkAsFields(MockPrivateKernelResetVk),
295
+ kernel_vk: getVkAsFields(MockPrivateKernelResetVk),
299
296
  });
300
297
 
301
298
  // Create client IVC proof
@@ -355,6 +352,18 @@ export function mapVerificationKeyToNoir<N extends number>(
355
352
  };
356
353
  }
357
354
 
355
+ export function mapAvmVerificationKeyToNoir(
356
+ vk: Fr[],
357
+ ): FixedLengthArray<string, typeof AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED> {
358
+ if (vk.length != AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED) {
359
+ throw new Error('Invalid number of AVM verification key fields');
360
+ }
361
+ return vk.map(field => field.toString()) as FixedLengthArray<
362
+ string,
363
+ typeof AVM_V2_VERIFICATION_KEY_LENGTH_IN_FIELDS_PADDED
364
+ >;
365
+ }
366
+
358
367
  export function mapAvmPublicInputsToNoir(
359
368
  publicInputs: AvmCircuitPublicInputs,
360
369
  ): FixedLengthArray<string, typeof AVM_CIRCUIT_PUBLIC_INPUTS_LENGTH> {