@aztec/simulator 0.55.1 → 0.56.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 (171) hide show
  1. package/dest/avm/avm_execution_environment.d.ts +0 -8
  2. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  3. package/dest/avm/avm_execution_environment.js +1 -19
  4. package/dest/avm/avm_gas.d.ts +2 -2
  5. package/dest/avm/avm_gas.d.ts.map +1 -1
  6. package/dest/avm/avm_gas.js +31 -115
  7. package/dest/avm/avm_machine_state.d.ts.map +1 -1
  8. package/dest/avm/avm_machine_state.js +6 -6
  9. package/dest/avm/avm_memory_types.d.ts +35 -7
  10. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  11. package/dest/avm/avm_memory_types.js +25 -11
  12. package/dest/avm/avm_simulator.d.ts.map +1 -1
  13. package/dest/avm/avm_simulator.js +5 -6
  14. package/dest/avm/bytecode_utils.d.ts +1 -2
  15. package/dest/avm/bytecode_utils.d.ts.map +1 -1
  16. package/dest/avm/bytecode_utils.js +3 -17
  17. package/dest/avm/fixtures/index.d.ts +4 -16
  18. package/dest/avm/fixtures/index.d.ts.map +1 -1
  19. package/dest/avm/fixtures/index.js +9 -25
  20. package/dest/avm/journal/index.d.ts +0 -1
  21. package/dest/avm/journal/index.d.ts.map +1 -1
  22. package/dest/avm/journal/index.js +1 -2
  23. package/dest/avm/journal/journal.d.ts +4 -4
  24. package/dest/avm/journal/journal.d.ts.map +1 -1
  25. package/dest/avm/journal/journal.js +14 -13
  26. package/dest/avm/opcodes/bitwise.d.ts +10 -4
  27. package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
  28. package/dest/avm/opcodes/bitwise.js +17 -11
  29. package/dest/avm/opcodes/commitment.js +2 -2
  30. package/dest/avm/opcodes/comparators.js +2 -2
  31. package/dest/avm/opcodes/conversion.d.ts +3 -2
  32. package/dest/avm/opcodes/conversion.d.ts.map +1 -1
  33. package/dest/avm/opcodes/conversion.js +18 -11
  34. package/dest/avm/opcodes/environment_getters.d.ts +27 -63
  35. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  36. package/dest/avm/opcodes/environment_getters.js +75 -80
  37. package/dest/avm/opcodes/hashing.d.ts +7 -5
  38. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  39. package/dest/avm/opcodes/hashing.js +40 -24
  40. package/dest/avm/opcodes/index.d.ts +3 -0
  41. package/dest/avm/opcodes/index.d.ts.map +1 -1
  42. package/dest/avm/opcodes/index.js +4 -1
  43. package/dest/avm/opcodes/instruction_impl.d.ts +0 -26
  44. package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
  45. package/dest/avm/opcodes/instruction_impl.js +1 -51
  46. package/dest/avm/opcodes/memory.d.ts +7 -2
  47. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  48. package/dest/avm/opcodes/memory.js +23 -6
  49. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
  50. package/dest/avm/opcodes/multi_scalar_mul.js +7 -6
  51. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  52. package/dest/avm/serialization/bytecode_serialization.js +5 -24
  53. package/dest/avm/serialization/instruction_serialization.d.ts +48 -60
  54. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  55. package/dest/avm/serialization/instruction_serialization.js +50 -63
  56. package/dest/avm/test_utils.d.ts +8 -8
  57. package/dest/avm/test_utils.d.ts.map +1 -1
  58. package/dest/avm/test_utils.js +15 -15
  59. package/dest/client/simulator.d.ts +1 -1
  60. package/dest/client/test_utils.d.ts.map +1 -1
  61. package/dest/client/test_utils.js +12 -6
  62. package/dest/client/unconstrained_execution.d.ts +2 -2
  63. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  64. package/dest/client/unconstrained_execution.js +3 -3
  65. package/dest/public/enqueued_call_simulator.d.ts +43 -0
  66. package/dest/public/enqueued_call_simulator.d.ts.map +1 -0
  67. package/dest/public/enqueued_call_simulator.js +155 -0
  68. package/dest/public/enqueued_calls_processor.d.ts +44 -0
  69. package/dest/public/enqueued_calls_processor.d.ts.map +1 -0
  70. package/dest/public/enqueued_calls_processor.js +218 -0
  71. package/dest/public/execution.d.ts +4 -9
  72. package/dest/public/execution.d.ts.map +1 -1
  73. package/dest/public/execution.js +5 -10
  74. package/dest/public/executor.d.ts +3 -5
  75. package/dest/public/executor.d.ts.map +1 -1
  76. package/dest/public/executor.js +5 -9
  77. package/dest/public/hints_builder.d.ts +4 -3
  78. package/dest/public/hints_builder.d.ts.map +1 -1
  79. package/dest/public/hints_builder.js +4 -4
  80. package/dest/public/index.d.ts +3 -2
  81. package/dest/public/index.d.ts.map +1 -1
  82. package/dest/public/index.js +3 -3
  83. package/dest/public/public_db_sources.d.ts +17 -24
  84. package/dest/public/public_db_sources.d.ts.map +1 -1
  85. package/dest/public/public_db_sources.js +58 -65
  86. package/dest/public/public_kernel.d.ts +3 -9
  87. package/dest/public/public_kernel.d.ts.map +1 -1
  88. package/dest/public/public_kernel.js +13 -40
  89. package/dest/public/public_kernel_circuit_simulator.d.ts +5 -11
  90. package/dest/public/public_kernel_circuit_simulator.d.ts.map +1 -1
  91. package/dest/public/public_kernel_tail_simulator.d.ts +19 -0
  92. package/dest/public/public_kernel_tail_simulator.d.ts.map +1 -0
  93. package/dest/public/public_kernel_tail_simulator.js +45 -0
  94. package/dest/public/public_processor.d.ts +8 -5
  95. package/dest/public/public_processor.d.ts.map +1 -1
  96. package/dest/public/public_processor.js +31 -48
  97. package/dest/public/public_processor_metrics.d.ts +3 -3
  98. package/dest/public/public_processor_metrics.d.ts.map +1 -1
  99. package/dest/public/public_processor_metrics.js +1 -1
  100. package/dest/public/side_effect_trace.d.ts.map +1 -1
  101. package/dest/public/side_effect_trace.js +4 -8
  102. package/package.json +9 -9
  103. package/src/avm/avm_execution_environment.ts +1 -21
  104. package/src/avm/avm_gas.ts +30 -114
  105. package/src/avm/avm_machine_state.ts +5 -5
  106. package/src/avm/avm_memory_types.ts +31 -9
  107. package/src/avm/avm_simulator.ts +4 -5
  108. package/src/avm/bytecode_utils.ts +2 -17
  109. package/src/avm/fixtures/index.ts +12 -44
  110. package/src/avm/journal/index.ts +0 -1
  111. package/src/avm/journal/journal.ts +13 -18
  112. package/src/avm/opcodes/bitwise.ts +14 -10
  113. package/src/avm/opcodes/commitment.ts +1 -1
  114. package/src/avm/opcodes/comparators.ts +2 -2
  115. package/src/avm/opcodes/conversion.ts +19 -10
  116. package/src/avm/opcodes/environment_getters.ts +72 -99
  117. package/src/avm/opcodes/hashing.ts +47 -22
  118. package/src/avm/opcodes/index.ts +3 -0
  119. package/src/avm/opcodes/instruction_impl.ts +0 -62
  120. package/src/avm/opcodes/memory.ts +20 -6
  121. package/src/avm/opcodes/multi_scalar_mul.ts +6 -6
  122. package/src/avm/serialization/bytecode_serialization.ts +11 -33
  123. package/src/avm/serialization/instruction_serialization.ts +5 -18
  124. package/src/avm/test_utils.ts +20 -16
  125. package/src/client/test_utils.ts +36 -9
  126. package/src/client/unconstrained_execution.ts +3 -8
  127. package/src/public/enqueued_call_simulator.ts +336 -0
  128. package/src/public/enqueued_calls_processor.ts +388 -0
  129. package/src/public/execution.ts +5 -12
  130. package/src/public/executor.ts +4 -12
  131. package/src/public/hints_builder.ts +14 -12
  132. package/src/public/index.ts +3 -2
  133. package/src/public/public_db_sources.ts +62 -67
  134. package/src/public/public_kernel.ts +15 -49
  135. package/src/public/public_kernel_circuit_simulator.ts +6 -10
  136. package/src/public/public_kernel_tail_simulator.ts +106 -0
  137. package/src/public/public_processor.ts +61 -86
  138. package/src/public/public_processor_metrics.ts +3 -3
  139. package/src/public/side_effect_trace.ts +5 -12
  140. package/dest/avm/journal/host_storage.d.ts +0 -13
  141. package/dest/avm/journal/host_storage.d.ts.map +0 -1
  142. package/dest/avm/journal/host_storage.js +0 -13
  143. package/dest/avm/opcodes/context_getters.d.ts +0 -15
  144. package/dest/avm/opcodes/context_getters.d.ts.map +0 -1
  145. package/dest/avm/opcodes/context_getters.js +0 -19
  146. package/dest/public/abstract_phase_manager.d.ts +0 -93
  147. package/dest/public/abstract_phase_manager.d.ts.map +0 -1
  148. package/dest/public/abstract_phase_manager.js +0 -285
  149. package/dest/public/app_logic_phase_manager.d.ts +0 -25
  150. package/dest/public/app_logic_phase_manager.d.ts.map +0 -1
  151. package/dest/public/app_logic_phase_manager.js +0 -52
  152. package/dest/public/phase_manager_factory.d.ts +0 -18
  153. package/dest/public/phase_manager_factory.d.ts.map +0 -1
  154. package/dest/public/phase_manager_factory.js +0 -56
  155. package/dest/public/setup_phase_manager.d.ts +0 -25
  156. package/dest/public/setup_phase_manager.d.ts.map +0 -1
  157. package/dest/public/setup_phase_manager.js +0 -39
  158. package/dest/public/tail_phase_manager.d.ts +0 -23
  159. package/dest/public/tail_phase_manager.d.ts.map +0 -1
  160. package/dest/public/tail_phase_manager.js +0 -50
  161. package/dest/public/teardown_phase_manager.d.ts +0 -27
  162. package/dest/public/teardown_phase_manager.d.ts.map +0 -1
  163. package/dest/public/teardown_phase_manager.js +0 -56
  164. package/src/avm/journal/host_storage.ts +0 -14
  165. package/src/avm/opcodes/context_getters.ts +0 -23
  166. package/src/public/abstract_phase_manager.ts +0 -522
  167. package/src/public/app_logic_phase_manager.ts +0 -81
  168. package/src/public/phase_manager_factory.ts +0 -126
  169. package/src/public/setup_phase_manager.ts +0 -61
  170. package/src/public/tail_phase_manager.ts +0 -127
  171. package/src/public/teardown_phase_manager.ts +0 -86
