@aztec/pxe 0.87.2 → 0.87.3

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.
Files changed (26) hide show
  1. package/dest/config/package_info.js +1 -1
  2. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  3. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  4. package/dest/entrypoints/client/bundle/utils.js +9 -3
  5. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  6. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  7. package/dest/entrypoints/client/lazy/utils.js +9 -3
  8. package/dest/entrypoints/{client/pxe_creation_options.d.ts → pxe_creation_options.d.ts} +4 -1
  9. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
  10. package/dest/entrypoints/server/utils.d.ts +3 -3
  11. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  12. package/dest/entrypoints/server/utils.js +23 -15
  13. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  14. package/dest/private_kernel/private_kernel_execution_prover.js +2 -1
  15. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  16. package/dest/pxe_service/pxe_service.js +12 -7
  17. package/package.json +15 -15
  18. package/src/config/package_info.ts +1 -1
  19. package/src/entrypoints/client/bundle/utils.ts +22 -14
  20. package/src/entrypoints/client/lazy/utils.ts +23 -10
  21. package/src/entrypoints/{client/pxe_creation_options.ts → pxe_creation_options.ts} +4 -1
  22. package/src/entrypoints/server/utils.ts +38 -20
  23. package/src/private_kernel/private_kernel_execution_prover.ts +1 -0
  24. package/src/pxe_service/pxe_service.ts +11 -6
  25. package/dest/entrypoints/client/pxe_creation_options.d.ts.map +0 -1
  26. /package/dest/entrypoints/{client/pxe_creation_options.js → pxe_creation_options.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  export function getPackageInfo() {
2
2
  return {
3
- version: '0.87.1',
3
+ version: '0.87.3',
4
4
  name: '@aztec/pxe'
5
5
  };
6
6
  }
@@ -1,7 +1,7 @@
1
1
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
2
2
  import type { PXEServiceConfig } from '../../../config/index.js';
3
3
  import { PXEService } from '../../../pxe_service/pxe_service.js';
4
- import type { PXECreationOptions } from '../pxe_creation_options.js';
4
+ import type { PXECreationOptions } from '../../pxe_creation_options.js';
5
5
  /**
6
6
  * Create and start an PXEService instance with the given AztecNode.
7
7
  * If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/client/bundle/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBAkC9C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/client/bundle/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBAyC9C"}
@@ -1,4 +1,5 @@
1
1
  import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
2
+ import { randomBytes } from '@aztec/foundation/crypto';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { createStore } from '@aztec/kv-store/indexeddb';
4
5
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
@@ -16,16 +17,21 @@ import { PXEService } from '../../../pxe_service/pxe_service.js';
16
17
  */ export async function createPXEService(aztecNode, config, options = {
17
18
  loggers: {}
18
19
  }) {
20
+ const logSuffix = typeof options.useLogSuffix === 'boolean' ? options.useLogSuffix ? randomBytes(3).toString('hex') : undefined : options.useLogSuffix;
21
+ const loggers = options.loggers ?? {};
19
22
  const l1Contracts = await aztecNode.getL1ContractAddresses();
20
23
  const configWithContracts = {
21
24
  ...config,
22
25
  l1Contracts,
23
26
  l2BlockBatchSize: 200
24
27
  };
25
- const store = await createStore('pxe_data', configWithContracts, options.loggers.store ?? createLogger('pxe:data:indexeddb'));
28
+ const storeLogger = loggers.store ? loggers.store : createLogger('pxe:data:idb' + (logSuffix ? `:${logSuffix}` : ''));
29
+ const store = options.store ?? await createStore('pxe_data', configWithContracts, storeLogger);
26
30
  const simulationProvider = new WASMSimulator();
27
- const prover = options.prover ?? new BBWASMBundlePrivateKernelProver(simulationProvider, 16, options.loggers.prover ?? createLogger('bb:wasm:bundle'));
31
+ const proverLogger = loggers.prover ? loggers.prover : createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
32
+ const prover = options.prover ?? new BBWASMBundlePrivateKernelProver(simulationProvider, 16, proverLogger);
28
33
  const protocolContractsProvider = new BundledProtocolContractsProvider();
29
- const pxe = await PXEService.create(aztecNode, store, prover, simulationProvider, protocolContractsProvider, config, options.loggers.pxe ?? createLogger('pxe:service'));
34
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
35
+ const pxe = await PXEService.create(aztecNode, store, prover, simulationProvider, protocolContractsProvider, config, pxeLogger);
30
36
  return pxe;
31
37
  }
@@ -1,7 +1,7 @@
1
1
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
2
2
  import type { PXEServiceConfig } from '../../../config/index.js';
3
3
  import { PXEService } from '../../../pxe_service/pxe_service.js';
4
- import type { PXECreationOptions } from '../pxe_creation_options.js';
4
+ import type { PXECreationOptions } from '../../pxe_creation_options.js';
5
5
  /**
6
6
  * Create and start an PXEService instance with the given AztecNode.
7
7
  * Returns a Promise that resolves to the started PXEService instance.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/client/lazy/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBA8B9C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/client/lazy/utils.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBA0C9C"}
@@ -1,4 +1,5 @@
1
1
  import { BBWASMLazyPrivateKernelProver } from '@aztec/bb-prover/client/wasm/lazy';
2
+ import { randomBytes } from '@aztec/foundation/crypto';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { createStore } from '@aztec/kv-store/indexeddb';
4
5
  import { LazyProtocolContractsProvider } from '@aztec/protocol-contracts/providers/lazy';
@@ -15,16 +16,21 @@ import { PXEService } from '../../../pxe_service/pxe_service.js';
15
16
  */ export async function createPXEService(aztecNode, config, options = {
16
17
  loggers: {}
17
18
  }) {
19
+ const logSuffix = typeof options.useLogSuffix === 'boolean' ? options.useLogSuffix ? randomBytes(3).toString('hex') : undefined : options.useLogSuffix;
18
20
  const l1Contracts = await aztecNode.getL1ContractAddresses();
19
21
  const configWithContracts = {
20
22
  ...config,
21
23
  l2BlockBatchSize: 200,
22
24
  l1Contracts
23
25
  };
24
- const store = await createStore('pxe_data', configWithContracts, options.loggers.store ?? createLogger('pxe:data:indexeddb'));
26
+ const loggers = options.loggers ?? {};
27
+ const storeLogger = loggers.store ? loggers.store : createLogger('pxe:data:idb' + (logSuffix ? `:${logSuffix}` : ''));
28
+ const store = options.store ?? await createStore('pxe_data', configWithContracts, storeLogger);
25
29
  const simulationProvider = new WASMSimulator();
26
- const prover = options.prover ?? new BBWASMLazyPrivateKernelProver(simulationProvider, 16, options.loggers.prover ?? createLogger('bb:wasm:lazy'));
30
+ const proverLogger = loggers.prover ? loggers.prover : createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
31
+ const prover = options.prover ?? new BBWASMLazyPrivateKernelProver(simulationProvider, 16, proverLogger);
27
32
  const protocolContractsProvider = new LazyProtocolContractsProvider();
28
- const pxe = await PXEService.create(aztecNode, store, prover, simulationProvider, protocolContractsProvider, config, options.loggers.pxe ?? createLogger('pxe:service'));
33
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
34
+ const pxe = await PXEService.create(aztecNode, store, prover, simulationProvider, protocolContractsProvider, config, pxeLogger);
29
35
  return pxe;
30
36
  }
@@ -1,11 +1,14 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
3
  import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
3
4
  export type PXECreationOptions = {
4
- loggers: {
5
+ loggers?: {
5
6
  store?: Logger;
6
7
  pxe?: Logger;
7
8
  prover?: Logger;
8
9
  };
10
+ useLogSuffix?: boolean | string;
9
11
  prover?: PrivateKernelProver;
12
+ store?: AztecAsyncKVStore;
10
13
  };
11
14
  //# sourceMappingURL=pxe_creation_options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pxe_creation_options.d.ts","sourceRoot":"","sources":["../../src/entrypoints/pxe_creation_options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC"}
@@ -1,8 +1,8 @@
1
- import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
1
  import { type SimulationProvider } from '@aztec/simulator/client';
3
2
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
4
3
  import type { PXEServiceConfig } from '../../config/index.js';
5
4
  import { PXEService } from '../../pxe_service/pxe_service.js';
5
+ import type { PXECreationOptions } from '../pxe_creation_options.js';
6
6
  /**
7
7
  * Create and start an PXEService instance with the given AztecNode and config.
8
8
  *
@@ -11,7 +11,7 @@ import { PXEService } from '../../pxe_service/pxe_service.js';
11
11
  * @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs.
12
12
  * @returns A Promise that resolves to the started PXEService instance.
13
13
  */
14
- export declare function createPXEService(aztecNode: AztecNode, config: PXEServiceConfig, useLogSuffix?: string | boolean | undefined, store?: AztecAsyncKVStore): Promise<PXEService>;
14
+ export declare function createPXEService(aztecNode: AztecNode, config: PXEServiceConfig, options?: PXECreationOptions): Promise<PXEService>;
15
15
  /**
16
16
  * Create and start an PXEService instance with the given AztecNode, SimulationProvider and config.
17
17
  *
@@ -21,5 +21,5 @@ export declare function createPXEService(aztecNode: AztecNode, config: PXEServic
21
21
  * @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs.
22
22
  * @returns A Promise that resolves to the started PXEService instance.
23
23
  */
24
- export declare function createPXEServiceWithSimulationProvider(aztecNode: AztecNode, simulationProvider: SimulationProvider, config: PXEServiceConfig, useLogSuffix?: string | boolean | undefined, store?: AztecAsyncKVStore): Promise<PXEService>;
24
+ export declare function createPXEServiceWithSimulationProvider(aztecNode: AztecNode, simulationProvider: SimulationProvider, config: PXEServiceConfig, options?: PXECreationOptions): Promise<PXEService>;
25
25
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/server/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,KAAK,kBAAkB,EAAiB,MAAM,yBAAyB,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAG9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,YAAY,GAAE,MAAM,GAAG,OAAO,GAAG,SAAqB,EACtD,KAAK,CAAC,EAAE,iBAAiB,uBAK1B;AAED;;;;;;;;GAQG;AACH,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,gBAAgB,EACxB,YAAY,GAAE,MAAM,GAAG,OAAO,GAAG,SAAqB,EACtD,KAAK,CAAC,EAAE,iBAAiB,uBA+B1B"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/server/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBAQ9C;AAED;;;;;;;;GAQG;AACH,wBAAsB,sCAAsC,CAC1D,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAoC,uBA4C9C"}
@@ -3,8 +3,8 @@ import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bu
3
3
  import { randomBytes } from '@aztec/foundation/crypto';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
5
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
6
- import { WASMSimulator } from '@aztec/simulator/client';
7
- import { SimulationProviderRecorderWrapper } from '@aztec/simulator/testing';
6
+ import { MemoryCircuitRecorder, SimulationProviderRecorderWrapper, WASMSimulator } from '@aztec/simulator/client';
7
+ import { FileCircuitRecorder } from '@aztec/simulator/testing';
8
8
  import { PXEService } from '../../pxe_service/pxe_service.js';
9
9
  import { PXE_DATA_SCHEMA_VERSION } from '../../storage/index.js';
10
10
  /**
@@ -14,10 +14,13 @@ import { PXE_DATA_SCHEMA_VERSION } from '../../storage/index.js';
14
14
  * @param config - The PXE Service Config to use
15
15
  * @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs.
16
16
  * @returns A Promise that resolves to the started PXEService instance.
17
- */ export function createPXEService(aztecNode, config, useLogSuffix = undefined, store) {
17
+ */ export function createPXEService(aztecNode, config, options = {
18
+ loggers: {}
19
+ }) {
18
20
  const simulationProvider = new WASMSimulator();
19
- const simulationProviderWithRecorder = new SimulationProviderRecorderWrapper(simulationProvider);
20
- return createPXEServiceWithSimulationProvider(aztecNode, simulationProviderWithRecorder, config, useLogSuffix, store);
21
+ const recorder = process.env.CIRCUIT_RECORD_DIR ? new FileCircuitRecorder(process.env.CIRCUIT_RECORD_DIR) : new MemoryCircuitRecorder();
22
+ const simulationProviderWithRecorder = new SimulationProviderRecorderWrapper(simulationProvider, recorder);
23
+ return createPXEServiceWithSimulationProvider(aztecNode, simulationProviderWithRecorder, config, options);
21
24
  }
22
25
  /**
23
26
  * Create and start an PXEService instance with the given AztecNode, SimulationProvider and config.
@@ -27,34 +30,39 @@ import { PXE_DATA_SCHEMA_VERSION } from '../../storage/index.js';
27
30
  * @param config - The PXE Service Config to use
28
31
  * @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs.
29
32
  * @returns A Promise that resolves to the started PXEService instance.
30
- */ export async function createPXEServiceWithSimulationProvider(aztecNode, simulationProvider, config, useLogSuffix = undefined, store) {
31
- const logSuffix = typeof useLogSuffix === 'boolean' ? useLogSuffix ? randomBytes(3).toString('hex') : undefined : useLogSuffix;
33
+ */ export async function createPXEServiceWithSimulationProvider(aztecNode, simulationProvider, config, options = {
34
+ loggers: {}
35
+ }) {
36
+ const logSuffix = typeof options.useLogSuffix === 'boolean' ? options.useLogSuffix ? randomBytes(3).toString('hex') : undefined : options.useLogSuffix;
37
+ const loggers = options.loggers ?? {};
32
38
  const l1Contracts = await aztecNode.getL1ContractAddresses();
33
39
  const configWithContracts = {
34
40
  ...config,
35
41
  l1Contracts,
36
42
  l2BlockBatchSize: 200
37
43
  };
38
- if (!store) {
44
+ if (!options.store) {
39
45
  // TODO once https://github.com/AztecProtocol/aztec-packages/issues/13656 is fixed, we can remove this and always
40
46
  // import the lmdb-v2 version
41
47
  const { createStore } = await import('@aztec/kv-store/lmdb-v2');
42
- store = await createStore('pxe_data', PXE_DATA_SCHEMA_VERSION, configWithContracts, createLogger('pxe:data:lmdb'));
48
+ const storeLogger = loggers.store ? loggers.store : createLogger('pxe:data:lmdb' + (logSuffix ? `:${logSuffix}` : ''));
49
+ options.store = await createStore('pxe_data', PXE_DATA_SCHEMA_VERSION, configWithContracts, storeLogger);
43
50
  }
44
- const prover = await createProver(config, simulationProvider, logSuffix);
51
+ const proverLogger = loggers.prover ? loggers.prover : createLogger('pxe:bb:native' + (logSuffix ? `:${logSuffix}` : ''));
52
+ const prover = await createProver(config, simulationProvider, proverLogger);
45
53
  const protocolContractsProvider = new BundledProtocolContractsProvider();
46
- const pxe = await PXEService.create(aztecNode, store, prover, simulationProvider, protocolContractsProvider, config, logSuffix);
54
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
55
+ const pxe = await PXEService.create(aztecNode, options.store, prover, simulationProvider, protocolContractsProvider, config, pxeLogger);
47
56
  return pxe;
48
57
  }
49
- function createProver(config, simulationProvider, logSuffix) {
58
+ function createProver(config, simulationProvider, logger) {
50
59
  if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
51
- return new BBWASMBundlePrivateKernelProver(simulationProvider, 16);
60
+ return new BBWASMBundlePrivateKernelProver(simulationProvider, 16, logger);
52
61
  } else {
53
62
  const bbConfig = config;
54
- const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
55
63
  return BBNativePrivateKernelProver.new({
56
64
  bbSkipCleanup: false,
57
65
  ...bbConfig
58
- }, simulationProvider, log);
66
+ }, simulationProvider, logger);
59
67
  }
60
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"private_kernel_execution_prover.d.ts","sourceRoot":"","sources":["../../src/private_kernel/private_kernel_execution_prover.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAKL,KAAK,iCAAiC,EAKtC,KAAK,oCAAoC,EAE1C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,sBAAsB,EAC3B,SAAS,EAIV,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAStE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;CAC5D;AAED;;;;;GAKG;AACH,qBAAa,4BAA4B;IAIrC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,GAAG,CAAuD;gBAGxD,MAAM,EAAE,mBAAmB,EAC3B,YAAY,EAAE,mBAAmB,EACjC,UAAU,UAAQ;IAG5B;;;;;;;;;;OAUG;IACG,gBAAgB,CACpB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,sBAAsB,EACvC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAE,kCAI9C,GACA,OAAO,CAAC,iCAAiC,CAAC,oCAAoC,CAAC,CAAC;YAoPrE,qBAAqB;CA2CpC"}
1
+ {"version":3,"file":"private_kernel_execution_prover.d.ts","sourceRoot":"","sources":["../../src/private_kernel/private_kernel_execution_prover.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAKL,KAAK,iCAAiC,EAKtC,KAAK,oCAAoC,EAE1C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,sBAAsB,EAC3B,SAAS,EAIV,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAStE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;CAC5D;AAED;;;;;GAKG;AACH,qBAAa,4BAA4B;IAIrC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,GAAG,CAAuD;gBAGxD,MAAM,EAAE,mBAAmB,EAC3B,YAAY,EAAE,mBAAmB,EACjC,UAAU,UAAQ;IAG5B;;;;;;;;;;OAUG;IACG,gBAAgB,CACpB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,sBAAsB,EACvC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAE,kCAI9C,GACA,OAAO,CAAC,iCAAiC,CAAC,oCAAoC,CAAC,CAAC;YAqPrE,qBAAqB;CA2CpC"}
@@ -95,7 +95,8 @@ const NULL_SIMULATE_OUTPUT = {
95
95
  witness: currentExecution.partialWitness,
96
96
  vk: currentExecution.vk,
97
97
  timings: {
98
- witgen: currentExecution.profileResult?.timings.witgen ?? 0
98
+ witgen: currentExecution.profileResult?.timings.witgen ?? 0,
99
+ oracles: currentExecution.profileResult?.timings.oracles
99
100
  }
100
101
  });
101
102
  const privateCallData = await this.createPrivateCallData(currentExecution);
@@ -1 +1 @@
1
- {"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"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"}
@@ -459,9 +459,10 @@ import { enrichPublicSimulationError, enrichSimulationError } from './error_enri
459
459
  profileMode: 'none'
460
460
  });
461
461
  const totalTime = totalTimer.ms();
462
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } })=>({
462
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } })=>({
463
463
  functionName,
464
- time: witgen
464
+ time: witgen,
465
+ oracles
465
466
  }));
