@aztec/pxe 0.40.0 → 0.41.0

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 (71) hide show
  1. package/dest/database/kv_pxe_database.d.ts +1 -1
  2. package/dest/database/kv_pxe_database.js +2 -2
  3. package/dest/database/pxe_database.d.ts +5 -5
  4. package/dest/kernel_oracle/index.d.ts +7 -4
  5. package/dest/kernel_oracle/index.d.ts.map +1 -1
  6. package/dest/kernel_oracle/index.js +20 -4
  7. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
  8. package/dest/kernel_prover/kernel_prover.js +17 -17
  9. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.d.ts +3 -0
  10. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.d.ts.map +1 -0
  11. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.js +11 -0
  12. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.d.ts +4 -0
  13. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.d.ts.map +1 -0
  14. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.js +59 -0
  15. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.d.ts +4 -0
  16. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.d.ts.map +1 -0
  17. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_reset_outputs.js +12 -0
  18. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.d.ts +1 -2
  19. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.d.ts.map +1 -1
  20. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.js +7 -53
  21. package/dest/kernel_prover/private_inputs_builders/index.d.ts +3 -1
  22. package/dest/kernel_prover/private_inputs_builders/index.d.ts.map +1 -1
  23. package/dest/kernel_prover/private_inputs_builders/index.js +4 -2
  24. package/dest/kernel_prover/proving_data_oracle.d.ts +8 -6
  25. package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -1
  26. package/dest/kernel_prover/test/test_circuit_prover.d.ts +2 -1
  27. package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
  28. package/dest/kernel_prover/test/test_circuit_prover.js +14 -3
  29. package/dest/note_processor/note_processor.d.ts +2 -1
  30. package/dest/note_processor/note_processor.d.ts.map +1 -1
  31. package/dest/note_processor/note_processor.js +3 -2
  32. package/dest/note_processor/produce_note_dao.js +4 -20
  33. package/dest/pxe_service/create_pxe_service.d.ts +1 -1
  34. package/dest/pxe_service/create_pxe_service.d.ts.map +1 -1
  35. package/dest/pxe_service/create_pxe_service.js +6 -5
  36. package/dest/pxe_service/pxe_service.d.ts +5 -4
  37. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  38. package/dest/pxe_service/pxe_service.js +10 -12
  39. package/dest/pxe_service/test/pxe_test_suite.js +2 -2
  40. package/dest/simulator/index.d.ts +2 -1
  41. package/dest/simulator/index.d.ts.map +1 -1
  42. package/dest/simulator/index.js +1 -1
  43. package/dest/simulator_oracle/index.d.ts +6 -5
  44. package/dest/simulator_oracle/index.d.ts.map +1 -1
  45. package/dest/simulator_oracle/index.js +7 -8
  46. package/dest/synchronizer/synchronizer.d.ts +2 -1
  47. package/dest/synchronizer/synchronizer.d.ts.map +1 -1
  48. package/dest/synchronizer/synchronizer.js +8 -8
  49. package/package.json +14 -14
  50. package/src/database/kv_pxe_database.ts +2 -2
  51. package/src/database/pxe_database.ts +5 -5
  52. package/src/kernel_oracle/index.ts +29 -4
  53. package/src/kernel_prover/kernel_prover.ts +35 -26
  54. package/src/kernel_prover/private_inputs_builders/build_private_kernel_init_hints.ts +28 -0
  55. package/src/kernel_prover/private_inputs_builders/build_private_kernel_reset_hints.ts +179 -0
  56. package/src/kernel_prover/private_inputs_builders/{build_private_kernel_tail_outputs.ts → build_private_kernel_reset_outputs.ts} +14 -3
  57. package/src/kernel_prover/private_inputs_builders/build_private_kernel_tail_hints.ts +17 -126
  58. package/src/kernel_prover/private_inputs_builders/index.ts +3 -1
  59. package/src/kernel_prover/proving_data_oracle.ts +9 -5
  60. package/src/kernel_prover/test/test_circuit_prover.ts +24 -3
  61. package/src/note_processor/note_processor.ts +3 -2
  62. package/src/note_processor/produce_note_dao.ts +3 -19
  63. package/src/pxe_service/create_pxe_service.ts +9 -6
  64. package/src/pxe_service/pxe_service.ts +14 -12
  65. package/src/pxe_service/test/pxe_test_suite.ts +1 -1
  66. package/src/simulator/index.ts +2 -1
  67. package/src/simulator_oracle/index.ts +9 -9
  68. package/src/synchronizer/synchronizer.ts +8 -14
  69. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_outputs.d.ts +0 -4
  70. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_outputs.d.ts.map +0 -1
  71. package/dest/kernel_prover/private_inputs_builders/build_private_kernel_tail_outputs.js +0 -10
