@aztec/native 4.0.4 → 4.1.0-nightly.20260311
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/dest/native_module.d.ts +10 -1
- package/dest/native_module.d.ts.map +1 -1
- package/dest/native_module.js +28 -26
- package/package.json +3 -3
- package/src/native_module.ts +33 -28
package/dest/native_module.d.ts
CHANGED
|
@@ -79,6 +79,11 @@ export declare function cancelSimulation(token: CancellationToken): void;
|
|
|
79
79
|
/**
|
|
80
80
|
* AVM simulation function that takes serialized inputs and a contract provider.
|
|
81
81
|
* The contract provider enables C++ to callback to TypeScript for contract data during simulation.
|
|
82
|
+
*
|
|
83
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool), so there is no risk
|
|
84
|
+
* of libuv thread pool exhaustion or deadlock from C++ BlockingCall callbacks.
|
|
85
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
86
|
+
*
|
|
82
87
|
* @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
|
|
83
88
|
* @param contractProvider - Object with callbacks for fetching contract instances and classes
|
|
84
89
|
* @param worldStateHandle - Native handle to WorldState instance
|
|
@@ -92,10 +97,14 @@ export declare function avmSimulate(inputs: Buffer, contractProvider: ContractPr
|
|
|
92
97
|
* AVM simulation function that uses pre-collected hints from TypeScript simulation.
|
|
93
98
|
* All contract data and merkle tree hints are included in the AvmCircuitInputs, so no runtime
|
|
94
99
|
* callbacks to TS or WS pointer are needed.
|
|
100
|
+
*
|
|
101
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool).
|
|
102
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
103
|
+
*
|
|
95
104
|
* @param inputs - Msgpack-serialized AvmCircuitInputs (AvmProvingInputs in C++) buffer
|
|
96
105
|
* @param logLevel - Log level to control C++ verbosity
|
|
97
106
|
* @returns Promise resolving to msgpack-serialized simulation results buffer
|
|
98
107
|
*/
|
|
99
108
|
export declare function avmSimulateWithHintedDbs(inputs: Buffer, logLevel?: LogLevel): Promise<Buffer>;
|
|
100
109
|
export {};
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX21vZHVsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25hdGl2ZV9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFhLEtBQUssTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLOUUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUQsVUFBVSxlQUFlO0lBQ3ZCLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDO0NBQzNDO0FBYUQsZUFBTyxNQUFNLGdCQUFnQixFQUFFLGVBQTRELENBQUM7QUFDNUYsZUFBTyxNQUFNLGVBQWUsRUFBRSxlQUEyRCxDQUFDO0FBRTFGOzs7R0FHRztBQUNILE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0I7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNsRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRS9EOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRXBFOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFckY7Ozs7T0FJRztJQUNILGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQzs7O09BR0c7SUFDSCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEM7OztPQUdHO0lBQ0gsZ0JBQWdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DO0FBb0JEOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7O0dBSUc7QUFDSCx3QkFBZ0IsdUJBQXVCLElBQUksaUJBQWlCLENBRTNEO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUUvRDtBQXNCRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCx3QkFBZ0IsV0FBVyxDQUN6QixNQUFNLEVBQUUsTUFBTSxFQUNkLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQ3JCLFFBQVEsR0FBRSxRQUFpQixFQUMzQixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQ2YsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsR0FDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQVdqQjtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFFLFFBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyRyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native_module.d.ts","sourceRoot":"","sources":["../src/native_module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAa,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,UAAU,eAAe;IACvB,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;CAC3C;AAaD,eAAO,MAAM,gBAAgB,EAAE,eAA4D,CAAC;AAC5F,eAAO,MAAM,eAAe,EAAE,eAA2D,CAAC;AAE1F;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClE;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE/D;;;;OAIG;IACH,YAAY,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;OAIG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEpE;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAErF;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAoBD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE/D;
|
|
1
|
+
{"version":3,"file":"native_module.d.ts","sourceRoot":"","sources":["../src/native_module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAa,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAK9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,UAAU,eAAe;IACvB,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;CAC3C;AAaD,eAAO,MAAM,gBAAgB,EAAE,eAA4D,CAAC;AAC5F,eAAO,MAAM,eAAe,EAAE,eAA2D,CAAC;AAE1F;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAClE;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE/D;;;;OAIG;IACH,YAAY,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;OAIG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEpE;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAErF;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAoBD;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE/D;AAsBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,GAAG,EACrB,QAAQ,GAAE,QAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAErG"}
|
package/dest/native_module.js
CHANGED
|
@@ -33,21 +33,29 @@ const nativeCancelSimulation = nativeModule.cancelSimulation;
|
|
|
33
33
|
nativeCancelSimulation(token);
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
36
|
+
* Maximum number of concurrent AVM simulations. Each simulation spawns a dedicated OS thread,
|
|
37
|
+
* so this controls resource usage. Defaults to 4. Set to 0 for unlimited.
|
|
38
|
+
*/ const AVM_MAX_CONCURRENT_SIMULATIONS = parseInt(process.env.AVM_MAX_CONCURRENT_SIMULATIONS ?? '4', 10);
|
|
39
|
+
const avmSimulationSemaphore = AVM_MAX_CONCURRENT_SIMULATIONS > 0 ? new Semaphore(AVM_MAX_CONCURRENT_SIMULATIONS) : null;
|
|
40
|
+
async function withAvmConcurrencyLimit(fn) {
|
|
41
|
+
if (!avmSimulationSemaphore) {
|
|
42
|
+
return fn();
|
|
43
|
+
}
|
|
44
|
+
await avmSimulationSemaphore.acquire();
|
|
45
|
+
try {
|
|
46
|
+
return await fn();
|
|
47
|
+
} finally{
|
|
48
|
+
avmSimulationSemaphore.release();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
48
51
|
/**
|
|
49
52
|
* AVM simulation function that takes serialized inputs and a contract provider.
|
|
50
53
|
* The contract provider enables C++ to callback to TypeScript for contract data during simulation.
|
|
54
|
+
*
|
|
55
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool), so there is no risk
|
|
56
|
+
* of libuv thread pool exhaustion or deadlock from C++ BlockingCall callbacks.
|
|
57
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
58
|
+
*
|
|
51
59
|
* @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
|
|
52
60
|
* @param contractProvider - Object with callbacks for fetching contract instances and classes
|
|
53
61
|
* @param worldStateHandle - Native handle to WorldState instance
|
|
@@ -55,26 +63,20 @@ const avmSimulationSemaphore = new Semaphore(MAX_CONCURRENT_AVM_SIMULATIONS);
|
|
|
55
63
|
* @param logger - Optional logger object for C++ logging callbacks
|
|
56
64
|
* @param cancellationToken - Optional token to enable cancellation support
|
|
57
65
|
* @returns Promise resolving to msgpack-serialized AvmCircuitPublicInputs buffer
|
|
58
|
-
*/ export
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
return await nativeAvmSimulate(inputs, contractProvider, worldStateHandle, LogLevels.indexOf(logLevel), logger ? (level, msg)=>logger[level](msg) : null, cancellationToken);
|
|
62
|
-
} finally{
|
|
63
|
-
avmSimulationSemaphore.release();
|
|
64
|
-
}
|
|
66
|
+
*/ export function avmSimulate(inputs, contractProvider, worldStateHandle, logLevel = 'info', logger, cancellationToken) {
|
|
67
|
+
return withAvmConcurrencyLimit(()=>nativeAvmSimulate(inputs, contractProvider, worldStateHandle, LogLevels.indexOf(logLevel), logger ? (level, msg)=>logger[level](msg) : null, cancellationToken));
|
|
65
68
|
}
|
|
66
69
|
/**
|
|
67
70
|
* AVM simulation function that uses pre-collected hints from TypeScript simulation.
|
|
68
71
|
* All contract data and merkle tree hints are included in the AvmCircuitInputs, so no runtime
|
|
69
72
|
* callbacks to TS or WS pointer are needed.
|
|
73
|
+
*
|
|
74
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool).
|
|
75
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
76
|
+
*
|
|
70
77
|
* @param inputs - Msgpack-serialized AvmCircuitInputs (AvmProvingInputs in C++) buffer
|
|
71
78
|
* @param logLevel - Log level to control C++ verbosity
|
|
72
79
|
* @returns Promise resolving to msgpack-serialized simulation results buffer
|
|
73
|
-
*/ export
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
return await nativeAvmSimulateWithHintedDbs(inputs, LogLevels.indexOf(logLevel));
|
|
77
|
-
} finally{
|
|
78
|
-
avmSimulationSemaphore.release();
|
|
79
|
-
}
|
|
80
|
+
*/ export function avmSimulateWithHintedDbs(inputs, logLevel = 'info') {
|
|
81
|
+
return withAvmConcurrencyLimit(()=>nativeAvmSimulateWithHintedDbs(inputs, LogLevels.indexOf(logLevel)));
|
|
80
82
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/native",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.1.0-nightly.20260311",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js"
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"../package.common.json"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@aztec/bb.js": "4.0.
|
|
19
|
-
"@aztec/foundation": "4.0.
|
|
18
|
+
"@aztec/bb.js": "4.1.0-nightly.20260311",
|
|
19
|
+
"@aztec/foundation": "4.1.0-nightly.20260311",
|
|
20
20
|
"msgpackr": "^1.11.2"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
package/src/native_module.ts
CHANGED
|
@@ -128,23 +128,33 @@ export function cancelSimulation(token: CancellationToken): void {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* The C++ simulator uses NAPI BlockingCall to callback to TypeScript for contract data.
|
|
134
|
-
* This blocks the libuv thread while waiting for the callback to complete. If all libuv
|
|
135
|
-
* threads are blocked waiting for callbacks, no threads remain to service those callbacks,
|
|
136
|
-
* causing deadlock.
|
|
137
|
-
*
|
|
138
|
-
* We limit concurrent simulations to UV_THREADPOOL_SIZE / 2 to ensure threads remain
|
|
139
|
-
* available for callback processing.
|
|
131
|
+
* Maximum number of concurrent AVM simulations. Each simulation spawns a dedicated OS thread,
|
|
132
|
+
* so this controls resource usage. Defaults to 4. Set to 0 for unlimited.
|
|
140
133
|
*/
|
|
141
|
-
const
|
|
142
|
-
const
|
|
143
|
-
|
|
134
|
+
const AVM_MAX_CONCURRENT_SIMULATIONS = parseInt(process.env.AVM_MAX_CONCURRENT_SIMULATIONS ?? '4', 10);
|
|
135
|
+
const avmSimulationSemaphore =
|
|
136
|
+
AVM_MAX_CONCURRENT_SIMULATIONS > 0 ? new Semaphore(AVM_MAX_CONCURRENT_SIMULATIONS) : null;
|
|
137
|
+
|
|
138
|
+
async function withAvmConcurrencyLimit<T>(fn: () => Promise<T>): Promise<T> {
|
|
139
|
+
if (!avmSimulationSemaphore) {
|
|
140
|
+
return fn();
|
|
141
|
+
}
|
|
142
|
+
await avmSimulationSemaphore.acquire();
|
|
143
|
+
try {
|
|
144
|
+
return await fn();
|
|
145
|
+
} finally {
|
|
146
|
+
avmSimulationSemaphore.release();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
144
149
|
|
|
145
150
|
/**
|
|
146
151
|
* AVM simulation function that takes serialized inputs and a contract provider.
|
|
147
152
|
* The contract provider enables C++ to callback to TypeScript for contract data during simulation.
|
|
153
|
+
*
|
|
154
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool), so there is no risk
|
|
155
|
+
* of libuv thread pool exhaustion or deadlock from C++ BlockingCall callbacks.
|
|
156
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
157
|
+
*
|
|
148
158
|
* @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
|
|
149
159
|
* @param contractProvider - Object with callbacks for fetching contract instances and classes
|
|
150
160
|
* @param worldStateHandle - Native handle to WorldState instance
|
|
@@ -153,7 +163,7 @@ const avmSimulationSemaphore = new Semaphore(MAX_CONCURRENT_AVM_SIMULATIONS);
|
|
|
153
163
|
* @param cancellationToken - Optional token to enable cancellation support
|
|
154
164
|
* @returns Promise resolving to msgpack-serialized AvmCircuitPublicInputs buffer
|
|
155
165
|
*/
|
|
156
|
-
export
|
|
166
|
+
export function avmSimulate(
|
|
157
167
|
inputs: Buffer,
|
|
158
168
|
contractProvider: ContractProvider,
|
|
159
169
|
worldStateHandle: any,
|
|
@@ -161,35 +171,30 @@ export async function avmSimulate(
|
|
|
161
171
|
logger?: Logger,
|
|
162
172
|
cancellationToken?: CancellationToken,
|
|
163
173
|
): Promise<Buffer> {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
try {
|
|
167
|
-
return await nativeAvmSimulate(
|
|
174
|
+
return withAvmConcurrencyLimit(() =>
|
|
175
|
+
nativeAvmSimulate(
|
|
168
176
|
inputs,
|
|
169
177
|
contractProvider,
|
|
170
178
|
worldStateHandle,
|
|
171
179
|
LogLevels.indexOf(logLevel),
|
|
172
180
|
logger ? (level: LogLevel, msg: string) => logger[level](msg) : null,
|
|
173
181
|
cancellationToken,
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
avmSimulationSemaphore.release();
|
|
177
|
-
}
|
|
182
|
+
),
|
|
183
|
+
);
|
|
178
184
|
}
|
|
179
185
|
|
|
180
186
|
/**
|
|
181
187
|
* AVM simulation function that uses pre-collected hints from TypeScript simulation.
|
|
182
188
|
* All contract data and merkle tree hints are included in the AvmCircuitInputs, so no runtime
|
|
183
189
|
* callbacks to TS or WS pointer are needed.
|
|
190
|
+
*
|
|
191
|
+
* Simulations run on dedicated std::threads (not the libuv thread pool).
|
|
192
|
+
* Concurrency is limited by AVM_MAX_CONCURRENT_SIMULATIONS (default 4, 0 = unlimited).
|
|
193
|
+
*
|
|
184
194
|
* @param inputs - Msgpack-serialized AvmCircuitInputs (AvmProvingInputs in C++) buffer
|
|
185
195
|
* @param logLevel - Log level to control C++ verbosity
|
|
186
196
|
* @returns Promise resolving to msgpack-serialized simulation results buffer
|
|
187
197
|
*/
|
|
188
|
-
export
|
|
189
|
-
|
|
190
|
-
try {
|
|
191
|
-
return await nativeAvmSimulateWithHintedDbs(inputs, LogLevels.indexOf(logLevel));
|
|
192
|
-
} finally {
|
|
193
|
-
avmSimulationSemaphore.release();
|
|
194
|
-
}
|
|
198
|
+
export function avmSimulateWithHintedDbs(inputs: Buffer, logLevel: LogLevel = 'info'): Promise<Buffer> {
|
|
199
|
+
return withAvmConcurrencyLimit(() => nativeAvmSimulateWithHintedDbs(inputs, LogLevels.indexOf(logLevel)));
|
|
195
200
|
}
|