466
467
  const timings = {
467
468
  total: totalTime,
@@ -504,10 +505,13 @@ import { enrichPublicSimulationError, enrichSimulationError } from './error_enri
504
505
  profileMode
505
506
  });
506
507
  const totalTime = totalTimer.ms();
507
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } })=>({
508
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } })=>{
509
+ return {
508
510
  functionName,
509
- time: witgen
510
- }));
511
+ time: witgen,
512
+ oracles
513
+ };
514
+ });
511
515
  // Gate computation is time is not relevant for profiling, so we subtract it from the total time.
512
516
  const gateCountComputationTime = executionSteps.reduce((acc, { timings })=>acc + (timings.gateCount ?? 0), 0) ?? 0;
513
517
  const timings = {
@@ -573,9 +577,10 @@ import { enrichPublicSimulationError, enrichSimulationError } from './error_enri
573
577
  }
574
578
  const txHash = await simulatedTx.getTxHash();
575
579
  const totalTime = totalTimer.ms();
576
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } })=>({
580
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } })=>({
577
581
  functionName,
578
- time: witgen
582
+ time: witgen,
583
+ oracles
579
584
  }));
580
585
  const timings = {
581
586
  total: totalTime,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/pxe",
3
- "version": "0.87.2",
3
+ "version": "0.87.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./server": "./dest/entrypoints/server/index.js",
@@ -57,19 +57,19 @@
57
57
  ]
