@aztec/ivc-integration 1.0.0 → 1.1.2

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 type { VerificationKeyData } from '@aztec/stdlib/vks';
32
+ import { VerificationKeyAsFields, 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: Fr[];
192
+ vk: VerificationKeyAsFields;
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,
262
+ vk: await VerificationKeyAsFields.fromKey(vk),
263
263
  publicInputs: avmCircuitInputs.publicInputs,
264
264
  };
265
265
  }
@@ -22,6 +22,11 @@ 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
+
25
30
  export type PrivateKernelPublicInputs = {
26
31
  remaining_calls: u32;
27
32
  commitments: FixedLengthArray<Field, 4>;
@@ -35,12 +40,7 @@ export type KernelPublicInputs = {
35
40
  export type TubeData = {
36
41
  public_inputs: KernelPublicInputs;
37
42
  proof: FixedLengthArray<Field, 535>;
38
- vk_data: VerificationKey;
39
- }
40
-
41
- export type VerificationKey = {
42
- key: FixedLengthArray<Field, 113>;
43
- hash: Field;
43
+ vk_data: VerificationKey<113>;
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;
190
+ vk: VerificationKey<113>;
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: FixedLengthArray<Field, 127>;
223
+ app_vk: VerificationKey<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: FixedLengthArray<Field, 127>, MockPrivateKernelInit_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
229
+ export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublicInputs, app_vk: VerificationKey<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: FixedLengthArray<Field, 127>;
237
+ kernel_vk: VerificationKey<127>;
238
238
  app_inputs: AppPublicInputs;
239
- app_vk: FixedLengthArray<Field, 127>;
239
+ app_vk: VerificationKey<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: FixedLengthArray<Field, 127>, app_inputs: AppPublicInputs, app_vk: FixedLengthArray<Field, 127>, MockPrivateKernelInner_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
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> {
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: FixedLengthArray<Field, 127>;
253
+ kernel_vk: VerificationKey<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: FixedLengthArray<Field, 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: VerificationKey<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: FixedLengthArray<Field, 127>;
268
+ kernel_vk: VerificationKey<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: FixedLengthArray<Field, 127>, MockPrivateKernelTail_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<KernelPublicInputs> {
274
+ export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: VerificationKey<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: FixedLengthArray<Field, 1000>;
282
+ verification_key: VerificationKey<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: FixedLengthArray<Field, 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: VerificationKey<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,7 +1,6 @@
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,
5
4
  CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS,
6
5
  } from '@aztec/constants';
7
6
  import { Fr } from '@aztec/foundation/fields';
@@ -9,7 +8,7 @@ import { applyStringFormatting, createLogger } from '@aztec/foundation/log';
9
8
  import { type ForeignCallInput, type ForeignCallOutput, Noir } from '@aztec/noir-noir_js';
10
9
  import type { AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
11
10
  import type { RecursiveProof } from '@aztec/stdlib/proofs';
12
- import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
11
+ import { VerificationKeyAsFields } from '@aztec/stdlib/vks';
13
12
 
14
13
  import { strict as assert } from 'assert';
15
14
 
@@ -49,29 +48,30 @@ import type {
49
48
  MockRollupRootInputType,
50
49
  PrivateKernelPublicInputs,
51
50
  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
- MockAppReaderCircuit,
58
- MockPrivateKernelInitCircuit,
59
- MockPrivateKernelInnerCircuit,
60
- MockPrivateKernelResetCircuit,
61
- MockPrivateKernelTailCircuit,
62
- MockRollupBasePublicCircuit,
63
- MockRollupBasePrivateCircuit,
64
- MockRollupMergeCircuit,
65
- MockRollupRootCircuit,
66
57
  MockAppCreatorVk,
58
+ MockAppReaderCircuit,
67
59
  MockAppReaderVk,
60
+ MockPrivateKernelInitCircuit,
68
61
  MockPrivateKernelInitVk,
62
+ MockPrivateKernelInnerCircuit,
69
63
  MockPrivateKernelInnerVk,
64
+ MockPrivateKernelResetCircuit,
70
65
  MockPrivateKernelResetVk,
66
+ MockPrivateKernelTailCircuit,
71
67
  MockPrivateKernelTailVk,
72
- MockRollupBasePublicVk,
68
+ MockRollupBasePrivateCircuit,
73
69
  MockRollupBasePrivateVk,
70
+ MockRollupBasePublicCircuit,
71
+ MockRollupBasePublicVk,
72
+ MockRollupMergeCircuit,
74
73
  MockRollupMergeVk,
74
+ MockRollupRootCircuit,
75
75
  MockRollupRootVk,
76
76
  };
77
77
 
@@ -79,11 +79,14 @@ export {
79
79
 
80
80
  const log = createLogger('aztec:ivc-test');
81
81
 
82
- export function getVkAsFields(vk: {
83
- keyAsBytes: string;
82
+ export async function getVkAsFields({
83
+ keyAsFields,
84
+ }: {
84
85
  keyAsFields: string[];
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>;
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);
87
90
  }
88
91
 
89
92
  export const MOCK_MAX_COMMITMENTS_PER_TX = 4;
@@ -230,13 +233,13 @@ export async function generate3FunctionTestingIVCStack(): Promise<
230
233
  const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({
231
234
  app_inputs: appWitnessGenResult.publicInputs,
232
235
  tx,
233
- app_vk: getVkAsFields(MockAppCreatorVk),
236
+ app_vk: await getVkAsFields(MockAppCreatorVk),
234
237
  });
235
238
  log.debug('generated mock private kernel init witness');
236
239
 
237
240
  const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({
238
241
  prev_kernel_public_inputs: initWitnessGenResult.publicInputs,
239
- kernel_vk: getVkAsFields(MockPrivateKernelInitVk),
242
+ kernel_vk: await getVkAsFields(MockPrivateKernelInitVk),
240
243
  });
241
244
  log.debug('generated mock private kernel tail witness');
242
245
 
@@ -270,13 +273,13 @@ export async function generate6FunctionTestingIVCStack(): Promise<
270
273
  const initWitnessGenResult = await witnessGenMockPrivateKernelInitCircuit({
271
274
  app_inputs: creatorAppWitnessGenResult.publicInputs,
272
275
  tx,
273
- app_vk: getVkAsFields(MockAppCreatorVk),
276
+ app_vk: await getVkAsFields(MockAppCreatorVk),
274
277
  });
275
278
  const innerWitnessGenResult = await witnessGenMockPrivateKernelInnerCircuit({
276
279
  prev_kernel_public_inputs: initWitnessGenResult.publicInputs,
277
280
  app_inputs: readerAppWitnessGenResult.publicInputs,
278
- app_vk: getVkAsFields(MockAppReaderVk),
279
- kernel_vk: getVkAsFields(MockPrivateKernelInitVk),
281
+ app_vk: await getVkAsFields(MockAppReaderVk),
282
+ kernel_vk: await getVkAsFields(MockPrivateKernelInitVk),
280
283
  });
281
284
 
282
285
  const resetWitnessGenResult = await witnessGenMockPrivateKernelResetCircuit({
@@ -287,12 +290,12 @@ export async function generate6FunctionTestingIVCStack(): Promise<
287
290
  MOCK_MAX_COMMITMENTS_PER_TX.toString(),
288
291
  MOCK_MAX_COMMITMENTS_PER_TX.toString(),
289
292
  ],
290
- kernel_vk: getVkAsFields(MockPrivateKernelInnerVk),
293
+ kernel_vk: await getVkAsFields(MockPrivateKernelInnerVk),
291
294
  });
292
295
 
293
296
  const tailWitnessGenResult = await witnessGenMockPrivateKernelTailCircuit({
294
297
  prev_kernel_public_inputs: resetWitnessGenResult.publicInputs,
295
- kernel_vk: getVkAsFields(MockPrivateKernelResetVk),
298
+ kernel_vk: await getVkAsFields(MockPrivateKernelResetVk),
296
299
  });
297
300
 
298
301
  // Create client IVC proof
@@ -352,18 +355,6 @@ export function mapVerificationKeyToNoir<N extends number>(
352
355
  };
353
356
  }
354
357
 
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
-
367
358
  export function mapAvmPublicInputsToNoir(
368
359
  publicInputs: AvmCircuitPublicInputs,
369
360
  ): FixedLengthArray<string, typeof AVM_CIRCUIT_PUBLIC_INPUTS_LENGTH> {