@aztec/simulator 0.61.0 → 0.63.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 (223) hide show
  1. package/dest/acvm/acvm.d.ts +2 -16
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/acvm.js +2 -70
  4. package/dest/acvm/oracle/oracle.d.ts +4 -3
  5. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/oracle.js +11 -9
  7. package/dest/acvm/oracle/typed_oracle.d.ts +5 -4
  8. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  9. package/dest/acvm/oracle/typed_oracle.js +9 -6
  10. package/dest/avm/avm_gas.d.ts.map +1 -1
  11. package/dest/avm/avm_gas.js +4 -3
  12. package/dest/avm/avm_machine_state.d.ts +27 -8
  13. package/dest/avm/avm_machine_state.d.ts.map +1 -1
  14. package/dest/avm/avm_machine_state.js +6 -10
  15. package/dest/avm/avm_memory_types.d.ts +8 -0
  16. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  17. package/dest/avm/avm_memory_types.js +5 -1
  18. package/dest/avm/avm_simulator.d.ts +2 -19
  19. package/dest/avm/avm_simulator.d.ts.map +1 -1
  20. package/dest/avm/avm_simulator.js +12 -14
  21. package/dest/avm/avm_tree.d.ts +249 -0
  22. package/dest/avm/avm_tree.d.ts.map +1 -0
  23. package/dest/avm/avm_tree.js +637 -0
  24. package/dest/avm/errors.d.ts +4 -17
  25. package/dest/avm/errors.d.ts.map +1 -1
  26. package/dest/avm/errors.js +21 -50
  27. package/dest/avm/fixtures/index.d.ts +7 -2
  28. package/dest/avm/fixtures/index.d.ts.map +1 -1
  29. package/dest/avm/fixtures/index.js +12 -12
  30. package/dest/avm/index.d.ts +1 -0
  31. package/dest/avm/index.d.ts.map +1 -1
  32. package/dest/avm/index.js +2 -1
  33. package/dest/avm/journal/journal.d.ts +43 -24
  34. package/dest/avm/journal/journal.d.ts.map +1 -1
  35. package/dest/avm/journal/journal.js +172 -39
  36. package/dest/avm/journal/nullifiers.d.ts +5 -4
  37. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  38. package/dest/avm/journal/nullifiers.js +2 -3
  39. package/dest/avm/journal/public_storage.d.ts +6 -5
  40. package/dest/avm/journal/public_storage.d.ts.map +1 -1
  41. package/dest/avm/journal/public_storage.js +1 -1
  42. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  43. package/dest/avm/opcodes/accrued_substate.js +4 -10
  44. package/dest/avm/opcodes/arithmetic.d.ts +4 -1
  45. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  46. package/dest/avm/opcodes/arithmetic.js +18 -4
  47. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  48. package/dest/avm/opcodes/bitwise.js +1 -3
  49. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  50. package/dest/avm/opcodes/comparators.js +1 -2
  51. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  52. package/dest/avm/opcodes/contract.js +2 -3
  53. package/dest/avm/opcodes/control_flow.d.ts +4 -0
  54. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  55. package/dest/avm/opcodes/control_flow.js +26 -11
  56. package/dest/avm/opcodes/conversion.d.ts.map +1 -1
  57. package/dest/avm/opcodes/conversion.js +1 -2
  58. package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
  59. package/dest/avm/opcodes/ec_add.js +5 -11
  60. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  61. package/dest/avm/opcodes/environment_getters.js +1 -2
  62. package/dest/avm/opcodes/external_calls.d.ts +4 -2
  63. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  64. package/dest/avm/opcodes/external_calls.js +38 -22
  65. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  66. package/dest/avm/opcodes/hashing.js +1 -4
  67. package/dest/avm/opcodes/instruction.d.ts +4 -0
  68. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  69. package/dest/avm/opcodes/instruction.js +7 -1
  70. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  71. package/dest/avm/opcodes/memory.js +1 -7
  72. package/dest/avm/opcodes/misc.js +3 -3
  73. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
  74. package/dest/avm/opcodes/multi_scalar_mul.js +6 -5
  75. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  76. package/dest/avm/opcodes/storage.js +2 -4
  77. package/dest/avm/serialization/bytecode_serialization.d.ts +1 -6
  78. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  79. package/dest/avm/serialization/bytecode_serialization.js +24 -20
  80. package/dest/avm/serialization/instruction_serialization.d.ts +2 -2
  81. package/dest/avm/serialization/instruction_serialization.js +2 -2
  82. package/dest/client/client_execution_context.d.ts +7 -10
  83. package/dest/client/client_execution_context.d.ts.map +1 -1
  84. package/dest/client/client_execution_context.js +19 -18
  85. package/dest/client/db_oracle.d.ts +22 -8
  86. package/dest/client/db_oracle.d.ts.map +1 -1
  87. package/dest/client/db_oracle.js +1 -1
  88. package/dest/client/private_execution.d.ts.map +1 -1
  89. package/dest/client/private_execution.js +5 -4
  90. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  91. package/dest/client/unconstrained_execution.js +3 -2
  92. package/dest/client/view_data_oracle.d.ts +6 -12
  93. package/dest/client/view_data_oracle.d.ts.map +1 -1
  94. package/dest/client/view_data_oracle.js +10 -12
  95. package/dest/common/errors.d.ts +15 -2
  96. package/dest/common/errors.d.ts.map +1 -1
  97. package/dest/common/errors.js +85 -4
  98. package/dest/mocks/fixtures.d.ts +9 -28
  99. package/dest/mocks/fixtures.d.ts.map +1 -1
  100. package/dest/mocks/fixtures.js +12 -57
  101. package/dest/public/dual_side_effect_trace.d.ts +34 -26
  102. package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
  103. package/dest/public/dual_side_effect_trace.js +48 -36
  104. package/dest/public/enqueued_call_side_effect_trace.d.ts +96 -33
  105. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
  106. package/dest/public/enqueued_call_side_effect_trace.js +212 -138
  107. package/dest/public/execution.d.ts +50 -17
  108. package/dest/public/execution.d.ts.map +1 -1
  109. package/dest/public/execution.js +1 -29
  110. package/dest/public/executor.d.ts +28 -11
  111. package/dest/public/executor.d.ts.map +1 -1
  112. package/dest/public/executor.js +33 -33
  113. package/dest/public/index.d.ts +4 -5
  114. package/dest/public/index.d.ts.map +1 -1
  115. package/dest/public/index.js +4 -5
  116. package/dest/public/public_db_sources.d.ts +1 -0
  117. package/dest/public/public_db_sources.d.ts.map +1 -1
  118. package/dest/public/public_db_sources.js +21 -19
  119. package/dest/public/public_processor.d.ts +7 -11
  120. package/dest/public/public_processor.d.ts.map +1 -1
  121. package/dest/public/public_processor.js +60 -42
  122. package/dest/public/public_processor_metrics.d.ts +3 -3
  123. package/dest/public/public_processor_metrics.d.ts.map +1 -1
  124. package/dest/public/public_processor_metrics.js +1 -1
  125. package/dest/public/public_tx_context.d.ts +130 -0
  126. package/dest/public/public_tx_context.d.ts.map +1 -0
  127. package/dest/public/public_tx_context.js +293 -0
  128. package/dest/public/public_tx_simulator.d.ts +36 -0
  129. package/dest/public/public_tx_simulator.d.ts.map +1 -0
  130. package/dest/public/public_tx_simulator.js +148 -0
  131. package/dest/public/side_effect_trace.d.ts +30 -15
  132. package/dest/public/side_effect_trace.d.ts.map +1 -1
  133. package/dest/public/side_effect_trace.js +70 -16
  134. package/dest/public/side_effect_trace_interface.d.ts +43 -12
  135. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  136. package/dest/public/transitional_adapters.d.ts +9 -0
  137. package/dest/public/transitional_adapters.d.ts.map +1 -0
  138. package/dest/public/transitional_adapters.js +127 -0
  139. package/dest/public/utils.d.ts +5 -0
  140. package/dest/public/utils.d.ts.map +1 -0
  141. package/dest/public/utils.js +30 -0
  142. package/dest/test/utils.d.ts +2 -2
  143. package/dest/test/utils.d.ts.map +1 -1
  144. package/dest/test/utils.js +4 -4
  145. package/package.json +12 -9
  146. package/src/acvm/acvm.ts +3 -94
  147. package/src/acvm/oracle/oracle.ts +14 -12
  148. package/src/acvm/oracle/typed_oracle.ts +10 -6
  149. package/src/avm/avm_gas.ts +3 -2
  150. package/src/avm/avm_machine_state.ts +28 -12
  151. package/src/avm/avm_memory_types.ts +5 -0
  152. package/src/avm/avm_simulator.ts +13 -16
  153. package/src/avm/avm_tree.ts +785 -0
  154. package/src/avm/errors.ts +25 -48
  155. package/src/avm/fixtures/index.ts +16 -12
  156. package/src/avm/index.ts +1 -0
  157. package/src/avm/journal/journal.ts +291 -52
  158. package/src/avm/journal/nullifiers.ts +7 -7
  159. package/src/avm/journal/public_storage.ts +5 -5
  160. package/src/avm/opcodes/accrued_substate.ts +3 -9
  161. package/src/avm/opcodes/arithmetic.ts +26 -4
  162. package/src/avm/opcodes/bitwise.ts +0 -2
  163. package/src/avm/opcodes/comparators.ts +0 -1
  164. package/src/avm/opcodes/contract.ts +1 -2
  165. package/src/avm/opcodes/control_flow.ts +29 -10
  166. package/src/avm/opcodes/conversion.ts +0 -1
  167. package/src/avm/opcodes/ec_add.ts +6 -9
  168. package/src/avm/opcodes/environment_getters.ts +0 -1
  169. package/src/avm/opcodes/external_calls.ts +39 -21
  170. package/src/avm/opcodes/hashing.ts +0 -3
  171. package/src/avm/opcodes/instruction.ts +7 -0
  172. package/src/avm/opcodes/memory.ts +0 -6
  173. package/src/avm/opcodes/misc.ts +2 -2
  174. package/src/avm/opcodes/multi_scalar_mul.ts +5 -4
  175. package/src/avm/opcodes/storage.ts +1 -3
  176. package/src/avm/serialization/bytecode_serialization.ts +31 -22
  177. package/src/avm/serialization/instruction_serialization.ts +2 -2
  178. package/src/client/client_execution_context.ts +24 -21
  179. package/src/client/db_oracle.ts +31 -8
  180. package/src/client/private_execution.ts +5 -4
  181. package/src/client/unconstrained_execution.ts +2 -1
  182. package/src/client/view_data_oracle.ts +14 -13
  183. package/src/common/errors.ts +119 -3
  184. package/src/mocks/fixtures.ts +15 -106
  185. package/src/public/dual_side_effect_trace.ts +138 -50
  186. package/src/public/enqueued_call_side_effect_trace.ts +352 -212
  187. package/src/public/execution.ts +58 -42
  188. package/src/public/executor.ts +52 -67
  189. package/src/public/index.ts +7 -5
  190. package/src/public/public_db_sources.ts +22 -19
  191. package/src/public/public_processor.ts +111 -73
  192. package/src/public/public_processor_metrics.ts +3 -3
  193. package/src/public/public_tx_context.ts +411 -0
  194. package/src/public/public_tx_simulator.ts +232 -0
  195. package/src/public/side_effect_trace.ts +154 -28
  196. package/src/public/side_effect_trace_interface.ts +92 -14
  197. package/src/public/transitional_adapters.ts +347 -0
  198. package/src/public/utils.ts +32 -0
  199. package/src/test/utils.ts +9 -2
  200. package/dest/public/enqueued_call_simulator.d.ts +0 -43
  201. package/dest/public/enqueued_call_simulator.d.ts.map +0 -1
  202. package/dest/public/enqueued_call_simulator.js +0 -156
  203. package/dest/public/enqueued_calls_processor.d.ts +0 -43
  204. package/dest/public/enqueued_calls_processor.d.ts.map +0 -1
  205. package/dest/public/enqueued_calls_processor.js +0 -209
  206. package/dest/public/hints_builder.d.ts +0 -29
  207. package/dest/public/hints_builder.d.ts.map +0 -1
  208. package/dest/public/hints_builder.js +0 -75
  209. package/dest/public/public_kernel.d.ts +0 -30
  210. package/dest/public/public_kernel.d.ts.map +0 -1
  211. package/dest/public/public_kernel.js +0 -67
  212. package/dest/public/public_kernel_circuit_simulator.d.ts +0 -25
  213. package/dest/public/public_kernel_circuit_simulator.d.ts.map +0 -1
  214. package/dest/public/public_kernel_circuit_simulator.js +0 -2
  215. package/dest/public/public_kernel_tail_simulator.d.ts +0 -15
  216. package/dest/public/public_kernel_tail_simulator.d.ts.map +0 -1
  217. package/dest/public/public_kernel_tail_simulator.js +0 -39
  218. package/src/public/enqueued_call_simulator.ts +0 -360
  219. package/src/public/enqueued_calls_processor.ts +0 -372
  220. package/src/public/hints_builder.ts +0 -168
  221. package/src/public/public_kernel.ts +0 -100
  222. package/src/public/public_kernel_circuit_simulator.ts +0 -32
  223. package/src/public/public_kernel_tail_simulator.ts +0 -97