58
58
  },
59
59
  "dependencies": {
60
- "@aztec/bb-prover": "0.87.2",
61
- "@aztec/bb.js": "0.87.2",
62
- "@aztec/builder": "0.87.2",
63
- "@aztec/constants": "0.87.2",
64
- "@aztec/ethereum": "0.87.2",
65
- "@aztec/foundation": "0.87.2",
66
- "@aztec/key-store": "0.87.2",
67
- "@aztec/kv-store": "0.87.2",
68
- "@aztec/noir-protocol-circuits-types": "0.87.2",
69
- "@aztec/noir-types": "0.87.2",
70
- "@aztec/protocol-contracts": "0.87.2",
71
- "@aztec/simulator": "0.87.2",
72
- "@aztec/stdlib": "0.87.2",
60
+ "@aztec/bb-prover": "0.87.3",
61
+ "@aztec/bb.js": "0.87.3",
62
+ "@aztec/builder": "0.87.3",
63
+ "@aztec/constants": "0.87.3",
64
+ "@aztec/ethereum": "0.87.3",
65
+ "@aztec/foundation": "0.87.3",
66
+ "@aztec/key-store": "0.87.3",
67
+ "@aztec/kv-store": "0.87.3",
68
+ "@aztec/noir-protocol-circuits-types": "0.87.3",
69
+ "@aztec/noir-types": "0.87.3",
70
+ "@aztec/protocol-contracts": "0.87.3",
71
+ "@aztec/simulator": "0.87.3",
72
+ "@aztec/stdlib": "0.87.3",
73
73
  "koa": "^2.16.1",
74
74
  "koa-router": "^12.0.0",
75
75
  "lodash.omit": "^4.5.0",
@@ -78,7 +78,7 @@
78
78
  "viem": "2.23.7"
79
79
  },
