@aztec/simulator 0.22.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 (176) hide show
  1. package/README.md +47 -0
  2. package/dest/acvm/acvm.d.ts +39 -0
  3. package/dest/acvm/acvm.d.ts.map +1 -0
  4. package/dest/acvm/acvm.js +97 -0
  5. package/dest/acvm/acvm_types.d.ts +10 -0
  6. package/dest/acvm/acvm_types.d.ts.map +1 -0
  7. package/dest/acvm/acvm_types.js +2 -0
  8. package/dest/acvm/deserialize.d.ts +24 -0
  9. package/dest/acvm/deserialize.d.ts.map +1 -0
  10. package/dest/acvm/deserialize.js +31 -0
  11. package/dest/acvm/index.d.ts +6 -0
  12. package/dest/acvm/index.d.ts.map +1 -0
  13. package/dest/acvm/index.js +6 -0
  14. package/dest/acvm/oracle/debug.d.ts +19 -0
  15. package/dest/acvm/oracle/debug.d.ts.map +1 -0
  16. package/dest/acvm/oracle/debug.js +95 -0
  17. package/dest/acvm/oracle/index.d.ts +15 -0
  18. package/dest/acvm/oracle/index.d.ts.map +1 -0
  19. package/dest/acvm/oracle/index.js +4 -0
  20. package/dest/acvm/oracle/oracle.d.ts +38 -0
  21. package/dest/acvm/oracle/oracle.d.ts.map +1 -0
  22. package/dest/acvm/oracle/oracle.js +193 -0
  23. package/dest/acvm/oracle/typed_oracle.d.ts +88 -0
  24. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -0
  25. package/dest/acvm/oracle/typed_oracle.js +103 -0
  26. package/dest/acvm/serialize.d.ts +30 -0
  27. package/dest/acvm/serialize.d.ts.map +1 -0
  28. package/dest/acvm/serialize.js +67 -0
  29. package/dest/avm/avm_context.d.ts +49 -0
  30. package/dest/avm/avm_context.d.ts.map +1 -0
  31. package/dest/avm/avm_context.js +56 -0
  32. package/dest/avm/avm_execution_environment.d.ts +28 -0
  33. package/dest/avm/avm_execution_environment.d.ts.map +1 -0
  34. package/dest/avm/avm_execution_environment.js +42 -0
  35. package/dest/avm/avm_machine_state.d.ts +62 -0
  36. package/dest/avm/avm_machine_state.d.ts.map +1 -0
  37. package/dest/avm/avm_machine_state.js +69 -0
  38. package/dest/avm/avm_memory_types.d.ts +113 -0
  39. package/dest/avm/avm_memory_types.d.ts.map +1 -0
  40. package/dest/avm/avm_memory_types.js +269 -0
  41. package/dest/avm/avm_message_call_result.d.ts +16 -0
  42. package/dest/avm/avm_message_call_result.d.ts.map +1 -0
  43. package/dest/avm/avm_message_call_result.js +21 -0
  44. package/dest/avm/avm_simulator.d.ts +22 -0
  45. package/dest/avm/avm_simulator.d.ts.map +1 -0
  46. package/dest/avm/avm_simulator.js +74 -0
  47. package/dest/avm/errors.d.ts +30 -0
  48. package/dest/avm/errors.d.ts.map +1 -0
  49. package/dest/avm/errors.js +44 -0
  50. package/dest/avm/fixtures/index.d.ts +28 -0
  51. package/dest/avm/fixtures/index.d.ts.map +1 -0
  52. package/dest/avm/fixtures/index.js +44 -0
  53. package/dest/avm/journal/host_storage.d.ts +13 -0
  54. package/dest/avm/journal/host_storage.d.ts.map +1 -0
  55. package/dest/avm/journal/host_storage.js +13 -0
  56. package/dest/avm/journal/index.d.ts +3 -0
  57. package/dest/avm/journal/index.d.ts.map +1 -0
  58. package/dest/avm/journal/index.js +3 -0
  59. package/dest/avm/journal/journal.d.ts +95 -0
  60. package/dest/avm/journal/journal.d.ts.map +1 -0
  61. package/dest/avm/journal/journal.js +217 -0
  62. package/dest/avm/opcodes/accrued_substate.d.ts +42 -0
  63. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -0
  64. package/dest/avm/opcodes/accrued_substate.js +82 -0
  65. package/dest/avm/opcodes/arithmetic.d.ts +28 -0
  66. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -0
  67. package/dest/avm/opcodes/arithmetic.js +59 -0
  68. package/dest/avm/opcodes/bitwise.d.ts +40 -0
  69. package/dest/avm/opcodes/bitwise.d.ts.map +1 -0
  70. package/dest/avm/opcodes/bitwise.js +92 -0
  71. package/dest/avm/opcodes/comparators.d.ts +22 -0
  72. package/dest/avm/opcodes/comparators.d.ts.map +1 -0
  73. package/dest/avm/opcodes/comparators.js +51 -0
  74. package/dest/avm/opcodes/control_flow.d.ts +57 -0
  75. package/dest/avm/opcodes/control_flow.d.ts.map +1 -0
  76. package/dest/avm/opcodes/control_flow.js +118 -0
  77. package/dest/avm/opcodes/environment_getters.d.ts +74 -0
  78. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -0
  79. package/dest/avm/opcodes/environment_getters.js +151 -0
  80. package/dest/avm/opcodes/external_calls.d.ts +34 -0
  81. package/dest/avm/opcodes/external_calls.d.ts.map +1 -0
  82. package/dest/avm/opcodes/external_calls.js +103 -0
  83. package/dest/avm/opcodes/index.d.ts +11 -0
  84. package/dest/avm/opcodes/index.d.ts.map +1 -0
  85. package/dest/avm/opcodes/index.js +11 -0
  86. package/dest/avm/opcodes/instruction.d.ts +43 -0
  87. package/dest/avm/opcodes/instruction.d.ts.map +1 -0
  88. package/dest/avm/opcodes/instruction.js +44 -0
  89. package/dest/avm/opcodes/instruction_impl.d.ts +28 -0
  90. package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -0
  91. package/dest/avm/opcodes/instruction_impl.js +47 -0
  92. package/dest/avm/opcodes/memory.d.ts +55 -0
  93. package/dest/avm/opcodes/memory.d.ts.map +1 -0
  94. package/dest/avm/opcodes/memory.js +125 -0
  95. package/dest/avm/opcodes/storage.d.ts +31 -0
  96. package/dest/avm/opcodes/storage.d.ts.map +1 -0
  97. package/dest/avm/opcodes/storage.js +59 -0
  98. package/dest/avm/serialization/buffer_cursor.d.ts +25 -0
  99. package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -0
  100. package/dest/avm/serialization/buffer_cursor.js +94 -0
  101. package/dest/avm/serialization/bytecode_serialization.d.ts +25 -0
  102. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  103. package/dest/avm/serialization/bytecode_serialization.js +100 -0
  104. package/dest/avm/serialization/instruction_serialization.d.ts +91 -0
  105. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -0
  106. package/dest/avm/serialization/instruction_serialization.js +146 -0
  107. package/dest/client/client_execution_context.d.ts +188 -0
  108. package/dest/client/client_execution_context.d.ts.map +1 -0
  109. package/dest/client/client_execution_context.js +326 -0
  110. package/dest/client/db_oracle.d.ts +155 -0
  111. package/dest/client/db_oracle.d.ts.map +1 -0
  112. package/dest/client/db_oracle.js +17 -0
  113. package/dest/client/execution_note_cache.d.ts +54 -0
  114. package/dest/client/execution_note_cache.d.ts.map +1 -0
  115. package/dest/client/execution_note_cache.js +82 -0
  116. package/dest/client/execution_result.d.ts +67 -0
  117. package/dest/client/execution_result.d.ts.map +1 -0
  118. package/dest/client/execution_result.js +32 -0
  119. package/dest/client/index.d.ts +4 -0
  120. package/dest/client/index.d.ts.map +1 -0
  121. package/dest/client/index.js +4 -0
  122. package/dest/client/pick_notes.d.ts +80 -0
  123. package/dest/client/pick_notes.d.ts.map +1 -0
  124. package/dest/client/pick_notes.js +45 -0
  125. package/dest/client/private_execution.d.ts +10 -0
  126. package/dest/client/private_execution.d.ts.map +1 -0
  127. package/dest/client/private_execution.js +55 -0
  128. package/dest/client/simulator.d.ts +100 -0
  129. package/dest/client/simulator.d.ts.map +1 -0
  130. package/dest/client/simulator.js +171 -0
  131. package/dest/client/unconstrained_execution.d.ts +10 -0
  132. package/dest/client/unconstrained_execution.d.ts.map +1 -0
  133. package/dest/client/unconstrained_execution.js +25 -0
  134. package/dest/client/view_data_oracle.d.ts +139 -0
  135. package/dest/client/view_data_oracle.d.ts.map +1 -0
  136. package/dest/client/view_data_oracle.js +196 -0
  137. package/dest/common/errors.d.ts +36 -0
  138. package/dest/common/errors.d.ts.map +1 -0
  139. package/dest/common/errors.js +57 -0
  140. package/dest/common/index.d.ts +4 -0
  141. package/dest/common/index.d.ts.map +1 -0
  142. package/dest/common/index.js +4 -0
  143. package/dest/common/packed_args_cache.d.ts +28 -0
  144. package/dest/common/packed_args_cache.d.ts.map +1 -0
  145. package/dest/common/packed_args_cache.js +50 -0
  146. package/dest/common/side_effect_counter.d.ts +9 -0
  147. package/dest/common/side_effect_counter.d.ts.map +1 -0
  148. package/dest/common/side_effect_counter.js +14 -0
  149. package/dest/index.d.ts +4 -0
  150. package/dest/index.d.ts.map +1 -0
  151. package/dest/index.js +4 -0
  152. package/dest/public/db.d.ts +77 -0
  153. package/dest/public/db.d.ts.map +1 -0
  154. package/dest/public/db.js +2 -0
  155. package/dest/public/execution.d.ts +62 -0
  156. package/dest/public/execution.d.ts.map +1 -0
  157. package/dest/public/execution.js +61 -0
  158. package/dest/public/executor.d.ts +27 -0
  159. package/dest/public/executor.d.ts.map +1 -0
  160. package/dest/public/executor.js +83 -0
  161. package/dest/public/index.d.ts +4 -0
  162. package/dest/public/index.d.ts.map +1 -0
  163. package/dest/public/index.js +4 -0
  164. package/dest/public/public_execution_context.d.ts +103 -0
  165. package/dest/public/public_execution_context.d.ts.map +1 -0
  166. package/dest/public/public_execution_context.js +175 -0
  167. package/dest/public/state_actions.d.ts +39 -0
  168. package/dest/public/state_actions.d.ts.map +1 -0
  169. package/dest/public/state_actions.js +79 -0
  170. package/dest/test/utils.d.ts +12 -0
  171. package/dest/test/utils.d.ts.map +1 -0
  172. package/dest/test/utils.js +23 -0
  173. package/dest/utils.d.ts +27 -0
  174. package/dest/utils.d.ts.map +1 -0
  175. package/dest/utils.js +28 -0
  176. package/package.json +66 -0