@@ -0,0 +1,293 @@
1
+ import { TxExecutionPhase, TxHash, } from '@aztec/circuit-types';
2
+ import { Fr, Gas, RevertCode, countAccumulatedItems, } from '@aztec/circuits.js';
3
+ import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { strict as assert } from 'assert';
5
+ import { inspect } from 'util';
6
+ import { AvmPersistableStateManager } from '../avm/index.js';
7
+ import { DualSideEffectTrace } from './dual_side_effect_trace.js';
8
+ import { PublicEnqueuedCallSideEffectTrace, SideEffectArrayLengths } from './enqueued_call_side_effect_trace.js';
9
+ import { PublicSideEffectTrace } from './side_effect_trace.js';
10
+ import { generateAvmCircuitPublicInputs, generateAvmProvingRequest } from './transitional_adapters.js';
11
+ import { getCallRequestsByPhase, getExecutionRequestsByPhase } from './utils.js';
12
+ /**
13
+ * The transaction-level context for public execution.
14
+ */
15
+ export class PublicTxContext {
16
+ constructor(state, globalVariables, historicalHeader, // FIXME(dbanks12): remove
17
+ startStateReference, startGasUsed, gasSettings, setupCallRequests, appLogicCallRequests, teardownCallRequests, setupExecutionRequests, appLogicExecutionRequests, teardownExecutionRequests, nonRevertibleAccumulatedDataFromPrivate, revertibleAccumulatedDataFromPrivate, trace) {
18
+ this.state = state;
19
+ this.globalVariables = globalVariables;
20
+ this.historicalHeader = historicalHeader;
21
+ this.startStateReference = startStateReference;
22
+ this.startGasUsed = startGasUsed;
23
+ this.gasSettings = gasSettings;
24
+ this.setupCallRequests = setupCallRequests;
25
+ this.appLogicCallRequests = appLogicCallRequests;
26
+ this.teardownCallRequests = teardownCallRequests;
27
+ this.setupExecutionRequests = setupExecutionRequests;
28
+ this.appLogicExecutionRequests = appLogicExecutionRequests;
29
+ this.teardownExecutionRequests = teardownExecutionRequests;
30
+ this.nonRevertibleAccumulatedDataFromPrivate = nonRevertibleAccumulatedDataFromPrivate;
31
+ this.revertibleAccumulatedDataFromPrivate = revertibleAccumulatedDataFromPrivate;
32
+ this.trace = trace;
33
+ /* Gas actually used during teardown (different from limit) */
34
+ this.teardownGasUsed = Gas.empty();
35
+ /* Entire transaction execution is done. */
36
+ this.halted = false;
37
+ /* Where did reverts happen (if at all)? */
38
+ this.revertCode = RevertCode.OK;
39
+ this.log = createDebugLogger(`aztec:public_tx_context`);
40
+ this.gasUsed = startGasUsed;
41
+ }
42
+ static async create(db, worldStateDB, tx, globalVariables) {
43
+ const nonRevertibleAccumulatedDataFromPrivate = tx.data.forPublic.nonRevertibleAccumulatedData;
44
+ const revertibleAccumulatedDataFromPrivate = tx.data.forPublic.revertibleAccumulatedData;
45
+ const nonRevertibleNullifiersFromPrivate = nonRevertibleAccumulatedDataFromPrivate.nullifiers.filter(n => !n.isEmpty());
46
+ const _revertibleNullifiersFromPrivate = revertibleAccumulatedDataFromPrivate.nullifiers.filter(n => !n.isEmpty());
47
+ const innerCallTrace = new PublicSideEffectTrace();
48
+ const previousAccumulatedDataArrayLengths = new SideEffectArrayLengths(
49
+ /*publicDataReads*/ 0,
50
+ /*publicDataWrites*/ 0,
51
+ /*noteHashReadRequests*/ 0, countAccumulatedItems(nonRevertibleAccumulatedDataFromPrivate.noteHashes),
52
+ /*nullifierReadRequests*/ 0,
53
+ /*nullifierNonExistentReadRequests*/ 0, countAccumulatedItems(nonRevertibleAccumulatedDataFromPrivate.nullifiers),
54
+ /*l1ToL2MsgReadRequests*/ 0, countAccumulatedItems(nonRevertibleAccumulatedDataFromPrivate.l2ToL1Msgs),
55
+ /*unencryptedLogsHashes*/ 0);
56
+ const enqueuedCallTrace = new PublicEnqueuedCallSideEffectTrace(
57
+ /*startSideEffectCounter=*/ 0, previousAccumulatedDataArrayLengths);
58
+ const trace = new DualSideEffectTrace(innerCallTrace, enqueuedCallTrace);
59
+ // Transaction level state manager that will be forked for revertible phases.
60
+ const txStateManager = AvmPersistableStateManager.newWithPendingSiloedNullifiers(worldStateDB, trace, nonRevertibleNullifiersFromPrivate);
61
+ return new PublicTxContext(new PhaseStateManager(txStateManager), globalVariables, tx.data.constants.historicalHeader, await db.getStateReference(), tx.data.gasUsed, tx.data.constants.txContext.gasSettings, getCallRequestsByPhase(tx, TxExecutionPhase.SETUP), getCallRequestsByPhase(tx, TxExecutionPhase.APP_LOGIC), getCallRequestsByPhase(tx, TxExecutionPhase.TEARDOWN), getExecutionRequestsByPhase(tx, TxExecutionPhase.SETUP), getExecutionRequestsByPhase(tx, TxExecutionPhase.APP_LOGIC), getExecutionRequestsByPhase(tx, TxExecutionPhase.TEARDOWN), tx.data.forPublic.nonRevertibleAccumulatedData, tx.data.forPublic.revertibleAccumulatedData, enqueuedCallTrace);
62
+ }
63
+ /**
64
+ * Signal that the entire transaction execution is done.
65
+ * All phases have been processed.
66
+ * Actual transaction fee and actual total consumed gas can now be queried.
67
+ */
68
+ halt() {
69
+ this.halted = true;
70
+ }
71
+ /**
72
+ * Revert execution a phase. Populate revertReason & revertCode.
73
+ * If in setup, throw an error (transaction will be thrown out).
74
+ * NOTE: this does not "halt" the entire transaction execution.
75
+ */
76
+ revert(phase, revertReason = undefined, culprit = '') {
77
+ this.log.debug(`${TxExecutionPhase[phase]} phase reverted! ${culprit} failed with reason: ${revertReason}`);
78
+ if (revertReason && !this.revertReason) {
79
+ // don't override revertReason
80
+ // (if app logic and teardown both revert, we want app logic's reason)
81
+ this.revertReason = revertReason;
82
+ }
83
+ if (phase === TxExecutionPhase.SETUP) {
84
+ this.log.debug(`Setup phase reverted! The transaction will be thrown out.`);
85
+ if (revertReason) {
86
+ throw revertReason;
87
+ }
88
+ else {
89
+ throw new Error(`Setup phase reverted! The transaction will be thrown out. ${culprit} failed`);
90
+ }
91
+ }
92
+ else if (phase === TxExecutionPhase.APP_LOGIC) {
93
+ this.revertCode = RevertCode.APP_LOGIC_REVERTED;
94
+ }
95
+ else if (phase === TxExecutionPhase.TEARDOWN) {
96
+ if (this.revertCode.equals(RevertCode.APP_LOGIC_REVERTED)) {
97
+ this.revertCode = RevertCode.BOTH_REVERTED;
98
+ }
99
+ else {
100
+ this.revertCode = RevertCode.TEARDOWN_REVERTED;
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Get the revert code.
106
+ * @returns The revert code.
107
+ */
108
+ getFinalRevertCode() {
109
+ assert(this.halted, 'Cannot know the final revert code until tx execution ends');
110
+ return this.revertCode;
111
+ }
112
+ /**
113
+ * Construct & return transaction hash.
114
+ * @returns The transaction's hash.
115
+ */
116
+ getTxHash() {
117
+ // Private kernel functions are executed client side and for this reason tx hash is already set as first nullifier
118
+ const firstNullifier = this.nonRevertibleAccumulatedDataFromPrivate.nullifiers[0];
119
+ if (!firstNullifier || firstNullifier.isZero()) {
120
+ throw new Error(`Cannot get tx hash since first nullifier is missing`);
121
+ }
122
+ return new TxHash(firstNullifier.toBuffer());
123
+ }
124
+ /**
125
+ * Are there any call requests for the speciiied phase?
126
+ */
127
+ hasPhase(phase) {
128
+ if (phase === TxExecutionPhase.SETUP) {
129
+ return this.setupCallRequests.length > 0;
130
+ }
131
+ else if (phase === TxExecutionPhase.APP_LOGIC) {
132
+ return this.appLogicCallRequests.length > 0;
133
+ }
134
+ else {
135
+ // phase === TxExecutionPhase.TEARDOWN
136
+ return this.teardownCallRequests.length > 0;
137
+ }
138
+ }
139
+ /**
140
+ * Get the call requests for the specified phase (including args hashes).
141
+ */
142
+ getCallRequestsForPhase(phase) {
143
+ switch (phase) {
144
+ case TxExecutionPhase.SETUP:
145
+ return this.setupCallRequests;
146
+ case TxExecutionPhase.APP_LOGIC:
147
+ return this.appLogicCallRequests;
148
+ case TxExecutionPhase.TEARDOWN:
149
+ return this.teardownCallRequests;
150
+ }
151
+ }
152
+ /**
153
+ * Get the call requests for the specified phase (including actual args).
154
+ */
155
+ getExecutionRequestsForPhase(phase) {
156
+ switch (phase) {
157
+ case TxExecutionPhase.SETUP:
158
+ return this.setupExecutionRequests;
159
+ case TxExecutionPhase.APP_LOGIC:
160
+ return this.appLogicExecutionRequests;
161
+ case TxExecutionPhase.TEARDOWN:
162
+ return this.teardownExecutionRequests;
163
+ }
164
+ }
165
+ /**
166
+ * How much gas is left for the specified phase?
167
+ */
168
+ getGasLeftForPhase(phase) {
169
+ if (phase === TxExecutionPhase.TEARDOWN) {
170
+ return this.gasSettings.teardownGasLimits;
171
+ }
172
+ else {
173
+ return this.gasSettings.gasLimits.sub(this.gasUsed);
174
+ }
175
+ }
176
+ /**
177
+ * Consume gas. Track gas for teardown phase separately.
178
+ */
179
+ consumeGas(phase, gas) {
180
+ if (phase === TxExecutionPhase.TEARDOWN) {
181
+ this.teardownGasUsed = this.teardownGasUsed.add(gas);
182
+ }
183
+ else {
184
+ this.gasUsed = this.gasUsed.add(gas);
185
+ }
186
+ }
187
+ /**
188
+ * Compute the gas used using the actual gas used during teardown instead
189
+ * of the teardown gas limit.
190
+ * Note that this.gasUsed is initialized from private's gasUsed which includes
191
+ * teardown gas limit.
192
+ */
193
+ getActualGasUsed() {
194
+ assert(this.halted, 'Can only compute actual gas used after tx execution ends');
195
+ const requireTeardown = this.teardownCallRequests.length > 0;
196
+ const teardownGasLimits = requireTeardown ? this.gasSettings.teardownGasLimits : Gas.empty();
197
+ return this.gasUsed.sub(teardownGasLimits).add(this.teardownGasUsed);
198
+ }
199
+ /**
200
+ * The gasUsed as if the entire teardown gas limit was consumed.
201
+ */
202
+ getGasUsedForFee() {
203
+ return this.gasUsed;
204
+ }
205
+ /**
206
+ * Get the transaction fee as is available to the specified phase.
207
+ * Only teardown should have access to the actual transaction fee.
208
+ */
209
+ getTransactionFee(phase) {
210
+ if (phase === TxExecutionPhase.TEARDOWN) {
211
+ return this.getTransactionFeeUnsafe();
212
+ }
213
+ else {
214
+ return Fr.zero();
215
+ }
216
+ }
217
+ /**
218
+ * Compute the transaction fee.
219
+ * Should only be called during or after teardown.
220
+ */
221
+ getTransactionFeeUnsafe() {
222
+ const txFee = this.gasUsed.computeFee(this.globalVariables.gasFees);
223
+ this.log.debug(`Computed tx fee`, {
224
+ txFee,
225
+ gasUsed: inspect(this.gasUsed),
226
+ gasFees: inspect(this.globalVariables.gasFees),
227
+ });
228
+ return txFee;
229
+ }
230
+ /**
231
+ * Generate the public inputs for the AVM circuit.
232
+ */
233
+ generateAvmCircuitPublicInputs(endStateReference) {
234
+ assert(this.halted, 'Can only get AvmCircuitPublicInputs after tx execution ends');
235
+ return generateAvmCircuitPublicInputs(this.trace, this.globalVariables, this.startStateReference, this.startGasUsed, this.gasSettings, this.setupCallRequests, this.appLogicCallRequests, this.teardownCallRequests, this.nonRevertibleAccumulatedDataFromPrivate, this.revertibleAccumulatedDataFromPrivate, endStateReference,
236
+ /*endGasUsed=*/ this.gasUsed, this.getTransactionFeeUnsafe(), this.revertCode);
237
+ }
238
+ /**
239
+ * Generate the proving request for the AVM circuit.
240
+ */
241
+ generateProvingRequest(endStateReference) {
242
+ // TODO(dbanks12): Once we actually have tx-level proving, this will generate the entire
243
+ // proving request for the first time
244
+ this.avmProvingRequest.inputs.output = this.generateAvmCircuitPublicInputs(endStateReference);
245
+ return this.avmProvingRequest;
246
+ }
247
+ // TODO(dbanks12): remove once AVM proves entire public tx
248
+ async updateProvingRequest(real, phase, worldStateDB, stateManager, executionRequest, result, allocatedGas) {
249
+ if (this.avmProvingRequest === undefined) {
250
+ // Propagate the very first avmProvingRequest of the tx for now.
251
+ // Eventually this will be the proof for the entire public portion of the transaction.
252
+ this.avmProvingRequest = await generateAvmProvingRequest(real, worldStateDB, stateManager, this.historicalHeader, this.globalVariables, executionRequest, result, allocatedGas, this.getTransactionFee(phase));
253
+ }
254
+ }
255
+ }
256
+ /**
257
+ * Thin wrapper around the state manager to handle forking and merging for phases.
258
+ *
259
+ * This lets us keep track of whether the state has already been forked
260
+ * so that we can conditionally fork at the start of a phase.
261
+ *
262
+ * There is a state manager that lives at the level of the entire transaction,
263
+ * but for setup and teardown the active state manager will be a fork of the
264
+ * transaction level one.
265
+ */
266
+ class PhaseStateManager {
267
+ constructor(txStateManager) {
268
+ this.txStateManager = txStateManager;
269
+ }
270
+ fork() {
271
+ assert(!this.currentlyActiveStateManager, 'Cannot fork when already forked');
272
+ this.currentlyActiveStateManager = this.txStateManager.fork();
273
+ }
274
+ getActiveStateManager() {
275
+ return this.currentlyActiveStateManager || this.txStateManager;
276
+ }
277
+ isForked() {
278
+ return !!this.currentlyActiveStateManager;
279
+ }
280
+ mergeForkedState() {
281
+ assert(this.currentlyActiveStateManager, 'No forked state to merge');
282
+ this.txStateManager.merge(this.currentlyActiveStateManager);
283
+ // Drop the forked state manager now that it is merged
284
+ this.currentlyActiveStateManager = undefined;
285
+ }
286
+ discardForkedState() {
287
+ assert(this.currentlyActiveStateManager, 'No forked state to discard');
288
+ this.txStateManager.reject(this.currentlyActiveStateManager);
289
+ // Drop the forked state manager. We don't want it!
290
+ this.currentlyActiveStateManager = undefined;
291
+ }
292
+ }
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUVMLEVBQUUsRUFDRixHQUFHLEVBTUgsVUFBVSxFQUVWLHFCQUFxQixHQUN0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR2pILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRjs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBaUIxQixZQUNrQixLQUF3QixFQUN2QixlQUFnQyxFQUNoQyxnQkFBd0IsRUFBRSwwQkFBMEI7SUFDcEQsbUJBQW1DLEVBQ25DLFlBQWlCLEVBQ2pCLFdBQXdCLEVBQ3hCLGlCQUFzQyxFQUN0QyxvQkFBeUMsRUFDekMsb0JBQXlDLEVBQ3pDLHNCQUFnRCxFQUNoRCx5QkFBbUQsRUFD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
@@ -0,0 +1,36 @@
1
+ import { type AvmProvingRequest, type GasUsed, type MerkleTreeReadOperations, NestedProcessReturnValues, type SimulationError, type Tx, TxExecutionPhase } from '@aztec/circuit-types';
2
+ import { type GlobalVariables, type RevertCode } from '@aztec/circuits.js';
3
+ import { type PublicExecutor } from './executor.js';
4
+ import { type WorldStateDB } from './public_db_sources.js';
5
+ export type ProcessedPhase = {
6
+ phase: TxExecutionPhase;
7
+ durationMs: number;
8
+ returnValues: NestedProcessReturnValues[];
9
+ reverted: boolean;
10
+ revertReason?: SimulationError;
11
+ };
12
+ export type PublicTxResult = {
13
+ avmProvingRequest: AvmProvingRequest;
14
+ /** Gas used during the execution of this tx */
15
+ gasUsed: GasUsed;
16
+ revertCode: RevertCode;
17
+ /** Revert reason, if any */
18
+ revertReason?: SimulationError;
19
+ processedPhases: ProcessedPhase[];
20
+ };
21
+ export declare class PublicTxSimulator {
22
+ private db;
23
+ private globalVariables;
24
+ private worldStateDB;
25
+ private publicExecutor;
26
+ private realAvmProvingRequests;
27
+ private log;
28
+ constructor(db: MerkleTreeReadOperations, globalVariables: GlobalVariables, worldStateDB: WorldStateDB, publicExecutor: PublicExecutor, realAvmProvingRequests?: boolean);
29
+ static create(db: MerkleTreeReadOperations, publicExecutor: PublicExecutor, globalVariables: GlobalVariables, worldStateDB: WorldStateDB, realAvmProvingRequests?: boolean): PublicTxSimulator;
30
+ simulate(tx: Tx): Promise<PublicTxResult>;
31
+ private simulateSetupPhase;
32
+ private simulateAppLogicPhase;
33
+ private simulateTeardownPhase;
34
+ private simulatePhase;
35
+ }
36
+ //# sourceMappingURL=public_tx_simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_tx_simulator.d.ts","sourceRoot":"","sources":["../../src/public/public_tx_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,wBAAwB,EAC7B,yBAAyB,EACzB,KAAK,eAAe,EACpB,KAAK,EAAE,EACP,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAO,KAAK,eAAe,EAAgC,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAK9G,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,yBAAyB,EAAE,CAAC;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC,CAAC;AAEF,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,sBAAsB;IAPhC,OAAO,CAAC,GAAG,CAAc;gBAGf,EAAE,EAAE,wBAAwB,EAC5B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,EAC9B,sBAAsB,GAAE,OAAc;IAKhD,MAAM,CAAC,MAAM,CACX,EAAE,EAAE,wBAAwB,EAC5B,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,sBAAsB,GAAE,OAAc;IAKlC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;YA2DjC,kBAAkB;YAIlB,qBAAqB;YAoBrB,qBAAqB;YAoBrB,aAAa;CAoE5B"}
@@ -0,0 +1,148 @@
1
+ import { NestedProcessReturnValues, TxExecutionPhase, UnencryptedFunctionL2Logs, } from '@aztec/circuit-types';
2
+ import { Gas, MAX_L2_GAS_PER_ENQUEUED_CALL } from '@aztec/circuits.js';
3
+ import { createDebugLogger } from '@aztec/foundation/log';
4
+ import { Timer } from '@aztec/foundation/timer';
5
+ import { PublicTxContext } from './public_tx_context.js';
6
+ export class PublicTxSimulator {
7
+ constructor(db, globalVariables, worldStateDB, publicExecutor, realAvmProvingRequests = true) {
8
+ this.db = db;
9
+ this.globalVariables = globalVariables;
10
+ this.worldStateDB = worldStateDB;
11
+ this.publicExecutor = publicExecutor;
12
+ this.realAvmProvingRequests = realAvmProvingRequests;
13
+ this.log = createDebugLogger(`aztec:public_tx_simulator`);
14
+ }
15
+ static create(db, publicExecutor, globalVariables, worldStateDB, realAvmProvingRequests = true) {
16
+ return new PublicTxSimulator(db, globalVariables, worldStateDB, publicExecutor, realAvmProvingRequests);
17
+ }
18
+ async simulate(tx) {
19
+ this.log.verbose(`Processing tx ${tx.getTxHash()}`);
20
+ const context = await PublicTxContext.create(this.db, this.worldStateDB, tx, this.globalVariables);
21
+ // add new contracts to the contracts db so that their functions may be found and called
22
+ // TODO(#4073): This is catching only private deployments, when we add public ones, we'll
23
+ // have to capture contracts emitted in that phase as well.
24
+ // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
25
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
26
+ // if so, this should only add contracts that were deployed during private app logic.
27
+ // FIXME: we shouldn't need to directly modify worldStateDb here!
28
+ await this.worldStateDB.addNewContracts(tx);
29
+ const processedPhases = [];
30
+ if (context.hasPhase(TxExecutionPhase.SETUP)) {
31
+ const setupResult = await this.simulateSetupPhase(context);
32
+ processedPhases.push(setupResult);
33
+ }
34
+ if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
35
+ const appLogicResult = await this.simulateAppLogicPhase(context);
36
+ processedPhases.push(appLogicResult);
37
+ }
38
+ if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
39
+ const teardownResult = await this.simulateTeardownPhase(context);
40
+ processedPhases.push(teardownResult);
41
+ }
42
+ context.halt();
43
+ const endStateReference = await this.db.getStateReference();
44
+ const avmProvingRequest = context.generateProvingRequest(endStateReference);
45
+ const avmCircuitPublicInputs = avmProvingRequest.inputs.output;
46
+ const revertCode = context.getFinalRevertCode();
47
+ if (!revertCode.isOK()) {
48
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
49
+ // if so, this is removing contracts deployed in private setup
50
+ // You can't submit contracts in public, so this is only relevant for private-created side effects
51
+ // FIXME: we shouldn't need to directly modify worldStateDb here!
52
+ await this.worldStateDB.removeNewContracts(tx);
53
+ // FIXME(dbanks12): should not be changing immutable tx
54
+ tx.filterRevertedLogs(tx.data.forPublic.nonRevertibleAccumulatedData, avmCircuitPublicInputs.accumulatedData.unencryptedLogsHashes);
55
+ }
56
+ // FIXME(dbanks12): should not be changing immutable tx
57
+ tx.unencryptedLogs.addFunctionLogs([new UnencryptedFunctionL2Logs(context.trace.getUnencryptedLogs())]);
58
+ return {
59
+ avmProvingRequest,
60
+ gasUsed: { totalGas: context.getActualGasUsed(), teardownGas: context.teardownGasUsed },
61
+ revertCode,
62
+ revertReason: context.revertReason,
63
+ processedPhases: processedPhases,
64
+ };
65
+ }
66
+ async simulateSetupPhase(context) {
67
+ return await this.simulatePhase(TxExecutionPhase.SETUP, context);
68
+ }
69
+ async simulateAppLogicPhase(context) {
70
+ // Fork the state manager so that we can rollback state if app logic or teardown reverts.
71
+ // Don't need to fork for setup since it's non-revertible (if setup fails, transaction is thrown out).
72
+ context.state.fork();
73
+ const result = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
74
+ if (result.reverted) {
75
+ // Drop the currently active forked state manager and rollback to end of setup.
76
+ context.state.discardForkedState();
77
+ }
78
+ else {
79
+ if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
80
+ // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
81
+ context.state.mergeForkedState();
82
+ }
83
+ }
84
+ return result;
85
+ }
86
+ async simulateTeardownPhase(context) {
87
+ if (!context.state.isForked()) {
88
+ // If state isn't forked (app logic was empty or reverted), fork now
89
+ // so we can rollback to the end of setup if teardown reverts.
90
+ context.state.fork();
91
+ }
92
+ const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
93
+ if (result.reverted) {
94
+ // Drop the currently active forked state manager and rollback to end of setup.
95
+ context.state.discardForkedState();
96
+ }
97
+ else {
98
+ // Merge state updates from teardown,
99
+ context.state.mergeForkedState();
100
+ }
101
+ return result;
102
+ }
103
+ async simulatePhase(phase, context) {
104
+ const callRequests = context.getCallRequestsForPhase(phase);
105
+ const executionRequests = context.getExecutionRequestsForPhase(phase);
106
+ const txStateManager = context.state.getActiveStateManager();
107
+ this.log.debug(`Beginning processing in phase ${TxExecutionPhase[phase]} for tx ${context.getTxHash()}`);
108
+ const returnValues = [];
109
+ let reverted = false;
110
+ let revertReason;
111
+ const phaseTimer = new Timer();
112
+ for (let i = callRequests.length - 1; i >= 0; i--) {
113
+ if (reverted) {
114
+ break;
115
+ }
116
+ const callRequest = callRequests[i];
117
+ const executionRequest = executionRequests[i];
118
+ const availableGas = context.getGasLeftForPhase(phase);
119
+ // Gas allocated to an enqueued call can be different from the available gas
120
+ // if there is more gas available than the max allocation per enqueued call.
121
+ const allocatedGas = new Gas(
122
+ /*daGas=*/ availableGas.daGas,
123
+ /*l2Gas=*/ Math.min(availableGas.l2Gas, MAX_L2_GAS_PER_ENQUEUED_CALL));
124
+ const enqueuedCallResult = (await this.publicExecutor.simulate(txStateManager, executionRequest, this.globalVariables, // todo get from context
125
+ allocatedGas, context.getTransactionFee(phase)));
126
+ // TODO(dbanks12): remove once AVM proves entire public tx
127
+ await context.updateProvingRequest(this.realAvmProvingRequests, phase, this.worldStateDB, txStateManager, executionRequest, enqueuedCallResult, allocatedGas);
128
+ txStateManager.traceEnqueuedCall(callRequest, executionRequest.args, enqueuedCallResult.reverted);
129
+ const gasUsed = allocatedGas.sub(Gas.from(enqueuedCallResult.endGasLeft));
130
+ context.consumeGas(phase, gasUsed);
131
+ returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.returnValues));
132
+ if (enqueuedCallResult.reverted) {
133
+ reverted = true;
134
+ const culprit = `${executionRequest.callContext.contractAddress}:${executionRequest.callContext.functionSelector}`;
135
+ revertReason = enqueuedCallResult.revertReason;
136
+ context.revert(phase, enqueuedCallResult.revertReason, culprit); // throws if in setup (non-revertible) phase
137
+ }
138
+ }
139
+ return {
140
+ phase,
141
+ durationMs: phaseTimer.ms(),
142
+ returnValues,
143
+ reverted,
144
+ revertReason,
145
+ };
146
+ }
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwseUJBQXlCLEVBR3pCLGdCQUFnQixFQUNoQix5QkFBeUIsR0FDMUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsR0FBRyxFQUF3Qiw0QkFBNEIsRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RyxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQW9CekQsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUNVLEVBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLHlCQUFrQyxJQUFJO1FBSnRDLE9BQUUsR0FBRixFQUFFLENBQTBCO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFnQjtRQUU5QyxJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsRUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIseUJBQWtDLElBQUk7UUFFdEMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRCxLQUFLLENBQUMsUUFB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
@@ -1,10 +1,11 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  /// <reference types="node" resolution-mode="require"/>
3
- import { type ContractClassIdPreimage, type ContractInstanceWithAddress, Gas, SerializableContractInstance } from '@aztec/circuits.js';
3
+ import { UnencryptedL2Log } from '@aztec/circuit-types';
4
+ import { type AztecAddress, type ContractClassIdPreimage, type ContractInstanceWithAddress, Gas, NullifierLeafPreimage, type PublicCallRequest, PublicDataTreeLeafPreimage, SerializableContractInstance } from '@aztec/circuits.js';
4
5
  import { Fr } from '@aztec/foundation/fields';