80
80
  "devDependencies": {
81
- "@aztec/noir-test-contracts.js": "0.87.2",
81
+ "@aztec/noir-test-contracts.js": "0.87.3",
82
82
  "@jest/globals": "^29.5.0",
83
83
  "@types/jest": "^29.5.0",
84
84
  "@types/lodash.omit": "^4.5.7",
@@ -1,3 +1,3 @@
1
1
  export function getPackageInfo() {
2
- return { version: '0.87.1', name: '@aztec/pxe' };
2
+ return { version: '0.87.3', name: '@aztec/pxe' };
3
3
  }
@@ -1,4 +1,5 @@
1
1
  import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
2
+ import { randomBytes } from '@aztec/foundation/crypto';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { createStore } from '@aztec/kv-store/indexeddb';
4
5
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
@@ -7,7 +8,7 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
7
8
 
8
9
  import type { PXEServiceConfig } from '../../../config/index.js';
9
10
  import { PXEService } from '../../../pxe_service/pxe_service.js';
10
- import type { PXECreationOptions } from '../pxe_creation_options.js';
11
+ import type { PXECreationOptions } from '../../pxe_creation_options.js';
11
12
 
12
13
  /**
13
14
  * Create and start an PXEService instance with the given AztecNode.
@@ -24,6 +25,15 @@ export async function createPXEService(
24
25
  config: PXEServiceConfig,
25
26
  options: PXECreationOptions = { loggers: {} },
26
27
  ) {
28
+ const logSuffix =
29
+ typeof options.useLogSuffix === 'boolean'
30
+ ? options.useLogSuffix
31
+ ? randomBytes(3).toString('hex')
32
+ : undefined
33
+ : options.useLogSuffix;
34
+
35
+ const loggers = options.loggers ?? {};
36
+
27
37
  const l1Contracts = await aztecNode.getL1ContractAddresses();
28
38
  const configWithContracts = {
29
39
  ...config,
@@ -31,21 +41,19 @@ export async function createPXEService(
31
41
  l2BlockBatchSize: 200,
32
42
  } as PXEServiceConfig;
33
43
 
34
- const store = await createStore(
35
- 'pxe_data',
36
- configWithContracts,
37
- options.loggers.store ?? createLogger('pxe:data:indexeddb'),
38
- );
44
+ const storeLogger = loggers.store ? loggers.store : createLogger('pxe:data:idb' + (logSuffix ? `:${logSuffix}` : ''));
45
+
46
+ const store = options.store ?? (await createStore('pxe_data', configWithContracts, storeLogger));
39
47
 
40
48
  const simulationProvider = new WASMSimulator();
41
- const prover =
42
- options.prover ??
43
- new BBWASMBundlePrivateKernelProver(
44
- simulationProvider,
45
- 16,
46
- options.loggers.prover ?? createLogger('bb:wasm:bundle'),
47
- );
49
+ const proverLogger = loggers.prover
50
+ ? loggers.prover
51
+ : createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
52
+
53
+ const prover = options.prover ?? new BBWASMBundlePrivateKernelProver(simulationProvider, 16, proverLogger);
48
54
  const protocolContractsProvider = new BundledProtocolContractsProvider();
55
+
56
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
49
57
  const pxe = await PXEService.create(
50
58
  aztecNode,
51
59
  store,
@@ -53,7 +61,7 @@ export async function createPXEService(
53
61
  simulationProvider,
54
62
  protocolContractsProvider,
55
63
  config,
56
- options.loggers.pxe ?? createLogger('pxe:service'),
64
+ pxeLogger,
57
65
  );
58
66
  return pxe;
59
67
  }
@@ -1,4 +1,5 @@
1
1
  import { BBWASMLazyPrivateKernelProver } from '@aztec/bb-prover/client/wasm/lazy';
2
+ import { randomBytes } from '@aztec/foundation/crypto';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { createStore } from '@aztec/kv-store/indexeddb';
4
5
  import { LazyProtocolContractsProvider } from '@aztec/protocol-contracts/providers/lazy';
@@ -7,7 +8,7 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
7
8
 
8
9
  import type { PXEServiceConfig } from '../../../config/index.js';
9
10
  import { PXEService } from '../../../pxe_service/pxe_service.js';
10
- import type { PXECreationOptions } from '../pxe_creation_options.js';
11
+ import type { PXECreationOptions } from '../../pxe_creation_options.js';
11
12
 
12
13
  /**
13
14
  * Create and start an PXEService instance with the given AztecNode.
@@ -23,6 +24,13 @@ export async function createPXEService(
23
24
  config: PXEServiceConfig,
24
25
  options: PXECreationOptions = { loggers: {} },
25
26
  ) {
27
+ const logSuffix =
28
+ typeof options.useLogSuffix === 'boolean'
29
+ ? options.useLogSuffix
30
+ ? randomBytes(3).toString('hex')
31
+ : undefined
32
+ : options.useLogSuffix;
33
+
26
34
  const l1Contracts = await aztecNode.getL1ContractAddresses();
27
35
  const configWithContracts = {
28
36
  ...config,
@@ -30,17 +38,22 @@ export async function createPXEService(
30
38
  l1Contracts,
31
39
  } as PXEServiceConfig;
32
40
 
33
- const store = await createStore(
34
- 'pxe_data',
35
- configWithContracts,
36
- options.loggers.store ?? createLogger('pxe:data:indexeddb'),
37
- );
41
+ const loggers = options.loggers ?? {};
42
+
43
+ const storeLogger = loggers.store ? loggers.store : createLogger('pxe:data:idb' + (logSuffix ? `:${logSuffix}` : ''));
44
+
45
+ const store = options.store ?? (await createStore('pxe_data', configWithContracts, storeLogger));
38
46
 
39
47
  const simulationProvider = new WASMSimulator();
40
- const prover =
41
- options.prover ??
42
- new BBWASMLazyPrivateKernelProver(simulationProvider, 16, options.loggers.prover ?? createLogger('bb:wasm:lazy'));
48
+ const proverLogger = loggers.prover
49
+ ? loggers.prover
50
+ : createLogger('pxe:bb:wasm:bundle' + (logSuffix ? `:${logSuffix}` : ''));
51
+
52
+ const prover = options.prover ?? new BBWASMLazyPrivateKernelProver(simulationProvider, 16, proverLogger);
53
+
43
54
  const protocolContractsProvider = new LazyProtocolContractsProvider();
55
+
56
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
44
57
  const pxe = await PXEService.create(
45
58
  aztecNode,
46
59
  store,
@@ -48,7 +61,7 @@ export async function createPXEService(
48
61
  simulationProvider,
49
62
  protocolContractsProvider,
50
63
  config,
51
- options.loggers.pxe ?? createLogger('pxe:service'),
64
+ pxeLogger,
52
65
  );
53
66
  return pxe;
54
67
  }
@@ -1,7 +1,10 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
3
  import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
3
4
 
4
5
  export type PXECreationOptions = {
5
- loggers: { store?: Logger; pxe?: Logger; prover?: Logger };
6
+ loggers?: { store?: Logger; pxe?: Logger; prover?: Logger };
7
+ useLogSuffix?: boolean | string;
6
8
  prover?: PrivateKernelProver;
9
+ store?: AztecAsyncKVStore;
7
10
  };
@@ -1,16 +1,21 @@
1
1
  import { BBNativePrivateKernelProver } from '@aztec/bb-prover/client/native';
2
2
  import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/client/wasm/bundle';
3
3
  import { randomBytes } from '@aztec/foundation/crypto';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
+ import { type Logger, createLogger } from '@aztec/foundation/log';
6
5
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
7
- import { type SimulationProvider, WASMSimulator } from '@aztec/simulator/client';
8
- import { SimulationProviderRecorderWrapper } from '@aztec/simulator/testing';
6
+ import {
7
+ MemoryCircuitRecorder,
8
+ type SimulationProvider,
9
+ SimulationProviderRecorderWrapper,
10
+ WASMSimulator,
11
+ } from '@aztec/simulator/client';
12
+ import { FileCircuitRecorder } from '@aztec/simulator/testing';
9
13
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
10
14
 
11
15
  import type { PXEServiceConfig } from '../../config/index.js';
12
16
  import { PXEService } from '../../pxe_service/pxe_service.js';
13
17
  import { PXE_DATA_SCHEMA_VERSION } from '../../storage/index.js';
18
+ import type { PXECreationOptions } from '../pxe_creation_options.js';
14
19
 
15
20
  /**
16
21
  * Create and start an PXEService instance with the given AztecNode and config.
@@ -23,12 +28,14 @@ import { PXE_DATA_SCHEMA_VERSION } from '../../storage/index.js';
23
28
  export function createPXEService(
24
29
  aztecNode: AztecNode,
25
30
  config: PXEServiceConfig,
26
- useLogSuffix: string | boolean | undefined = undefined,
27
- store?: AztecAsyncKVStore,
31
+ options: PXECreationOptions = { loggers: {} },
28
32
  ) {
29
33
  const simulationProvider = new WASMSimulator();
30
- const simulationProviderWithRecorder = new SimulationProviderRecorderWrapper(simulationProvider);
31
- return createPXEServiceWithSimulationProvider(aztecNode, simulationProviderWithRecorder, config, useLogSuffix, store);
34
+ const recorder = process.env.CIRCUIT_RECORD_DIR
35
+ ? new FileCircuitRecorder(process.env.CIRCUIT_RECORD_DIR)
36
+ : new MemoryCircuitRecorder();
37
+ const simulationProviderWithRecorder = new SimulationProviderRecorderWrapper(simulationProvider, recorder);
38
+ return createPXEServiceWithSimulationProvider(aztecNode, simulationProviderWithRecorder, config, options);
32
39
  }
33
40
 
34
41
  /**
@@ -44,11 +51,15 @@ export async function createPXEServiceWithSimulationProvider(
44
51
  aztecNode: AztecNode,
45
52
  simulationProvider: SimulationProvider,
46
53
  config: PXEServiceConfig,
47
- useLogSuffix: string | boolean | undefined = undefined,
48
- store?: AztecAsyncKVStore,
54
+ options: PXECreationOptions = { loggers: {} },
49
55
  ) {
50
56
  const logSuffix =
51
- typeof useLogSuffix === 'boolean' ? (useLogSuffix ? randomBytes(3).toString('hex') : undefined) : useLogSuffix;
57
+ typeof options.useLogSuffix === 'boolean'
58
+ ? options.useLogSuffix
59
+ ? randomBytes(3).toString('hex')
60
+ : undefined
61
+ : options.useLogSuffix;
62
+ const loggers = options.loggers ?? {};
52
63
 
53
64
  const l1Contracts = await aztecNode.getL1ContractAddresses();
54
65
  const configWithContracts = {
@@ -57,34 +68,41 @@ export async function createPXEServiceWithSimulationProvider(
57
68
  l2BlockBatchSize: 200,
58
69
  } as PXEServiceConfig;
59
70
 
60
- if (!store) {
71
+ if (!options.store) {
61
72
  // TODO once https://github.com/AztecProtocol/aztec-packages/issues/13656 is fixed, we can remove this and always
62
73
  // import the lmdb-v2 version
63
74
  const { createStore } = await import('@aztec/kv-store/lmdb-v2');
64
- store = await createStore('pxe_data', PXE_DATA_SCHEMA_VERSION, configWithContracts, createLogger('pxe:data:lmdb'));
75
+ const storeLogger = loggers.store
76
+ ? loggers.store
77
+ : createLogger('pxe:data:lmdb' + (logSuffix ? `:${logSuffix}` : ''));
78
+ options.store = await createStore('pxe_data', PXE_DATA_SCHEMA_VERSION, configWithContracts, storeLogger);
65
79
  }
80
+ const proverLogger = loggers.prover
81
+ ? loggers.prover
82
+ : createLogger('pxe:bb:native' + (logSuffix ? `:${logSuffix}` : ''));
66
83
 
67
- const prover = await createProver(config, simulationProvider, logSuffix);
84
+ const prover = await createProver(config, simulationProvider, proverLogger);
68
85
  const protocolContractsProvider = new BundledProtocolContractsProvider();
86
+
87
+ const pxeLogger = loggers.pxe ? loggers.pxe : createLogger('pxe:service' + (logSuffix ? `:${logSuffix}` : ''));
69
88
  const pxe = await PXEService.create(
70
89
  aztecNode,
71
- store,
90
+ options.store,
72
91
  prover,
73
92
  simulationProvider,
74
93
  protocolContractsProvider,
75
94
  config,
76
- logSuffix,
95
+ pxeLogger,
77
96
  );
78
97
  return pxe;
79
98
  }
80
99
 
81
- function createProver(config: PXEServiceConfig, simulationProvider: SimulationProvider, logSuffix?: string) {
100
+ function createProver(config: PXEServiceConfig, simulationProvider: SimulationProvider, logger?: Logger) {
82
101
  if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
83
- return new BBWASMBundlePrivateKernelProver(simulationProvider, 16);
102
+ return new BBWASMBundlePrivateKernelProver(simulationProvider, 16, logger);
84
103
  } else {
85
104
  const bbConfig = config as Required<Pick<PXEServiceConfig, 'bbBinaryPath' | 'bbWorkingDirectory'>> &
86
105
  PXEServiceConfig;
87
- const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
88
- return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, simulationProvider, log);
106
+ return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, simulationProvider, logger);
89
107
  }
90
108
  }
@@ -154,6 +154,7 @@ export class PrivateKernelExecutionProver {
154
154
  vk: currentExecution.vk,
155
155
  timings: {
156
156
  witgen: currentExecution.profileResult?.timings.witgen ?? 0,
157
+ oracles: currentExecution.profileResult?.timings.oracles,
157
158
  },
158
159
  });
159
160
 
@@ -679,9 +679,10 @@ export class PXEService implements PXE {
679
679
 
680
680
  const totalTime = totalTimer.ms();
681
681
 
682
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } }) => ({
682
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } }) => ({
683
683
  functionName,
684
684
  time: witgen,
685
+ oracles,
685
686
  }));
686
687
 
687
688
  const timings: ProvingTimings = {
@@ -746,10 +747,13 @@ export class PXEService implements PXE {
746
747
 
747
748
  const totalTime = totalTimer.ms();
748
749
 
749
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } }) => ({
750
- functionName,
751
- time: witgen,
752
- }));
750
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } }) => {
751
+ return {
752
+ functionName,
753
+ time: witgen,
754
+ oracles,
755
+ };
756
+ });
753
757
 
754
758
  // Gate computation is time is not relevant for profiling, so we subtract it from the total time.
755
759
  const gateCountComputationTime =
@@ -849,9 +853,10 @@ export class PXEService implements PXE {
849
853
 
850
854
  const totalTime = totalTimer.ms();
851
855
 
852
- const perFunction = executionSteps.map(({ functionName, timings: { witgen } }) => ({
856
+ const perFunction = executionSteps.map(({ functionName, timings: { witgen, oracles } }) => ({
853
857
  functionName,
854
858
  time: witgen,
859
+ oracles,
855
860
  }));
856
861
 
857
862
  const timings: SimulationTimings = {
@@ -1 +0,0 @@
1
- {"version":3,"file":"pxe_creation_options.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/client/pxe_creation_options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B,CAAC"}