@aztec/txe 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263

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 (56) hide show
  1. package/dest/constants.d.ts +3 -0
  2. package/dest/constants.d.ts.map +1 -0
  3. package/dest/constants.js +2 -0
  4. package/dest/oracle/interfaces.d.ts +3 -3
  5. package/dest/oracle/interfaces.d.ts.map +1 -1
  6. package/dest/oracle/txe_oracle_public_context.d.ts +3 -3
  7. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  8. package/dest/oracle/txe_oracle_public_context.js +6 -6
  9. package/dest/oracle/txe_oracle_top_level_context.d.ts +4 -2
  10. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  11. package/dest/oracle/txe_oracle_top_level_context.js +44 -28
  12. package/dest/rpc_translator.d.ts +16 -10
  13. package/dest/rpc_translator.d.ts.map +1 -1
  14. package/dest/rpc_translator.js +52 -39
  15. package/dest/state_machine/archiver.d.ts +20 -67
  16. package/dest/state_machine/archiver.d.ts.map +1 -1
  17. package/dest/state_machine/archiver.js +57 -178
  18. package/dest/state_machine/dummy_p2p_client.d.ts +8 -7
  19. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  20. package/dest/state_machine/dummy_p2p_client.js +13 -10
  21. package/dest/state_machine/global_variable_builder.d.ts +2 -2
  22. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  23. package/dest/state_machine/global_variable_builder.js +1 -1
  24. package/dest/state_machine/index.d.ts +1 -1
  25. package/dest/state_machine/index.d.ts.map +1 -1
  26. package/dest/state_machine/index.js +22 -4
  27. package/dest/state_machine/mock_epoch_cache.d.ts +7 -6
  28. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  29. package/dest/state_machine/mock_epoch_cache.js +10 -7
  30. package/dest/state_machine/synchronizer.d.ts +3 -3
  31. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  32. package/dest/txe_session.d.ts +6 -4
  33. package/dest/txe_session.d.ts.map +1 -1
  34. package/dest/txe_session.js +55 -20
  35. package/dest/util/encoding.d.ts +17 -17
  36. package/dest/utils/block_creation.d.ts +4 -4
  37. package/dest/utils/block_creation.d.ts.map +1 -1
  38. package/dest/utils/block_creation.js +16 -5
  39. package/dest/utils/tx_effect_creation.d.ts +2 -3
  40. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  41. package/dest/utils/tx_effect_creation.js +3 -6
  42. package/package.json +16 -16
  43. package/src/constants.ts +3 -0
  44. package/src/oracle/interfaces.ts +2 -2
  45. package/src/oracle/txe_oracle_public_context.ts +6 -8
  46. package/src/oracle/txe_oracle_top_level_context.ts +77 -27
  47. package/src/rpc_translator.ts +56 -49
  48. package/src/state_machine/archiver.ts +52 -220
  49. package/src/state_machine/dummy_p2p_client.ts +18 -13
  50. package/src/state_machine/global_variable_builder.ts +1 -1
  51. package/src/state_machine/index.ts +26 -4
  52. package/src/state_machine/mock_epoch_cache.ts +10 -11
  53. package/src/state_machine/synchronizer.ts +2 -2
  54. package/src/txe_session.ts +88 -16
  55. package/src/utils/block_creation.ts +17 -16
  56. package/src/utils/tx_effect_creation.ts +3 -11
@@ -150,7 +150,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
150
150
  error_kind: "custom";
151
151
  } & import("@aztec/stdlib/abi").AbiType) | undefined>;
