@aztec/simulator 0.64.0 → 0.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dest/avm/avm_memory_types.d.ts +3 -1
  2. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  3. package/dest/avm/avm_memory_types.js +22 -24
  4. package/dest/avm/avm_simulator.d.ts +5 -1
  5. package/dest/avm/avm_simulator.d.ts.map +1 -1
  6. package/dest/avm/avm_simulator.js +16 -9
  7. package/dest/avm/avm_tree.d.ts +56 -7
  8. package/dest/avm/avm_tree.d.ts.map +1 -1
  9. package/dest/avm/avm_tree.js +155 -82
  10. package/dest/avm/errors.d.ts +19 -0
  11. package/dest/avm/errors.d.ts.map +1 -1
  12. package/dest/avm/errors.js +29 -1
  13. package/dest/avm/journal/journal.d.ts +8 -7
  14. package/dest/avm/journal/journal.d.ts.map +1 -1
  15. package/dest/avm/journal/journal.js +47 -29
  16. package/dest/avm/journal/nullifiers.d.ts +11 -58
  17. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  18. package/dest/avm/journal/nullifiers.js +27 -107
  19. package/dest/avm/opcodes/contract.d.ts +2 -2
  20. package/dest/avm/opcodes/contract.d.ts.map +1 -1
  21. package/dest/avm/opcodes/contract.js +4 -4
  22. package/dest/avm/opcodes/control_flow.d.ts +2 -2
  23. package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
  24. package/dest/avm/opcodes/control_flow.js +4 -4
  25. package/dest/avm/opcodes/environment_getters.d.ts +2 -2
  26. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  27. package/dest/avm/opcodes/environment_getters.js +4 -4
  28. package/dest/avm/opcodes/instruction.d.ts +1 -1
  29. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  30. package/dest/avm/opcodes/instruction.js +1 -1
  31. package/dest/avm/opcodes/memory.d.ts +4 -4
  32. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  33. package/dest/avm/opcodes/memory.js +17 -13
  34. package/dest/avm/opcodes/misc.d.ts +2 -2
  35. package/dest/avm/opcodes/misc.d.ts.map +1 -1
  36. package/dest/avm/opcodes/misc.js +4 -4
  37. package/dest/avm/serialization/buffer_cursor.d.ts +2 -0
  38. package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -1
  39. package/dest/avm/serialization/buffer_cursor.js +8 -3
  40. package/dest/avm/serialization/bytecode_serialization.d.ts +1 -0
  41. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  42. package/dest/avm/serialization/bytecode_serialization.js +27 -13
  43. package/dest/avm/serialization/instruction_serialization.d.ts +1 -0
  44. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  45. package/dest/avm/serialization/instruction_serialization.js +9 -6
  46. package/dest/avm/test_utils.d.ts.map +1 -1
  47. package/dest/avm/test_utils.js +3 -2
  48. package/dest/common/errors.d.ts.map +1 -1
  49. package/dest/common/errors.js +3 -2
  50. package/dest/public/dual_side_effect_trace.d.ts +2 -2
  51. package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
  52. package/dest/public/dual_side_effect_trace.js +7 -7
  53. package/dest/public/enqueued_call_side_effect_trace.d.ts +8 -23
  54. package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
  55. package/dest/public/enqueued_call_side_effect_trace.js +31 -92
  56. package/dest/public/executor_metrics.d.ts +4 -2
  57. package/dest/public/executor_metrics.d.ts.map +1 -1
  58. package/dest/public/executor_metrics.js +20 -3
  59. package/dest/public/fixtures/index.d.ts.map +1 -1
  60. package/dest/public/fixtures/index.js +66 -35
  61. package/dest/public/public_db_sources.d.ts +3 -1
  62. package/dest/public/public_db_sources.d.ts.map +1 -1
  63. package/dest/public/public_db_sources.js +26 -11
  64. package/dest/public/public_processor.d.ts.map +1 -1
  65. package/dest/public/public_processor.js +12 -5
  66. package/dest/public/public_tx_context.d.ts +5 -6
  67. package/dest/public/public_tx_context.d.ts.map +1 -1
  68. package/dest/public/public_tx_context.js +19 -17
  69. package/dest/public/public_tx_simulator.d.ts +13 -2
  70. package/dest/public/public_tx_simulator.d.ts.map +1 -1
  71. package/dest/public/public_tx_simulator.js +263 -217
  72. package/dest/public/side_effect_trace.d.ts +2 -2
  73. package/dest/public/side_effect_trace.d.ts.map +1 -1
  74. package/dest/public/side_effect_trace.js +8 -6
  75. package/dest/public/side_effect_trace_interface.d.ts +2 -2
  76. package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
  77. package/dest/public/transitional_adapters.d.ts.map +1 -1
  78. package/dest/public/transitional_adapters.js +2 -6
  79. package/package.json +9 -9
  80. package/src/avm/avm_memory_types.ts +26 -24
  81. package/src/avm/avm_simulator.ts +20 -13
  82. package/src/avm/avm_tree.ts +196 -93
  83. package/src/avm/errors.ts +31 -0
  84. package/src/avm/journal/journal.ts +61 -47
  85. package/src/avm/journal/nullifiers.ts +29 -121
  86. package/src/avm/opcodes/contract.ts +2 -2
  87. package/src/avm/opcodes/control_flow.ts +2 -2
  88. package/src/avm/opcodes/environment_getters.ts +2 -2
  89. package/src/avm/opcodes/instruction.ts +1 -1
  90. package/src/avm/opcodes/memory.ts +15 -10
  91. package/src/avm/opcodes/misc.ts +2 -2
  92. package/src/avm/serialization/buffer_cursor.ts +9 -3
  93. package/src/avm/serialization/bytecode_serialization.ts +29 -13
  94. package/src/avm/serialization/instruction_serialization.ts +12 -6
  95. package/src/avm/test_utils.ts +9 -1
  96. package/src/common/errors.ts +2 -1
  97. package/src/public/dual_side_effect_trace.ts +6 -30
  98. package/src/public/enqueued_call_side_effect_trace.ts +35 -154
  99. package/src/public/executor_metrics.ts +23 -1
  100. package/src/public/fixtures/index.ts +97 -43
  101. package/src/public/public_db_sources.ts +29 -15
  102. package/src/public/public_processor.ts +11 -4
  103. package/src/public/public_tx_context.ts +21 -23
  104. package/src/public/public_tx_simulator.ts +45 -8
  105. package/src/public/side_effect_trace.ts +7 -9
  106. package/src/public/side_effect_trace_interface.ts +2 -4
  107. package/src/public/transitional_adapters.ts +0 -11
