Skip to content

Commit 937996a

Browse files
committed
Update zkprogram examples following the changes in the performance regression framework
1 parent d129e28 commit 937996a

File tree

6 files changed

+59
-49
lines changed

6 files changed

+59
-49
lines changed

src/examples/zkprogram/gadgets.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Field, Provable, Gadgets, ZkProgram } from 'o1js';
2-
import { perfStart, perfEnd } from '../../lib/testing/perf-regression.js';
2+
import { Performance } from '../../lib/testing/perf-regression.js';
33

44
let cs = await Provable.constraintSystem(() => {
55
let f = Provable.witness(Field, () => 12);
@@ -56,26 +56,27 @@ const BitwiseProver = ZkProgram({
5656
});
5757

5858
const csBitwise = await BitwiseProver.analyzeMethods();
59+
const perfBitwise = Performance.create(BitwiseProver.name, csBitwise);
5960

6061
console.log('\ncompiling..');
6162

62-
perfStart('compile', BitwiseProver.name);
63+
perfBitwise.start('compile');
6364
await BitwiseProver.compile();
64-
perfEnd();
65+
perfBitwise.end();
6566

6667
console.log('\nproving..');
6768

68-
perfStart('prove', BitwiseProver.name, csBitwise, 'rot');
69+
perfBitwise.start('prove', 'rot');
6970
let { proof: rotProof } = await BitwiseProver.rot();
70-
perfEnd();
71+
perfBitwise.end();
7172
if (!(await BitwiseProver.verify(rotProof))) throw Error('rot: Invalid proof');
7273

73-
perfStart('prove', BitwiseProver.name, csBitwise, 'xor');
74+
perfBitwise.start('prove', 'xor');
7475
let { proof: xorProof } = await BitwiseProver.xor();
75-
perfEnd();
76+
perfBitwise.end();
7677
if (!(await BitwiseProver.verify(xorProof))) throw Error('xor: Invalid proof');
7778

78-
perfStart('prove', BitwiseProver.name, csBitwise, 'and');
79+
perfBitwise.start('prove', 'and');
7980
let { proof: andProof } = await BitwiseProver.and();
80-
perfEnd();
81+
perfBitwise.end();
8182
if (!(await BitwiseProver.verify(andProof))) throw Error('and: Invalid proof');

src/examples/zkprogram/hash-chain.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* We implement this as a self-recursive ZkProgram, using `proveRecursivelyIf()`
66
*/
77
import { assert, Bool, Experimental, Field, Poseidon, Provable, Struct, ZkProgram } from 'o1js';
8-
import { perfStart, perfEnd } from '../../lib/testing/perf-regression.js';
8+
import { Performance } from '../../lib/testing/perf-regression.js';
99

1010
const HASHES_PER_PROOF = 30;
1111

@@ -49,17 +49,17 @@ const hashChain = ZkProgram({
4949
let hashChainRecursive = Experimental.Recursive(hashChain);
5050

5151
const cs = await hashChain.analyzeMethods();
52-
53-
perfStart('compile', hashChain.name);
52+
const perfHashChain = Performance.create(hashChain.name, cs);
53+
perfHashChain.start('compile');
5454
await hashChain.compile();
55-
perfEnd();
55+
perfHashChain.end();
5656

5757
let n = 100;
5858
let x = Field.random();
5959

60-
perfStart('prove', hashChain.name, cs, 'chain');
60+
perfHashChain.start('prove', 'chain');
6161
let { proof } = await hashChain.chain({ x, n });
62-
perfEnd();
62+
perfHashChain.end();
6363

6464
assert(await hashChain.verify(proof), 'Proof invalid');
6565

src/examples/zkprogram/mutual-recursion.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ZkProgram, Field, DynamicProof, Proof, VerificationKey, Undefined, verify } from 'o1js';
2-
import { perfStart, perfEnd } from '../../lib/testing/perf-regression.js';
2+
import { Performance } from '../../lib/testing/perf-regression.js';
33

44
/**
55
* This example showcases mutual recursion (A -> B -> A) through two circuits that respectively
@@ -55,26 +55,29 @@ const multiply = ZkProgram({
5555
const csAdd = await add.analyzeMethods();
5656
const csMultiply = await multiply.analyzeMethods();
5757

58-
perfStart('compile', add.name);
58+
const perfAdd = Performance.create(add.name, csAdd);
59+
const perfMultiply = Performance.create(multiply.name, csMultiply);
60+
61+
perfAdd.start('compile');
5962
const addVk = (await add.compile()).verificationKey;
60-
perfEnd();
63+
perfAdd.end();
6164

62-
perfStart('compile', multiply.name);
65+
perfMultiply.start('compile');
6366
const multiplyVk = (await multiply.compile()).verificationKey;
64-
perfEnd();
67+
perfMultiply.end();
6568

6669
const dummyProof = await DynamicMultiplyProof.dummy(undefined, Field(0), 1);
6770

68-
perfStart('prove', add.name, csAdd, 'performAddition');
71+
perfAdd.start('prove', 'performAddition');
6972
const { proof: baseCase } = await add.performAddition(Field(5), dummyProof, multiplyVk);
70-
perfEnd();
73+
perfAdd.end();
7174

7275
const validBaseCase = await verify(baseCase, addVk);
7376
console.log('ok?', validBaseCase);
7477

75-
perfStart('prove', multiply.name, csMultiply, 'performMultiplication');
78+
perfMultiply.start('prove', 'performMultiplication');
7679
const { proof: multiply1 } = await multiply.performMultiplication(Field(3), baseCase);
77-
perfEnd();
80+
perfMultiply.end();
7881

7982
const validMultiplication = await verify(multiply1, multiplyVk);
8083
console.log('ok?', validMultiplication);

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

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

44
let MyProgram = ZkProgram({
55
chunks: 1,
@@ -24,15 +24,17 @@ let MyProgram = ZkProgram({
2424
});
2525

2626
const cs = await MyProgram.analyzeMethods();
27+
const perf = Performance.create(MyProgram.name, cs);
28+
2729
console.log('MyProgram baseCase method rows: ', cs.baseCase.rows);
2830

29-
perfStart('compile', MyProgram.name);
31+
perf.start('compile');
3032
await MyProgram.compile({ cache: Cache.None });
31-
perfEnd();
33+
perf.end();
3234

33-
perfStart('prove', MyProgram.name, cs, 'baseCase');
35+
perf.start('prove', 'baseCase');
3436
let { proof } = await MyProgram.baseCase(Field(0));
35-
perfEnd();
37+
perf.end();
3638

3739
console.log('verify...');
3840
let ok = await MyProgram.verify(proof);

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@ import {
66
MerkleTreeWitness,
77
MainProgramState,
88
} from './dynamic-keys-merkletree.js';
9-
import { perfStart, perfEnd } from '../../../lib/testing/perf-regression.js';
9+
import { Performance } from '../../../lib/testing/perf-regression.js';
1010

1111
const csSide = await sideloadedProgram.analyzeMethods();
1212
const csMain = await mainProgram.analyzeMethods();
1313

14-
perfStart('compile', sideloadedProgram.name);
14+
const perfSide = Performance.create(sideloadedProgram.name, csSide);
15+
const perfMain = Performance.create(mainProgram.name, csMain);
16+
17+
perfSide.start('compile');
1518
const sideVk = (await sideloadedProgram.compile()).verificationKey;
16-
perfEnd();
19+
perfSide.end();
1720

18-
perfStart('compile', mainProgram.name);
21+
perfMain.start('compile');
1922
const mainVk = (await mainProgram.compile()).verificationKey;
20-
perfEnd();
23+
perfMain.end();
2124

2225
const tree = new MerkleTree(64);
2326

@@ -26,7 +29,7 @@ const rootBefore = tree.getRoot();
2629
tree.setLeaf(1n, sideVk.hash);
2730
const witness = new MerkleTreeWitness(tree.getWitness(1n));
2831

29-
perfStart('prove', mainProgram.name, csMain, 'addSideloadedProgram');
32+
perfMain.start('prove', 'addSideloadedProgram');
3033
const { proof: proof1 } = await mainProgram.addSideloadedProgram(
3134
new MainProgramState({
3235
treeRoot: rootBefore,
@@ -35,31 +38,31 @@ const { proof: proof1 } = await mainProgram.addSideloadedProgram(
3538
sideVk,
3639
witness
3740
);
38-
perfEnd();
41+
perfMain.end();
3942

4043
console.log('\nProving child program execution');
41-
perfStart('prove', sideloadedProgram.name, csSide, 'compute');
44+
perfSide.start('prove', 'compute');
4245
const { proof: childProof1 } = await sideloadedProgram.compute(Field(0), Field(10));
43-
perfEnd();
46+
perfSide.end();
4447

4548
console.log('\nProving verification inside main program');
46-
perfStart('prove', mainProgram.name, csMain, 'validateUsingTree');
49+
perfMain.start('prove', 'validateUsingTree');
4750
const { proof: proof2 } = await mainProgram.validateUsingTree(
4851
proof1.publicOutput,
4952
proof1,
5053
sideVk,
5154
witness,
5255
SideloadedProgramProof.fromProof(childProof1)
5356
);
54-
perfEnd();
57+
perfMain.end();
5558

5659
const validProof2 = await verify(proof2, mainVk);
5760
console.log('ok?', validProof2);
5861

5962
console.log('\nProving different method of child program');
60-
perfStart('prove', sideloadedProgram.name, csSide, 'assertAndAdd');
63+
perfSide.start('prove', 'assertAndAdd');
6164
const { proof: childProof2 } = await sideloadedProgram.assertAndAdd(Field(0), Field(10));
62-
perfEnd();
65+
perfSide.end();
6366

6467
console.log('\nProving verification inside main program');
6568
const { proof: proof3 } = await mainProgram.validateUsingTree(
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import assert from 'node:assert';
22
import { diverse, Bytes128 } from './diverse-zk-program.js';
3-
import { perfStart, perfEnd } from '../../src/lib/testing/perf-regression.js';
3+
import { Performance } from '../../src/lib/testing/perf-regression.js';
44

55
const cs = await diverse.analyzeMethods();
6+
const perfDiverse = Performance.create(diverse.name, cs);
67

7-
perfStart('compile', diverse.name, cs);
8+
perfDiverse.start('compile');
89
await diverse.compile();
9-
perfEnd();
10+
perfDiverse.end();
1011

11-
perfStart('prove', diverse.name, cs, 'sha3');
12+
perfDiverse.start('prove', 'sha3');
1213
let { proof: proof1 } = await diverse.sha3(Bytes128.fromString('hello'));
13-
perfEnd();
14+
perfDiverse.end();
1415

15-
perfStart('prove', diverse.name, cs, 'recursive');
16+
perfDiverse.start('prove', 'recursive');
1617
let { proof: proof2 } = await diverse.recursive(proof1);
17-
perfEnd();
18+
perfDiverse.end();
1819

1920
assert(await diverse.verify(proof2), 'verifies');

0 commit comments

Comments
 (0)