11import { Field , MerkleTree , verify } from 'o1js' ;
2+ import { Performance } from '../../../lib/testing/perf-regression.js' ;
23import {
3- sideloadedProgram ,
4- mainProgram ,
5- SideloadedProgramProof ,
6- MerkleTreeWitness ,
74 MainProgramState ,
5+ MerkleTreeWitness ,
6+ SideloadedProgramProof ,
7+ mainProgram ,
8+ sideloadedProgram ,
89} from './dynamic-keys-merkletree.js' ;
910
10- console . log ( 'Compiling circuits...' ) ;
11+ const csSide = await sideloadedProgram . analyzeMethods ( ) ;
12+ const csMain = await mainProgram . analyzeMethods ( ) ;
13+
14+ const perfSide = Performance . create ( sideloadedProgram . name , csSide ) ;
15+ const perfMain = Performance . create ( mainProgram . name , csMain ) ;
16+
17+ perfSide . start ( 'compile' ) ;
1118const sideVk = ( await sideloadedProgram . compile ( ) ) . verificationKey ;
19+ perfSide . end ( ) ;
20+
21+ perfMain . start ( 'compile' ) ;
1222const mainVk = ( await mainProgram . compile ( ) ) . verificationKey ;
23+ perfMain . end ( ) ;
1324
1425const tree = new MerkleTree ( 64 ) ;
1526
16- console . log ( 'Proving deployment of side-loaded key' ) ;
27+ console . log ( '\nProving deployment of side-loaded key' ) ;
1728const rootBefore = tree . getRoot ( ) ;
1829tree . setLeaf ( 1n , sideVk . hash ) ;
1930const witness = new MerkleTreeWitness ( tree . getWitness ( 1n ) ) ;
2031
32+ perfMain . start ( 'prove' , 'addSideloadedProgram' ) ;
2133const { proof : proof1 } = await mainProgram . addSideloadedProgram (
2234 new MainProgramState ( {
2335 treeRoot : rootBefore ,
@@ -26,26 +38,35 @@ const { proof: proof1 } = await mainProgram.addSideloadedProgram(
2638 sideVk ,
2739 witness
2840) ;
41+ perfMain . end ( ) ;
2942
30- console . log ( 'Proving child program execution' ) ;
43+ console . log ( '\nProving child program execution' ) ;
44+ perfSide . start ( 'prove' , 'compute' ) ;
3145const { proof : childProof1 } = await sideloadedProgram . compute ( Field ( 0 ) , Field ( 10 ) ) ;
46+ perfSide . end ( ) ;
3247
33- console . log ( 'Proving verification inside main program' ) ;
48+ console . log ( '\nProving verification inside main program' ) ;
49+ perfMain . start ( 'prove' , 'validateUsingTree' ) ;
3450const { proof : proof2 } = await mainProgram . validateUsingTree (
3551 proof1 . publicOutput ,
3652 proof1 ,
3753 sideVk ,
3854 witness ,
3955 SideloadedProgramProof . fromProof ( childProof1 )
4056) ;
57+ perfMain . end ( ) ;
4158
59+ perfMain . start ( 'verify' , 'validateUsingTree' ) ;
4260const validProof2 = await verify ( proof2 , mainVk ) ;
61+ perfMain . end ( ) ;
4362console . log ( 'ok?' , validProof2 ) ;
4463
45- console . log ( 'Proving different method of child program' ) ;
64+ console . log ( '\nProving different method of child program' ) ;
65+ perfSide . start ( 'prove' , 'assertAndAdd' ) ;
4666const { proof : childProof2 } = await sideloadedProgram . assertAndAdd ( Field ( 0 ) , Field ( 10 ) ) ;
67+ perfSide . end ( ) ;
4768
48- console . log ( 'Proving verification inside main program' ) ;
69+ console . log ( '\nProving verification inside main program' ) ;
4970const { proof : proof3 } = await mainProgram . validateUsingTree (
5071 proof1 . publicOutput ,
5172 proof1 ,
0 commit comments