1+ import { Field } from '../provable/field.js' ;
2+ import { Cache } from '../proof-system/cache.js' ;
3+ import { ZkProgram } from '../proof-system/zkprogram.js' ;
4+ import { Spec , fieldWithRng } from '../testing/equivalent.js' ;
5+ import { Random } from '../testing/property.js' ;
6+ import { assert } from '../provable/gadgets/common.js' ;
7+ import { Gadgets } from '../provable/gadgets/gadgets.js' ;
8+ import { wasm } from '../../bindings.js' ;
9+
10+
11+ function getMemory ( ) {
12+ return {
13+ wasm : ( wasm as any ) . __wasm . memory . buffer . byteLength / ( 1024 * 1024 ) ,
14+ js : process . memoryUsage ( ) . heapTotal / ( 1024 * 1024 ) ,
15+ } ;
16+ }
17+
18+ let uint = ( n : number | bigint ) : Spec < bigint , Field > => {
19+ return fieldWithRng ( Random . bignat ( ( 1n << BigInt ( n ) ) - 1n ) ) ;
20+ } ;
21+
22+
23+ // dummy circuit
24+ let LazyMode = ZkProgram ( {
25+ name : 'lazy-mode' ,
26+ methods : {
27+ baseCase : {
28+ privateInputs : [ Field ] ,
29+ async method ( v : Field ) {
30+ for ( let i = 0 ; i < 1 << 15 ; i ++ ) {
31+ let w = v . add ( new Field ( i ) ) ;
32+ Gadgets . rangeCheck64 ( w ) ;
33+ }
34+ } ,
35+ } ,
36+ } ,
37+ } ) ;
38+
39+
40+ async function testLazyMode ( lazyMode : boolean ) {
41+
42+ console . log ( `(${ lazyMode ? 'Lazy' : 'Eager' } ) Memory before compilation` , getMemory ( ) ) ;
43+
44+ await LazyMode . compile ( {
45+ lazyMode,
46+ cache : Cache . None ,
47+ forceRecompile : true ,
48+ } ) ;
49+
50+ console . log ( `(${ lazyMode ? 'Lazy' : 'Eager' } ) Memory after compilation` , getMemory ( ) ) ;
51+ console . log ( ' ' ) ;
52+ console . log ( `(${ lazyMode ? 'Lazy' : 'Eager' } ) Memory before proof` , getMemory ( ) ) ;
53+
54+ let { proof } = await LazyMode . baseCase ( new Field ( 1n ) ) ;
55+
56+ console . log ( `(${ lazyMode ? 'Lazy' : 'Eager' } ) Memory after proof` , getMemory ( ) ) ;
57+ console . log ( ' ' ) ;
58+
59+ let isValid = await LazyMode . verify ( proof ) ;
60+
61+ console . log ( `(${ lazyMode ? 'Lazy' : 'Eager' } ) Memory after verify` , getMemory ( ) ) ;
62+
63+ assert ( isValid ) ;
64+
65+ }
66+
67+ await testLazyMode ( false ) ;
0 commit comments