@@ -0,0 +1,82 @@
1
+ import { siloNullifier } from '@aztec/circuits.js/abis';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ /**
4
+ * Data that's accessible by all the function calls in an execution.
5
+ */
6
+ export class ExecutionNoteCache {
7
+ constructor() {
8
+ /**
9
+ * New notes created in this transaction.
10
+ * This mapping maps from a contract address to the notes in the contract.
11
+ */
12
+ this.newNotes = new Map();
13
+ /**
14
+ * The list of nullifiers created in this transaction.
15
+ * This mapping maps from a contract address to the nullifiers emitted from the contract.
16
+ * The note which is nullified might be new or not (i.e., was generated in a previous transaction).
17
+ * Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
18
+ */
19
+ this.nullifiers = new Map();
20
+ }
21
+ /**
22
+ * Add a new note to cache.
23
+ * @param note - New note created during execution.
24
+ */
25
+ addNewNote(note) {
26
+ const notes = this.newNotes.get(note.contractAddress.toBigInt()) ?? [];
27
+ notes.push(note);
28
+ this.newNotes.set(note.contractAddress.toBigInt(), notes);
29
+ }
30
+ /**
31
+ * Add a nullifier to cache. It could be for a db note or a new note created during execution.
32
+ * @param contractAddress - Contract address of the note.
33
+ * @param storageSlot - Storage slot of the note.
34
+ * @param innerNullifier - Inner nullifier of the note.
35
+ * @param innerNoteHash - Inner note hash of the note. If this value equals 0, it means the
36
+ * note being nullified is from a previous transaction (and thus not a new note).
37
+ */
38
+ nullifyNote(contractAddress, innerNullifier, innerNoteHash) {
39
+ const siloedNullifier = siloNullifier(contractAddress, innerNullifier);
40
+ const nullifiers = this.getNullifiers(contractAddress);
41
+ nullifiers.add(siloedNullifier.value);
42
+ this.nullifiers.set(contractAddress.toBigInt(), nullifiers);
43
+ // Find and remove the matching new note if the emitted innerNoteHash is not empty.
44
+ if (!innerNoteHash.equals(Fr.ZERO)) {
45
+ const notes = this.newNotes.get(contractAddress.toBigInt()) ?? [];
46
+ const noteIndexToRemove = notes.findIndex(n => n.innerNoteHash.equals(innerNoteHash));
47
+ if (noteIndexToRemove === -1) {
48
+ throw new Error('Attempt to remove a pending note that does not exist.');
49
+ }
50
+ notes.splice(noteIndexToRemove, 1);
51
+ this.newNotes.set(contractAddress.toBigInt(), notes);
52
+ }
53
+ }
54
+ /**
55
+ * Return notes created up to current point in execution.
56
+ * If a nullifier for a note in this list is emitted, the note will be deleted.
57
+ * @param contractAddress - Contract address of the notes.
58
+ * @param storageSlot - Storage slot of the notes.
59
+ **/
60
+ getNotes(contractAddress, storageSlot) {
61
+ const notes = this.newNotes.get(contractAddress.toBigInt()) ?? [];
62
+ return notes.filter(n => n.storageSlot.equals(storageSlot));
63
+ }
64
+ /**
65
+ * Check if a note exists in the newNotes array.
66
+ * @param contractAddress - Contract address of the note.
67
+ * @param storageSlot - Storage slot of the note.
68
+ * @param innerNoteHash - Inner note hash of the note.
69
+ **/
70
+ checkNoteExists(contractAddress, innerNoteHash) {
71
+ const notes = this.newNotes.get(contractAddress.toBigInt()) ?? [];
72
+ return notes.some(n => n.innerNoteHash.equals(innerNoteHash));
73
+ }
74
+ /**
75
+ * Return all nullifiers emitted from a contract.
76
+ * @param contractAddress - Address of the contract.
77
+ */
78
+ getNullifiers(contractAddress) {
79
+ return this.nullifiers.get(contractAddress.toBigInt()) ?? new Set();
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX25vdGVfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2V4ZWN1dGlvbl9ub3RlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJOUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQS9CO1FBQ0U7OztXQUdHO1FBQ0ssYUFBUSxHQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXREOzs7OztXQUtHO1FBQ0ssZUFBVSxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBbUUzRCxDQUFDO0lBakVDOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxJQUFjO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksV0FBVyxDQUFDLGVBQTZCLEVBQUUsY0FBa0IsRUFBRSxhQUFpQjtRQUNyRixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTVELG1GQUFtRjtRQUNuRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEUsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUMzRSxDQUFDO1lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7UUFLSTtJQUNHLFFBQVEsQ0FBQyxlQUE2QixFQUFFLFdBQWU7UUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7OztRQUtJO0lBQ0csZUFBZSxDQUFDLGVBQTZCLEVBQUUsYUFBaUI7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxlQUE2QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdEUsQ0FBQztDQUNGIn0=
@@ -0,0 +1,67 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { FunctionL2Logs, Note } from '@aztec/circuit-types';
3
+ import { PrivateCallStackItem, PublicCallRequest, ReadRequestMembershipWitness } from '@aztec/circuits.js';
4
+ import { DecodedReturn } from '@aztec/foundation/abi';
5
+ import { Fr } from '@aztec/foundation/fields';
6
+ import { ACVMField } from '../acvm/index.js';
7
+ /**
8
+ * The contents of a new note.
9
+ */
10
+ export interface NoteAndSlot {
11
+ /** The note. */
12
+ note: Note;
13
+ /** The storage slot of the note. */
14
+ storageSlot: Fr;
15
+ }
16
+ /**
17
+ * The result of executing a private function.
18
+ */
19
+ export interface ExecutionResult {
20
+ /** The ACIR bytecode. */
21
+ acir: Buffer;
22
+ /** The verification key. */
23
+ vk: Buffer;
24
+ /** The partial witness. */
25
+ partialWitness: Map<number, ACVMField>;
26
+ /** The call stack item. */
27
+ callStackItem: PrivateCallStackItem;
28
+ /** The partially filled-in read request membership witnesses for commitments being read. */
29
+ readRequestPartialWitnesses: ReadRequestMembershipWitness[];
30
+ /** The notes created in the executed function. */
31
+ newNotes: NoteAndSlot[];
32
+ /** The decoded return values of the executed function. */
33
+ returnValues: DecodedReturn;
34
+ /** The nested executions. */
35
+ nestedExecutions: this[];
36
+ /** Enqueued public function execution requests to be picked up by the sequencer. */
37
+ enqueuedPublicFunctionCalls: PublicCallRequest[];
38
+ /**
39
+ * Encrypted logs emitted during execution of this function call.
40
+ * Note: These are preimages to `encryptedLogsHash`.
41
+ */
42
+ encryptedLogs: FunctionL2Logs;
43
+ /**
44
+ * Unencrypted logs emitted during execution of this function call.
45
+ * Note: These are preimages to `unencryptedLogsHash`.
46
+ */
47
+ unencryptedLogs: FunctionL2Logs;
48
+ }
49
+ /**
50
+ * Collect all encrypted logs across all nested executions.
51
+ * @param execResult - The topmost execution result.
52
+ * @returns All encrypted logs.
53
+ */
54
+ export declare function collectEncryptedLogs(execResult: ExecutionResult): FunctionL2Logs[];
55
+ /**
56
+ * Collect all unencrypted logs across all nested executions.
57
+ * @param execResult - The topmost execution result.
58
+ * @returns All unencrypted logs.
59
+ */
60
+ export declare function collectUnencryptedLogs(execResult: ExecutionResult): FunctionL2Logs[];
61
+ /**
62
+ * Collect all enqueued public function calls across all nested executions.
63
+ * @param execResult - The topmost execution result.
64
+ * @returns All enqueued public function calls.
65
+ */
66
+ export declare function collectEnqueuedPublicFunctionCalls(execResult: ExecutionResult): PublicCallRequest[];
67
+ //# sourceMappingURL=execution_result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution_result.d.ts","sourceRoot":"","sources":["../../src/client/execution_result.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,oCAAoC;IACpC,WAAW,EAAE,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAE9B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEvC,2BAA2B;IAC3B,aAAa,EAAE,oBAAoB,CAAC;IACpC,4FAA4F;IAC5F,2BAA2B,EAAE,4BAA4B,EAAE,CAAC;IAE5D,kDAAkD;IAClD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,0DAA0D;IAC1D,YAAY,EAAE,aAAa,CAAC;IAC5B,6BAA6B;IAC7B,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACzB,oFAAoF;IACpF,2BAA2B,EAAE,iBAAiB,EAAE,CAAC;IACjD;;;OAGG;IACH,aAAa,EAAE,cAAc,CAAC;IAC9B;;;OAGG;IACH,eAAe,EAAE,cAAc,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,eAAe,GAAG,cAAc,EAAE,CAGlF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,GAAG,cAAc,EAAE,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,eAAe,GAAG,iBAAiB,EAAE,CAOnG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Collect all encrypted logs across all nested executions.
3
+ * @param execResult - The topmost execution result.
4
+ * @returns All encrypted logs.
5
+ */
6
+ export function collectEncryptedLogs(execResult) {
7
+ // without the .reverse(), the logs will be in a queue like fashion which is wrong as the kernel processes it like a stack.
8
+ return [execResult.encryptedLogs, ...[...execResult.nestedExecutions].reverse().flatMap(collectEncryptedLogs)];
9
+ }
10
+ /**
11
+ * Collect all unencrypted logs across all nested executions.
12
+ * @param execResult - The topmost execution result.
13
+ * @returns All unencrypted logs.
14
+ */
15
+ export function collectUnencryptedLogs(execResult) {
16
+ // without the .reverse(), the logs will be in a queue like fashion which is wrong as the kernel processes it like a stack.
17
+ return [execResult.unencryptedLogs, ...[...execResult.nestedExecutions].reverse().flatMap(collectUnencryptedLogs)];
18
+ }
19
+ /**
20
+ * Collect all enqueued public function calls across all nested executions.
21
+ * @param execResult - The topmost execution result.
22
+ * @returns All enqueued public function calls.
23
+ */
24
+ export function collectEnqueuedPublicFunctionCalls(execResult) {
25
+ // without the reverse sort, the logs will be in a queue like fashion which is wrong
26
+ // as the kernel processes it like a stack, popping items off and pushing them to output
27
+ return [
28
+ ...execResult.enqueuedPublicFunctionCalls,
29
+ ...[...execResult.nestedExecutions].flatMap(collectEnqueuedPublicFunctionCalls),
30
+ ].sort((a, b) => b.callContext.startSideEffectCounter - a.callContext.startSideEffectCounter);
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX3Jlc3VsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvZXhlY3V0aW9uX3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzREE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxVQUEyQjtJQUM5RCwySEFBMkg7SUFDM0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNqSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxVQUEyQjtJQUNoRSwySEFBMkg7SUFDM0gsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNySCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQ0FBa0MsQ0FBQyxVQUEyQjtJQUM1RSxvRkFBb0Y7SUFDcEYsd0ZBQXdGO0lBQ3hGLE9BQU87UUFDTCxHQUFHLFVBQVUsQ0FBQywyQkFBMkI7UUFDekMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDO0tBQ2hGLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDaEcsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ export * from './simulator.js';
2
+ export * from './db_oracle.js';
3
+ export * from './execution_result.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './simulator.js';
2
+ export * from './db_oracle.js';
3
+ export * from './execution_result.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHVCQUF1QixDQUFDIn0=
@@ -0,0 +1,80 @@
1
+ import { Comparator, Note } from '@aztec/circuit-types';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ /**
4
+ * Configuration for selecting values.
5
+ */
6
+ export interface Select {
7
+ /**
8
+ * Index of the field to select and match.
9
+ */
10
+ index: number;
11
+ /**
12
+ * Required value of the field.
13
+ */
14
+ value: Fr;
15
+ /**
16
+ * The comparator to use
17
+ */
18
+ comparator: Comparator;
19
+ }
20
+ /**
21
+ * The order to sort an array.
22
+ */
23
+ export declare enum SortOrder {
24
+ NADA = 0,
25
+ DESC = 1,
26
+ ASC = 2
27
+ }
28
+ /**
29
+ * Configuration for sorting values.
30
+ */
31
+ export interface Sort {
32
+ /**
33
+ * Index of the field to sort.
34
+ */
35
+ index: number;
36
+ /**
37
+ * Order to sort the field.
38
+ */
39
+ order: SortOrder;
40
+ }
41
+ /**
42
+ * Options for picking items from an array of BasicNoteData.
43
+ */
44
+ interface GetOptions {
45
+ /**
46
+ * Configurations for selecting items.
47
+ * Default: empty array.
48
+ */
49
+ selects?: Select[];
50
+ /**
51
+ * Configurations for sorting items.
52
+ * Default: empty array.
53
+ */
54
+ sorts?: Sort[];
55
+ /**
56
+ * The number of items to retrieve per query.
57
+ * Default: 0. No limit.
58
+ */
59
+ limit?: number;
60
+ /**
61
+ * The starting index for pagination.
62
+ * Default: 0.
63
+ */
64
+ offset?: number;
65
+ }
66
+ /**
67
+ * Data needed from to perform sort.
68
+ */
69
+ interface ContainsNote {
70
+ /**
71
+ * The note.
72
+ */
73
+ note: Note;
74
+ }
75
+ /**
76
+ * Pick from a note array a number of notes that meet the criteria.
77
+ */
78
+ export declare function pickNotes<T extends ContainsNote>(noteDatas: T[], { selects, sorts, limit, offset }: GetOptions): T[];
79
+ export {};
80
+ //# sourceMappingURL=pick_notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick_notes.d.ts","sourceRoot":"","sources":["../../src/client/pick_notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,EAAE,CAAC;IACV;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,GAAG,IAAI;CACR;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ;AAoCD;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,YAAY,EAC9C,SAAS,EAAE,CAAC,EAAE,EACd,EAAE,OAAY,EAAE,KAAU,EAAE,KAAS,EAAE,MAAU,EAAE,EAAE,UAAU,GAC9D,CAAC,EAAE,CAIL"}
@@ -0,0 +1,45 @@
1
+ import { Comparator } from '@aztec/circuit-types';
2
+ /**
3
+ * The order to sort an array.
4
+ */
5
+ export var SortOrder;
6
+ (function (SortOrder) {
7
+ SortOrder[SortOrder["NADA"] = 0] = "NADA";
8
+ SortOrder[SortOrder["DESC"] = 1] = "DESC";
9
+ SortOrder[SortOrder["ASC"] = 2] = "ASC";
10
+ })(SortOrder || (SortOrder = {}));
11
+ const selectNotes = (noteDatas, selects) => noteDatas.filter(noteData => selects.every(({ index, value, comparator }) => {
12
+ const comparatorSelector = {
13
+ [Comparator.EQ]: () => noteData.note.items[index].equals(value),
14
+ [Comparator.NEQ]: () => !noteData.note.items[index].equals(value),
15
+ [Comparator.LT]: () => noteData.note.items[index].lt(value),
16
+ [Comparator.LTE]: () => noteData.note.items[index].lt(value) || noteData.note.items[index].equals(value),
17
+ [Comparator.GT]: () => !noteData.note.items[index].lt(value) && !noteData.note.items[index].equals(value),
18
+ [Comparator.GTE]: () => !noteData.note.items[index].lt(value),
19
+ };
20
+ return comparatorSelector[comparator]();
21
+ }));
22
+ const sortNotes = (a, b, sorts, level = 0) => {
23
+ if (sorts[level] === undefined) {
24
+ return 0;
25
+ }
26
+ const { index, order } = sorts[level];
27
+ if (order === 0) {
28
+ return 0;
29
+ }
30
+ const dir = order === 1 ? [-1, 1] : [1, -1];
31
+ return a[index].value === b[index].value
32
+ ? sortNotes(a, b, sorts, level + 1)
33
+ : a[index].value > b[index].value
34
+ ? dir[0]
35
+ : dir[1];
36
+ };
37
+ /**
38
+ * Pick from a note array a number of notes that meet the criteria.
39
+ */
40
+ export function pickNotes(noteDatas, { selects = [], sorts = [], limit = 0, offset = 0 }) {
41
+ return selectNotes(noteDatas, selects)
42
+ .sort((a, b) => sortNotes(a.note.items, b.note.items, sorts))
43
+ .slice(offset, limit ? offset + limit : undefined);
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja19ub3Rlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcGlja19ub3Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFxQnhEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQix5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtJQUNSLHVDQUFPLENBQUE7QUFDVCxDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEI7QUFvREQsTUFBTSxXQUFXLEdBQUcsQ0FBeUIsU0FBYyxFQUFFLE9BQWlCLEVBQU8sRUFBRSxDQUNyRixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRTtJQUM3QyxNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDL0QsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDM0QsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFB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
@@ -0,0 +1,10 @@
1
+ import { FunctionData } from '@aztec/circuits.js';
2
+ import { FunctionArtifactWithDebugMetadata } from '@aztec/foundation/abi';
3
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
4
+ import { ClientExecutionContext } from './client_execution_context.js';
5
+ import { ExecutionResult } from './execution_result.js';
6
+ /**
7
+ * Execute a private function and return the execution result.
8
+ */
9
+ export declare function executePrivateFunction(context: ClientExecutionContext, artifact: FunctionArtifactWithDebugMetadata, contractAddress: AztecAddress, functionData: FunctionData, log?: import("@aztec/foundation/log").DebugLogger): Promise<ExecutionResult>;
10
+ //# sourceMappingURL=private_execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/client/private_execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoD,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,iCAAiC,EAAsB,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAQ/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,iCAAiC,EAC3C,eAAe,EAAE,YAAY,EAC7B,YAAY,EAAE,YAAY,EAC1B,GAAG,8CAAwD,GAC1D,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
@@ -0,0 +1,55 @@
1
+ import { PrivateCallStackItem, PrivateCircuitPublicInputs } from '@aztec/circuits.js';
2
+ import { decodeReturnValues } from '@aztec/foundation/abi';
3
+ import { Fr } from '@aztec/foundation/fields';
4
+ import { createDebugLogger } from '@aztec/foundation/log';
5
+ import { to2Fields } from '@aztec/foundation/serialize';
6
+ import { extractReturnWitness } from '../acvm/deserialize.js';
7
+ import { Oracle, acvm, extractCallStack } from '../acvm/index.js';
8
+ import { ExecutionError } from '../common/errors.js';
9
+ import { AcirSimulator } from './simulator.js';
10
+ /**
11
+ * Execute a private function and return the execution result.
12
+ */
13
+ export async function executePrivateFunction(context, artifact, contractAddress, functionData, log = createDebugLogger('aztec:simulator:secret_execution')) {
14
+ const functionSelector = functionData.selector;
15
+ log(`Executing external function ${contractAddress}:${functionSelector}`);
16
+ const acir = Buffer.from(artifact.bytecode, 'base64');
17
+ const initialWitness = context.getInitialWitness(artifact);
18
+ const acvmCallback = new Oracle(context);
19
+ const { partialWitness } = await acvm(await AcirSimulator.getSolver(), acir, initialWitness, acvmCallback).catch((err) => {
20
+ throw new ExecutionError(err.message, {
21
+ contractAddress,
22
+ functionSelector,
23
+ }, extractCallStack(err, artifact.debug), { cause: err });
24
+ });
25
+ const returnWitness = extractReturnWitness(acir, partialWitness);
26
+ const publicInputs = PrivateCircuitPublicInputs.fromFields(returnWitness);
27
+ const encryptedLogs = context.getEncryptedLogs();
28
+ const unencryptedLogs = context.getUnencryptedLogs();
29
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) --> set this in Noir
30
+ publicInputs.encryptedLogsHash = to2Fields(encryptedLogs.hash());
31
+ publicInputs.encryptedLogPreimagesLength = new Fr(encryptedLogs.getSerializedLength());
32
+ publicInputs.unencryptedLogsHash = to2Fields(unencryptedLogs.hash());
33
+ publicInputs.unencryptedLogPreimagesLength = new Fr(unencryptedLogs.getSerializedLength());
34
+ const callStackItem = new PrivateCallStackItem(contractAddress, functionData, publicInputs);
35
+ const returnValues = decodeReturnValues(artifact, publicInputs.returnValues);
36
+ const readRequestPartialWitnesses = context.getReadRequestPartialWitnesses(publicInputs.readRequests);
37
+ const newNotes = context.getNewNotes();
38
+ const nestedExecutions = context.getNestedExecutions();
39
+ const enqueuedPublicFunctionCalls = context.getEnqueuedPublicFunctionCalls();
40
+ log(`Returning from call to ${contractAddress.toString()}:${functionSelector}`);
41
+ return {
42
+ acir,
43
+ partialWitness,
44
+ callStackItem,
45
+ returnValues,
46
+ readRequestPartialWitnesses,
47
+ newNotes,
48
+ vk: Buffer.from(artifact.verificationKey, 'hex'),
49
+ nestedExecutions,
50
+ enqueuedPublicFunctionCalls,
51
+ encryptedLogs,
52
+ unencryptedLogs,
53
+ };
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3ByaXZhdGVfZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0Isb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRyxPQUFPLEVBQXFDLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxPQUErQixFQUMvQixRQUEyQyxFQUMzQyxlQUE2QixFQUM3QixZQUEwQixFQUMxQixHQUFHLEdBQUcsaUJBQWlCLENBQUMsa0NBQWtDLENBQUM7SUFFM0QsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQy9DLEdBQUcsQ0FBQywrQkFBK0IsZUFBZSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUUxRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFD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
@@ -0,0 +1,100 @@
1
+ import { AztecNode, FunctionCall, Note, TxExecutionRequest } from '@aztec/circuit-types';
2
+ import { FunctionArtifactWithDebugMetadata } from '@aztec/foundation/abi';
3
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
4
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import { Fr } from '@aztec/foundation/fields';
6
+ import { WasmBlackBoxFunctionSolver } from '@noir-lang/acvm_js';
7
+ import { DBOracle } from './db_oracle.js';
8
+ import { ExecutionResult } from './execution_result.js';
9
+ /**
10
+ * The ACIR simulator.
11
+ */
12
+ export declare class AcirSimulator {
13
+ private db;
14
+ private node;
15
+ private static solver;
16
+ private log;
17
+ constructor(db: DBOracle, node: AztecNode);
18
+ /**
19
+ * Gets or initializes the ACVM WasmBlackBoxFunctionSolver.
20
+ *
21
+ * @remarks
22
+ *
23
+ * Occurs only once across all instances of AcirSimulator.
24
+ * Speeds up execution by only performing setup tasks (like pedersen
25
+ * generator initialization) one time.
26
+ * TODO(https://github.com/AztecProtocol/aztec-packages/issues/1627):
27
+ * determine whether this requires a lock
28
+ *
29
+ * @returns ACVM WasmBlackBoxFunctionSolver
30
+ */
31
+ static getSolver(): Promise<WasmBlackBoxFunctionSolver>;
32
+ /**
33
+ * Runs a private function.
34
+ * @param request - The transaction request.
35
+ * @param entryPointArtifact - The artifact of the entry point function.
36
+ * @param contractAddress - The address of the contract (should match request.origin)
37
+ * @param portalContractAddress - The address of the portal contract.
38
+ * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract or a specific account.
39
+ * @returns The result of the execution.
40
+ */
41
+ run(request: TxExecutionRequest, entryPointArtifact: FunctionArtifactWithDebugMetadata, contractAddress: AztecAddress, portalContractAddress: EthAddress, msgSender?: Fr): Promise<ExecutionResult>;
42
+ /**
43
+ * Runs an unconstrained function.
44
+ * @param request - The transaction request.
45
+ * @param entryPointArtifact - The artifact of the entry point function.
46
+ * @param contractAddress - The address of the contract.
47
+ * @param aztecNode - The AztecNode instance.
48
+ */
49
+ runUnconstrained(request: FunctionCall, entryPointArtifact: FunctionArtifactWithDebugMetadata, contractAddress: AztecAddress): Promise<import("@aztec/foundation/abi").DecodedReturn>;
50
+ /**
51
+ * Computes the inner nullifier of a note.
52
+ * @param contractAddress - The address of the contract.
53
+ * @param nonce - The nonce of the note hash.
54
+ * @param storageSlot - The storage slot.
55
+ * @param note - The note.
56
+ * @returns The nullifier.
57
+ */
58
+ computeNoteHashAndNullifier(contractAddress: AztecAddress, nonce: Fr, storageSlot: Fr, note: Note): Promise<{
59
+ innerNoteHash: Fr;
60
+ siloedNoteHash: Fr;
61
+ uniqueSiloedNoteHash: Fr;
62
+ innerNullifier: Fr;
63
+ }>;
64
+ /**
65
+ * Computes the inner note hash of a note, which contains storage slot and the custom note hash.
66
+ * @param contractAddress - The address of the contract.
67
+ * @param storageSlot - The storage slot.
68
+ * @param note - The note.
69
+ * @returns The note hash.
70
+ */
71
+ computeInnerNoteHash(contractAddress: AztecAddress, storageSlot: Fr, note: Note): Promise<Fr>;
72
+ /**
73
+ * Computes the unique note hash of a note.
74
+ * @param contractAddress - The address of the contract.
75
+ * @param nonce - The nonce of the note hash.
76
+ * @param storageSlot - The storage slot.
77
+ * @param note - The note.
78
+ * @returns The note hash.
79
+ */
80
+ computeUniqueSiloedNoteHash(contractAddress: AztecAddress, nonce: Fr, storageSlot: Fr, note: Note): Promise<Fr>;
81
+ /**
82
+ * Computes the siloed note hash of a note.
83
+ * @param contractAddress - The address of the contract.
84
+ * @param nonce - The nonce of the note hash.
85
+ * @param storageSlot - The storage slot.
86
+ * @param note - The note.
87
+ * @returns The note hash.
88
+ */
89
+ computeSiloedNoteHash(contractAddress: AztecAddress, nonce: Fr, storageSlot: Fr, note: Note): Promise<Fr>;
90
+ /**
91
+ * Computes the inner note hash of a note, which contains storage slot and the custom note hash.
92
+ * @param contractAddress - The address of the contract.
93
+ * @param nonce - The nonce of the unique note hash.
94
+ * @param storageSlot - The storage slot.
95
+ * @param note - The note.
96
+ * @returns The note hash.
97
+ */
98
+ computeInnerNullifier(contractAddress: AztecAddress, nonce: Fr, storageSlot: Fr, note: Note): Promise<Fr>;
99
+ }
100
+ //# sourceMappingURL=simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/client/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,OAAO,EAEL,iCAAiC,EAIlC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,0BAA0B,EAAwB,MAAM,oBAAoB,CAAC;AAKtF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;GAEG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,EAAE;IAAY,OAAO,CAAC,IAAI;IAH9C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAsC;IAC3D,OAAO,CAAC,GAAG,CAAc;gBAEL,EAAE,EAAE,QAAQ,EAAU,IAAI,EAAE,SAAS;IAIzD;;;;;;;;;;;;OAYG;WACW,SAAS,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAO9D;;;;;;;;OAQG;IACU,GAAG,CACd,OAAO,EAAE,kBAAkB,EAC3B,kBAAkB,EAAE,iCAAiC,EACrD,eAAe,EAAE,YAAY,EAC7B,qBAAqB,EAAE,UAAU,EACjC,SAAS,KAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC;IAoD3B;;;;;;OAMG;IACU,gBAAgB,CAC3B,OAAO,EAAE,YAAY,EACrB,kBAAkB,EAAE,iCAAiC,EACrD,eAAe,EAAE,YAAY;IAqB/B;;;;;;;OAOG;IACU,2BAA2B,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;;;;;;IAwC9G;;;;;;OAMG;IACU,oBAAoB,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;IAK5F;;;;;;;OAOG;IACU,2BAA2B,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;IAK9G;;;;;;;OAOG;IACU,qBAAqB,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;IAKxG;;;;;;;OAOG;IACU,qBAAqB,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI;CAIzG"}