Skip to content

Commit be60c81

Browse files
committed
Integrate performance regression framework for proof verification in zkProgram zkprogram examples
1 parent 5cd17c8 commit be60c81

File tree

7 files changed

+43
-17
lines changed

7 files changed

+43
-17
lines changed

src/examples/zkprogram/gadgets.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Field, Provable, Gadgets, ZkProgram } from 'o1js';
1+
import { Field, Gadgets, Provable, ZkProgram } from 'o1js';
22
import { Performance } from '../../lib/testing/perf-regression.js';
33

44
let cs = await Provable.constraintSystem(() => {
@@ -69,14 +69,26 @@ console.log('\nproving..');
6969
perfBitwise.start('prove', 'rot');
7070
let { proof: rotProof } = await BitwiseProver.rot();
7171
perfBitwise.end();
72-
if (!(await BitwiseProver.verify(rotProof))) throw Error('rot: Invalid proof');
72+
73+
perfBitwise.start('verify', 'rot');
74+
const isValidRot = await BitwiseProver.verify(rotProof);
75+
perfBitwise.end();
76+
if (!isValidRot) throw Error('rot: Invalid proof');
7377

7478
perfBitwise.start('prove', 'xor');
7579
let { proof: xorProof } = await BitwiseProver.xor();
7680
perfBitwise.end();
77-
if (!(await BitwiseProver.verify(xorProof))) throw Error('xor: Invalid proof');
81+
82+
perfBitwise.start('verify', 'xor');
83+
const isValidXor = await BitwiseProver.verify(xorProof);
84+
perfBitwise.end();
85+
if (!isValidXor) throw Error('xor: Invalid proof');
7886

7987
perfBitwise.start('prove', 'and');
8088
let { proof: andProof } = await BitwiseProver.and();
8189
perfBitwise.end();
82-
if (!(await BitwiseProver.verify(andProof))) throw Error('and: Invalid proof');
90+
91+
perfBitwise.start('verify', 'and');
92+
const isValidAnd = await BitwiseProver.verify(andProof);
93+
perfBitwise.end();
94+
if (!isValidAnd) throw Error('and: Invalid proof');

src/examples/zkprogram/hash-chain.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ let hashChainRecursive = Experimental.Recursive(hashChain);
5050

5151
const cs = await hashChain.analyzeMethods();
5252
const perfHashChain = Performance.create(hashChain.name, cs);
53+
5354
perfHashChain.start('compile');
5455
await hashChain.compile();
5556
perfHashChain.end();
@@ -61,7 +62,10 @@ perfHashChain.start('prove', 'chain');
6162
let { proof } = await hashChain.chain({ x, n });
6263
perfHashChain.end();
6364

64-
assert(await hashChain.verify(proof), 'Proof invalid');
65+
perfHashChain.start('verify', 'chain');
66+
const isValid = await hashChain.verify(proof);
67+
perfHashChain.end();
68+
assert(isValid, 'Proof invalid');
6569

6670
// check that the output is correct
6771
let z = Array.from({ length: n }, () => 0).reduce((y) => Poseidon.hash([y]), x);

src/examples/zkprogram/mutual-recursion.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ZkProgram, Field, DynamicProof, Proof, VerificationKey, Undefined, verify } from 'o1js';
1+
import { DynamicProof, Field, Proof, Undefined, VerificationKey, ZkProgram, verify } from 'o1js';
22
import { Performance } from '../../lib/testing/perf-regression.js';
33

44
/**
@@ -72,14 +72,18 @@ perfAdd.start('prove', 'performAddition');
7272
const { proof: baseCase } = await add.performAddition(Field(5), dummyProof, multiplyVk);
7373
perfAdd.end();
7474

75+
perfAdd.start('verify', 'performAddition');
7576
const validBaseCase = await verify(baseCase, addVk);
77+
perfAdd.end();
7678
console.log('ok?', validBaseCase);
7779

7880
perfMultiply.start('prove', 'performMultiplication');
7981
const { proof: multiply1 } = await multiply.performMultiplication(Field(3), baseCase);
8082
perfMultiply.end();
8183

84+
perfMultiply.start('verify', 'performMultiplication');
8285
const validMultiplication = await verify(multiply1, multiplyVk);
86+
perfMultiply.end();
8387
console.log('ok?', validMultiplication);
8488

8589
console.log('Proving second (recursive) addition');

src/examples/zkprogram/program-small-big.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ perfBig.start('prove', 'combinedHash');
7272
const { proof: proofBig } = await BigProgram.combinedHash(proofSmall.proof);
7373
perfBig.end();
7474

75-
console.time('verify big');
75+
perfBig.start('verify', 'combinedHash');
7676
await verify(proofBig, verificationKeyBig);
77-
console.timeEnd('verify big');
77+
perfBig.end();
7878

7979
console.log('Final Digest: ', proofBig.publicOutput.toHex());

src/examples/zkprogram/program-with-chunking.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Field, Cache, Gadgets, ZkProgram } from 'o1js';
1+
import { Cache, Field, Gadgets, ZkProgram } from 'o1js';
22
import { Performance } from '../../lib/testing/perf-regression.js';
33

44
let MyProgram = ZkProgram({
@@ -36,6 +36,8 @@ perf.start('prove', 'baseCase');
3636
let { proof } = await MyProgram.baseCase(Field(0));
3737
perf.end();
3838

39-
console.log('verify...');
39+
perf.start('verify', 'baseCase');
4040
let ok = await MyProgram.verify(proof);
41+
perf.end();
42+
4143
console.log('ok?', ok);

src/examples/zkprogram/runtime-table/run.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Field, verify } from 'o1js';
2-
import { PayrollRuntimeTableZkProgram } from './payroll.js';
32
import { Performance } from '../../../lib/testing/perf-regression.js';
3+
import { PayrollRuntimeTableZkProgram } from './payroll.js';
44

55
const cs = await PayrollRuntimeTableZkProgram.analyzeMethods();
66
const perfPayroll = Performance.create(PayrollRuntimeTableZkProgram.name, cs);
@@ -26,4 +26,6 @@ let { proof } = await PayrollRuntimeTableZkProgram.verifyPayroll(
2626
);
2727
perfPayroll.end();
2828

29-
verify(proof, verificationKey);
29+
perfPayroll.start('verify', 'verifyPayroll');
30+
await verify(proof, verificationKey);
31+
perfPayroll.end();

src/examples/zkprogram/side-loading/run.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { Field, MerkleTree, verify } from 'o1js';
2+
import { Performance } from '../../../lib/testing/perf-regression.js';
23
import {
3-
sideloadedProgram,
4-
mainProgram,
5-
SideloadedProgramProof,
6-
MerkleTreeWitness,
74
MainProgramState,
5+
MerkleTreeWitness,
6+
SideloadedProgramProof,
7+
mainProgram,
8+
sideloadedProgram,
89
} from './dynamic-keys-merkletree.js';
9-
import { Performance } from '../../../lib/testing/perf-regression.js';
1010

1111
const csSide = await sideloadedProgram.analyzeMethods();
1212
const csMain = await mainProgram.analyzeMethods();
@@ -56,7 +56,9 @@ const { proof: proof2 } = await mainProgram.validateUsingTree(
5656
);
5757
perfMain.end();
5858

59+
perfMain.start('verify', 'validateUsingTree');
5960
const validProof2 = await verify(proof2, mainVk);
61+
perfMain.end();
6062
console.log('ok?', validProof2);
6163

6264
console.log('\nProving different method of child program');

0 commit comments

Comments
 (0)