5
6
  import { type AvmContractCallResult } from '../avm/avm_contract_call_result.js';
6
7
  import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
7
- import { type PublicExecutionResult } from './execution.js';
8
+ import { type EnqueuedPublicCallExecutionResultWithSideEffects, type PublicFunctionCallResult } from './execution.js';
8
9
  import { type PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
9
10
  export type TracedContractInstance = {
10
11
  exists: boolean;
@@ -36,17 +37,17 @@ export declare class PublicSideEffectTrace implements PublicSideEffectTraceInter
36
37
  fork(): PublicSideEffectTrace;
37
38
  getCounter(): number;
38
39
  private incrementSideEffectCounter;
39
- tracePublicStorageRead(contractAddress: Fr, slot: Fr, value: Fr, _exists: boolean, _cached: boolean): void;
40
- tracePublicStorageWrite(contractAddress: Fr, slot: Fr, value: Fr): void;
41
- traceNoteHashCheck(_contractAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean): void;
42
- traceNewNoteHash(_contractAddress: Fr, noteHash: Fr): void;
43
- traceNullifierCheck(_contractAddress: Fr, nullifier: Fr, _leafIndex: Fr, exists: boolean, _isPending: boolean): void;
44
- traceNewNullifier(_contractAddress: Fr, nullifier: Fr): void;
45
- traceL1ToL2MessageCheck(_contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
46
- traceNewL2ToL1Message(_contractAddress: Fr, recipient: Fr, content: Fr): void;
47
- traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
48
- traceGetContractInstance(contractAddress: Fr, exists: boolean, instance?: SerializableContractInstance): void;
49
- traceGetBytecode(contractAddress: Fr, exists: boolean, bytecode?: Buffer, contractInstance?: SerializableContractInstance, contractClass?: ContractClassIdPreimage): void;
40
+ tracePublicStorageRead(contractAddress: AztecAddress, slot: Fr, value: Fr, leafPreimage?: PublicDataTreeLeafPreimage, leafIndex?: Fr, path?: Fr[]): void;
41
+ tracePublicStorageWrite(contractAddress: AztecAddress, slot: Fr, value: Fr, lowLeafPreimage?: PublicDataTreeLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], newLeafPreimage?: PublicDataTreeLeafPreimage, insertionPath?: Fr[]): void;
42
+ traceNoteHashCheck(_contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, exists: boolean, path?: Fr[]): void;
43
+ traceNewNoteHash(_contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, path?: Fr[]): void;
44
+ traceNullifierCheck(_contractAddress: AztecAddress, nullifier: Fr, exists: boolean, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[]): void;
45
+ traceNewNullifier(_contractAddress: AztecAddress, nullifier: Fr, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], insertionPath?: Fr[]): void;
46
+ traceL1ToL2MessageCheck(_contractAddress: AztecAddress, msgHash: Fr, msgLeafIndex: Fr, exists: boolean, path?: Fr[]): void;
47
+ traceNewL2ToL1Message(_contractAddress: AztecAddress, recipient: Fr, content: Fr): void;
48
+ traceUnencryptedLog(contractAddress: AztecAddress, log: Fr[]): void;
49
+ traceGetContractInstance(contractAddress: AztecAddress, exists: boolean, instance?: SerializableContractInstance): void;
50
+ traceGetBytecode(contractAddress: AztecAddress, exists: boolean, bytecode?: Buffer, contractInstance?: SerializableContractInstance, contractClass?: ContractClassIdPreimage): void;
50
51
  /**
51
52
  * Trace a nested call.
52
53
  * Accept some results from a finished nested call's trace into this one.
@@ -66,10 +67,18 @@ export declare class PublicSideEffectTrace implements PublicSideEffectTraceInter
66
67
  avmCallResults: AvmContractCallResult,
67
68
  /** Function name for logging */
68
69
  functionName?: string): void;
