@aztec/pxe 0.67.1 → 0.68.1

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 (40) hide show
  1. package/dest/database/kv_pxe_database.d.ts +3 -3
  2. package/dest/database/kv_pxe_database.d.ts.map +1 -1
  3. package/dest/database/kv_pxe_database.js +5 -5
  4. package/dest/database/pxe_database.d.ts +6 -6
  5. package/dest/database/pxe_database.d.ts.map +1 -1
  6. package/dest/kernel_oracle/index.js +2 -2
  7. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +2 -2
  8. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
  9. package/dest/kernel_prover/kernel_prover.js +5 -2
  10. package/dest/kernel_prover/test/test_circuit_prover.d.ts +1 -2
  11. package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
  12. package/dest/kernel_prover/test/test_circuit_prover.js +4 -10
  13. package/dest/pxe_service/error_enriching.d.ts.map +1 -1
  14. package/dest/pxe_service/error_enriching.js +6 -3
  15. package/dest/pxe_service/pxe_service.d.ts +6 -6
  16. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  17. package/dest/pxe_service/pxe_service.js +34 -30
  18. package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
  19. package/dest/pxe_service/test/pxe_test_suite.js +1 -4
  20. package/dest/simulator_oracle/index.d.ts +8 -6
  21. package/dest/simulator_oracle/index.d.ts.map +1 -1
  22. package/dest/simulator_oracle/index.js +170 -158
  23. package/dest/simulator_oracle/tagging_utils.d.ts +16 -0
  24. package/dest/simulator_oracle/tagging_utils.d.ts.map +1 -0
  25. package/dest/simulator_oracle/tagging_utils.js +25 -0
  26. package/dest/utils/create_pxe_service.d.ts.map +1 -1
  27. package/dest/utils/create_pxe_service.js +8 -5
  28. package/package.json +17 -17
  29. package/src/database/kv_pxe_database.ts +6 -4
  30. package/src/database/pxe_database.ts +6 -6
  31. package/src/kernel_oracle/index.ts +1 -1
  32. package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +1 -1
  33. package/src/kernel_prover/kernel_prover.ts +11 -1
  34. package/src/kernel_prover/test/test_circuit_prover.ts +6 -22
  35. package/src/pxe_service/error_enriching.ts +5 -2
  36. package/src/pxe_service/pxe_service.ts +47 -42
  37. package/src/pxe_service/test/pxe_test_suite.ts +0 -4
  38. package/src/simulator_oracle/index.ts +203 -188
  39. package/src/simulator_oracle/tagging_utils.ts +31 -0
  40. package/src/utils/create_pxe_service.ts +7 -4
@@ -1,4 +1,5 @@
1
1
  import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
2
+ import { BBWasmPrivateKernelProver } from '@aztec/bb-prover/wasm';
2
3
  import { randomBytes } from '@aztec/foundation/crypto';
3
4
  import { createLogger } from '@aztec/foundation/log';
4
5
  import { KeyStore } from '@aztec/key-store';
@@ -40,10 +41,12 @@ function createProver(config, logSuffix) {
40
41
  }
41
42
  // (@PhilWindle) Temporary validation until WASM is implemented
42
43
  if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
43
- throw new Error(`Prover must be configured with binary path and working directory`);
44
+ return new BBWasmPrivateKernelProver(16);
45
+ }
46
+ else {
47
+ const bbConfig = config;
48
+ const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
49
+ return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, log);
44
50
  }
