@aztec/native 0.0.1-commit.d3ec352c → 0.0.1-commit.f295ac2

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.
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { MessageHeader, TypedMessage } from '@aztec/foundation/message';
3
3
  import { Encoder, addExtension } from 'msgpackr';
4
4
  import { isAnyArrayBuffer } from 'util/types';
@@ -1,4 +1,4 @@
1
- import { type LogLevel } from '@aztec/foundation/log';
1
+ import { type LogLevel, type Logger } from '@aztec/foundation/log';
2
2
  import type { MessageReceiver } from './msgpack_channel.js';
3
3
  interface NativeClassCtor {
4
4
  new (...args: unknown[]): MessageReceiver;
@@ -58,16 +58,36 @@ export interface ContractProvider {
58
58
  */
59
59
  revertCheckpoint(): Promise<void>;
60
60
  }
61
+ /**
62
+ * Cancellation token handle used to cancel C++ AVM simulation.
63
+ * The token is created via createCancellationToken() and can be cancelled via cancelSimulation().
64
+ * Pass it to avmSimulate to enable cancellation support.
65
+ */
66
+ export type CancellationToken = any;
67
+ /**
68
+ * Create a new cancellation token for C++ simulation.
69
+ * This token can be passed to avmSimulate and later cancelled via cancelSimulation().
70
+ * @returns A handle to a cancellation token
71
+ */
72
+ export declare function createCancellationToken(): CancellationToken;
73
+ /**
74
+ * Signal cancellation to a C++ simulation.
75
+ * The simulation will stop at the next opcode or before the next WorldState write.
76
+ * @param token - The cancellation token previously passed to avmSimulate
77
+ */
78
+ export declare function cancelSimulation(token: CancellationToken): void;
61
79
  /**
62
80
  * AVM simulation function that takes serialized inputs and a contract provider.
63
81
  * The contract provider enables C++ to callback to TypeScript for contract data during simulation.
64
82
  * @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
65
83
  * @param contractProvider - Object with callbacks for fetching contract instances and classes
66
84
  * @param worldStateHandle - Native handle to WorldState instance
67
- * @param logLevel - Log level to control C++ verbosity
85
+ * @param logLevel - Optional log level to control C++ verbosity (only used if loggerFunction is provided)
86
+ * @param logger - Optional logger object for C++ logging callbacks
87
+ * @param cancellationToken - Optional token to enable cancellation support
68
88
  * @returns Promise resolving to msgpack-serialized AvmCircuitPublicInputs buffer
69
89
  */
70
- export declare function avmSimulate(inputs: Buffer, contractProvider: ContractProvider, worldStateHandle: any, logLevel?: LogLevel): Promise<Buffer>;
90
+ export declare function avmSimulate(inputs: Buffer, contractProvider: ContractProvider, worldStateHandle: any, logLevel?: LogLevel, logger?: Logger, cancellationToken?: CancellationToken): Promise<Buffer>;
71
91
  /**
72
92
  * AVM simulation function that uses pre-collected hints from TypeScript simulation.
73
93
  * All contract data and merkle tree hints are included in the AvmCircuitInputs, so no runtime
@@ -78,4 +98,4 @@ export declare function avmSimulate(inputs: Buffer, contractProvider: ContractPr
78
98
  */
79
99
  export declare function avmSimulateWithHintedDbs(inputs: Buffer, logLevel?: LogLevel): Promise<Buffer>;
80
100
  export {};
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX21vZHVsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25hdGl2ZV9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFLakUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUQsVUFBVSxlQUFlO0lBQ3ZCLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDO0NBQzNDO0FBYUQsZUFBTyxNQUFNLGdCQUFnQixFQUFFLGVBQTRELENBQUM7QUFDNUYsZUFBTyxNQUFNLGVBQWUsRUFBRSxlQUEyRCxDQUFDO0FBRTFGOzs7R0FHRztBQUNILE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0I7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNsRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRS9EOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRXBFOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFckY7Ozs7T0FJRztJQUNILGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQzs7O09BR0c7SUFDSCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEM7OztPQUdHO0lBQ0gsZ0JBQWdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DO0FBOEJEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLFdBQVcsQ0FDL0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsZ0JBQWdCLEVBQUUsR0FBRyxFQUNyQixRQUFRLEdBQUUsUUFBaUIsR0FDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU9qQjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBc0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUUsUUFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBTzNHIn0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX21vZHVsZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25hdGl2ZV9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFhLEtBQUssTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLOUUsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFNUQsVUFBVSxlQUFlO0lBQ3ZCLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDO0NBQzNDO0FBYUQsZUFBTyxNQUFNLGdCQUFnQixFQUFFLGVBQTRELENBQUM7QUFDNUYsZUFBTyxNQUFNLGVBQWUsRUFBRSxlQUEyRCxDQUFDO0FBRTFGOzs7R0FHRztBQUNILE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0I7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNsRTs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRS9EOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRXBFOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFckY7Ozs7T0FJRztJQUNILGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQzs7O09BR0c7SUFDSCxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEM7OztPQUdHO0lBQ0gsZ0JBQWdCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ25DO0FBb0JEOzs7O0dBSUc7QUFDSCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7O0dBSUc7QUFDSCx3QkFBZ0IsdUJBQXVCLElBQUksaUJBQWlCLENBRTNEO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEdBQUcsSUFBSSxDQUUvRDtBQWlCRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsd0JBQXNCLFdBQVcsQ0FDL0IsTUFBTSxFQUFFLE1BQU0sRUFDZCxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsZ0JBQWdCLEVBQUUsR0FBRyxFQUNyQixRQUFRLEdBQUUsUUFBaUIsRUFDM0IsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUNmLGlCQUFpQixDQUFDLEVBQUUsaUJBQWlCLEdBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FlakI7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQXNCLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFFLFFBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU8zRyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"native_module.d.ts","sourceRoot":"","sources":["../src/native_module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,uBAAuB,CAAC;AAKjE,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;AA8BD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,GAAG,EACrB,QAAQ,GAAE,QAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3G"}
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;AAiBD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,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,CAejB;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,QAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3G"}
@@ -16,6 +16,22 @@ export const NativeLMDBStore = nativeModule.LMDBStore;
16
16
  // Internal native functions with numeric log level
17
17
  const nativeAvmSimulate = nativeModule.avmSimulate;
18
18
  const nativeAvmSimulateWithHintedDbs = nativeModule.avmSimulateWithHintedDbs;
19
+ const nativeCreateCancellationToken = nativeModule.createCancellationToken;
20
+ const nativeCancelSimulation = nativeModule.cancelSimulation;
21
+ /**
22
+ * Create a new cancellation token for C++ simulation.
23
+ * This token can be passed to avmSimulate and later cancelled via cancelSimulation().
24
+ * @returns A handle to a cancellation token
25
+ */ export function createCancellationToken() {
26
+ return nativeCreateCancellationToken();
27
+ }
28
+ /**
29
+ * Signal cancellation to a C++ simulation.
30
+ * The simulation will stop at the next opcode or before the next WorldState write.
31
+ * @param token - The cancellation token previously passed to avmSimulate
32
+ */ export function cancelSimulation(token) {
33
+ nativeCancelSimulation(token);
34
+ }
19
35
  /**
20
36
  * Concurrency limiting for C++ AVM simulation to prevent libuv thread pool exhaustion.
21
37
  *
@@ -35,12 +51,14 @@ const avmSimulationSemaphore = new Semaphore(MAX_CONCURRENT_AVM_SIMULATIONS);
35
51
  * @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
36
52
  * @param contractProvider - Object with callbacks for fetching contract instances and classes
37
53
  * @param worldStateHandle - Native handle to WorldState instance
38
- * @param logLevel - Log level to control C++ verbosity
54
+ * @param logLevel - Optional log level to control C++ verbosity (only used if loggerFunction is provided)
55
+ * @param logger - Optional logger object for C++ logging callbacks
56
+ * @param cancellationToken - Optional token to enable cancellation support
39
57
  * @returns Promise resolving to msgpack-serialized AvmCircuitPublicInputs buffer
40
- */ export async function avmSimulate(inputs, contractProvider, worldStateHandle, logLevel = 'info') {
58
+ */ export async function avmSimulate(inputs, contractProvider, worldStateHandle, logLevel = 'info', logger, cancellationToken) {
41
59
  await avmSimulationSemaphore.acquire();
42
60
  try {
43
- return await nativeAvmSimulate(inputs, contractProvider, worldStateHandle, LogLevels.indexOf(logLevel));
61
+ return await nativeAvmSimulate(inputs, contractProvider, worldStateHandle, LogLevels.indexOf(logLevel), logger ? (level, msg)=>logger[level](msg) : null, cancellationToken);
44
62
  } finally{
45
63
  avmSimulationSemaphore.release();
46
64
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/native",
3
- "version": "0.0.1-commit.d3ec352c",
3
+ "version": "0.0.1-commit.f295ac2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js"
@@ -15,15 +15,15 @@
15
15
  "../package.common.json"
16
16
  ],
17
17
  "dependencies": {
18
- "@aztec/bb.js": "0.0.1-commit.d3ec352c",
19
- "@aztec/foundation": "0.0.1-commit.d3ec352c",
18
+ "@aztec/bb.js": "0.0.1-commit.f295ac2",
19
+ "@aztec/foundation": "0.0.1-commit.f295ac2",
20
20
  "msgpackr": "^1.11.2"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@jest/globals": "^30.0.0",
24
24
  "@types/jest": "^30.0.0",
25
25
  "@types/node": "^22.15.17",
26
- "@typescript/native-preview": "7.0.0-dev.20251126.1",
26
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
27
27
  "jest": "^30.0.0",
28
28
  "ts-node": "^10.9.1",
29
29
  "typescript": "^5.3.3"
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { MessageHeader, TypedMessage } from '@aztec/foundation/message';
3
3
 
4
4
  import { Encoder, addExtension } from 'msgpackr';
@@ -1,5 +1,5 @@
1
1
  import { findNapiBinary } from '@aztec/bb.js';
2
- import { type LogLevel, LogLevels } from '@aztec/foundation/log';
2
+ import { type LogLevel, LogLevels, type Logger } from '@aztec/foundation/log';
3
3
  import { Semaphore } from '@aztec/foundation/queue';
4
4
 
5
5
  import { createRequire } from 'module';
@@ -90,6 +90,8 @@ const nativeAvmSimulate = nativeModule.avmSimulate as (
90
90
  contractProvider: ContractProvider,
91
91
  worldStateHandle: any,
92
92
  logLevel: number,
93
+ logFunction?: any,
94
+ cancellationToken?: any,
93
95
  ) => Promise<Buffer>;
94
96
 
95
97
  const nativeAvmSimulateWithHintedDbs = nativeModule.avmSimulateWithHintedDbs as (
@@ -97,6 +99,34 @@ const nativeAvmSimulateWithHintedDbs = nativeModule.avmSimulateWithHintedDbs as
97
99
  logLevel: number,
98
100
  ) => Promise<Buffer>;
99
101
 
102
+ const nativeCreateCancellationToken = nativeModule.createCancellationToken as () => any;
103
+ const nativeCancelSimulation = nativeModule.cancelSimulation as (token: any) => void;
104
+
105
+ /**
106
+ * Cancellation token handle used to cancel C++ AVM simulation.
107
+ * The token is created via createCancellationToken() and can be cancelled via cancelSimulation().
108
+ * Pass it to avmSimulate to enable cancellation support.
109
+ */
110
+ export type CancellationToken = any;
111
+
112
+ /**
113
+ * Create a new cancellation token for C++ simulation.
114
+ * This token can be passed to avmSimulate and later cancelled via cancelSimulation().
115
+ * @returns A handle to a cancellation token
116
+ */
117
+ export function createCancellationToken(): CancellationToken {
118
+ return nativeCreateCancellationToken();
119
+ }
120
+
121
+ /**
122
+ * Signal cancellation to a C++ simulation.
123
+ * The simulation will stop at the next opcode or before the next WorldState write.
124
+ * @param token - The cancellation token previously passed to avmSimulate
125
+ */
126
+ export function cancelSimulation(token: CancellationToken): void {
127
+ nativeCancelSimulation(token);
128
+ }
129
+
100
130
  /**
101
131
  * Concurrency limiting for C++ AVM simulation to prevent libuv thread pool exhaustion.
102
132
  *
@@ -118,7 +148,9 @@ const avmSimulationSemaphore = new Semaphore(MAX_CONCURRENT_AVM_SIMULATIONS);
118
148
  * @param inputs - Msgpack-serialized AvmFastSimulationInputs buffer
119
149
  * @param contractProvider - Object with callbacks for fetching contract instances and classes
120
150
  * @param worldStateHandle - Native handle to WorldState instance
121
- * @param logLevel - Log level to control C++ verbosity
151
+ * @param logLevel - Optional log level to control C++ verbosity (only used if loggerFunction is provided)
152
+ * @param logger - Optional logger object for C++ logging callbacks
153
+ * @param cancellationToken - Optional token to enable cancellation support
122
154
  * @returns Promise resolving to msgpack-serialized AvmCircuitPublicInputs buffer
123
155
  */
124
156
  export async function avmSimulate(
@@ -126,10 +158,20 @@ export async function avmSimulate(
126
158
  contractProvider: ContractProvider,
127
159
  worldStateHandle: any,
128
160
  logLevel: LogLevel = 'info',
161
+ logger?: Logger,
162
+ cancellationToken?: CancellationToken,
129
163
  ): Promise<Buffer> {
130
164
  await avmSimulationSemaphore.acquire();
165
+
131
166
  try {
132
- return await nativeAvmSimulate(inputs, contractProvider, worldStateHandle, LogLevels.indexOf(logLevel));
167
+ return await nativeAvmSimulate(
168
+ inputs,
169
+ contractProvider,
170
+ worldStateHandle,
171
+ LogLevels.indexOf(logLevel),
172
+ logger ? (level: LogLevel, msg: string) => logger[level](msg) : null,
173
+ cancellationToken,
174
+ );
133
175
  } finally {
134
176
  avmSimulationSemaphore.release();
135
177
  }