@aztec/ivc-integration 0.85.0 → 0.86.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/artifacts/app_creator.json +1 -1
- package/artifacts/app_reader.json +1 -1
- package/artifacts/keys/app_creator.vk.data.json +3 -19
- package/artifacts/keys/app_reader.vk.data.json +3 -19
- package/artifacts/keys/mock_private_kernel_init.vk.data.json +1 -17
- package/artifacts/keys/mock_private_kernel_inner.vk.data.json +1 -17
- package/artifacts/keys/mock_private_kernel_reset.vk.data.json +69 -85
- package/artifacts/keys/mock_private_kernel_tail.vk.data.json +1 -17
- package/artifacts/keys/mock_rollup_base_private.vk.data.json +85 -111
- package/artifacts/keys/mock_rollup_base_public.vk.data.json +85 -111
- package/artifacts/keys/mock_rollup_merge.vk.data.json +85 -111
- package/artifacts/keys/mock_rollup_root.vk.data.json +86 -102
- package/artifacts/keys/mock_rollup_root_verifier.sol +42 -42
- package/artifacts/mock_private_kernel_init.json +1 -1
- package/artifacts/mock_private_kernel_inner.json +1 -1
- package/artifacts/mock_private_kernel_reset.json +1 -1
- package/artifacts/mock_private_kernel_tail.json +1 -1
- package/artifacts/mock_rollup_base_private.json +1 -1
- package/artifacts/mock_rollup_base_public.json +1 -1
- package/artifacts/mock_rollup_merge.json +1 -1
- package/artifacts/mock_rollup_root.json +1 -1
- package/dest/bb_working_directory.d.ts +2 -0
- package/dest/bb_working_directory.d.ts.map +1 -0
- package/dest/bb_working_directory.js +10 -0
- package/dest/prove_native.d.ts.map +1 -1
- package/dest/prove_native.js +15 -4
- package/dest/prove_wasm.d.ts +2 -0
- package/dest/prove_wasm.d.ts.map +1 -1
- package/dest/prove_wasm.js +20 -1
- package/dest/types/index.d.ts +10 -10
- package/dest/witgen.d.ts +0 -3
- package/dest/witgen.d.ts.map +1 -1
- package/dest/witgen.js +0 -42
- package/package.json +19 -21
- package/src/bb_working_directory.ts +9 -0
- package/src/prove_native.ts +13 -8
- package/src/prove_wasm.ts +26 -1
- package/src/types/index.ts +10 -10
- package/src/witgen.ts +0 -26
package/src/prove_wasm.ts
CHANGED
|
@@ -1,9 +1,33 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
3
|
+
|
|
4
|
+
import os from 'os';
|
|
1
5
|
import { ungzip } from 'pako';
|
|
2
6
|
|
|
7
|
+
const logger = createLogger('ivc-integration:prove_wasm');
|
|
8
|
+
|
|
3
9
|
function base64ToUint8Array(base64: string): Uint8Array {
|
|
4
10
|
return Uint8Array.from(atob(base64), c => c.charCodeAt(0));
|
|
5
11
|
}
|
|
6
12
|
|
|
13
|
+
export async function proveClientIVC(
|
|
14
|
+
bytecodes: string[],
|
|
15
|
+
witnessStack: Uint8Array[],
|
|
16
|
+
threads?: number,
|
|
17
|
+
): Promise<ClientIvcProof> {
|
|
18
|
+
const { AztecClientBackend } = await import('@aztec/bb.js');
|
|
19
|
+
const backend = new AztecClientBackend(
|
|
20
|
+
bytecodes.map(base64ToUint8Array).map((arr: Uint8Array) => ungzip(arr)),
|
|
21
|
+
{ threads: threads || Math.min(os.cpus().length, 16), logger: logger.info },
|
|
22
|
+
);
|
|
23
|
+
try {
|
|
24
|
+
const [proof] = await backend.prove(witnessStack.map((arr: Uint8Array) => ungzip(arr)));
|
|
25
|
+
return new ClientIvcProof(Buffer.from(proof));
|
|
26
|
+
} finally {
|
|
27
|
+
await backend.destroy();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
7
31
|
export async function proveThenVerifyAztecClient(
|
|
8
32
|
bytecodes: string[],
|
|
9
33
|
witnessStack: Uint8Array[],
|
|
@@ -12,9 +36,10 @@ export async function proveThenVerifyAztecClient(
|
|
|
12
36
|
const { AztecClientBackend } = await import('@aztec/bb.js');
|
|
13
37
|
const backend = new AztecClientBackend(
|
|
14
38
|
bytecodes.map(base64ToUint8Array).map((arr: Uint8Array) => ungzip(arr)),
|
|
15
|
-
{ threads },
|
|
39
|
+
{ threads: threads || Math.min(os.cpus().length, 16), logger: logger.info },
|
|
16
40
|
);
|
|
17
41
|
try {
|
|
42
|
+
// These are optional - easier not to pass them.
|
|
18
43
|
const [proof, vk] = await backend.prove(witnessStack.map((arr: Uint8Array) => ungzip(arr)));
|
|
19
44
|
const verified = await backend.verify(proof, vk);
|
|
20
45
|
return verified;
|
package/src/types/index.ts
CHANGED
|
@@ -37,7 +37,7 @@ export type TubeData = {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export type VerificationKey = {
|
|
40
|
-
key: FixedLengthArray<Field,
|
|
40
|
+
key: FixedLengthArray<Field, 113>;
|
|
41
41
|
hash: Field;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -81,13 +81,13 @@ export async function AppReader(commitments_to_read: FixedLengthArray<Field, 2>,
|
|
|
81
81
|
export type MockPrivateKernelInitInputType = {
|
|
82
82
|
tx: TxRequest;
|
|
83
83
|
app_inputs: AppPublicInputs;
|
|
84
|
-
app_vk: FixedLengthArray<Field,
|
|
84
|
+
app_vk: FixedLengthArray<Field, 127>;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
export type MockPrivateKernelInitReturnType = PrivateKernelPublicInputs;
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublicInputs, app_vk: FixedLengthArray<Field,
|
|
90
|
+
export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublicInputs, app_vk: FixedLengthArray<Field, 127>, MockPrivateKernelInit_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<PrivateKernelPublicInputs> {
|
|
91
91
|
const program = new Noir(MockPrivateKernelInit_circuit);
|
|
92
92
|
const args: InputMap = { tx, app_inputs, app_vk };
|
|
93
93
|
const { returnValue } = await program.execute(args, foreignCallHandler);
|
|
@@ -95,15 +95,15 @@ export async function MockPrivateKernelInit(tx: TxRequest, app_inputs: AppPublic
|
|
|
95
95
|
}
|
|
96
96
|
export type MockPrivateKernelInnerInputType = {
|
|
97
97
|
prev_kernel_public_inputs: PrivateKernelPublicInputs;
|
|
98
|
-
kernel_vk: FixedLengthArray<Field,
|
|
98
|
+
kernel_vk: FixedLengthArray<Field, 127>;
|
|
99
99
|
app_inputs: AppPublicInputs;
|
|
100
|
-
app_vk: FixedLengthArray<Field,
|
|
100
|
+
app_vk: FixedLengthArray<Field, 127>;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
export type MockPrivateKernelInnerReturnType = PrivateKernelPublicInputs;
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
export async function MockPrivateKernelInner(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field,
|
|
106
|
+
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> {
|
|
107
107
|
const program = new Noir(MockPrivateKernelInner_circuit);
|
|
108
108
|
const args: InputMap = { prev_kernel_public_inputs, kernel_vk, app_inputs, app_vk };
|
|
109
109
|
const { returnValue } = await program.execute(args, foreignCallHandler);
|
|
@@ -111,14 +111,14 @@ export async function MockPrivateKernelInner(prev_kernel_public_inputs: PrivateK
|
|
|
111
111
|
}
|
|
112
112
|
export type MockPrivateKernelResetInputType = {
|
|
113
113
|
prev_kernel_public_inputs: PrivateKernelPublicInputs;
|
|
114
|
-
kernel_vk: FixedLengthArray<Field,
|
|
114
|
+
kernel_vk: FixedLengthArray<Field, 127>;
|
|
115
115
|
commitment_read_hints: FixedLengthArray<u32, 4>;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
export type MockPrivateKernelResetReturnType = PrivateKernelPublicInputs;
|
|
119
119
|
|
|
120
120
|
|
|
121
|
-
export async function MockPrivateKernelReset(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field,
|
|
121
|
+
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> {
|
|
122
122
|
const program = new Noir(MockPrivateKernelReset_circuit);
|
|
123
123
|
const args: InputMap = { prev_kernel_public_inputs, kernel_vk, commitment_read_hints };
|
|
124
124
|
const { returnValue } = await program.execute(args, foreignCallHandler);
|
|
@@ -126,13 +126,13 @@ export async function MockPrivateKernelReset(prev_kernel_public_inputs: PrivateK
|
|
|
126
126
|
}
|
|
127
127
|
export type MockPrivateKernelTailInputType = {
|
|
128
128
|
prev_kernel_public_inputs: PrivateKernelPublicInputs;
|
|
129
|
-
kernel_vk: FixedLengthArray<Field,
|
|
129
|
+
kernel_vk: FixedLengthArray<Field, 127>;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
export type MockPrivateKernelTailReturnType = KernelPublicInputs;
|
|
133
133
|
|
|
134
134
|
|
|
135
|
-
export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field,
|
|
135
|
+
export async function MockPrivateKernelTail(prev_kernel_public_inputs: PrivateKernelPublicInputs, kernel_vk: FixedLengthArray<Field, 127>, MockPrivateKernelTail_circuit: CompiledCircuit, foreignCallHandler?: ForeignCallHandler): Promise<KernelPublicInputs> {
|
|
136
136
|
const program = new Noir(MockPrivateKernelTail_circuit);
|
|
137
137
|
const args: InputMap = { prev_kernel_public_inputs, kernel_vk };
|
|
138
138
|
const { returnValue } = await program.execute(args, foreignCallHandler);
|
package/src/witgen.ts
CHANGED
|
@@ -6,10 +6,7 @@ import {
|
|
|
6
6
|
} from '@aztec/constants';
|
|
7
7
|
import { Fr } from '@aztec/foundation/fields';
|
|
8
8
|
import { type ForeignCallOutput, Noir } from '@aztec/noir-noir_js';
|
|
9
|
-
import type { PublicTxSimulationTester } from '@aztec/simulator/server';
|
|
10
9
|
import type { AvmCircuitPublicInputs } from '@aztec/stdlib/avm';
|
|
11
|
-
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
|
-
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
13
10
|
import type { RecursiveProof } from '@aztec/stdlib/proofs';
|
|
14
11
|
import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
|
|
15
12
|
|
|
@@ -348,26 +345,3 @@ export function mapAvmPublicInputsToNoir(
|
|
|
348
345
|
}
|
|
349
346
|
return serialized.map(x => x.toString()) as FixedLengthArray<string, typeof AVM_V2_PUBLIC_INPUTS_FLATTENED_SIZE>;
|
|
350
347
|
}
|
|
351
|
-
|
|
352
|
-
export async function simulateAvmBulkTesting(
|
|
353
|
-
simTester: PublicTxSimulationTester,
|
|
354
|
-
contractInstance: ContractInstanceWithAddress,
|
|
355
|
-
) {
|
|
356
|
-
const argsField = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
|
|
357
|
-
const argsU8 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(x => new Fr(x));
|
|
358
|
-
const args = [
|
|
359
|
-
argsField,
|
|
360
|
-
argsU8,
|
|
361
|
-
/*getInstanceForAddress=*/ contractInstance.address.toField(),
|
|
362
|
-
/*expectedDeployer=*/ contractInstance.deployer.toField(),
|
|
363
|
-
/*expectedClassId=*/ contractInstance.currentContractClassId.toField(),
|
|
364
|
-
/*expectedInitializationHash=*/ contractInstance.initializationHash.toField(),
|
|
365
|
-
];
|
|
366
|
-
|
|
367
|
-
return await simTester.simulateTx(
|
|
368
|
-
/*sender=*/ AztecAddress.fromNumber(42),
|
|
369
|
-
/*setupCalls=*/ [],
|
|
370
|
-
/*appCalls=*/ [{ address: contractInstance.address, fnName: 'bulk_testing', args }],
|
|
371
|
-
/*teardownCall=*/ undefined,
|
|
372
|
-
);
|
|
373
|
-
}
|