45
- const bbConfig = config;
46
- const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
47
- return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, log);
48
51
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3B4ZV9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWF0ZV9weGVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLFNBQW9CLEVBQ3BCLE1BQXdCLEVBQ3hCLGVBQTZDLFNBQVMsRUFDdEQsWUFBa0M7SUFFbEMsTUFBTSxTQUFTLEdBQ2IsT0FBTyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUVqSCxNQUFNLFdBQVcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzdELE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsR0FBRyxNQUFNO1FBQ1QsV0FBVztLQUNRLENBQUM7SUFFdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQzNCLE1BQU0sV0FBVyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUMzRixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRWhHLE1BQU0sRUFBRSxHQUFHLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckYsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBd0IsRUFBRSxTQUFrQjtJQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLE1BQW9HLENBQUM7SUFDdEgsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sMkJBQTJCLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JGLENBQUMifQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3B4ZV9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWF0ZV9weGVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLFNBQW9CLEVBQ3BCLE1BQXdCLEVBQ3hCLGVBQTZDLFNBQVMsRUFDdEQsWUFBa0M7SUFFbEMsTUFBTSxTQUFTLEdBQ2IsT0FBTyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUVqSCxNQUFNLFdBQVcsR0FBRyxNQUFNLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzdELE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsR0FBRyxNQUFNO1FBQ1QsV0FBVztLQUNRLENBQUM7SUFFdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQzNCLE1BQU0sV0FBVyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUMzRixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRWhHLE1BQU0sRUFBRSxHQUFHLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckYsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBd0IsRUFBRSxTQUFrQjtJQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUkseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLFFBQVEsR0FBRyxNQUNDLENBQUM7UUFDbkIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sMkJBQTJCLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7QUFDSCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/pxe",
3
- "version": "0.67.1",
3
+ "version": "0.68.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -23,7 +23,7 @@
23
23
  "clean": "rm -rf ./dest .tsbuildinfo ./src/config/package_info.ts",
24
24
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
25
25
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
26
- "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests",
26
+ "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
27
27
  "start": "LOG_LEVEL=${LOG_LEVEL:-debug} && node ./dest/bin/index.js",
28
28
  "generate": "node ./scripts/generate_package_info.js"
29
29
  },
@@ -59,9 +59,9 @@
59
59
  ],
60
60
  "reporters": [
61
61
  [
62
- "default",
62
+ "jest-silent-reporter",
63
63
  {
64
- "summaryThreshold": 9999
64
+ "useDots": true
65
65
  }
66
66
  ]
67
67
  ],
@@ -71,19 +71,19 @@
71
71
  ]
72
72
  },