@@ -1,7 +1,8 @@
1
- import { type AztecNode, type KeyStore, type L2Block, MerkleTreeId, type NoteStatus, type NullifierMembershipWitness, type PublicDataWitness } from '@aztec/circuit-types';
2
- import { type AztecAddress, type CompleteAddress, type Fr, type FunctionSelector, type Header, type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js';
1
+ import { type AztecNode, type L2Block, MerkleTreeId, type NoteStatus, type NullifierMembershipWitness, type PublicDataWitness } from '@aztec/circuit-types';
2
+ import { type AztecAddress, type CompleteAddress, type Fr, type FunctionSelector, type Header, type KeyValidationRequest, type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/circuits.js';
3
3
  import { type FunctionArtifact } from '@aztec/foundation/abi';
4
- import { type DBOracle, MessageLoadOracleInputs, type NullifierKeys } from '@aztec/simulator';
4
+ import { type KeyStore } from '@aztec/key-store';
5
+ import { type DBOracle, MessageLoadOracleInputs } from '@aztec/simulator';
5
6
  import { type ContractInstance } from '@aztec/types/contracts';
6
7
  import { type ContractDataOracle } from '../contract_data_oracle/index.js';
7
8
  import { type PxeDatabase } from '../database/index.js';
@@ -15,8 +16,8 @@ export declare class SimulatorOracle implements DBOracle {
15
16
  private aztecNode;
16
17
  private log;
17
18
  constructor(contractDataOracle: ContractDataOracle, db: PxeDatabase, keyStore: KeyStore, aztecNode: AztecNode, log?: import("@aztec/foundation/log").Logger);
18
- getNullifierKeys(accountAddress: AztecAddress, contractAddress: AztecAddress): Promise<NullifierKeys>;
19
- getCompleteAddress(address: AztecAddress): Promise<CompleteAddress>;
19
+ getKeyValidationRequest(pkMHash: Fr, contractAddress: AztecAddress): Promise<KeyValidationRequest>;
20
+ getCompleteAddress(account: AztecAddress): Promise<CompleteAddress>;
20
21
  getContractInstance(address: AztecAddress): Promise<ContractInstance>;
21
22
  getAuthWitness(messageHash: Fr): Promise<Fr[]>;
22
23
  popCapsule(): Promise<Fr[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,EAAE,EACP,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,KAAK,QAAQ,EAAE,uBAAuB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAE5C,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;gBAJH,kBAAkB,EAAE,kBAAkB,EACtC,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,GAAG,yCAAkD;IAGzD,gBAAgB,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAMrG,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAUnE,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQrE,cAAc,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAQ9C,UAAU,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAQ3B,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU;;;;;;;;;IAkB3E,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASzG,yBAAyB,CAC7B,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMxC;;;;;;;OAOG;IACG,0BAA0B,CAC9B,eAAe,EAAE,YAAY,EAC7B,WAAW,EAAE,EAAE,EACf,MAAM,EAAE,EAAE,GACT,OAAO,CAAC,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IA0B7D,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAItE;;;;OAIG;IACG,kBAAkB,CAAC,UAAU,EAAE,EAAE;IAIjC,iBAAiB,CAAC,SAAS,EAAE,EAAE;IAIxB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIpG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAe3F,0CAA0C,CAAC,SAAS,EAAE,EAAE;IAI9D,6BAA6B,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAI3C,gCAAgC,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAIrC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAI3D,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAIhH;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAG/C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulator_oracle/index.ts"],"names":[],"mappings":"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"}
@@ -14,15 +14,14 @@ export class SimulatorOracle {
14
14
  this.aztecNode = aztecNode;
15
15
  this.log = log;
16
16
  }
17
- async getNullifierKeys(accountAddress, contractAddress) {
18
- const masterNullifierPublicKey = await this.keyStore.getMasterNullifierPublicKey(accountAddress);
19
- const appNullifierSecretKey = await this.keyStore.getAppNullifierSecretKey(accountAddress, contractAddress);
20
- return { masterNullifierPublicKey, appNullifierSecretKey };
17
+ getKeyValidationRequest(pkMHash, contractAddress) {
18
+ return this.keyStore.getKeyValidationRequest(pkMHash, contractAddress);
21
19
  }
22
- async getCompleteAddress(address) {
23
- const completeAddress = await this.db.getCompleteAddress(address);
20
+ async getCompleteAddress(account) {
21
+ const completeAddress = await this.db.getCompleteAddress(account);
24
22
  if (!completeAddress) {
25
- throw new Error(`No public key registered for address ${address.toString()}. Register it by calling pxe.registerRecipient(...) or pxe.registerAccount(...).\nSee docs for context: https://docs.aztec.network/developers/debugging/aztecnr-errors#simulation-error-No-public-key-registered-for-address-0x0-Register-it-by-calling-pxeregisterRecipient-or-pxeregisterAccount`);
23
+ throw new Error(`No public key registered for address ${account}.
24
+ Register it by calling pxe.registerRecipient(...) or pxe.registerAccount(...).\nSee docs for context: https://docs.aztec.network/developers/debugging/aztecnr-errors#simulation-error-No-public-key-registered-for-address-0x0-Register-it-by-calling-pxeregisterRecipient-or-pxeregisterAccount`);
26
25
  }
27
26
  return completeAddress;
28
27
  }
@@ -169,4 +168,4 @@ export class SimulatorOracle {
169
168
  return await this.aztecNode.getBlockNumber();
170
169
  }
171
170
  }
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9yX29yYWNsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsWUFBWSxHQUtiLE1BQU0sc0JBQXNCLENBQUM7QUFTOUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFNOUY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUNVLGtCQUFzQyxFQUN0QyxFQUFlLEVBQ2YsUUFBa0IsRUFDbEIsU0FBb0IsRUFDcEIsTUFBTSxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQztRQUpyRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBa0Q7SUFDNUQsQ0FBQztJQUVKLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUE0QixFQUFFLGVBQTZCO1FBQ2hGLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM1RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9B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
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2ltdWxhdG9yX29yYWNsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsWUFBWSxHQUtiLE1BQU0sc0JBQXNCLENBQUM7QUFVOUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU0xRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1Usa0JBQXNDLEVBQ3RDLEVBQWUsRUFDZixRQUFrQixFQUNsQixTQUFvQixFQUNwQixNQUFNLGlCQUFpQixDQUFDLDRCQUE0QixDQUFDO1FBSnJELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixRQUFHLEdBQUgsR0FBRyxDQUFrRDtJQUM1RCxDQUFDO0lBRUosdUJBQXVCLENBQUMsT0FBVyxFQUFFLGVBQTZCO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFxQjtRQUM1QyxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0NBQXdDLE9BQU87eVNB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
@@ -1,6 +1,7 @@
1
- import { type AztecNode, type KeyStore } from '@aztec/circuit-types';
1
+ import { type AztecNode } from '@aztec/circuit-types';
2
2
  import { type AztecAddress, type PublicKey } from '@aztec/circuits.js';
3
3
  import { type SerialQueue } from '@aztec/foundation/fifo';
4
+ import { type KeyStore } from '@aztec/key-store';
4
5
  import { type PxeDatabase } from '../database/index.js';
5
6
  /**
6
7
  * The Synchronizer class manages the synchronization of note processors and interacts with the Aztec node
@@ -1 +1 @@
1
- {"version":3,"file":"synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EAKd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAiC,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;;;GAMG;AACH,qBAAa,YAAY;;IAQX,OAAO,CAAC,IAAI;IAAa,OAAO,CAAC,EAAE;IAAe,OAAO,CAAC,QAAQ;IAP9E,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,uBAAuB,CAAuB;gBAElC,IAAI,EAAE,SAAS,EAAU,EAAE,EAAE,WAAW,EAAU,QAAQ,EAAE,WAAW,EAAE,SAAS,SAAK;IAI3G;;;;;;;OAOG;IACU,KAAK,CAAC,KAAK,SAAI,EAAE,aAAa,SAAO;cAalC,WAAW;IAO3B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;IAgB5B;;;;;OAKG;cACa,IAAI,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BjD;;;;;;OAMG;cACa,wBAAwB,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAmGvD,kBAAkB;IAQhC;;;;;;OAMG;IACU,IAAI;IAMjB;;;;;;;;;OASG;IACI,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM;IAUjF;;;;;;;OAOG;IACU,0BAA0B,CAAC,OAAO,EAAE,YAAY;IAgB7D,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACU,yBAAyB;IAKtC;;;OAGG;IACI,aAAa;;;;;;IAUpB;;;OAGG;IACI,iCAAiC,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA8DvF"}
1
+ {"version":3,"file":"synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA0D,MAAM,sBAAsB,CAAC;AAE9G,OAAO,EAAE,KAAK,YAAY,EAAiC,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtG,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;;;GAMG;AACH,qBAAa,YAAY;;IAQX,OAAO,CAAC,IAAI;IAAa,OAAO,CAAC,EAAE;IAAe,OAAO,CAAC,QAAQ;IAP9E,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,uBAAuB,CAAuB;gBAElC,IAAI,EAAE,SAAS,EAAU,EAAE,EAAE,WAAW,EAAU,QAAQ,EAAE,WAAW,EAAE,SAAS,SAAK;IAI3G;;;;;;;OAOG;IACU,KAAK,CAAC,KAAK,SAAI,EAAE,aAAa,SAAO;cAalC,WAAW;IAO3B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;IAgB5B;;;;;OAKG;cACa,IAAI,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BjD;;;;;;OAMG;cACa,wBAAwB,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;YAmGvD,kBAAkB;IAQhC;;;;;;OAMG;IACU,IAAI;IAMjB;;;;;;;;;OASG;IACI,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM;IAUjF;;;;;;;OAOG;IACU,0BAA0B,CAAC,OAAO,EAAE,YAAY;IAgB7D,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACU,yBAAyB;IAKtC;;;OAGG;IACI,aAAa;;;;;;IAUpB;;;OAGG;IACI,iCAAiC,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CA8DvF"}
@@ -1,6 +1,6 @@
1
1
  var _Synchronizer_instances, _Synchronizer_reprocessDeferredNotesForContract;
2
2
  import { __classPrivateFieldGet } from "tslib";
3
- import { L2BlockL2Logs, MerkleTreeId, } from '@aztec/circuit-types';
3
+ import { L2BlockL2Logs, MerkleTreeId } from '@aztec/circuit-types';
4
4
  import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
5
5
  import { createDebugLogger } from '@aztec/foundation/log';
6
6
  import { RunningPromise } from '@aztec/foundation/running-promise';
@@ -89,14 +89,14 @@ export class Synchronizer {
89
89
  if (blocks.length === 0) {
90
90
  return false;
91
91
  }
92
- const encryptedLogs = blocks.flatMap(block => block.body.encryptedLogs);
92
+ const noteEncryptedLogs = blocks.flatMap(block => block.body.noteEncryptedLogs);
93
93
  // Update latest tree roots from the most recent block
94
94
  const latestBlock = blocks[blocks.length - 1];
95
95
  await this.setHeaderFromBlock(latestBlock);
96
- const logCount = L2BlockL2Logs.getTotalLogCount(encryptedLogs);
96
+ const logCount = L2BlockL2Logs.getTotalLogCount(noteEncryptedLogs);
97
97
  this.log.debug(`Forwarding ${logCount} encrypted logs and blocks to ${this.noteProcessors.length} note processors`);
98
98
  for (const noteProcessor of this.noteProcessors) {
99
- await noteProcessor.process(blocks, encryptedLogs);
99
+ await noteProcessor.process(blocks, noteEncryptedLogs);
100
100
  }
101
101
  return true;
102
102
  }
@@ -154,8 +154,8 @@ export class Synchronizer {
154
154
  // behind main sync.
155
155
  throw new Error('No blocks in processor catch up mode');
156
156
  }
157
- const encryptedLogs = blocks.flatMap(block => block.body.encryptedLogs);
158
- const logCount = L2BlockL2Logs.getTotalLogCount(encryptedLogs);
157
+ const noteEncryptedLogs = blocks.flatMap(block => block.body.noteEncryptedLogs);
158
+ const logCount = L2BlockL2Logs.getTotalLogCount(noteEncryptedLogs);
159
159
  this.log.debug(`Forwarding ${logCount} encrypted logs and blocks to note processors in catch up mode`);
160
160
  for (const noteProcessor of catchUpGroup) {
161
161
  // find the index of the first block that the note processor is not yet synced to
@@ -167,7 +167,7 @@ export class Synchronizer {
167
167
  break;
168
168
  }
169
169
  this.log.debug(`Catching up note processor ${noteProcessor.masterIncomingViewingPublicKey.toString()} by processing ${blocks.length - index} blocks`);
170
- await noteProcessor.process(blocks.slice(index), encryptedLogs.slice(index));
170
+ await noteProcessor.process(blocks.slice(index), noteEncryptedLogs.slice(index));
171
171
  if (noteProcessor.status.syncedToBlock === toBlockNumber) {
172
172
  // Note processor caught up, move it to `noteProcessors` from `noteProcessorsToCatchUp`.
173
173
  this.log.debug(`Note processor for ${noteProcessor.masterIncomingViewingPublicKey.toString()} has caught up`, {
@@ -322,4 +322,4 @@ _Synchronizer_instances = new WeakSet(), _Synchronizer_reprocessDeferredNotesFor
322
322
  await this.db.removeNullifiedNotes(relevantNullifiers, publicKey);
323
323
  }
324
324
  };
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsYUFBYSxFQUNiLFlBQVksR0FFYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBOEIsb0JBQW9CLEVBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFFdEcsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUtuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFRdkIsWUFBb0IsSUFBZSxFQUFVLEVBQWUsRUFBVSxRQUFxQixFQUFFLFNBQVMsR0FBRyxFQUFFOztRQUF2RixTQUFJLEdBQUosSUFBSSxDQUFXO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7UUFObkYsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsMkJBQXNCLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBRWxELDRCQUF1QixHQUFvQixFQUFFLENBQUM7UUFHcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUNoRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FB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
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWdDLGFBQWEsRUFBRSxZQUFZLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RyxPQUFPLEVBQThCLG9CQUFvQixFQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBRXRHLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFNbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBUXZCLFlBQW9CLElBQWUsRUFBVSxFQUFlLEVBQVUsUUFBcUIsRUFBRSxTQUFTLEdBQUcsRUFBRTs7UUFBdkYsU0FBSSxHQUFKLElBQUksQ0FBVztRQUFVLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBTm5GLG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLDJCQUFzQixHQUFHLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUVsRCw0QkFBdUIsR0FBb0IsRUFBRSxDQUFDO1FBR3BELElBQUksQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsYUFBYSxHQUFHLElBQUk7UUFDaEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTztR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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/pxe",
3
- "version": "0.40.0",
3
+ "version": "0.41.0",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -48,19 +48,19 @@
48
48
  ]
49
49
  },
50
50
  "dependencies": {
51
- "@aztec/bb-prover": "0.40.0",
52
- "@aztec/bb.js": "0.40.0",
53
- "@aztec/builder": "0.40.0",
54
- "@aztec/circuit-types": "0.40.0",
55
- "@aztec/circuits.js": "0.40.0",
56
- "@aztec/ethereum": "0.40.0",
57
- "@aztec/foundation": "0.40.0",
58
- "@aztec/key-store": "0.40.0",
59
- "@aztec/kv-store": "0.40.0",
60
- "@aztec/noir-protocol-circuits-types": "0.40.0",
61
- "@aztec/protocol-contracts": "0.40.0",
62
- "@aztec/simulator": "0.40.0",
63
- "@aztec/types": "0.40.0",
51
+ "@aztec/bb-prover": "0.41.0",
52
+ "@aztec/bb.js": "0.41.0",
53
+ "@aztec/builder": "0.41.0",
54
+ "@aztec/circuit-types": "0.41.0",
55
+ "@aztec/circuits.js": "0.41.0",
56
+ "@aztec/ethereum": "0.41.0",
57
+ "@aztec/foundation": "0.41.0",
58
+ "@aztec/key-store": "0.41.0",
59
+ "@aztec/kv-store": "0.41.0",
60
+ "@aztec/noir-protocol-circuits-types": "0.41.0",
61
+ "@aztec/protocol-contracts": "0.41.0",
62
+ "@aztec/simulator": "0.41.0",
63
+ "@aztec/types": "0.41.0",
64
64
  "@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
65
65
  "koa": "^2.14.2",
66
66
  "koa-router": "^12.0.0",
@@ -385,8 +385,8 @@ export class KVPxeDatabase implements PxeDatabase {
385
385
  return value ? CompleteAddress.fromBuffer(value) : undefined;
386
386
  }
387
387
 
388
- getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined> {
389
- return Promise.resolve(this.#getCompleteAddress(address));
388
+ getCompleteAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
389
+ return Promise.resolve(this.#getCompleteAddress(account));
390
390
  }
391
391
 
392
392
  getCompleteAddresses(): Promise<CompleteAddress[]> {
@@ -133,14 +133,14 @@ export interface PxeDatabase extends ContractArtifactDatabase, ContractInstanceD
133
133
  addCompleteAddress(address: CompleteAddress): Promise<boolean>;
134
134
 
135
135
  /**
136
- * Retrieves the complete address corresponding to the provided aztec address.
137
- * @param address - The aztec address of the complete address contract.
138
- * @returns A promise that resolves to a CompleteAddress instance if the address is found, or undefined if not found.
136
+ * Retrieve the complete address associated to a given address.
137
+ * @param account - The account address.
138
+ * @returns A promise that resolves to a CompleteAddress instance if found, or undefined if not found.
139
139
  */
140
- getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined>;
140
+ getCompleteAddress(account: AztecAddress): Promise<CompleteAddress | undefined>;
141
141
 
142
142
  /**
143
- * Retrieves the list of complete address added to this database
143
+ * Retrieves the list of complete addresses added to this database
144
144
  * @returns A promise that resolves to an array of AztecAddress instances.
145
145
  */
146
146
  getCompleteAddresses(): Promise<CompleteAddress[]>;
@@ -1,15 +1,19 @@
1
- import { type AztecNode, type KeyStore } from '@aztec/circuit-types';
1
+ import { type AztecNode } from '@aztec/circuit-types';
2
2
  import {
3
3
  type AztecAddress,
4
4
  type Fr,
5
5
  type FunctionSelector,
6
+ type GrumpkinPrivateKey,
7
+ type KeyGenerator,
6
8
  MembershipWitness,
7
9
  type NOTE_HASH_TREE_HEIGHT,
8
10
  type Point,
9
11
  computeContractClassIdPreimage,
10
12
  computeSaltedInitializationHash,
11
13
  } from '@aztec/circuits.js';
14
+ import { createDebugLogger } from '@aztec/foundation/log';
12
15
  import { type Tuple } from '@aztec/foundation/serialize';
16
+ import { type KeyStore } from '@aztec/key-store';
13
17
 
14
18
  import { type ContractDataOracle } from '../contract_data_oracle/index.js';
15
19
  import { type ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js';
@@ -20,7 +24,12 @@ import { type ProvingDataOracle } from './../kernel_prover/proving_data_oracle.j
20
24
  * A data oracle that provides information needed for simulating a transaction.
21
25
  */
22
26
  export class KernelOracle implements ProvingDataOracle {
23
- constructor(private contractDataOracle: ContractDataOracle, private keyStore: KeyStore, private node: AztecNode) {}
27
+ constructor(
28
+ private contractDataOracle: ContractDataOracle,
29
+ private keyStore: KeyStore,
30
+ private node: AztecNode,
31
+ private log = createDebugLogger('aztec:pxe:kernel_oracle'),
32
+ ) {}
24
33
 
25
34
  public async getContractAddressPreimage(address: AztecAddress) {
26
35
  const instance = await this.contractDataOracle.getContractInstance(address);
@@ -61,7 +70,23 @@ export class KernelOracle implements ProvingDataOracle {
61
70
  return header.state.partial.noteHashTree.root;
62
71
  }
63
72
 
64
- public getMasterNullifierSecretKey(nullifierPublicKey: Point) {
65
- return this.keyStore.getMasterNullifierSecretKeyForPublicKey(nullifierPublicKey);
73
+ public getMasterSecretKeyAndAppKeyGenerator(masterPublicKey: Point): Promise<[GrumpkinPrivateKey, KeyGenerator]> {
74
+ return this.keyStore.getMasterSecretKeyAndAppKeyGenerator(masterPublicKey);
75
+ }
76
+
77
+ public async getFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
78
+ try {
79
+ const contractInstance = await this.contractDataOracle.getContractInstance(contractAddress);
80
+
81
+ const [contractArtifact, functionArtifact] = await Promise.all([
82
+ this.contractDataOracle.getContractArtifact(contractInstance.contractClassId),
83
+ this.contractDataOracle.getFunctionArtifact(contractAddress, selector),
84
+ ]);
85
+
86
+ return `${contractArtifact.name}:${functionArtifact.name}`;
87
+ } catch (e) {
88
+ this.log.error(`Failed to get function name for contract ${contractAddress} and selector ${selector}: ${e}`);
89
+ return 'Unknown';
90
+ }
66
91
  }
67
92
  }
@@ -2,7 +2,6 @@ import { type KernelProofOutput, type ProofCreator } from '@aztec/circuit-types'
2
2
  import {
3
3
  CallRequest,
4
4
  Fr,
5
- MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,
6
5
  MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,
7
6
  NESTED_RECURSIVE_PROOF_LENGTH,
8
7
  PrivateCallData,
@@ -26,9 +25,10 @@ import { pushTestData } from '@aztec/foundation/testing';
26
25
  import { type ExecutionResult, collectNoteHashLeafIndexMap, collectNullifiedNoteHashCounters } from '@aztec/simulator';
27
26
 
28
27
  import {
28
+ buildPrivateKernelInitHints,
29
29
  buildPrivateKernelInnerHints,
30
+ buildPrivateKernelResetInputs,
30
31
  buildPrivateKernelTailHints,
31
- buildPrivateKernelTailOutputs,
32
32
  } from './private_inputs_builders/index.js';
33
33
  import { type ProvingDataOracle } from './proving_data_oracle.js';
34
34
 
@@ -71,40 +71,46 @@ export class KernelProver {
71
71
 
72
72
  while (executionStack.length) {
73
73
  const currentExecution = executionStack.pop()!;
74
- executionStack.push(...currentExecution.nestedExecutions);
74
+ executionStack.push(...[...currentExecution.nestedExecutions].reverse());
75
75
 
76
- const privateCallRequests = currentExecution.nestedExecutions.map(result =>
77
- result.callStackItem.toCallRequest(currentExecution.callStackItem.publicInputs.callContext),
78
- );
79
76
  const publicCallRequests = currentExecution.enqueuedPublicFunctionCalls.map(result => result.toCallRequest());
80
77
  const publicTeardownCallRequest = currentExecution.publicTeardownFunctionCall.isEmpty()
81
78
  ? CallRequest.empty()
82
79
  : currentExecution.publicTeardownFunctionCall.toCallRequest();
83
80
 
81
+ const functionName = await this.oracle.getFunctionName(
82
+ currentExecution.callStackItem.contractAddress,
83
+ currentExecution.callStackItem.functionData.selector,
84
+ );
85
+
84
86
  const proofOutput = await this.proofCreator.createAppCircuitProof(
85
87
  currentExecution.partialWitness,
86
88
  currentExecution.acir,
89
+ functionName,
87
90
  );
88
91
 
89
92
  const privateCallData = await this.createPrivateCallData(
90
93
  currentExecution,
91
- privateCallRequests,
92
94
  publicCallRequests,
93
95
  publicTeardownCallRequest,
94
96
  proofOutput.proof,
95
97
  proofOutput.verificationKey,
96
98
  );
97
99
 
98
- const hints = buildPrivateKernelInnerHints(
99
- currentExecution.callStackItem.publicInputs,
100
- noteHashNullifierCounterMap,
101
- );
102
-
103
100
  if (firstIteration) {
101
+ const hints = buildPrivateKernelInitHints(
102
+ currentExecution.callStackItem.publicInputs,
103
+ noteHashNullifierCounterMap,
104
+ currentExecution.callStackItem.publicInputs.privateCallRequests,
105
+ );
104
106
  const proofInput = new PrivateKernelInitCircuitPrivateInputs(txRequest, privateCallData, hints);
105
107
  pushTestData('private-kernel-inputs-init', proofInput);
106
108
  output = await this.proofCreator.createProofInit(proofInput);
107
109
  } else {
110
+ const hints = buildPrivateKernelInnerHints(
111
+ currentExecution.callStackItem.publicInputs,
112
+ noteHashNullifierCounterMap,
113
+ );
108
114
  const previousVkMembershipWitness = await this.oracle.getVkMembershipWitness(output.verificationKey);
109
115
  const previousKernelData = new PrivateKernelData(
110
116
  output.publicInputs,
@@ -120,8 +126,21 @@ export class KernelProver {
120
126
  firstIteration = false;
121
127
  }
122
128
 
123
- const previousVkMembershipWitness = await this.oracle.getVkMembershipWitness(output.verificationKey);
124
- const previousKernelData = new PrivateKernelData(
129
+ let previousVkMembershipWitness = await this.oracle.getVkMembershipWitness(output.verificationKey);
130
+ let previousKernelData = new PrivateKernelData(
131
+ output.publicInputs,
132
+ output.proof,
133
+ output.verificationKey,
134
+ Number(previousVkMembershipWitness.leafIndex),
135
+ assertLength<Fr, typeof VK_TREE_HEIGHT>(previousVkMembershipWitness.siblingPath, VK_TREE_HEIGHT),
136
+ );
137
+
138
+ output = await this.proofCreator.createProofReset(
139
+ await buildPrivateKernelResetInputs(previousKernelData, noteHashLeafIndexMap, this.oracle),
140
+ );
141
+
142
+ previousVkMembershipWitness = await this.oracle.getVkMembershipWitness(output.verificationKey);
143
+ previousKernelData = new PrivateKernelData(
125
144
  output.publicInputs,
126
145
  output.proof,
127
146
  output.verificationKey,
@@ -133,11 +152,9 @@ export class KernelProver {
133
152
  `Calling private kernel tail with hwm ${previousKernelData.publicInputs.minRevertibleSideEffectCounter}`,
134
153
  );
135
154
 
136
- const hints = await buildPrivateKernelTailHints(output.publicInputs, noteHashLeafIndexMap, this.oracle);
155
+ const hints = buildPrivateKernelTailHints(output.publicInputs);
137
156
 
138
- const expectedOutputs = buildPrivateKernelTailOutputs(hints.sortedNewNoteHashes, hints.sortedNewNullifiers);
139
-
140
- const privateInputs = new PrivateKernelTailCircuitPrivateInputs(previousKernelData, expectedOutputs, hints);
157
+ const privateInputs = new PrivateKernelTailCircuitPrivateInputs(previousKernelData, hints);
141
158
 
142
159
  pushTestData('private-kernel-inputs-ordering', privateInputs);
143
160
  return await this.proofCreator.createProofTail(privateInputs);
@@ -145,7 +162,6 @@ export class KernelProver {
145
162
 
146
163
  private async createPrivateCallData(
147
164
  { callStackItem }: ExecutionResult,
148
- privateCallRequests: CallRequest[],
149
165
  publicCallRequests: CallRequest[],
150
166
  publicTeardownCallRequest: CallRequest,
151
167
  proof: RecursiveProof<typeof RECURSIVE_PROOF_LENGTH>,
@@ -153,12 +169,6 @@ export class KernelProver {
153
169
  ) {
154
170
  const { contractAddress, functionData } = callStackItem;
155
171
 
156
- // Pad with empty items to reach max/const length expected by circuit.
157
- const privateCallStack = padArrayEnd(
158
- privateCallRequests,
159
- CallRequest.empty(),
160
- MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,
161
- );
162
172
  const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
163
173
 
164
174
  const functionLeafMembershipWitness = await this.oracle.getFunctionMembershipWitness(
@@ -177,7 +187,6 @@ export class KernelProver {
177
187
 
178
188
  return PrivateCallData.from({
179
189
  callStackItem,
180
- privateCallStack,
181
190
  publicCallStack,
182
191
  publicTeardownCallRequest,
183
192
  proof,
@@ -0,0 +1,28 @@
1
+ import {
2
+ type MAX_NEW_NOTE_HASHES_PER_CALL,
3
+ type PrivateCallRequest,
4
+ type PrivateCircuitPublicInputs,
5
+ PrivateKernelInitHints,
6
+ countAccumulatedItems,
7
+ } from '@aztec/circuits.js';
8
+ import { type Tuple } from '@aztec/foundation/serialize';
9
+
10
+ export function buildPrivateKernelInitHints(
11
+ publicInputs: PrivateCircuitPublicInputs,
12
+ noteHashNullifierCounterMap: Map<number, number>,
13
+ privateCallRequests: PrivateCallRequest[],
14
+ ) {
15
+ const nullifierCounters = publicInputs.newNoteHashes.map(
16
+ n => noteHashNullifierCounterMap.get(n.counter) ?? 0,
17
+ ) as Tuple<number, typeof MAX_NEW_NOTE_HASHES_PER_CALL>;
18
+
19
+ const minRevertibleCounter = publicInputs.minRevertibleSideEffectCounter.toNumber();
20
+ let firstRevertiblePrivateCallRequestIndex = privateCallRequests.findIndex(
21
+ r => r.startSideEffectCounter >= minRevertibleCounter,
22
+ );
23
+ if (firstRevertiblePrivateCallRequestIndex === -1) {
24
+ firstRevertiblePrivateCallRequestIndex = countAccumulatedItems(privateCallRequests);
25
+ }
26
+
27
+ return new PrivateKernelInitHints(nullifierCounters, firstRevertiblePrivateCallRequestIndex);
28
+ }