70
+ traceEnqueuedCall(
71
+ /** The call request from private that enqueued this call. */
72
+ _publicCallRequest: PublicCallRequest,
73
+ /** The call's calldata */
74
+ _calldata: Fr[],
75
+ /** Did the call revert? */
76
+ _reverted: boolean): void;
77
+ merge(_nestedTrace: this, _reverted?: boolean): void;
69
78
  /**
70
79
  * Convert this trace to a PublicExecutionResult for use externally to the simulator.
71
80
  */
72
- toPublicExecutionResult(
81
+ toPublicFunctionCallResult(
73
82
  /** The execution environment of the nested call. */
74
83
  avmEnvironment: AvmExecutionEnvironment,
75
84
  /** How much gas was available for this public execution. */
@@ -81,7 +90,13 @@ export declare class PublicSideEffectTrace implements PublicSideEffectTraceInter
81
90
  /** The call's results */
82
91
  avmCallResults: AvmContractCallResult,
83
92
  /** Function name for logging */
84
- functionName?: string): PublicExecutionResult;
93
+ functionName?: string): PublicFunctionCallResult;
94
+ toPublicEnqueuedCallExecutionResult(
95
+ /** How much gas was left after this public execution. */
96
+ _endGasLeft: Gas,
97
+ /** The call's results */
98
+ _avmCallResults: AvmContractCallResult): EnqueuedPublicCallExecutionResultWithSideEffects;
85
99
  private enforceLimitOnNullifierChecks;