@@ -1,228 +1,274 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
1
2
  import { NestedProcessReturnValues, TxExecutionPhase, UnencryptedFunctionL2Logs, } from '@aztec/circuit-types';
2
3
  import { Gas, MAX_L2_GAS_PER_ENQUEUED_CALL, } from '@aztec/circuits.js';
3
4
  import { createDebugLogger } from '@aztec/foundation/log';
4
5
  import { Timer } from '@aztec/foundation/timer';
6
+ import { Attributes, trackSpan } from '@aztec/telemetry-client';
7
+ import { strict as assert } from 'assert';
5
8
  import { AvmSimulator } from '../avm/index.js';
6
9
  import { getPublicFunctionDebugName } from '../common/debug_fn_name.js';
7
10
  import { ExecutorMetrics } from './executor_metrics.js';
8
11
  import { PublicTxContext } from './public_tx_context.js';
9
- export class PublicTxSimulator {
10
- constructor(db, worldStateDB, client, globalVariables, realAvmProvingRequests = true, doMerkleOperations = false) {
11
- this.db = db;
12
- this.worldStateDB = worldStateDB;
13
- this.globalVariables = globalVariables;
14
- this.realAvmProvingRequests = realAvmProvingRequests;
15
- this.doMerkleOperations = doMerkleOperations;
16
- this.log = createDebugLogger(`aztec:public_tx_simulator`);
17
- this.metrics = new ExecutorMetrics(client, 'PublicTxSimulator');
18
- }
19
- /**
20
- * Simulate a transaction's public portion including all of its phases.
21
- * @param tx - The transaction to simulate.
22
- * @returns The result of the transaction's public execution.
23
- */
24
- async simulate(tx) {
25
- this.log.verbose(`Processing tx ${tx.getTxHash()}`);
26
- const context = await PublicTxContext.create(this.db, this.worldStateDB, tx, this.globalVariables, this.doMerkleOperations);
27
- // add new contracts to the contracts db so that their functions may be found and called
28
- // TODO(#4073): This is catching only private deployments, when we add public ones, we'll
29
- // have to capture contracts emitted in that phase as well.
30
- // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
31
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
32
- // if so, this should only add contracts that were deployed during private app logic.
33
- // FIXME: we shouldn't need to directly modify worldStateDb here!
34
- await this.worldStateDB.addNewContracts(tx);
35
- const processedPhases = [];
36
- if (context.hasPhase(TxExecutionPhase.SETUP)) {
37
- const setupResult = await this.simulateSetupPhase(context);
38
- processedPhases.push(setupResult);
39
- }
40
- if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
41
- const appLogicResult = await this.simulateAppLogicPhase(context);
42
- processedPhases.push(appLogicResult);
43
- }
44
- if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
45
- const teardownResult = await this.simulateTeardownPhase(context);
46
- processedPhases.push(teardownResult);
47
- }
48
- context.halt();
49
- const endStateReference = await this.db.getStateReference();
50
- const avmProvingRequest = context.generateProvingRequest(endStateReference);
51
- const avmCircuitPublicInputs = avmProvingRequest.inputs.output;
52
- const revertCode = context.getFinalRevertCode();
53
- if (!revertCode.isOK()) {
54
- // TODO(#6464): Should we allow emitting contracts in the private setup phase?
55
- // if so, this is removing contracts deployed in private setup
56
- // You can't submit contracts in public, so this is only relevant for private-created side effects
57
- // FIXME: we shouldn't need to directly modify worldStateDb here!
58
- await this.worldStateDB.removeNewContracts(tx);
59
- // FIXME(dbanks12): should not be changing immutable tx
60
- tx.filterRevertedLogs(tx.data.forPublic.nonRevertibleAccumulatedData, avmCircuitPublicInputs.accumulatedData.unencryptedLogsHashes);
61
- }
62
- // FIXME(dbanks12): should not be changing immutable tx
63
- tx.unencryptedLogs.addFunctionLogs([new UnencryptedFunctionL2Logs(context.trace.getUnencryptedLogs())]);
64
- return {
65
- avmProvingRequest,
66
- gasUsed: { totalGas: context.getActualGasUsed(), teardownGas: context.teardownGasUsed },
67
- revertCode,
68
- revertReason: context.revertReason,
69
- processedPhases: processedPhases,
70
- };
71
- }
72
- /**
73
- * Simulate the setup phase of a transaction's public execution.
74
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
75
- * @returns The phase result.
76
- */
77
- async simulateSetupPhase(context) {
78
- return await this.simulatePhase(TxExecutionPhase.SETUP, context);
79
- }
80
- /**
81
- * Simulate the app logic phase of a transaction's public execution.
82
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
83
- * @returns The phase result.
84
- */
85
- async simulateAppLogicPhase(context) {
86
- // Fork the state manager so that we can rollback state if app logic or teardown reverts.
87
- // Don't need to fork for setup since it's non-revertible (if setup fails, transaction is thrown out).
88
- context.state.fork();
89
- const result = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
90
- if (result.reverted) {
91
- // Drop the currently active forked state manager and rollback to end of setup.
92
- context.state.discardForkedState();
93
- }
94
- else {
95
- if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
96
- // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
97
- context.state.mergeForkedState();
12
+ let PublicTxSimulator = (() => {
13
+ var _a;
14
+ let _instanceExtraInitializers = [];
15
+ let _simulateEnqueuedCall_decorators;
16
+ let _simulateEnqueuedCallInternal_decorators;
17
+ return _a = class PublicTxSimulator {
18
+ constructor(db, worldStateDB, telemetryClient, globalVariables, realAvmProvingRequests = true, doMerkleOperations = false) {
19
+ this.db = (__runInitializers(this, _instanceExtraInitializers), db);
20
+ this.worldStateDB = worldStateDB;
21
+ this.globalVariables = globalVariables;
22
+ this.realAvmProvingRequests = realAvmProvingRequests;
23
+ this.doMerkleOperations = doMerkleOperations;
24
+ this.log = createDebugLogger(`aztec:public_tx_simulator`);
25
+ this.metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
98
26
  }
99
- }
100
- return result;
101
- }
102
- /**
103
- * Simulate the teardown phase of a transaction's public execution.
104
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
105
- * @returns The phase result.
106
- */
107
- async simulateTeardownPhase(context) {
108
- if (!context.state.isForked()) {
109
- // If state isn't forked (app logic was empty or reverted), fork now
110
- // so we can rollback to the end of setup if teardown reverts.
111
- context.state.fork();
112
- }
113
- const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
114
- if (result.reverted) {
115
- // Drop the currently active forked state manager and rollback to end of setup.
116
- context.state.discardForkedState();
117
- }
118
- else {
119
- // Merge state updates from teardown,
120
- context.state.mergeForkedState();
121
- }
122
- return result;
123
- }
124
- /**
125
- * Simulate a phase of a transaction's public execution.
126
- * @param phase - The current phase
127
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
128
- * @returns The phase result.
129
- */
130
- async simulatePhase(phase, context) {
131
- const callRequests = context.getCallRequestsForPhase(phase);
132
- const executionRequests = context.getExecutionRequestsForPhase(phase);
133
- this.log.debug(`Beginning processing in phase ${TxExecutionPhase[phase]} for tx ${context.getTxHash()}`);
134
- const returnValues = [];
135
- let reverted = false;
136
- let revertReason;
137
- const phaseTimer = new Timer();
138
- for (let i = callRequests.length - 1; i >= 0; i--) {
139
- if (reverted) {
140
- break;
27
+ get tracer() {
28
+ return this.metrics.tracer;
141
29
  }
142
- const callRequest = callRequests[i];
143
- const executionRequest = executionRequests[i];
144
- const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest, executionRequest);
145
- returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
146
- if (enqueuedCallResult.reverted) {
147
- reverted = true;
148
- revertReason = enqueuedCallResult.revertReason;
30
+ /**
31
+ * Simulate a transaction's public portion including all of its phases.
32
+ * @param tx - The transaction to simulate.
33
+ * @returns The result of the transaction's public execution.
34
+ */
35
+ async simulate(tx) {
36
+ this.log.verbose(`Processing tx ${tx.getTxHash()}`);
37
+ const context = await PublicTxContext.create(this.db, this.worldStateDB, tx, this.globalVariables, this.doMerkleOperations);
38
+ // add new contracts to the contracts db so that their functions may be found and called
39
+ // TODO(#4073): This is catching only private deployments, when we add public ones, we'll
40
+ // have to capture contracts emitted in that phase as well.
41
+ // TODO(@spalladino): Should we allow emitting contracts in the fee preparation phase?
42
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
43
+ // if so, this should only add contracts that were deployed during private app logic.
44
+ // FIXME: we shouldn't need to directly modify worldStateDb here!
45
+ await this.worldStateDB.addNewContracts(tx);
46
+ await this.insertNonRevertiblesFromPrivate(context);
47
+ const processedPhases = [];
48
+ if (context.hasPhase(TxExecutionPhase.SETUP)) {
49
+ const setupResult = await this.simulateSetupPhase(context);
50
+ processedPhases.push(setupResult);
51
+ }
52
+ await this.insertRevertiblesFromPrivate(context);
53
+ if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
54
+ const appLogicResult = await this.simulateAppLogicPhase(context);
55
+ processedPhases.push(appLogicResult);
56
+ }
57
+ if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
58
+ const teardownResult = await this.simulateTeardownPhase(context);
59
+ processedPhases.push(teardownResult);
60
+ }
61
+ context.halt();
62
+ const endStateReference = await this.db.getStateReference();
63
+ const avmProvingRequest = context.generateProvingRequest(endStateReference);
64
+ const avmCircuitPublicInputs = avmProvingRequest.inputs.output;
65
+ const revertCode = context.getFinalRevertCode();
66
+ if (!revertCode.isOK()) {
67
+ // TODO(#6464): Should we allow emitting contracts in the private setup phase?
68
+ // if so, this is removing contracts deployed in private setup
69
+ // You can't submit contracts in public, so this is only relevant for private-created side effects
70
+ // FIXME: we shouldn't need to directly modify worldStateDb here!
71
+ await this.worldStateDB.removeNewContracts(tx);
72
+ // FIXME(dbanks12): should not be changing immutable tx
73
+ tx.filterRevertedLogs(tx.data.forPublic.nonRevertibleAccumulatedData, avmCircuitPublicInputs.accumulatedData.unencryptedLogsHashes);
74
+ }
75
+ // FIXME(dbanks12): should not be changing immutable tx
76
+ tx.unencryptedLogs.addFunctionLogs([new UnencryptedFunctionL2Logs(context.trace.getUnencryptedLogs())]);
77
+ return {
78
+ avmProvingRequest,
79
+ gasUsed: { totalGas: context.getActualGasUsed(), teardownGas: context.teardownGasUsed },
80
+ revertCode,
81
+ revertReason: context.revertReason,
82
+ processedPhases: processedPhases,
83
+ };
149
84
  }
150
- }
151
- return {
152
- phase,
153
- durationMs: phaseTimer.ms(),
154
- returnValues,
155
- reverted,
156
- revertReason,
157
- };
158
- }
159
- /**
160
- * Simulate an enqueued public call.
161
- * @param phase - The current phase of public execution
162
- * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
163
- * @param callRequest - The enqueued call to execute
164
- * @param executionRequest - The execution request (includes args)
165
- * @returns The result of execution.
166
- */
167
- async simulateEnqueuedCall(phase, context, callRequest, executionRequest) {
168
- const stateManager = context.state.getActiveStateManager();
169
- const address = executionRequest.callContext.contractAddress;
170
- const selector = executionRequest.callContext.functionSelector;
171
- const fnName = await getPublicFunctionDebugName(this.worldStateDB, address, selector, executionRequest.args);
172
- const availableGas = context.getGasLeftForPhase(phase);
173
- // Gas allocated to an enqueued call can be different from the available gas
174
- // if there is more gas available than the max allocation per enqueued call.
175
- const allocatedGas = new Gas(
176
- /*daGas=*/ availableGas.daGas,
177
- /*l2Gas=*/ Math.min(availableGas.l2Gas, MAX_L2_GAS_PER_ENQUEUED_CALL));
178
- const result = await this.simulateEnqueuedCallInternal(context.state.getActiveStateManager(), executionRequest, allocatedGas, context.getTransactionFee(phase), fnName);
179
- const gasUsed = allocatedGas.sub(result.gasLeft);
180
- context.consumeGas(phase, gasUsed);
181
- this.log.verbose(`[AVM] Enqueued public call consumed ${gasUsed.l2Gas} L2 gas ending with ${result.gasLeft.l2Gas} L2 gas left.`);
182
- // TODO(dbanks12): remove once AVM proves entire public tx
183
- context.updateProvingRequest(this.realAvmProvingRequests, phase, fnName, stateManager, executionRequest, result, allocatedGas);
184
- stateManager.traceEnqueuedCall(callRequest, executionRequest.args, result.reverted);
185
- if (result.reverted) {
186
- const culprit = `${executionRequest.callContext.contractAddress}:${executionRequest.callContext.functionSelector}`;
187
- context.revert(phase, result.revertReason, culprit); // throws if in setup (non-revertible) phase
188
- }
189
- return result;
190
- }
191
- /**
192
- * Simulate an enqueued public call, without modifying the context (PublicTxContext).
193
- * Resulting modifcations to the context can be applied by the caller.
194
- *
195
- * This function can be mocked for testing to skip actual AVM simulation
196
- * while still simulating phases and generating a proving request.
197
- *
198
- * @param stateManager - The state manager for AvmSimulation
199
- * @param context - The context of the currently executing public transaction portion
200
- * @param executionRequest - The execution request (includes args)
201
- * @param allocatedGas - The gas allocated to the enqueued call
202
- * @param fnName - The name of the function
203
- * @returns The result of execution.
204
- */
205
- async simulateEnqueuedCallInternal(stateManager, executionRequest, allocatedGas, transactionFee, fnName) {
206
- const address = executionRequest.callContext.contractAddress;
207
- const sender = executionRequest.callContext.msgSender;
208
- const selector = executionRequest.callContext.functionSelector;
209
- this.log.verbose(`[AVM] Executing enqueued public call to external function ${fnName}@${address} with ${allocatedGas.l2Gas} allocated L2 gas.`);
210
- const timer = new Timer();
211
- const simulator = AvmSimulator.create(stateManager, address, sender, selector, transactionFee, this.globalVariables, executionRequest.callContext.isStaticCall, executionRequest.args, allocatedGas);
212
- const avmCallResult = await simulator.execute();
213
- const result = avmCallResult.finalize();
214
- this.log.verbose(`[AVM] Simulation of enqueued public call ${fnName} completed. reverted: ${result.reverted}${result.reverted ? ', reason: ' + result.revertReason : ''}.`, {
215
- eventName: 'avm-simulation',
216
- appCircuitName: fnName,
217
- duration: timer.ms(),
218
- });
219
- if (result.reverted) {
220
- this.metrics.recordFunctionSimulationFailure();
221
- }
222
- else {
223
- this.metrics.recordFunctionSimulation(timer.ms());
224
- }
225
- return result;
226
- }
227
- }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwseUJBQXlCLEVBSXpCLGdCQUFnQixFQUNoQix5QkFBeUIsR0FDMUIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBRUwsR0FBRyxFQUVILDRCQUE0QixHQUc3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFtQyxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBb0J6RCxNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ1UsRUFBNEIsRUFDNUIsWUFBMEIsRUFDbEMsTUFBdUIsRUFDZixlQUFnQyxFQUNoQyx5QkFBa0MsSUFBSSxFQUN0QyxxQkFBOEIsS0FBSztRQUxuQyxPQUFFLEdBQUYsRUFBRSxDQUEwQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUUxQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFnQjtRQUN0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWlCO1FBRTNDLElBQUksQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIs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
85
+ /**
86
+ * Simulate the setup phase of a transaction's public execution.
87
+ * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
88
+ * @returns The phase result.
89
+ */
90
+ async simulateSetupPhase(context) {
91
+ return await this.simulatePhase(TxExecutionPhase.SETUP, context);
92
+ }
93
+ /**
94
+ * Simulate the app logic phase of a transaction's public execution.
95
+ * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
96
+ * @returns The phase result.
97
+ */
98
+ async simulateAppLogicPhase(context) {
99
+ assert(context.state.isForked(), 'App logic phase should operate with forked state.');
100
+ const result = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
101
+ if (result.reverted) {
102
+ // Drop the currently active forked state manager and rollback to end of setup.
103
+ context.state.discardForkedState();
104
+ }
105
+ else {
106
+ if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
107
+ // Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
108
+ context.state.mergeForkedState();
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ /**
114
+ * Simulate the teardown phase of a transaction's public execution.
115
+ * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
116
+ * @returns The phase result.
117
+ */
118
+ async simulateTeardownPhase(context) {
119
+ if (!context.state.isForked()) {
120
+ // If state isn't forked (app logic reverted), fork now
121
+ // so we can rollback to the end of setup if teardown reverts.
122
+ context.state.fork();
123
+ }
124
+ const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
125
+ if (result.reverted) {
126
+ // Drop the currently active forked state manager and rollback to end of setup.
127
+ context.state.discardForkedState();
128
+ }
129
+ else {
130
+ // Merge state updates from teardown,
131
+ context.state.mergeForkedState();
132
+ }
133
+ return result;
134
+ }
135
+ /**
136
+ * Simulate a phase of a transaction's public execution.
137
+ * @param phase - The current phase
138
+ * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
139
+ * @returns The phase result.
140
+ */
141
+ async simulatePhase(phase, context) {
142
+ const callRequests = context.getCallRequestsForPhase(phase);
143
+ const executionRequests = context.getExecutionRequestsForPhase(phase);
144
+ this.log.debug(`Beginning processing in phase ${TxExecutionPhase[phase]} for tx ${context.getTxHash()}`);
145
+ const returnValues = [];
146
+ let reverted = false;
147
+ let revertReason;
148
+ const phaseTimer = new Timer();
149
+ for (let i = callRequests.length - 1; i >= 0; i--) {
150
+ if (reverted) {
151
+ break;
152
+ }
153
+ const callRequest = callRequests[i];
154
+ const executionRequest = executionRequests[i];
155
+ const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest, executionRequest);
156
+ returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
157
+ if (enqueuedCallResult.reverted) {
158
+ reverted = true;
159
+ revertReason = enqueuedCallResult.revertReason;
160
+ }
161
+ }
162
+ return {
163
+ phase,
164
+ durationMs: phaseTimer.ms(),
165
+ returnValues,
166
+ reverted,
167
+ revertReason,
168
+ };
169
+ }
170
+ /**
171
+ * Simulate an enqueued public call.
172
+ * @param phase - The current phase of public execution
173
+ * @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
174
+ * @param callRequest - The enqueued call to execute
175
+ * @param executionRequest - The execution request (includes args)
176
+ * @returns The result of execution.
177
+ */
178
+ async simulateEnqueuedCall(phase, context, callRequest, executionRequest) {
179
+ const stateManager = context.state.getActiveStateManager();
180
+ const address = executionRequest.callContext.contractAddress;
181
+ const selector = executionRequest.callContext.functionSelector;
182
+ const fnName = await getPublicFunctionDebugName(this.worldStateDB, address, selector, executionRequest.args);
183
+ const availableGas = context.getGasLeftForPhase(phase);
184
+ // Gas allocated to an enqueued call can be different from the available gas
185
+ // if there is more gas available than the max allocation per enqueued call.
186
+ const allocatedGas = new Gas(
187
+ /*daGas=*/ availableGas.daGas,
188
+ /*l2Gas=*/ Math.min(availableGas.l2Gas, MAX_L2_GAS_PER_ENQUEUED_CALL));
189
+ const result = await this.simulateEnqueuedCallInternal(context.state.getActiveStateManager(), executionRequest, allocatedGas, context.getTransactionFee(phase), fnName);
190
+ const gasUsed = allocatedGas.sub(result.gasLeft);
191
+ context.consumeGas(phase, gasUsed);
192
+ this.log.verbose(`[AVM] Enqueued public call consumed ${gasUsed.l2Gas} L2 gas ending with ${result.gasLeft.l2Gas} L2 gas left.`);
193
+ // TODO(dbanks12): remove once AVM proves entire public tx
194
+ context.updateProvingRequest(this.realAvmProvingRequests, phase, fnName, stateManager, executionRequest, result, allocatedGas);
195
+ stateManager.traceEnqueuedCall(callRequest, executionRequest.args, result.reverted);
196
+ if (result.reverted) {
197
+ const culprit = `${executionRequest.callContext.contractAddress}:${executionRequest.callContext.functionSelector}`;
198
+ context.revert(phase, result.revertReason, culprit); // throws if in setup (non-revertible) phase
199
+ }
200
+ return result;
201
+ }
202
+ /**
203
+ * Simulate an enqueued public call, without modifying the context (PublicTxContext).
204
+ * Resulting modifcations to the context can be applied by the caller.
205
+ *
206
+ * This function can be mocked for testing to skip actual AVM simulation
207
+ * while still simulating phases and generating a proving request.
208
+ *
209
+ * @param stateManager - The state manager for AvmSimulation
210
+ * @param context - The context of the currently executing public transaction portion
211
+ * @param executionRequest - The execution request (includes args)
212
+ * @param allocatedGas - The gas allocated to the enqueued call
213
+ * @param fnName - The name of the function
214
+ * @returns The result of execution.
215
+ */
216
+ async simulateEnqueuedCallInternal(stateManager, executionRequest, allocatedGas, transactionFee, fnName) {
217
+ const address = executionRequest.callContext.contractAddress;
218
+ const sender = executionRequest.callContext.msgSender;
219
+ const selector = executionRequest.callContext.functionSelector;
220
+ this.log.verbose(`[AVM] Executing enqueued public call to external function ${fnName}@${address} with ${allocatedGas.l2Gas} allocated L2 gas.`);
221
+ const timer = new Timer();
222
+ const simulator = AvmSimulator.create(stateManager, address, sender, selector, transactionFee, this.globalVariables, executionRequest.callContext.isStaticCall, executionRequest.args, allocatedGas);
223
+ const avmCallResult = await simulator.execute();
224
+ const result = avmCallResult.finalize();
225
+ this.log.verbose(`[AVM] Simulation of enqueued public call ${fnName} completed. reverted: ${result.reverted}${result.reverted ? ', reason: ' + result.revertReason : ''}.`, {
226
+ eventName: 'avm-simulation',
227
+ appCircuitName: fnName,
228
+ duration: timer.ms(),
229
+ });
230
+ if (result.reverted) {
231
+ this.metrics.recordFunctionSimulationFailure();
232
+ }
233
+ else {
234
+ this.metrics.recordFunctionSimulation(timer.ms(), allocatedGas.sub(result.gasLeft).l2Gas, fnName);
235
+ }
236
+ return result;
237
+ }
238
+ /**
239
+ * Insert the non-revertible accumulated data from private into the public state.
240
+ */
241
+ async insertNonRevertiblesFromPrivate(context) {
242
+ const stateManager = context.state.getActiveStateManager();
243
+ await stateManager.writeSiloedNullifiersFromPrivate(context.nonRevertibleAccumulatedDataFromPrivate.nullifiers);
244
+ }
245
+ /**
246
+ * Insert the revertible accumulated data from private into the public state.
247
+ * Start by forking state so we can rollback to the end of setup if app logic or teardown reverts.
248
+ */
249
+ async insertRevertiblesFromPrivate(context) {
250
+ // Fork the state manager so we can rollback to end of setup if app logic reverts.
251
+ context.state.fork();
252
+ const stateManager = context.state.getActiveStateManager();
253
+ await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
254
+ }
255
+ },
256
+ (() => {
257
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
258
+ _simulateEnqueuedCall_decorators = [trackSpan('PublicTxSimulator.simulateEnqueuedCall', (phase, context, _callRequest, executionRequest) => ({
259
+ [Attributes.TX_HASH]: context.getTxHash().toString(),
260
+ [Attributes.TARGET_ADDRESS]: executionRequest.callContext.contractAddress.toString(),
261
+ [Attributes.SENDER_ADDRESS]: executionRequest.callContext.msgSender.toString(),
262
+ [Attributes.SIMULATOR_PHASE]: TxExecutionPhase[phase].toString(),
263
+ }))];
264
+ _simulateEnqueuedCallInternal_decorators = [trackSpan('PublicTxSimulator.simulateEnqueuedCallInternal', (_stateManager, _executionRequest, _allocatedGas, _transactionFee, fnName) => ({
265
+ [Attributes.APP_CIRCUIT_NAME]: fnName,
266
+ }))];
267
+ __esDecorate(_a, null, _simulateEnqueuedCall_decorators, { kind: "method", name: "simulateEnqueuedCall", static: false, private: false, access: { has: obj => "simulateEnqueuedCall" in obj, get: obj => obj.simulateEnqueuedCall }, metadata: _metadata }, null, _instanceExtraInitializers);
268
+ __esDecorate(_a, null, _simulateEnqueuedCallInternal_decorators, { kind: "method", name: "simulateEnqueuedCallInternal", static: false, private: false, access: { has: obj => "simulateEnqueuedCallInternal" in obj, get: obj => obj.simulateEnqueuedCallInternal }, metadata: _metadata }, null, _instanceExtraInitializers);
269
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
270
+ })(),
271
+ _a;
272
+ })();
273
+ export { PublicTxSimulator };
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUlMLHlCQUF5QixFQUl6QixnQkFBZ0IsRUFDaEIseUJBQXlCLEdBQzFCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUVMLEdBQUcsRUFFSCw0QkFBNEIsR0FHN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5HLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRzFDLE9BQU8sRUFBbUMsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztJQW9CNUMsaUJBQWlCOzs7OztzQkFBakIsaUJBQWlCO1lBSzVCLFlBQ1UsRUFBNEIsRUFDNUIsWUFBMEIsRUFDbEMsZUFBZ0MsRUFDeEIsZUFBZ0MsRUFDaEMseUJBQWtDLElBQUksRUFDdEMscUJBQThCLEtBQUs7Z0JBTG5DLE9BQUUsSUFORCxtREFBaUIsRUFNbEIsRUFBRSxFQUEwQjtnQkFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7Z0JBRTFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtnQkFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFnQjtnQkFDdEMsdUJBQWtC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
@@ -41,8 +41,8 @@ export declare class PublicSideEffectTrace implements PublicSideEffectTraceInter
41
41
  tracePublicStorageWrite(contractAddress: AztecAddress, slot: Fr, value: Fr, lowLeafPreimage?: PublicDataTreeLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], newLeafPreimage?: PublicDataTreeLeafPreimage, insertionPath?: Fr[]): void;
42
42
  traceNoteHashCheck(_contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr, exists: boolean, path?: Fr[]): void;
43
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;
44
+ traceNullifierCheck(siloedNullifier: Fr, exists: boolean, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[]): void;
45
+ traceNewNullifier(siloedNullifier: Fr, lowLeafPreimage?: NullifierLeafPreimage, lowLeafIndex?: Fr, lowLeafPath?: Fr[], insertionPath?: Fr[]): void;
46
46
  traceL1ToL2MessageCheck(_contractAddress: AztecAddress, msgHash: Fr, msgLeafIndex: Fr, exists: boolean, path?: Fr[]): void;
47
47
  traceNewL2ToL1Message(_contractAddress: AztecAddress, recipient: Fr, content: Fr): void;
48
48
  traceUnencryptedLog(contractAddress: AztecAddress, log: Fr[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"side_effect_trace.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"side_effect_trace.d.ts","sourceRoot":"","sources":["../../src/public/side_effect_trace.ts"],"names":[],"mappings":"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"}