152
152
  }>, z.ZodObject<{
153
- bytecode: import("../../../foundation/dest/schemas/types.js").ZodFor<Buffer<ArrayBufferLike>>;
153
+ bytecode: import("@aztec/foundation/schemas").ZodFor<Buffer<ArrayBufferLike>>;
154
154
  verificationKey: z.ZodOptional<z.ZodString>;
155
155
  debugSymbols: z.ZodString;
156
156
  debug: z.ZodOptional<z.ZodObject<{
@@ -656,27 +656,27 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
656
656
  }>;
657
657
  }>, z.ZodIntersection<z.ZodObject<{
658
658
  version: z.ZodLiteral<1>;
659
- salt: import("../../../foundation/dest/schemas/types.js").ZodFor<Fr>;
660
- deployer: import("../../../foundation/dest/schemas/types.js").ZodFor<AztecAddress>;
661
- currentContractClassId: import("../../../foundation/dest/schemas/types.js").ZodFor<Fr>;
662
- originalContractClassId: import("../../../foundation/dest/schemas/types.js").ZodFor<Fr>;
663
- initializationHash: import("../../../foundation/dest/schemas/types.js").ZodFor<Fr>;
659
+ salt: import("@aztec/foundation/schemas").ZodFor<Fr>;
660
+ deployer: import("@aztec/foundation/schemas").ZodFor<AztecAddress>;
661
+ currentContractClassId: import("@aztec/foundation/schemas").ZodFor<Fr>;
662
+ originalContractClassId: import("@aztec/foundation/schemas").ZodFor<Fr>;
663
+ initializationHash: import("@aztec/foundation/schemas").ZodFor<Fr>;
664
664
  publicKeys: z.ZodEffects<z.ZodObject<{
665
- masterNullifierPublicKey: z.ZodType<import("../../../foundation/dest/schemas/schemas.js").Point, any, string>;
666
- masterIncomingViewingPublicKey: z.ZodType<import("../../../foundation/dest/schemas/schemas.js").Point, any, string>;
667
- masterOutgoingViewingPublicKey: z.ZodType<import("../../../foundation/dest/schemas/schemas.js").Point, any, string>;
668
- masterTaggingPublicKey: z.ZodType<import("../../../foundation/dest/schemas/schemas.js").Point, any, string>;
665
+ masterNullifierPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
666
+ masterIncomingViewingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
667
+ masterOutgoingViewingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
668
+ masterTaggingPublicKey: z.ZodType<import("@aztec/foundation/schemas").Point, any, string>;
669
669
  }, "strip", z.ZodTypeAny, {
670
- masterNullifierPublicKey: import("../../../foundation/dest/schemas/schemas.js").Point;
671
- masterIncomingViewingPublicKey: import("../../../foundation/dest/schemas/schemas.js").Point;
672
- masterOutgoingViewingPublicKey: import("../../../foundation/dest/schemas/schemas.js").Point;
673
- masterTaggingPublicKey: import("../../../foundation/dest/schemas/schemas.js").Point;
670
+ masterNullifierPublicKey: import("@aztec/foundation/schemas").Point;
671
+ masterIncomingViewingPublicKey: import("@aztec/foundation/schemas").Point;
672
+ masterOutgoingViewingPublicKey: import("@aztec/foundation/schemas").Point;
673
+ masterTaggingPublicKey: import("@aztec/foundation/schemas").Point;
674
674
  }, {
675
675
  masterNullifierPublicKey: string;
676
676
  masterIncomingViewingPublicKey: string;
677
677
  masterOutgoingViewingPublicKey: string;
678
678
  masterTaggingPublicKey: string;
679
- }>, import("../../../stdlib/dest/keys/public_keys.js").PublicKeys, {
679
+ }>, import("@aztec/stdlib/keys").PublicKeys, {
680
680
  masterNullifierPublicKey: string;
681
681
  masterIncomingViewingPublicKey: string;
682
682
  masterOutgoingViewingPublicKey: string;
@@ -689,7 +689,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
689
689
  currentContractClassId: Fr;
690
690
  originalContractClassId: Fr;
691
691
  initializationHash: Fr;
692
- publicKeys: import("../../../stdlib/dest/keys/public_keys.js").PublicKeys;
692
+ publicKeys: import("@aztec/stdlib/keys").PublicKeys;
693
693
  }, {
694
694
  version: 1;
695
695
  salt?: any;
@@ -704,7 +704,7 @@ export declare const ForeignCallArgsSchema: z.ZodArray<z.ZodUnion<[z.ZodString,
704
704
  masterTaggingPublicKey: string;
705
705
  };
706
706
  }>, z.ZodObject<{
707
- address: import("../../../foundation/dest/schemas/types.js").ZodFor<AztecAddress>;
707
+ address: import("@aztec/foundation/schemas").ZodFor<AztecAddress>;
708
708
  }, "strip", z.ZodTypeAny, {
709
709
  address: AztecAddress;
710
710
  }, {
@@ -1,8 +1,8 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { L2Block, L2BlockHeader } from '@aztec/stdlib/block';
3
+ import { L2Block } from '@aztec/stdlib/block';
4
4
  import { type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
5
- import { GlobalVariables, TxEffect } from '@aztec/stdlib/tx';
5
+ import { BlockHeader, GlobalVariables, TxEffect } from '@aztec/stdlib/tx';
6
6
  /**
7
7
  * Returns a transaction request hash that is valid for transactions that are the only ones in a block.
8
8
  * @param blockNumber The number for the block in which there is a single transaction.
@@ -10,7 +10,7 @@ import { GlobalVariables, TxEffect } from '@aztec/stdlib/tx';
10
10
  */
11
11
  export declare function getSingleTxBlockRequestHash(blockNumber: BlockNumber): Fr;
12
12
  export declare function insertTxEffectIntoWorldTrees(txEffect: TxEffect, worldTrees: MerkleTreeWriteOperations): Promise<void>;
13
- export declare function makeTXEBlockHeader(worldTrees: MerkleTreeWriteOperations, globalVariables: GlobalVariables): Promise<L2BlockHeader>;
13
+ export declare function makeTXEBlockHeader(worldTrees: MerkleTreeWriteOperations, globalVariables: GlobalVariables): Promise<BlockHeader>;
14
14
  /**
15
15
  * Creates an L2Block with proper archive chaining.
16
16
  * This function:
@@ -25,4 +25,4 @@ export declare function makeTXEBlockHeader(worldTrees: MerkleTreeWriteOperations
25
25
  * @returns The created L2Block with proper archive chaining
26
26
  */
27
27
  export declare function makeTXEBlock(worldTrees: MerkleTreeWriteOperations, globalVariables: GlobalVariables, txEffects: TxEffect[]): Promise<L2Block>;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfY3JlYXRpb24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ibG9ja19jcmVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBUSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkUsT0FBTyxFQUF3QyxLQUFLLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3RDs7OztHQUlHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUV4RTtBQUVELHdCQUFzQiw0QkFBNEIsQ0FDaEQsUUFBUSxFQUFFLFFBQVEsRUFDbEIsVUFBVSxFQUFFLHlCQUF5QixHQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0JmO0FBRUQsd0JBQXNCLGtCQUFrQixDQUN0QyxVQUFVLEVBQUUseUJBQXlCLEVBQ3JDLGVBQWUsRUFBRSxlQUFlLEdBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FjeEI7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCx3QkFBc0IsWUFBWSxDQUNoQyxVQUFVLEVBQUUseUJBQXlCLEVBQ3JDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVdsQiJ9
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfY3JlYXRpb24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ibG9ja19jcmVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsV0FBVyxFQUEyQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXZHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQVEsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUF3QyxLQUFLLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUU7Ozs7R0FJRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLEVBQUUsQ0FFeEU7QUFFRCx3QkFBc0IsNEJBQTRCLENBQ2hELFFBQVEsRUFBRSxRQUFRLEVBQ2xCLFVBQVUsRUFBRSx5QkFBeUIsR0FDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtCZjtBQUVELHdCQUFzQixrQkFBa0IsQ0FDdEMsVUFBVSxFQUFFLHlCQUF5QixFQUNyQyxlQUFlLEVBQUUsZUFBZSxHQUMvQixPQUFPLENBQUMsV0FBVyxDQUFDLENBWXRCO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsd0JBQXNCLFlBQVksQ0FDaEMsVUFBVSxFQUFFLHlCQUF5QixFQUNyQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQ3BCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FlbEIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"block_creation.d.ts","sourceRoot":"","sources":["../../src/utils/block_creation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAQ,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAwC,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAExE;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,aAAa,CAAC,CAcxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,OAAO,CAAC,CAWlB"}
1
+ {"version":3,"file":"block_creation.d.ts","sourceRoot":"","sources":["../../src/utils/block_creation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAA2C,MAAM,iCAAiC,CAAC;AAEvG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAQ,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAwC,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAExE;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,WAAW,CAAC,CAYtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,yBAAyB,EACrC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,OAAO,CAAC,CAelB"}
@@ -1,9 +1,10 @@
1
1
  import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
2
+ import { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
2
3
  import { padArrayEnd } from '@aztec/foundation/collection';
3
4
  import { Fr } from '@aztec/foundation/curves/bn254';
4
- import { Body, L2Block, L2BlockHeader } from '@aztec/stdlib/block';
5
- import { makeContentCommitment } from '@aztec/stdlib/testing';
5
+ import { Body, L2Block } from '@aztec/stdlib/block';
6
6
  import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
7
+ import { BlockHeader } from '@aztec/stdlib/tx';
7
8
  /**
8
9
  * Returns a transaction request hash that is valid for transactions that are the only ones in a block.
9
10
  * @param blockNumber The number for the block in which there is a single transaction.
@@ -20,7 +21,14 @@ export async function insertTxEffectIntoWorldTrees(txEffect, worldTrees) {
20
21
  export async function makeTXEBlockHeader(worldTrees, globalVariables) {
21
22
  const stateReference = await worldTrees.getStateReference();
22
23
  const archiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
23
- return new L2BlockHeader(new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)), makeContentCommitment(), stateReference, globalVariables, Fr.ZERO, Fr.ZERO, Fr.ZERO, Fr.ZERO);
24
+ return BlockHeader.from({
25
+ lastArchive: new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)),
26
+ spongeBlobHash: Fr.ZERO,
27
+ state: stateReference,
28
+ globalVariables,
29
+ totalFees: Fr.ZERO,
30
+ totalManaUsed: Fr.ZERO
31
+ });
24
32
  }
25
33
  /**
26
34
  * Creates an L2Block with proper archive chaining.
@@ -37,9 +45,12 @@ export async function makeTXEBlockHeader(worldTrees, globalVariables) {
37
45
  */ export async function makeTXEBlock(worldTrees, globalVariables, txEffects) {
38
46
  const header = await makeTXEBlockHeader(worldTrees, globalVariables);
39
47
  // Update the archive tree with this block's header hash
40
- await worldTrees.updateArchive(header.toBlockHeader());
48
+ await worldTrees.updateArchive(header);
41
49
  // Get the new archive state after updating
42
50
  const newArchiveInfo = await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
43
51
  const newArchive = new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root), Number(newArchiveInfo.size));
44
- return new L2Block(newArchive, header, new Body(txEffects));
52
+ // L2Block requires checkpointNumber and indexWithinCheckpoint
53
+ const checkpointNumber = CheckpointNumber.fromBlockNumber(globalVariables.blockNumber);
54
+ const indexWithinCheckpoint = IndexWithinCheckpoint(0);
55
+ return new L2Block(newArchive, header, new Body(txEffects), checkpointNumber, indexWithinCheckpoint);
45
56
  }
@@ -1,6 +1,5 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
2
  import type { ExecutionNoteCache } from '@aztec/pxe/simulator';
4
3
  import { TxEffect } from '@aztec/stdlib/tx';
5
- export declare function makeTxEffect(noteCache: ExecutionNoteCache, protocolNullifier: Fr, txBlockNumber: BlockNumber): Promise<TxEffect>;
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZWZmZWN0X2NyZWF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHhfZWZmZWN0X2NyZWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsd0JBQXNCLFlBQVksQ0FDaEMsU0FBUyxFQUFFLGtCQUFrQixFQUM3QixpQkFBaUIsRUFBRSxFQUFFLEVBQ3JCLGFBQWEsRUFBRSxXQUFXLEdBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0EyQm5CIn0=
4
+ export declare function makeTxEffect(noteCache: ExecutionNoteCache, txBlockNumber: BlockNumber): Promise<TxEffect>;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZWZmZWN0X2NyZWF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHhfZWZmZWN0X2NyZWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCx3QkFBc0IsWUFBWSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0F1Qi9HIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"tx_effect_creation.d.ts","sourceRoot":"","sources":["../../src/utils/tx_effect_creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAEpD,wBAAsB,YAAY,CAChC,SAAS,EAAE,kBAAkB,EAC7B,iBAAiB,EAAE,EAAE,EACrB,aAAa,EAAE,WAAW,GACzB,OAAO,CAAC,QAAQ,CAAC,CA2BnB"}
1
+ {"version":3,"file":"tx_effect_creation.d.ts","sourceRoot":"","sources":["../../src/utils/tx_effect_creation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAEpD,wBAAsB,YAAY,CAAC,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuB/G"}
@@ -1,16 +1,13 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash } from '@aztec/stdlib/hash';
3
3
  import { TxEffect, TxHash } from '@aztec/stdlib/tx';
4
- export async function makeTxEffect(noteCache, protocolNullifier, txBlockNumber) {
4
+ export async function makeTxEffect(noteCache, txBlockNumber) {
5
5
  const txEffect = TxEffect.empty();
6
- const { usedProtocolNullifierForNonces } = noteCache.finish();
7
- const nonceGenerator = usedProtocolNullifierForNonces ? protocolNullifier : noteCache.getAllNullifiers()[0];
6
+ noteCache.finish();
7
+ const nonceGenerator = noteCache.getNonceGenerator();
8
8
  txEffect.noteHashes = await Promise.all(noteCache.getAllNotes().map(async (pendingNote, i)=>computeUniqueNoteHash(await computeNoteHashNonce(nonceGenerator, i), await siloNoteHash(pendingNote.note.contractAddress, pendingNote.noteHashForConsumption))));
9
9
  // Nullifiers are already siloed
10
10
  txEffect.nullifiers = noteCache.getAllNullifiers();
11
- if (usedProtocolNullifierForNonces) {
12
- txEffect.nullifiers.unshift(protocolNullifier);
13
- }
14
11
  txEffect.txHash = new TxHash(new Fr(txBlockNumber));
15
12
  return txEffect;
16
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/txe",
3
- "version": "0.0.1-commit.c7c42ec",
3
+ "version": "0.0.1-commit.c80b6263",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "bin": "./dest/bin/index.js",
@@ -61,27 +61,27 @@
61
61
  ]
62
62
  },
63
63
  "dependencies": {
64
- "@aztec/accounts": "0.0.1-commit.c7c42ec",
65
- "@aztec/archiver": "0.0.1-commit.c7c42ec",
66
- "@aztec/aztec-node": "0.0.1-commit.c7c42ec",
67
- "@aztec/aztec.js": "0.0.1-commit.c7c42ec",
68
- "@aztec/bb-prover": "0.0.1-commit.c7c42ec",
69
- "@aztec/constants": "0.0.1-commit.c7c42ec",
70
- "@aztec/foundation": "0.0.1-commit.c7c42ec",
71
- "@aztec/key-store": "0.0.1-commit.c7c42ec",
72
- "@aztec/kv-store": "0.0.1-commit.c7c42ec",
73
- "@aztec/protocol-contracts": "0.0.1-commit.c7c42ec",
74
- "@aztec/pxe": "0.0.1-commit.c7c42ec",
75
- "@aztec/simulator": "0.0.1-commit.c7c42ec",
76
- "@aztec/stdlib": "0.0.1-commit.c7c42ec",
77
- "@aztec/world-state": "0.0.1-commit.c7c42ec",
64
+ "@aztec/accounts": "0.0.1-commit.c80b6263",
65
+ "@aztec/archiver": "0.0.1-commit.c80b6263",
66
+ "@aztec/aztec-node": "0.0.1-commit.c80b6263",
67
+ "@aztec/aztec.js": "0.0.1-commit.c80b6263",
68
+ "@aztec/bb-prover": "0.0.1-commit.c80b6263",
69
+ "@aztec/constants": "0.0.1-commit.c80b6263",
70
+ "@aztec/foundation": "0.0.1-commit.c80b6263",
71
+ "@aztec/key-store": "0.0.1-commit.c80b6263",
72
+ "@aztec/kv-store": "0.0.1-commit.c80b6263",
73
+ "@aztec/protocol-contracts": "0.0.1-commit.c80b6263",
74
+ "@aztec/pxe": "0.0.1-commit.c80b6263",
75
+ "@aztec/simulator": "0.0.1-commit.c80b6263",
76
+ "@aztec/stdlib": "0.0.1-commit.c80b6263",
77
+ "@aztec/world-state": "0.0.1-commit.c80b6263",
78
78
  "zod": "^3.23.8"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@jest/globals": "^30.0.0",
82
82
  "@types/jest": "^30.0.0",
83
83
  "@types/node": "^22.15.17",
84
- "@typescript/native-preview": "7.0.0-dev.20251126.1",
84
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
85
85
  "jest": "^30.0.0",
86
86
  "jest-mock-extended": "^4.0.0",
87
87
  "ts-node": "^10.9.1",
@@ -0,0 +1,3 @@
1
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
2
+
3
+ export const DEFAULT_ADDRESS = AztecAddress.fromNumber(42);
@@ -33,9 +33,9 @@ export interface IAvmExecutionOracle {
33
33
  avmOpcodeVersion(): Promise<Fr>;
34
34
  avmOpcodeEmitNullifier(nullifier: Fr): Promise<void>;
35
35
  avmOpcodeEmitNoteHash(noteHash: Fr): Promise<void>;
36
- avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean>;
36
+ avmOpcodeNullifierExists(siloedNullifier: Fr): Promise<boolean>;
37
37
  avmOpcodeStorageWrite(slot: Fr, value: Fr): Promise<void>;
38
- avmOpcodeStorageRead(slot: Fr): Promise<Fr>;
38
+ avmOpcodeStorageRead(slot: Fr, contractAddress: AztecAddress): Promise<Fr>;
39
39
  }
40
40
 
41
41
  /**
@@ -78,13 +78,11 @@ export class TXEOraclePublicContext implements IAvmExecutionOracle {
78
78
  this.transientUniqueNoteHashes.push(siloedNoteHash);
79
79
  }
80
80
 
81
- async avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean> {
82
- const nullifier = await siloNullifier(targetAddress, innerNullifier!);
83
-
81
+ async avmOpcodeNullifierExists(siloedNullifier: Fr): Promise<boolean> {
84
82
  const treeIndex = (
85
- await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()])
83
+ await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()])
86
84
  )[0];
87
- const transientIndex = this.transientSiloedNullifiers.find(n => n.equals(nullifier));
85
+ const transientIndex = this.transientSiloedNullifiers.find(n => n.equals(siloedNullifier));
88
86
 
89
87
  return treeIndex !== undefined || transientIndex !== undefined;
90
88
  }
@@ -101,8 +99,8 @@ export class TXEOraclePublicContext implements IAvmExecutionOracle {
101
99
  ]);
102
100
  }
103
101
 
104
- async avmOpcodeStorageRead(slot: Fr): Promise<Fr> {
105
- const leafSlot = await computePublicDataTreeLeafSlot(this.contractAddress, slot);
102
+ async avmOpcodeStorageRead(slot: Fr, contractAddress: AztecAddress): Promise<Fr> {
103
+ const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, slot);
106
104
 
107
105
  const lowLeafResult = await this.forkedWorldTrees.getPreviousValueIndex(
108
106
  MerkleTreeId.PUBLIC_DATA_TREE,
@@ -119,7 +117,7 @@ export class TXEOraclePublicContext implements IAvmExecutionOracle {
119
117
  )) as PublicDataTreeLeafPreimage
120
118
  ).leaf.value;
121
119
 
122
- this.logger.debug('AVM storage read', { slot, value });
120
+ this.logger.debug('AVM storage read', { slot, contractAddress, value });
123
121
 
124
122
  return value;
125
123
  }
@@ -22,6 +22,7 @@ import {
22
22
  SenderAddressBookStore,
23
23
  SenderTaggingStore,
24
24
  enrichPublicSimulationError,
25
+ syncState,
25
26
  } from '@aztec/pxe/server';
26
27
  import {
27
28
  ExecutionNoteCache,
@@ -49,7 +50,7 @@ import {
49
50
  PublicContractsDB,
50
51
  PublicProcessor,
51
52
  } from '@aztec/simulator/server';
52
- import { type ContractArtifact, EventSelector, FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
53
+ import { type ContractArtifact, EventSelector, FunctionCall, FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
53
54
  import { AuthWitness } from '@aztec/stdlib/auth-witness';
54
55
  import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
55
56
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
@@ -80,8 +81,8 @@ import {
80
81
  import type { UInt64 } from '@aztec/stdlib/types';
81
82
  import { ForkCheckpoint } from '@aztec/world-state';
82
83
 
84
+ import { DEFAULT_ADDRESS } from '../constants.js';
83
85
  import type { TXEStateMachine } from '../state_machine/index.js';
84
- import { DEFAULT_ADDRESS } from '../txe_session.js';
85
86
  import type { TXEAccountStore } from '../util/txe_account_store.js';
86
87
  import type { TXEContractStore } from '../util/txe_contract_store.js';
87
88
  import { TXEPublicContractDataSource } from '../util/txe_public_contract_data_source.js';
@@ -106,6 +107,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
106
107
  private senderAddressBookStore: SenderAddressBookStore,
107
108
  private capsuleStore: CapsuleStore,
108
109
  private privateEventStore: PrivateEventStore,
110
+ private jobId: string,
109
111
  private nextBlockTimestamp: bigint,
110
112
  private version: Fr,
111
113
  private chainId: Fr,
@@ -156,7 +158,8 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
156
158
  }
157
159
 
158
160
  async txeGetLastTxEffects() {
159
- const block = await this.stateMachine.archiver.getL2Block('latest');
161
+ const latestBlockNumber = await this.stateMachine.archiver.getBlockNumber();
162
+ const block = await this.stateMachine.archiver.getBlock(latestBlockNumber);
160
163
 
161
164
  if (block!.body.txEffects.length != 1) {
162
165
  // Note that calls like env.mine() will result in blocks with no transactions, hitting this
@@ -294,14 +297,19 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
294
297
  throw new Error(message);
295
298
  }
296
299
 
300
+ // Sync notes before executing private function to discover notes from previous transactions
301
+ const utilityExecutor = async (call: FunctionCall) => {
302
+ await this.executeUtilityCall(call);
303
+ };
304
+
305
+ await syncState(targetContractAddress, this.contractStore, functionSelector, utilityExecutor);
306
+
297
307
  const blockNumber = await this.txeGetNextBlockNumber();
298
308
 
299
309
  const callContext = new CallContext(from, targetContractAddress, functionSelector, isStaticCall);
300
310
 
301
311
  const gasLimits = new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
302
-
303
312
  const teardownGasLimits = new Gas(DEFAULT_TEARDOWN_DA_GAS_LIMIT, DEFAULT_TEARDOWN_L2_GAS_LIMIT);
304
-
305
313
  const gasSettings = new GasSettings(gasLimits, teardownGasLimits, GasFees.empty(), GasFees.empty());
306
314
 
307
315
  const txContext = new TxContext(this.chainId, this.version, gasSettings);
@@ -310,6 +318,11 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
310
318
 
311
319
  const protocolNullifier = await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber));
312
320
  const noteCache = new ExecutionNoteCache(protocolNullifier);
321
+ // In production, the account contract sets the min revertible counter before calling the app function.
322
+ // Since TXE bypasses the account contract, we simulate this by setting minRevertibleSideEffectCounter to 1,
323
+ // marking all side effects as revertible.
324
+ const minRevertibleSideEffectCounter = 1;
325
+ await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);
313
326
  const taggingIndexCache = new ExecutionTaggingIndexCache();
314
327
 
315
328
  const simulator = new WASMSimulator();
@@ -320,6 +333,7 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
320
333
  callContext,
321
334
  /** Header of a block whose state is used during private execution (not the block the transaction is included in). */
322
335
  blockHeader,
336
+ utilityExecutor,
323
337
  /** List of transient auth witnesses to be used during this simulation */
324
338
  Array.from(this.authwits.values()),
325
339
  /** List of transient auth witnesses to be used during this simulation */
@@ -338,8 +352,9 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
338
352
  this.senderAddressBookStore,
339
353
  this.capsuleStore,
340
354
  this.privateEventStore,
341
- 0,
342
- 1,
355
+ this.jobId,
356
+ 0, // totalPublicArgsCount
357
+ minRevertibleSideEffectCounter, // (start) sideEffectCounter
343
358
  undefined, // log
344
359
  undefined, // scopes
345
360
  /**
@@ -375,19 +390,21 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
375
390
  }),
376
391
  );
377
392
 
378
- // TXE's top level context does not track side effect counters, and as such, minRevertibleSideEffectCounter is always 0.
379
- // This has the unfortunate consequence of always producing revertible nullifiers, which means we
380
- // must set the firstNullifierHint to Fr.ZERO so the txRequestHash is always used as nonce generator
381
- result = new PrivateExecutionResult(executionResult, Fr.ZERO, publicFunctionsCalldata);
393
+ noteCache.finish();
394
+ const nonceGenerator = noteCache.getNonceGenerator();
395
+ result = new PrivateExecutionResult(executionResult, nonceGenerator, publicFunctionsCalldata);
382
396
  } catch (err) {
383
397
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
384
398
  }
385
399
 
386
- // According to the protocol rules, the nonce generator for the note hashes
387
- // can either be the first nullifier in the tx or the hash of the initial tx request
388
- // if there are none.
389
- const nonceGenerator = result.firstNullifier.equals(Fr.ZERO) ? protocolNullifier : result.firstNullifier;
390
- const { publicInputs } = await generateSimulatedProvingResult(result, nonceGenerator, this.contractStore);
400
+ // According to the protocol rules, there must be at least one nullifier in the tx. The first nullifier is used as
401
+ // the nonce generator for the note hashes.
402
+ // We pass the non-zero minRevertibleSideEffectCounter to make sure the side effects are split correctly.
403
+ const { publicInputs } = await generateSimulatedProvingResult(
404
+ result,
405
+ this.contractStore,
406
+ minRevertibleSideEffectCounter,
407
+ );
391
408
 
392
409
  const globals = makeGlobalVariables();
393
410
  globals.blockNumber = blockNumber;
@@ -398,7 +415,11 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
398
415
 
399
416
  const forkedWorldTrees = await this.stateMachine.synchronizer.nativeWorldStateService.fork();
400
417
 
401
- const contractsDB = new PublicContractsDB(new TXEPublicContractDataSource(blockNumber, this.contractStore));
418
+ const bindings = this.logger.getBindings();
419
+ const contractsDB = new PublicContractsDB(
420
+ new TXEPublicContractDataSource(blockNumber, this.contractStore),
421
+ bindings,
422
+ );
402
423
  const guardedMerkleTrees = new GuardedMerkleTreeOperations(forkedWorldTrees);
403
424
  const config = PublicSimulatorConfig.from({
404
425
  skipFeeEnforcement: true,
@@ -411,8 +432,10 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
411
432
  globals,
412
433
  guardedMerkleTrees,
413
434
  contractsDB,
414
- new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config),
435
+ new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config, bindings),
415
436
  new TestDateProvider(),
437
+ undefined,
438
+ createLogger('simulator:public-processor', bindings),
416
439
  );
417
440
 
418
441
  const tx = await Tx.create({
@@ -509,7 +532,11 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
509
532
 
510
533
  const forkedWorldTrees = await this.stateMachine.synchronizer.nativeWorldStateService.fork();
511
534
 
512
- const contractsDB = new PublicContractsDB(new TXEPublicContractDataSource(blockNumber, this.contractStore));
535
+ const bindings2 = this.logger.getBindings();
536
+ const contractsDB = new PublicContractsDB(
537
+ new TXEPublicContractDataSource(blockNumber, this.contractStore),
538
+ bindings2,
539
+ );
513
540
  const guardedMerkleTrees = new GuardedMerkleTreeOperations(forkedWorldTrees);
514
541
  const config = PublicSimulatorConfig.from({
515
542
  skipFeeEnforcement: true,
@@ -518,8 +545,16 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
518
545
  collectStatistics: false,
519
546
  collectCallMetadata: true,
520
547
  });
521
- const simulator = new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config);
522
- const processor = new PublicProcessor(globals, guardedMerkleTrees, contractsDB, simulator, new TestDateProvider());
548
+ const simulator = new CppPublicTxSimulator(guardedMerkleTrees, contractsDB, globals, config, bindings2);
549
+ const processor = new PublicProcessor(
550
+ globals,
551
+ guardedMerkleTrees,
552
+ contractsDB,
553
+ simulator,
554
+ new TestDateProvider(),
555
+ undefined,
556
+ createLogger('simulator:public-processor', bindings2),
557
+ );
523
558
 
524
559
  // We're simulating a scenario in which private execution immediately enqueues a public call and halts. The private
525
560
  // kernel init would in this case inject a nullifier with the transaction request hash as a non-revertible
@@ -628,12 +663,26 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
628
663
  throw new Error(`Cannot call ${functionSelector} as there is no artifact found at ${targetContractAddress}.`);
629
664
  }
630
665
 
631
- const call = {
632
- name: artifact.name,
633
- selector: functionSelector,
634
- to: targetContractAddress,
635
- };
666
+ // Sync notes before executing utility function to discover notes from previous transactions
667
+ await syncState(targetContractAddress, this.contractStore, functionSelector, async call => {
668
+ await this.executeUtilityCall(call);
669
+ });
670
+
671
+ const call = new FunctionCall(
672
+ artifact.name,
673
+ targetContractAddress,
674
+ functionSelector,
675
+ FunctionType.UTILITY,
676
+ false,
677
+ false,
678
+ args,
679
+ [],
680
+ );
681
+
682
+ return this.executeUtilityCall(call);
683
+ }
636
684
 
685
+ private async executeUtilityCall(call: FunctionCall): Promise<Fr[]> {
637
686
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
638
687
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
639
688
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
@@ -661,9 +710,10 @@ export class TXEOracleTopLevelContext implements IMiscOracle, ITxeExecutionOracl
661
710
  this.senderAddressBookStore,
662
711
  this.capsuleStore,
663
712
  this.privateEventStore,
713
+ this.jobId,
664
714
  );
665
715
  const acirExecutionResult = await new WASMSimulator()
666
- .executeUserCircuit(toACVMWitness(0, args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
716
+ .executeUserCircuit(toACVMWitness(0, call.args), entryPointArtifact, new Oracle(oracle).toACIRCallback())
667
717
  .catch((err: Error) => {
668
718
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
669
719
  throw new ExecutionError(