73
73
  "dependencies": {
74
- "@aztec/bb-prover": "0.67.1",
75
- "@aztec/bb.js": "0.67.1",
76
- "@aztec/builder": "0.67.1",
77
- "@aztec/circuit-types": "0.67.1",
78
- "@aztec/circuits.js": "0.67.1",
79
- "@aztec/ethereum": "0.67.1",
80
- "@aztec/foundation": "0.67.1",
81
- "@aztec/key-store": "0.67.1",
82
- "@aztec/kv-store": "0.67.1",
83
- "@aztec/noir-protocol-circuits-types": "0.67.1",
84
- "@aztec/protocol-contracts": "0.67.1",
85
- "@aztec/simulator": "0.67.1",
86
- "@aztec/types": "0.67.1",
74
+ "@aztec/bb-prover": "0.68.1",
75
+ "@aztec/bb.js": "0.68.1",
76
+ "@aztec/builder": "0.68.1",
77
+ "@aztec/circuit-types": "0.68.1",
78
+ "@aztec/circuits.js": "0.68.1",
79
+ "@aztec/ethereum": "0.68.1",
80
+ "@aztec/foundation": "0.68.1",
81
+ "@aztec/key-store": "0.68.1",
82
+ "@aztec/kv-store": "0.68.1",
83
+ "@aztec/noir-protocol-circuits-types": "0.68.1",
84
+ "@aztec/protocol-contracts": "0.68.1",
85
+ "@aztec/simulator": "0.68.1",
86
+ "@aztec/types": "0.68.1",
87
87
  "@msgpack/msgpack": "^3.0.0-beta2",
88
88
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
89
89
  "@noir-lang/types": "workspace:*",
@@ -538,7 +538,7 @@ export class KVPxeDatabase implements PxeDatabase {
538
538
  return (await toArray(this.#completeAddresses.valuesAsync())).map(v => CompleteAddress.fromBuffer(v));
539
539
  }
540
540
 
541
- async addContactAddress(address: AztecAddress): Promise<boolean> {
541
+ async addSenderAddress(address: AztecAddress): Promise<boolean> {
542
542
  if (await this.#addressBook.hasAsync(address.toString())) {
543
543
  return false;
544
544
  }
@@ -548,11 +548,11 @@ export class KVPxeDatabase implements PxeDatabase {
548
548
  return true;
549
549
  }
550
550
 
551
- async getContactAddresses(): Promise<AztecAddress[]> {
551
+ async getSenderAddresses(): Promise<AztecAddress[]> {
552
552
  return (await toArray(this.#addressBook.entriesAsync())).map(AztecAddress.fromString);
553
553
  }
554
554
 
555
- async removeContactAddress(address: AztecAddress): Promise<boolean> {
555
+ async removeSenderAddress(address: AztecAddress): Promise<boolean> {
556
556
  if (!this.#addressBook.hasAsync(address.toString())) {
557
557
  return false;
558
558
  }
@@ -585,7 +585,9 @@ export class KVPxeDatabase implements PxeDatabase {
585
585
 
586
586
  async #setTaggingSecretsIndexes(indexedSecrets: IndexedTaggingSecret[], storageMap: AztecAsyncMap<string, number>) {
587
587
  await Promise.all(
588
- indexedSecrets.map(indexedSecret => storageMap.set(indexedSecret.secret.toString(), indexedSecret.index)),
588
+ indexedSecrets.map(indexedSecret =>
589
+ storageMap.set(indexedSecret.appTaggingSecret.toString(), indexedSecret.index),
590
+ ),
589
591
  );
590
592
  }
591
593
 
@@ -119,24 +119,24 @@ export interface PxeDatabase extends ContractArtifactDatabase, ContractInstanceD
119
119
  setHeader(header: BlockHeader): Promise<void>;
120
120
 
121
121
  /**
122
- * Adds contact address to the database.
122
+ * Adds sender address to the database.
123
123
  * @param address - The address to add to the address book.
124
124
  * @returns A promise resolving to true if the address was added, false if it already exists.
125
125
  */
126
- addContactAddress(address: AztecAddress): Promise<boolean>;
126
+ addSenderAddress(address: AztecAddress): Promise<boolean>;
127
127
 
128
128
  /**
129
- * Retrieves the list of contact addresses in the address book.
129
+ * Retrieves the list of sender addresses in the address book.
130
130
  * @returns An array of Aztec addresses.
131
131
  */
132
- getContactAddresses(): Promise<AztecAddress[]>;
132
+ getSenderAddresses(): Promise<AztecAddress[]>;
133
133
 
134
134
  /**
135
- * Removes a contact address from the database.
135
+ * Removes a sender address from the database.
136
136
  * @param address - The address to remove from the address book.
137
137
  * @returns A promise resolving to true if the address was removed, false if it does not exist.
138
138
  */
139
- removeContactAddress(address: AztecAddress): Promise<boolean>;
139
+ removeSenderAddress(address: AztecAddress): Promise<boolean>;
140
140
 
141
141
  /**
142
142
  * Adds complete address to the database.
@@ -15,7 +15,7 @@ import {
15
15
  import { createLogger } from '@aztec/foundation/log';
16
16
  import { type Tuple } from '@aztec/foundation/serialize';
17
17
  import { type KeyStore } from '@aztec/key-store';
18
- import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types';
18
+ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/client';
19
19
 
20
20
  import { type ContractDataOracle } from '../contract_data_oracle/index.js';
21
21
  import { type ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js';
@@ -37,7 +37,7 @@ import {
37
37
  import { makeTuple } from '@aztec/foundation/array';
38
38
  import { padArrayEnd } from '@aztec/foundation/collection';
39
39
  import { type Tuple, assertLength } from '@aztec/foundation/serialize';
40
- import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types';
40
+ import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types/client';
41
41
 
42
42
  import { type ProvingDataOracle } from '../proving_data_oracle.js';
43
43
 
@@ -31,7 +31,8 @@ import { vkAsFieldsMegaHonk } from '@aztec/foundation/crypto';
31
31
  import { createLogger } from '@aztec/foundation/log';
32
32
  import { assertLength } from '@aztec/foundation/serialize';
33
33
  import { pushTestData } from '@aztec/foundation/testing';
34
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types';
34
+ import { Timer } from '@aztec/foundation/timer';
35
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/client';
35
36
  import {
36
37
  getProtocolContractSiblingPath,
37
38
  isProtocolContract,
@@ -118,6 +119,8 @@ export class KernelProver {
118
119
  profile: boolean = false,
119
120
  dryRun: boolean = false,
120
121
  ): Promise<PrivateKernelSimulateOutput<PrivateKernelTailCircuitPublicInputs>> {
122
+ const timer = new Timer();
123
+
121
124
  const isPrivateOnlyTx = this.isPrivateOnly(executionResult);
122
125
 
123
126
  const executionStack = [executionResult];
@@ -197,7 +200,9 @@ export class KernelProver {
197
200
  privateCallData,
198
201
  isPrivateOnlyTx,
199
202
  );
203
+
200
204
  pushTestData('private-kernel-inputs-init', proofInput);
205
+
201
206
  output = await this.proofCreator.simulateProofInit(proofInput);
202
207
 
203
208
  acirs.push(output.bytecode);
@@ -214,7 +219,9 @@ export class KernelProver {
214
219
  assertLength<Fr, typeof VK_TREE_HEIGHT>(previousVkMembershipWitness.siblingPath, VK_TREE_HEIGHT),
215
220
  );
216
221
  const proofInput = new PrivateKernelInnerCircuitPrivateInputs(previousKernelData, privateCallData);
222
+
217
223
  pushTestData('private-kernel-inputs-inner', proofInput);
224
+
218
225
  output = await this.proofCreator.simulateProofInner(proofInput);
219
226
 
220
227
  acirs.push(output.bytecode);
@@ -267,6 +274,7 @@ export class KernelProver {
267
274
  const privateInputs = new PrivateKernelTailCircuitPrivateInputs(previousKernelData);
268
275
 
269
276
  pushTestData('private-kernel-inputs-ordering', privateInputs);
277
+
270
278
  const tailOutput = await this.proofCreator.simulateProofTail(privateInputs);
271
279
  if (tailOutput.publicInputs.forPublic) {
272
280
  const privateLogs = privateInputs.previousKernel.publicInputs.end.privateLogs;
@@ -282,6 +290,8 @@ export class KernelProver {
282
290
  tailOutput.profileResult = { gateCounts };
283
291
  }
284
292
 
293
+ this.log.verbose(`Private kernel witness generation took ${timer.ms()}ms`);
294
+
285
295
  // TODO(#7368) how do we 'bincode' encode these inputs?
286
296
  if (!dryRun) {
287
297
  const ivcProof = await this.proofCreator.createClientIvcProof(acirs, witnessStack);
@@ -1,11 +1,6 @@
1
- import {
2
- type AppCircuitSimulateOutput,
3
- type PrivateKernelProver,
4
- type PrivateKernelSimulateOutput,
5
- } from '@aztec/circuit-types';
1
+ import { type PrivateKernelProver, type PrivateKernelSimulateOutput } from '@aztec/circuit-types';
6
2
  import type { CircuitSimulationStats } from '@aztec/circuit-types/stats';
7
3
  import {
8
- CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS,
9
4
  ClientIvcProof,
10
5
  type PrivateKernelCircuitPublicInputs,
11
6
  type PrivateKernelInitCircuitPrivateInputs,
@@ -13,13 +8,12 @@ import {
13
8
  type PrivateKernelResetCircuitPrivateInputs,
14
9
  type PrivateKernelTailCircuitPrivateInputs,
15
10
  type PrivateKernelTailCircuitPublicInputs,
16
- VerificationKeyAsFields,
17
11
  } from '@aztec/circuits.js';
18
12
  import { createLogger } from '@aztec/foundation/log';
19
13
  import { elapsed } from '@aztec/foundation/timer';
20
14
  import {
21
- type ProtocolArtifact,
22
- ProtocolCircuitVks,
15
+ ClientCircuitVks,
16
+ type ClientProtocolArtifact,
23
17
  executeInit,
24
18
  executeInner,
25
19
  executeReset,
@@ -27,7 +21,7 @@ import {
27
21
  executeTailForPublic,
28
22
  getPrivateKernelResetArtifactName,
29
23
  maxPrivateKernelResetDimensions,
30
- } from '@aztec/noir-protocol-circuits-types';
24
+ } from '@aztec/noir-protocol-circuits-types/client';
31
25
 
32
26
  import { type WitnessMap } from '@noir-lang/types';
33
27
 
@@ -114,22 +108,12 @@ export class TestPrivateKernelProver implements PrivateKernelProver {
114
108
  return Promise.resolve(0);
115
109
  }
116
110
 
117
- computeAppCircuitVerificationKey(
118
- _bytecode: Buffer,
119
- _appCircuitName?: string | undefined,
120
- ): Promise<AppCircuitSimulateOutput> {
121
- const appCircuitProofOutput: AppCircuitSimulateOutput = {
122
- verificationKey: VerificationKeyAsFields.makeEmpty(CLIENT_IVC_VERIFICATION_KEY_LENGTH_IN_FIELDS),
123
- };
124
- return Promise.resolve(appCircuitProofOutput);
125
- }
126
-
127
111
  private makeEmptyKernelSimulateOutput<
128
112
  PublicInputsType extends PrivateKernelTailCircuitPublicInputs | PrivateKernelCircuitPublicInputs,
129
- >(publicInputs: PublicInputsType, circuitType: ProtocolArtifact) {
113
+ >(publicInputs: PublicInputsType, circuitType: ClientProtocolArtifact) {
130
114
  const kernelProofOutput: PrivateKernelSimulateOutput<PublicInputsType> = {
131
115
  publicInputs,
132
- verificationKey: ProtocolCircuitVks[circuitType].keyAsFields,
116
+ verificationKey: ClientCircuitVks[circuitType].keyAsFields,
133
117
  outputWitness: new Map(),
134
118
  bytecode: Buffer.from([]),
135
119
  };
@@ -1,5 +1,8 @@
1
1
  import { type SimulationError, isNoirCallStackUnresolved } from '@aztec/circuit-types';
2
- import { AztecAddress, Fr, FunctionSelector, PUBLIC_DISPATCH_SELECTOR } from '@aztec/circuits.js';
2
+ import { PUBLIC_DISPATCH_SELECTOR } from '@aztec/circuits.js/constants';
3
+ import { FunctionSelector } from '@aztec/foundation/abi';
4
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
5
+ import { Fr } from '@aztec/foundation/fields';
3
6
  import { type Logger } from '@aztec/foundation/log';
4
7
  import { resolveAssertionMessageFromRevertData, resolveOpcodeLocations } from '@aztec/simulator/errors';
5
8
 
@@ -39,7 +42,7 @@ export async function enrichSimulationError(err: SimulationError, db: PxeDatabas
39
42
  );
40
43
  } else {
41
44
  logger.warn(
42
- `Could not function artifact in contract ${contract.name} for function '${fnName}' when enriching error callstack`,
45
+ `Could not find function artifact in contract ${contract.name} for function '${fnName}' when enriching error callstack`,
43
46
  );
44
47
  }
45
48
  });
@@ -31,38 +31,39 @@ import {
31
31
  UniqueNote,
32
32
  getNonNullifiedL1ToL2MessageWitness,
33
33
  } from '@aztec/circuit-types';
34
+ import type {
35
+ CompleteAddress,
36
+ ContractClassWithId,
37
+ ContractInstanceWithAddress,
38
+ GasFees,
39
+ L1_TO_L2_MSG_TREE_HEIGHT,
40
+ NodeInfo,
41
+ PartialAddress,
42
+ PrivateKernelTailCircuitPublicInputs,
43
+ } from '@aztec/circuits.js';
34
44
  import {
35
- type AztecAddress,
36
- type CompleteAddress,
37
- type ContractClassWithId,
38
- type ContractInstanceWithAddress,
39
- type GasFees,
40
- type L1_TO_L2_MSG_TREE_HEIGHT,
41
- type NodeInfo,
42
- type PartialAddress,
43
- type PrivateKernelTailCircuitPublicInputs,
44
- computeAddressSecret,
45
45
  computeContractAddressFromInstance,
46
46
  computeContractClassId,
47
47
  getContractClassFromArtifact,
48
- } from '@aztec/circuits.js';
48
+ } from '@aztec/circuits.js/contract';
49
49
  import { computeNoteHashNonce, siloNullifier } from '@aztec/circuits.js/hash';
50
+ import { computeAddressSecret } from '@aztec/circuits.js/keys';
50
51
  import {
51
52
  type AbiDecoded,
52
53
  type ContractArtifact,
53
54
  EventSelector,
54
55
  FunctionSelector,
56
+ FunctionType,
55
57
  encodeArguments,
56
58
  } from '@aztec/foundation/abi';
59
+ import { type AztecAddress } from '@aztec/foundation/aztec-address';
57
60
  import { Fr, type Point } from '@aztec/foundation/fields';
58
61
  import { type Logger, createLogger } from '@aztec/foundation/log';
62
+ import { Timer } from '@aztec/foundation/timer';
59
63
  import { type KeyStore } from '@aztec/key-store';
60
64
  import { type L2TipsStore } from '@aztec/kv-store/stores';
61
- import {
62
- ProtocolContractAddress,
63
- getCanonicalProtocolContract,
64
- protocolContractNames,
65
- } from '@aztec/protocol-contracts';
65
+ import { ProtocolContractAddress, protocolContractNames } from '@aztec/protocol-contracts';
66
+ import { getCanonicalProtocolContract } from '@aztec/protocol-contracts/bundle';
66
67
  import { type AcirSimulator } from '@aztec/simulator/client';
67
68
 
68
69
  import { inspect } from 'util';
@@ -165,37 +166,37 @@ export class PXEService implements PXE {
165
166
  return accountCompleteAddress;
166
167
  }
167
168
 
168
- public async registerContact(address: AztecAddress): Promise<AztecAddress> {
169
+ public async registerSender(address: AztecAddress): Promise<AztecAddress> {
169
170
  const accounts = await this.keyStore.getAccounts();
170
171
  if (accounts.includes(address)) {
171
- this.log.info(`Account:\n "${address.toString()}"\n already registered.`);
172
+ this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
172
173
  return address;
173
174
  }
174
175
 
175
- const wasAdded = await this.db.addContactAddress(address);
176
+ const wasAdded = await this.db.addSenderAddress(address);
176
177
 
177
178
  if (wasAdded) {
178
- this.log.info(`Added contact:\n ${address.toString()}`);
179
+ this.log.info(`Added sender:\n ${address.toString()}`);
179
180
  } else {
180
- this.log.info(`Contact:\n "${address.toString()}"\n already registered.`);
181
+ this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
181
182
  }
182
183
 
183
184
  return address;
184
185
  }
185
186
 
186
- public getContacts(): Promise<AztecAddress[]> {
187
- const contacts = this.db.getContactAddresses();
187
+ public getSenders(): Promise<AztecAddress[]> {
188
+ const senders = this.db.getSenderAddresses();
188
189
 
189
- return Promise.resolve(contacts);
190
+ return Promise.resolve(senders);
190
191
  }
191
192
 
192
- public async removeContact(address: AztecAddress): Promise<void> {
193
- const wasRemoved = await this.db.removeContactAddress(address);
193
+ public async removeSender(address: AztecAddress): Promise<void> {
194
+ const wasRemoved = await this.db.removeSenderAddress(address);
194
195
 
195
196
  if (wasRemoved) {
196
- this.log.info(`Removed contact:\n ${address.toString()}`);
197
+ this.log.info(`Removed sender:\n ${address.toString()}`);
197
198
  } else {
198
- this.log.info(`Contact:\n "${address.toString()}"\n not in address book.`);
199
+ this.log.info(`Sender:\n "${address.toString()}"\n not in address book.`);
199
200
  }
200
201
 
201
202
  return Promise.resolve();
@@ -211,12 +212,6 @@ export class PXEService implements PXE {
211
212
  );
212
213
  }
213
214
 
214
- public async getRegisteredAccount(address: AztecAddress): Promise<CompleteAddress | undefined> {
215
- const result = await this.getRegisteredAccounts();
216
- const account = result.find(r => r.address.equals(address));
217
- return Promise.resolve(account);
218
- }
219
-
220
215
  public async registerContractClass(artifact: ContractArtifact): Promise<void> {
221
216
  const contractClassId = computeContractClassId(getContractClassFromArtifact(artifact));
222
217
  await this.db.addContractArtifact(contractClassId, artifact);
@@ -242,8 +237,14 @@ export class PXEService implements PXE {
242
237
 
243
238
  await this.db.addContractArtifact(contractClassId, artifact);
244
239
 
245
- // TODO: PXE may not want to broadcast the artifact to the network
246
- await this.node.addContractArtifact(instance.address, artifact);
240
+ const functionNames: Record<string, string> = {};
241
+ for (const fn of artifact.functions) {
242
+ if (fn.functionType === FunctionType.PUBLIC) {
243
+ functionNames[FunctionSelector.fromNameAndParameters(fn.name, fn.parameters).toString()] = fn.name;
244
+ }
245
+ }
246
+
247
+ await this.node.registerContractFunctionNames(instance.address, functionNames);
247
248
 
248
249
  // TODO(#10007): Node should get public contract class from the registration event, not from PXE registration
249
250
  await this.node.addContractClass({ ...contractClass, privateFunctions: [], unconstrainedFunctions: [] });
@@ -481,6 +482,7 @@ export class PXEService implements PXE {
481
482
  simulatePublic: boolean,
482
483
  msgSender: AztecAddress | undefined = undefined,
483
484
  skipTxValidation: boolean = false,
485
+ enforceFeePayment: boolean = true,
484
486
  profile: boolean = false,
485
487
  scopes?: AztecAddress[],
486
488
  ): Promise<TxSimulationResult> {
@@ -494,10 +496,11 @@ export class PXEService implements PXE {
494
496
  version: txRequest.txContext.version,
495
497
  authWitnesses: txRequest.authWitnesses.map(w => w.requestHash),
496
498
  };
497
- this.log.verbose(
499
+ this.log.info(
498
500
  `Simulating transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`,
499
501
  txInfo,
500
502
  );
503
+ const timer = new Timer();
501
504
  await this.synchronizer.sync();
502
505
  const privateExecutionResult = await this.#executePrivate(txRequest, msgSender, scopes);
503
506
 
@@ -517,7 +520,7 @@ export class PXEService implements PXE {
517
520
  const simulatedTx = privateSimulationResult.toSimulatedTx();
518
521
  let publicOutput: PublicSimulationOutput | undefined;
519
522
  if (simulatePublic) {
520
- publicOutput = await this.#simulatePublicCalls(simulatedTx);
523
+ publicOutput = await this.#simulatePublicCalls(simulatedTx, enforceFeePayment);
521
524
  }
522
525
 
523
526
  if (!skipTxValidation) {
@@ -526,7 +529,7 @@ export class PXEService implements PXE {
526
529
  }
527
530
  }
528
531
 
529
- this.log.info(`Simulation completed for ${simulatedTx.tryGetTxHash()}`, {
532
+ this.log.info(`Simulation completed for ${simulatedTx.tryGetTxHash()} in ${timer.ms()}ms`, {
530
533
  txHash: simulatedTx.tryGetTxHash(),
531
534
  ...txInfo,
532
535
  ...(profileResult ? { gateCounts: profileResult.gateCounts } : {}),
@@ -774,11 +777,11 @@ export class PXEService implements PXE {
774
777
  * It can also be used for estimating gas in the future.
775
778
  * @param tx - The transaction to be simulated.
776
779
  */
777
- async #simulatePublicCalls(tx: Tx) {
780
+ async #simulatePublicCalls(tx: Tx, enforceFeePayment: boolean) {
778
781
  // Simulating public calls can throw if the TX fails in a phase that doesn't allow reverts (setup)
779
782
  // Or return as reverted if it fails in a phase that allows reverts (app logic, teardown)
780
783
  try {
781
- const result = await this.node.simulatePublicCalls(tx);
784
+ const result = await this.node.simulatePublicCalls(tx, enforceFeePayment);
782
785
  if (result.revertReason) {
783
786
  throw result.revertReason;
784
787
  }
@@ -867,7 +870,9 @@ export class PXEService implements PXE {
867
870
  const [keyPrefix, account] = await this.keyStore.getKeyPrefixAndAccount(vpk);
868
871
  let secretKey = await this.keyStore.getMasterSecretKey(vpk);
869
872
  if (keyPrefix === 'iv') {
870
- const registeredAccount = await this.getRegisteredAccount(account);
873
+ const registeredAccount = (await this.getRegisteredAccounts()).find(completeAddress =>
874
+ completeAddress.address.equals(account),
875
+ );
871
876
  if (!registeredAccount) {
872
877
  throw new Error('No registered account');
873
878
  }
@@ -24,10 +24,6 @@ export const pxeTestSuite = (testName: string, pxeSetup: () => Promise<PXE>) =>
24
24
  // Check that the account is correctly registered using the getAccounts and getRecipients methods
25
25
  const accounts = await pxe.getRegisteredAccounts();
26
26
  expect(accounts).toContainEqual(completeAddress);
27
-
28
- // Check that the account is correctly registered using the getAccount and getRecipient methods
29
- const account = await pxe.getRegisteredAccount(completeAddress.address);
30
- expect(account).toEqual(completeAddress);
31
27
  });
32
28
 
33
29
  it('does not throw when registering the same account twice (just ignores the second attempt)', async () => {