100
+ getUnencryptedLogs(): UnencryptedL2Log[];
86
101
  }
87
102
  //# sourceMappingURL=side_effect_trace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"side_effect_trace.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace.ts"],"names":[],"mappings":";;AACA,OAAO,EAQL,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAIhC,GAAG,EAiBH,4BAA4B,EAE7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAEnF,OAAO,EAAE,KAAK,qBAAqB,EAA6B,MAAM,gBAAgB,CAAC;AAEvF,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,MAAM,sBAAsB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,2BAA2B,CAAC;AAEvF,qBAAa,qBAAsB,YAAW,8BAA8B;IA8BxE,qDAAqD;aACrC,sBAAsB,EAAE,MAAM;IA9BzC,GAAG,yCAAuD;IAEjE,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAAS;IAElC,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,6BAA6B,CAAsC;IAE3E,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,gCAAgC,CAAqB;IAC7D,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,qBAAqB,CAAiB;IAE9C,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,OAAO,CAAC,eAAe,CAAoB;;IAGzC,qDAAqD;IACrC,sBAAsB,GAAE,MAAU;IAM7C,IAAI;IAIJ,UAAU;IAIjB,OAAO,CAAC,0BAA0B;IAI3B,sBAAsB,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAenG,uBAAuB,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAYhE,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO;IAYrF,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;IASnD,mBAAmB,CACxB,gBAAgB,EAAE,EAAE,EACpB,SAAS,EAAE,EAAE,EACb,UAAU,EAAE,EAAE,EACd,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,OAAO;IAoBd,iBAAiB,CAAC,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IAWrD,uBAAuB,CAAC,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO;IAY5F,qBAAqB,CAAC,gBAAgB,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;IAUtE,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAkBlD,wBAAwB,CAC7B,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,OAAO,EACf,QAAQ,GAAE,4BAAqE;IAsB1E,gBAAgB,CACrB,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,OAAO,EACf,QAAQ,GAAE,MAAwB,EAClC,gBAAgB,GAAE,4BAAqE,EACvF,aAAa,GAAE,uBAId;IAsBH;;;OAGG;IACI,eAAe;IACpB,oCAAoC;IACpC,eAAe,EAAE,qBAAqB;IACtC,oDAAoD;IACpD,iBAAiB,EAAE,uBAAuB;IAC1C,4DAA4D;IAC5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IACzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,gCAAgC;IAChC,YAAY,GAAE,MAAkB;IAwClC;;OAEG;IACI,uBAAuB;IAC5B,oDAAoD;IACpD,cAAc,EAAE,uBAAuB;IACvC,4DAA4D;IAC5D,YAAY,EAAE,GAAG;IACjB,yDAAyD;IACzD,UAAU,EAAE,GAAG;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM;IAChB,yBAAyB;IACzB,cAAc,EAAE,qBAAqB;IACrC,gCAAgC;IAChC,YAAY,GAAE,MAAkB,GAC/B,qBAAqB;IAuCxB,OAAO,CAAC,6BAA6B;CAoBtC"}
1
+ {"version":3,"file":"side_effect_trace.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace.ts"],"names":[],"mappings":"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"}