@@ -3,9 +3,6 @@ import {
3
3
  NestedProcessReturnValues,
4
4
  type ProcessedTx,
5
5
  type ProcessedTxHandler,
6
- PublicKernelType,
7
- type PublicProvingRequest,
8
- type SimulationError,
9
6
  Tx,
10
7
  type TxValidator,
11
8
  makeProcessedTx,
@@ -17,7 +14,6 @@ import {
17
14
  FEE_JUICE_ADDRESS,
18
15
  type GlobalVariables,
19
16
  type Header,
20
- type KernelCircuitPublicInputs,
21
17
  MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
22
18
  PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
23
19
  PublicDataUpdateRequest,
@@ -25,22 +21,16 @@ import {
25
21
  import { times } from '@aztec/foundation/collection';
26
22
  import { createDebugLogger } from '@aztec/foundation/log';
27
23
  import { Timer } from '@aztec/foundation/timer';
28
- import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
29
24
  import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
30
- import {
31
- PublicExecutor,
32
- type PublicStateDB,
33
- type SimulationProvider,
34
- computeFeePayerBalanceLeafSlot,
35
- computeFeePayerBalanceStorageSlot,
36
- } from '@aztec/simulator';
37
25
  import { Attributes, type TelemetryClient, type Tracer, trackSpan } from '@aztec/telemetry-client';
38
26
  import { type ContractDataSource } from '@aztec/types/contracts';
39
27
  import { type MerkleTreeOperations } from '@aztec/world-state';
40
28
 
41
- import { type AbstractPhaseManager } from './abstract_phase_manager.js';
42
- import { PhaseManagerFactory } from './phase_manager_factory.js';
43
- import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from './public_db_sources.js';
29
+ import { type SimulationProvider } from '../providers/index.js';
30
+ import { EnqueuedCallsProcessor } from './enqueued_calls_processor.js';
31
+ import { PublicExecutor } from './executor.js';
32
+ import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from './fee_payment.js';
33
+ import { WorldStateDB } from './public_db_sources.js';
44
34
  import { RealPublicKernelCircuitSimulator } from './public_kernel.js';
45
35
  import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
46
36
  import { PublicProcessorMetrics } from './public_processor_metrics.js';
@@ -65,25 +55,18 @@ export class PublicProcessorFactory {
65
55
  public create(maybeHistoricalHeader: Header | undefined, globalVariables: GlobalVariables): PublicProcessor {
66
56
  const { merkleTree, telemetryClient } = this;
67
57
  const historicalHeader = maybeHistoricalHeader ?? merkleTree.getInitialHeader();
68
- const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
69
58
 
70
- const worldStatePublicDB = new WorldStatePublicDB(merkleTree);
71
- const worldStateDB = new WorldStateDB(merkleTree);
72
- const publicExecutor = new PublicExecutor(
73
- worldStatePublicDB,
74
- publicContractsDB,
75
- worldStateDB,
76
- historicalHeader,
77
- telemetryClient,
78
- );
79
- return new PublicProcessor(
59
+ const worldStateDB = new WorldStateDB(merkleTree, this.contractDataSource);
60
+ const publicExecutor = new PublicExecutor(worldStateDB, historicalHeader, telemetryClient);
61
+ const publicKernelSimulator = new RealPublicKernelCircuitSimulator(this.simulator);
62
+
63
+ return PublicProcessor.create(
80
64
  merkleTree,
81
65
  publicExecutor,
82
- new RealPublicKernelCircuitSimulator(this.simulator),
66
+ publicKernelSimulator,
83
67
  globalVariables,
84
68
  historicalHeader,
85
- publicContractsDB,
86
- worldStatePublicDB,
69
+ worldStateDB,
87
70
  this.telemetryClient,
88
71
  );
89
72
  }
@@ -101,14 +84,44 @@ export class PublicProcessor {
101
84
  protected publicKernel: PublicKernelCircuitSimulator,
102
85
  protected globalVariables: GlobalVariables,
103
86
  protected historicalHeader: Header,
104
- protected publicContractsDB: ContractsDataSourcePublicDB,
105
- protected publicStateDB: PublicStateDB,
87
+ protected worldStateDB: WorldStateDB,
88
+ protected enqueuedCallsProcessor: EnqueuedCallsProcessor,
106
89
  telemetryClient: TelemetryClient,
107
90
  private log = createDebugLogger('aztec:sequencer:public-processor'),
108
91
  ) {
109
92
  this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
110
93
  }
111
94
 
95
+ static create(
96
+ db: MerkleTreeOperations,
97
+ publicExecutor: PublicExecutor,
98
+ publicKernelSimulator: PublicKernelCircuitSimulator,
99
+ globalVariables: GlobalVariables,
100
+ historicalHeader: Header,
101
+ worldStateDB: WorldStateDB,
102
+ telemetryClient: TelemetryClient,
103
+ ) {
104
+ const enqueuedCallsProcessor = EnqueuedCallsProcessor.create(
105
+ db,
106
+ publicExecutor,
107
+ publicKernelSimulator,
108
+ globalVariables,
109
+ historicalHeader,
110
+ worldStateDB,
111
+ );
112
+
113
+ return new PublicProcessor(
114
+ db,
115
+ publicExecutor,
116
+ publicKernelSimulator,
117
+ globalVariables,
118
+ historicalHeader,
119
+ worldStateDB,
120
+ enqueuedCallsProcessor,
121
+ telemetryClient,
122
+ );
123
+ }
124
+
112
125
  get tracer(): Tracer {
113
126
  return this.metrics.tracer;
114
127
  }
@@ -151,7 +164,7 @@ export class PublicProcessor {
151
164
  processedTx.finalPublicDataUpdateRequests = await this.createFinalDataUpdateRequests(processedTx);
152
165
 
153
166
  // Commit the state updates from this transaction
154
- await this.publicStateDB.commit();
167
+ await this.worldStateDB.commit();
155
168
  validateProcessedTx(processedTx);
156
169
 
157
170
  // Re-validate the transaction
@@ -217,14 +230,14 @@ export class PublicProcessor {
217
230
  const balance =
218
231
  existingBalanceWriteIndex > -1
219
232
  ? finalPublicDataUpdateRequests[existingBalanceWriteIndex].newValue
220
- : await this.publicStateDB.storageRead(feeJuiceAddress, balanceSlot);
233
+ : await this.worldStateDB.storageRead(feeJuiceAddress, balanceSlot);
221
234
 
222
235
  if (balance.lt(txFee)) {
223
236
  throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance} needs ${txFee})`);
224
237
  }
225
238
 
226
239
  const updatedBalance = balance.sub(txFee);
227
- await this.publicStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
240
+ await this.worldStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
228
241
 
229
242
  finalPublicDataUpdateRequests[
230
243
  existingBalanceWriteIndex > -1 ? existingBalanceWriteIndex : MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
@@ -238,69 +251,31 @@ export class PublicProcessor {
238
251
  }))
239
252
  private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
240
253
  const timer = new Timer();
241
- let returnValues: NestedProcessReturnValues[] = [];
242
- const publicProvingRequests: PublicProvingRequest[] = [];
243
- let phase: AbstractPhaseManager | undefined = PhaseManagerFactory.phaseFromTx(
244
- tx,
245
- this.db,
246
- this.publicExecutor,
247
- this.publicKernel,
248
- this.globalVariables,
249
- this.historicalHeader,
250
- this.publicContractsDB,
251
- this.publicStateDB,
252
- );
253
- this.log.debug(`Beginning processing in phase ${phase?.phase} for tx ${tx.getTxHash()}`);
254
- let publicKernelPublicInput = tx.data.toPublicKernelCircuitPublicInputs();
255
- let lastKernelArtifact: ProtocolArtifact = 'PrivateKernelTailToPublicArtifact'; // All txs with public calls must carry tail to public proofs
256
- let finalKernelOutput: KernelCircuitPublicInputs | undefined;
257
- let revertReason: SimulationError | undefined;
258
- const gasUsed: ProcessedTx['gasUsed'] = {};
259
- let phaseCount = 0;
260
- while (phase) {
261
- phaseCount++;
262
- const phaseTimer = new Timer();
263
- const output = await phase.handle(tx, publicKernelPublicInput, lastKernelArtifact);
264
-
265
- if (output.revertReason) {
266
- this.metrics.recordRevertedPhase(phase.phase);
267
- } else {
268
- this.metrics.recordPhaseDuration(phase.phase, phaseTimer.ms());
269
- }
270
254
 
271
- gasUsed[phase.phase] = output.gasUsed;
272
- if (phase.phase === PublicKernelType.APP_LOGIC) {
273
- returnValues = output.returnValues;
274
- }
275
- publicProvingRequests.push(...output.publicProvingRequests);
276
- publicKernelPublicInput = output.publicKernelOutput;
277
- lastKernelArtifact = output.lastKernelArtifact;
278
- finalKernelOutput = output.finalKernelOutput;
279
- revertReason ??= output.revertReason;
280
- phase = PhaseManagerFactory.phaseFromOutput(
281
- publicKernelPublicInput,
282
- phase,
283
- this.db,
284
- this.publicExecutor,
285
- this.publicKernel,
286
- this.globalVariables,
287
- this.historicalHeader,
288
- this.publicContractsDB,
289
- this.publicStateDB,
290
- );
291
- }
255
+ const { tailKernelOutput, returnValues, revertReason, provingRequests, gasUsed, processedPhases } =
256
+ await this.enqueuedCallsProcessor.process(tx);
292
257
 
293
- if (!finalKernelOutput) {
258
+ if (!tailKernelOutput) {
294
259
  this.metrics.recordFailedTx();
295
260
  throw new Error('Final public kernel was not executed.');
296
261
  }
297
262
 
263
+ processedPhases.forEach(phase => {
264
+ if (phase.revertReason) {
265
+ this.metrics.recordRevertedPhase(phase.phase);
266
+ } else {
267
+ this.metrics.recordPhaseDuration(phase.phase, phase.durationMs);
268
+ }
269
+ });
270
+
298
271
  this.metrics.recordClassRegistration(
299
272
  ...ContractClassRegisteredEvent.fromLogs(tx.unencryptedLogs.unrollLogs(), ClassRegistererAddress),
300
273
  );
301
274
 
275
+ const phaseCount = processedPhases.length;
302
276
  this.metrics.recordTx(phaseCount, timer.ms());
303
- const processedTx = makeProcessedTx(tx, finalKernelOutput, publicProvingRequests, revertReason, gasUsed);
277
+
278
+ const processedTx = makeProcessedTx(tx, tailKernelOutput, provingRequests, revertReason, gasUsed);
304
279
  return [processedTx, returnValues];
305
280
  }
306
281
  }
@@ -1,4 +1,4 @@
1
- import { type PublicKernelType } from '@aztec/circuit-types';
1
+ import { type PublicKernelPhase } from '@aztec/circuit-types';
2
2
  import { type ContractClassRegisteredEvent } from '@aztec/circuits.js';
3
3
  import {
4
4
  Attributes,
@@ -56,7 +56,7 @@ export class PublicProcessorMetrics {
56
56
  });
57
57
  }
58
58
 
59
- recordPhaseDuration(phaseName: PublicKernelType, durationMs: number) {
59
+ recordPhaseDuration(phaseName: PublicKernelPhase, durationMs: number) {
60
60
  this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: true });
61
61
  this.phaseDuration.record(Math.ceil(durationMs), { [Attributes.TX_PHASE_NAME]: phaseName });
62
62
  }
@@ -75,7 +75,7 @@ export class PublicProcessorMetrics {
75
75
  });
76
76
  }
77
77
 
78
- recordRevertedPhase(phaseName: PublicKernelType) {
78
+ recordRevertedPhase(phaseName: PublicKernelPhase) {
79
79
  this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
80
80
  }
81
81
 
@@ -14,7 +14,7 @@ import {
14
14
  LogHash,
15
15
  NoteHash,
16
16
  Nullifier,
17
- type PublicCallRequest,
17
+ type PublicInnerCallRequest,
18
18
  ReadRequest,
19
19
  TreeLeafReadRequest,
20
20
  } from '@aztec/circuits.js';
@@ -53,7 +53,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
53
53
  private allUnencryptedLogs: UnencryptedL2Log[] = [];
54
54
  private unencryptedLogsHashes: LogHash[] = [];
55
55
 
56
- private publicCallRequests: PublicCallRequest[] = [];
56
+ private publicCallRequests: PublicInnerCallRequest[] = [];
57
57
 
58
58
  private gotContractInstances: ContractInstanceWithAddress[] = [];
59
59
 
@@ -183,10 +183,8 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
183
183
  const basicLogHash = Fr.fromBuffer(ulog.hash());
184
184
  this.unencryptedLogs.push(ulog);
185
185
  this.allUnencryptedLogs.push(ulog);
186
- // We want the length of the buffer output from function_l2_logs -> toBuffer to equal the stored log length in the kernels.
187
- // The kernels store the length of the processed log as 4 bytes; thus for this length value to match the log length stored in the kernels,
188
- // we need to add four to the length here.
189
- // https://github.com/AztecProtocol/aztec-packages/issues/6578#issuecomment-2125003435
186
+ // This length is for charging DA and is checked on-chain - has to be length of log preimage + 4 bytes.
187
+ // The .length call also has a +4 but that is unrelated
190
188
  this.unencryptedLogsHashes.push(new LogHash(basicLogHash, this.sideEffectCounter, new Fr(ulog.length + 4)));
191
189
  this.logger.debug(`NEW_UNENCRYPTED_LOG cnt: ${this.sideEffectCounter}`);
192
190
  this.incrementSideEffectCounter();
@@ -331,10 +329,5 @@ function createPublicExecutionRequest(avmEnvironment: AvmExecutionEnvironment):
331
329
  isDelegateCall: avmEnvironment.isDelegateCall,
332
330
  isStaticCall: avmEnvironment.isStaticCall,
333
331
  });
334
- return new PublicExecutionRequest(
335
- avmEnvironment.address,
336
- callContext,
337
- // execution request does not contain AvmContextInputs prefix
338
- avmEnvironment.getCalldataWithoutPrefix(),
339
- );
332
+ return new PublicExecutionRequest(avmEnvironment.address, callContext, avmEnvironment.calldata);
340
333
  }
@@ -1,13 +0,0 @@
1
- import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db_interfaces.js';
2
- /**
3
- * Host storage
4
- *
5
- * A wrapper around the node dbs
6
- */
7
- export declare class HostStorage {
8
- readonly publicStateDb: PublicStateDB;
9
- readonly contractsDb: PublicContractsDB;
10
- readonly commitmentsDb: CommitmentsDB;
11
- constructor(publicStateDb: PublicStateDB, contractsDb: PublicContractsDB, commitmentsDb: CommitmentsDB);
12
- }
13
- //# sourceMappingURL=host_storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"host_storage.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/host_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE/G;;;;GAIG;AACH,qBAAa,WAAW;aAEJ,aAAa,EAAE,aAAa;aAC5B,WAAW,EAAE,iBAAiB;aAC9B,aAAa,EAAE,aAAa;gBAF5B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EAAE,aAAa;CAE/C"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Host storage
3
- *
4
- * A wrapper around the node dbs
5
- */
6
- export class HostStorage {
7
- constructor(publicStateDb, contractsDb, commitmentsDb) {
8
- this.publicStateDb = publicStateDb;
9
- this.contractsDb = contractsDb;
10
- this.commitmentsDb = commitmentsDb;
11
- }
12
- }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdF9zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F2bS9qb3VybmFsL2hvc3Rfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDa0IsYUFBNEIsRUFDNUIsV0FBOEIsRUFDOUIsYUFBNEI7UUFGNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQzNDLENBQUM7Q0FDTCJ9
@@ -1,15 +0,0 @@
1
- import type { AvmContext } from '../avm_context.js';
2
- import { type MemoryValue } from '../avm_memory_types.js';
3
- import { Opcode } from '../serialization/instruction_serialization.js';
4
- import { GetterInstruction } from './instruction_impl.js';
5
- export declare class L2GasLeft extends GetterInstruction {
6
- static type: string;
7
- static readonly opcode: Opcode;
8
- protected getValue(context: AvmContext): MemoryValue;
9
- }
10
- export declare class DAGasLeft extends GetterInstruction {
11
- static type: string;
12
- static readonly opcode: Opcode;
13
- protected getValue(context: AvmContext): MemoryValue;
14
- }
15
- //# sourceMappingURL=context_getters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context_getters.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/context_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAGlD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;CAGrD;AAED,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAElD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;CAGrD"}
@@ -1,19 +0,0 @@
1
- import { Field } from '../avm_memory_types.js';
2
- import { Opcode } from '../serialization/instruction_serialization.js';
3
- import { GetterInstruction } from './instruction_impl.js';
4
- export class L2GasLeft extends GetterInstruction {
5
- // TODO(@spalladino) Protocol specs specifies that the value should be an Uint32, not a Field.
6
- getValue(context) {
7
- return new Field(context.machineState.l2GasLeft);
8
- }
9
- }
10
- L2GasLeft.type = 'L2GASLEFT';
11
- L2GasLeft.opcode = Opcode.L2GASLEFT;
12
- export class DAGasLeft extends GetterInstruction {
13
- getValue(context) {
14
- return new Field(context.machineState.daGasLeft);
15
- }
16
- }
17
- DAGasLeft.type = 'DAGASLEFT';
18
- DAGasLeft.opcode = Opcode.DAGASLEFT;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF9nZXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F2bS9vcGNvZGVzL2NvbnRleHRfZ2V0dGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLE9BQU8sU0FBVSxTQUFRLGlCQUFpQjtJQUk5Qyw4RkFBOEY7SUFDcEYsUUFBUSxDQUFDLE9BQW1CO1FBQ3BDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDOztBQU5NLGNBQUksR0FBVyxXQUFXLENBQUM7QUFDbEIsZ0JBQU0sR0FBVyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBUXBELE1BQU0sT0FBTyxTQUFVLFNBQVEsaUJBQWlCO0lBSXBDLFFBQVEsQ0FBQyxPQUFtQjtRQUNwQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7QUFMTSxjQUFJLEdBQVcsV0FBVyxDQUFDO0FBQ2xCLGdCQUFNLEdBQVcsTUFBTSxDQUFDLFNBQVMsQ0FBQyJ9
@@ -1,93 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { type AvmProvingRequest, type NestedProcessReturnValues, type PublicExecutionRequest, type PublicKernelNonTailRequest, PublicKernelType, type PublicProvingRequest, type SimulationError, type Tx, type UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
3
- import { type AvmExecutionHints, Fr, Gas, type GlobalVariables, type Header, type KernelCircuitPublicInputs, PublicCallData, PublicCallStackItem, PublicKernelCircuitPrivateInputs, type PublicKernelCircuitPublicInputs, PublicKernelData } from '@aztec/circuits.js';
4
- import { type DebugLogger } from '@aztec/foundation/log';
5
- import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types';
6
- import { type PublicExecutionResult, type PublicExecutor } from '@aztec/simulator';
7
- import { type MerkleTreeOperations } from '@aztec/world-state';
8
- import { HintsBuilder } from './hints_builder.js';
9
- import { type PublicKernelCircuitSimulator } from './public_kernel_circuit_simulator.js';
10
- export declare const PhaseIsRevertible: Record<PublicKernelType, boolean>;
11
- export type PublicProvingInformation = {
12
- functionName: string;
13
- calldata: Fr[];
14
- bytecode: Buffer;
15
- inputs: PublicKernelCircuitPrivateInputs;
16
- avmHints: AvmExecutionHints;
17
- };
18
- export declare function makeAvmProvingRequest(info: PublicProvingInformation, kernelType: PublicKernelNonTailRequest['type']): AvmProvingRequest;
19
- export type TxPublicCallsResult = {
20
- /** Inputs to be used for proving */
21
- publicProvingInformation: PublicProvingInformation[];
22
- /** The public kernel output at the end of the Tx */
23
- kernelOutput: PublicKernelCircuitPublicInputs;
24
- /** The last circuit ran by this phase */
25
- lastKernelArtifact: ProtocolArtifact;
26
- /** Unencrypted logs generated during the execution of this Tx */
27
- newUnencryptedLogs: UnencryptedFunctionL2Logs[];
28
- /** Revert reason, if any */
29
- revertReason?: SimulationError;
30
- /** Return values of simulating complete callstack */
31
- returnValues: NestedProcessReturnValues[];
32
- /** Gas used during the execution this Tx */
33
- gasUsed?: Gas;
34
- };
35
- export type PhaseResult = {
36
- /** The collection of public proving requests */
37
- publicProvingRequests: PublicProvingRequest[];
38
- /** The output of the public kernel circuit simulation for this phase */
39
- publicKernelOutput: PublicKernelCircuitPublicInputs;
40
- /** The last circuit ran by this phase */
41
- lastKernelArtifact: ProtocolArtifact;
42
- /** The final output of the public kernel circuit for this phase */
43
- finalKernelOutput?: KernelCircuitPublicInputs;
44
- /** Revert reason, if any */
45
- revertReason?: SimulationError;
46
- /** Return values of simulating complete callstack */
47
- returnValues: NestedProcessReturnValues[];
48
- /** Gas used during the execution this phase */
49
- gasUsed?: Gas;
50
- };
51
- export declare abstract class AbstractPhaseManager {
52
- protected db: MerkleTreeOperations;
53
- protected publicExecutor: PublicExecutor;
54
- protected publicKernel: PublicKernelCircuitSimulator;
55
- protected globalVariables: GlobalVariables;
56
- protected historicalHeader: Header;
57
- phase: PublicKernelType;
58
- protected hintsBuilder: HintsBuilder;
59
- protected log: DebugLogger;
60
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, globalVariables: GlobalVariables, historicalHeader: Header, phase: PublicKernelType);
61
- /**
62
- * @param tx - the tx to be processed
63
- * @param publicKernelPublicInputs - the output of the public kernel circuit for the previous phase
64
- */
65
- abstract handle(tx: Tx, publicKernelPublicInputs: PublicKernelCircuitPublicInputs, previousKernelArtifact: ProtocolArtifact): Promise<PhaseResult>;
66
- static extractEnqueuedPublicCallsByPhase(tx: Tx): Record<PublicKernelType, PublicExecutionRequest[]>;
67
- protected extractEnqueuedPublicCalls(tx: Tx): PublicExecutionRequest[];
68
- protected processEnqueuedPublicCalls(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs, previousKernelArtifact: ProtocolArtifact): Promise<TxPublicCallsResult>;
69
- /** Returns all pending private and public nullifiers. */
70
- private getSiloedPendingNullifiers;
71
- protected getAvailableGas(tx: Tx, previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Gas;
72
- protected getTransactionFee(_tx: Tx, _previousPublicKernelOutput: PublicKernelCircuitPublicInputs): Fr;
73
- private runKernelCircuit;
74
- protected getPreviousKernelData(previousOutput: PublicKernelCircuitPublicInputs, previousCircuit: ProtocolArtifact): PublicKernelData;
75
- protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
76
- /**
77
- * Looks at the side effects of a transaction and returns the highest counter
78
- * @param tx - A transaction
79
- * @returns The highest side effect counter in the transaction so far
80
- */
81
- static getMaxSideEffectCounter(inputs: PublicKernelCircuitPublicInputs): number;
82
- protected getBytecodeHash(_result: PublicExecutionResult): Promise<Fr>;
83
- /**
84
- * Calculates the PublicCircuitOutput for this execution result along with its proof,
85
- * and assembles a PublicCallData object from it.
86
- * @param result - The execution result.
87
- * @param preimages - The preimages of the callstack items.
88
- * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request.
89
- * @returns A corresponding PublicCallData object.
90
- */
91
- protected getPublicCallData(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallData>;
92
- }
93
- //# sourceMappingURL=abstract_phase_manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract_phase_manager.d.ts","sourceRoot":"","sources":["../../src/public/abstract_phase_manager.ts"],"names":[],"mappings":"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"}