@aztec/simulator 0.47.1 → 0.49.2

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 (103) hide show
  1. package/dest/acvm/acvm.d.ts +2 -2
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/acvm.js +12 -7
  4. package/dest/acvm/oracle/oracle.d.ts +3 -3
  5. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/oracle.js +8 -9
  7. package/dest/acvm/oracle/typed_oracle.d.ts +5 -5
  8. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  9. package/dest/acvm/oracle/typed_oracle.js +6 -6
  10. package/dest/avm/avm_gas.d.ts +1 -0
  11. package/dest/avm/avm_gas.d.ts.map +1 -1
  12. package/dest/avm/avm_gas.js +142 -79
  13. package/dest/avm/fixtures/index.d.ts.map +1 -1
  14. package/dest/avm/fixtures/index.js +2 -2
  15. package/dest/avm/opcodes/accrued_substate.js +2 -2
  16. package/dest/avm/opcodes/commitment.js +4 -4
  17. package/dest/avm/opcodes/conversion.js +2 -2
  18. package/dest/avm/opcodes/external_calls.js +4 -4
  19. package/dest/avm/opcodes/instruction.d.ts +2 -1
  20. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  21. package/dest/avm/opcodes/instruction.js +8 -5
  22. package/dest/avm/opcodes/memory.js +2 -2
  23. package/dest/avm/opcodes/storage.js +3 -3
  24. package/dest/avm/serialization/instruction_serialization.js +2 -2
  25. package/dest/client/client_execution_context.d.ts +8 -8
  26. package/dest/client/client_execution_context.d.ts.map +1 -1
  27. package/dest/client/client_execution_context.js +22 -23
  28. package/dest/client/db_oracle.d.ts +4 -3
  29. package/dest/client/db_oracle.d.ts.map +1 -1
  30. package/dest/client/execution_note_cache.d.ts +17 -13
  31. package/dest/client/execution_note_cache.d.ts.map +1 -1
  32. package/dest/client/execution_note_cache.js +65 -26
  33. package/dest/client/execution_result.d.ts +3 -2
  34. package/dest/client/execution_result.d.ts.map +1 -1
  35. package/dest/client/execution_result.js +20 -9
  36. package/dest/client/private_execution.js +3 -3
  37. package/dest/client/simulator.d.ts +7 -6
  38. package/dest/client/simulator.d.ts.map +1 -1
  39. package/dest/client/simulator.js +14 -12
  40. package/dest/client/test_utils.d.ts +9 -0
  41. package/dest/client/test_utils.d.ts.map +1 -0
  42. package/dest/client/test_utils.js +21 -0
  43. package/dest/client/view_data_oracle.d.ts +2 -1
  44. package/dest/client/view_data_oracle.d.ts.map +1 -1
  45. package/dest/client/view_data_oracle.js +4 -3
  46. package/dest/index.d.ts +0 -1
  47. package/dest/index.d.ts.map +1 -1
  48. package/dest/index.js +1 -2
  49. package/dest/providers/acvm_native.js +2 -2
  50. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  51. package/dest/public/abstract_phase_manager.js +3 -3
  52. package/dest/public/executor.d.ts +4 -1
  53. package/dest/public/executor.d.ts.map +1 -1
  54. package/dest/public/executor.js +10 -2
  55. package/dest/public/executor_metrics.d.ts +10 -0
  56. package/dest/public/executor_metrics.d.ts.map +1 -0
  57. package/dest/public/executor_metrics.js +32 -0
  58. package/dest/public/fee_payment.d.ts +2 -2
  59. package/dest/public/fee_payment.d.ts.map +1 -1
  60. package/dest/public/fee_payment.js +9 -10
  61. package/dest/public/hints_builder.d.ts.map +1 -1
  62. package/dest/public/hints_builder.js +1 -1
  63. package/dest/public/public_processor.d.ts +6 -5
  64. package/dest/public/public_processor.d.ts.map +1 -1
  65. package/dest/public/public_processor.js +38 -18
  66. package/dest/public/public_processor_metrics.d.ts +19 -0
  67. package/dest/public/public_processor_metrics.d.ts.map +1 -0
  68. package/dest/public/public_processor_metrics.js +59 -0
  69. package/package.json +9 -9
  70. package/src/acvm/acvm.ts +14 -5
  71. package/src/acvm/oracle/oracle.ts +8 -23
  72. package/src/acvm/oracle/typed_oracle.ts +8 -21
  73. package/src/avm/avm_gas.ts +145 -79
  74. package/src/avm/fixtures/index.ts +1 -0
  75. package/src/avm/opcodes/accrued_substate.ts +1 -1
  76. package/src/avm/opcodes/commitment.ts +3 -3
  77. package/src/avm/opcodes/conversion.ts +1 -1
  78. package/src/avm/opcodes/external_calls.ts +3 -3
  79. package/src/avm/opcodes/instruction.ts +7 -4
  80. package/src/avm/opcodes/memory.ts +1 -1
  81. package/src/avm/opcodes/storage.ts +2 -2
  82. package/src/avm/serialization/instruction_serialization.ts +1 -1
  83. package/src/client/client_execution_context.ts +23 -20
  84. package/src/client/db_oracle.ts +9 -3
  85. package/src/client/execution_note_cache.ts +76 -25
  86. package/src/client/execution_result.ts +29 -9
  87. package/src/client/private_execution.ts +2 -2
  88. package/src/client/simulator.ts +18 -14
  89. package/src/client/test_utils.ts +30 -0
  90. package/src/client/view_data_oracle.ts +2 -1
  91. package/src/index.ts +0 -1
  92. package/src/providers/acvm_native.ts +1 -1
  93. package/src/public/abstract_phase_manager.ts +1 -2
  94. package/src/public/executor.ts +14 -1
  95. package/src/public/executor_metrics.ts +48 -0
  96. package/src/public/fee_payment.ts +8 -10
  97. package/src/public/hints_builder.ts +2 -2
  98. package/src/public/public_processor.ts +52 -20
  99. package/src/public/public_processor_metrics.ts +92 -0
  100. package/dest/utils.d.ts +0 -12
  101. package/dest/utils.d.ts.map +0 -1
  102. package/dest/utils.js +0 -11
  103. package/src/utils.ts +0 -18
@@ -1,13 +1,16 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { NestedProcessReturnValues, PublicKernelType, Tx, makeProcessedTx, validateProcessedTx, } from '@aztec/circuit-types';
3
- import { AztecAddress, GAS_TOKEN_ADDRESS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataUpdateRequest, } from '@aztec/circuits.js';
3
+ import { AztecAddress, ContractClassRegisteredEvent, FEE_JUICE_ADDRESS, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, PublicDataUpdateRequest, } from '@aztec/circuits.js';
4
4
  import { times } from '@aztec/foundation/collection';
5
5
  import { createDebugLogger } from '@aztec/foundation/log';
6
+ import { Timer } from '@aztec/foundation/timer';
7
+ import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer';
6
8
  import { PublicExecutor, computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot, } from '@aztec/simulator';
7
9
  import { Attributes, trackSpan } from '@aztec/telemetry-client';
8
10
  import { PhaseManagerFactory } from './phase_manager_factory.js';
9
11
  import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from './public_db_sources.js';
10
12
  import { RealPublicKernelCircuitSimulator } from './public_kernel.js';
13
+ import { PublicProcessorMetrics } from './public_processor_metrics.js';
11
14
  /**
12
15
  * Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
13
16
  */
@@ -22,16 +25,16 @@ export class PublicProcessorFactory {
22
25
  * Creates a new instance of a PublicProcessor.
23
26
  * @param historicalHeader - The header of a block previous to the one in which the tx is included.
24
27
  * @param globalVariables - The global variables for the block being processed.
25
- * @param newContracts - Provides access to contract bytecode for public executions.
26
28
  * @returns A new instance of a PublicProcessor.
27
29
  */
28
- create(historicalHeader, globalVariables) {
29
- historicalHeader = historicalHeader ?? this.merkleTree.getInitialHeader();
30
+ create(maybeHistoricalHeader, globalVariables) {
31
+ const { merkleTree, telemetryClient } = this;
32
+ const historicalHeader = maybeHistoricalHeader ?? merkleTree.getInitialHeader();
30
33
  const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
31
- const worldStatePublicDB = new WorldStatePublicDB(this.merkleTree);
32
- const worldStateDB = new WorldStateDB(this.merkleTree);
33
- const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader);
34
- return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(this.simulator), globalVariables, historicalHeader, publicContractsDB, worldStatePublicDB, this.telemetryClient);
34
+ const worldStatePublicDB = new WorldStatePublicDB(merkleTree);
35
+ const worldStateDB = new WorldStateDB(merkleTree);
36
+ const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader, telemetryClient);
37
+ return new PublicProcessor(merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(this.simulator), globalVariables, historicalHeader, publicContractsDB, worldStatePublicDB, this.telemetryClient);
35
38
  }
36
39
  }
37
40
  /**
@@ -52,14 +55,18 @@ let PublicProcessor = (() => {
52
55
  this.publicContractsDB = publicContractsDB;
53
56
  this.publicStateDB = publicStateDB;
54
57
  this.log = log;
55
- this.tracer = telemetryClient.getTracer('PublicProcessor');
58
+ this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
59
+ }
60
+ get tracer() {
61
+ return this.metrics.tracer;
56
62
  }
57
63
  /**
58
64
  * Run each tx through the public circuit and the public kernel circuit if needed.
59
65
  * @param txs - Txs to process.
66
+ * @param processedTxHandler - Handler for processed txs in the context of block building or proving.
60
67
  * @returns The list of processed txs with their circuit simulation outputs.
61
68
  */
62
- async process(txs, maxTransactions = txs.length, blockProver, txValidator) {
69
+ async process(txs, maxTransactions = txs.length, processedTxHandler, txValidator) {
63
70
  // The processor modifies the tx objects in place, so we need to clone them.
64
71
  txs = txs.map(tx => Tx.clone(tx));
65
72
  const result = [];
@@ -96,9 +103,9 @@ let PublicProcessor = (() => {
96
103
  throw new Error(`Transaction ${invalid[0].hash} invalid after processing public functions`);
97
104
  }
98
105
  }
99
- // if we were given a prover then send the transaction to it for proving
100
- if (blockProver) {
101
- await blockProver.addNewTx(processedTx);
106
+ // if we were given a handler then send the transaction to it for block building or proving
107
+ if (processedTxHandler) {
108
+ await processedTxHandler.addNewTx(processedTx);
102
109
  }
103
110
  result.push(processedTx);
104
111
  returns = returns.concat(returnValues ?? []);
@@ -130,24 +137,25 @@ let PublicProcessor = (() => {
130
137
  if (feePayer.isZero()) {
131
138
  return finalPublicDataUpdateRequests;
132
139
  }
133
- const gasToken = AztecAddress.fromBigInt(GAS_TOKEN_ADDRESS);
140
+ const feeJuiceAddress = AztecAddress.fromBigInt(FEE_JUICE_ADDRESS);
134
141
  const balanceSlot = computeFeePayerBalanceStorageSlot(feePayer);
135
142
  const leafSlot = computeFeePayerBalanceLeafSlot(feePayer);
136
143
  const txFee = tx.data.getTransactionFee(this.globalVariables.gasFees);
137
- this.log.debug(`Deducting ${txFee} balance in gas tokens for ${feePayer}`);
144
+ this.log.debug(`Deducting ${txFee} balance in Fee Juice for ${feePayer}`);
138
145
  const existingBalanceWriteIndex = finalPublicDataUpdateRequests.findIndex(request => request.leafSlot.equals(leafSlot));
139
146
  const balance = existingBalanceWriteIndex > -1
140
147
  ? finalPublicDataUpdateRequests[existingBalanceWriteIndex].newValue
141
- : await this.publicStateDB.storageRead(gasToken, balanceSlot);
148
+ : await this.publicStateDB.storageRead(feeJuiceAddress, balanceSlot);
142
149
  if (balance.lt(txFee)) {
143
150
  throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance} needs ${txFee})`);
144
151
  }
145
152
  const updatedBalance = balance.sub(txFee);
146
- await this.publicStateDB.storageWrite(gasToken, balanceSlot, updatedBalance);
153
+ await this.publicStateDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
147
154
  finalPublicDataUpdateRequests[existingBalanceWriteIndex > -1 ? existingBalanceWriteIndex : MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX] = new PublicDataUpdateRequest(leafSlot, updatedBalance, 0);
148
155
  return finalPublicDataUpdateRequests;
149
156
  }
150
157
  async processTxWithPublicCalls(tx) {
158
+ const timer = new Timer();
151
159
  let returnValues = [];
152
160
  const publicProvingRequests = [];
153
161
  let phase = PhaseManagerFactory.phaseFromTx(tx, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
@@ -157,8 +165,17 @@ let PublicProcessor = (() => {
157
165
  let finalKernelOutput;
158
166
  let revertReason;
159
167
  const gasUsed = {};
168
+ let phaseCount = 0;
160
169
  while (phase) {
170
+ phaseCount++;
171
+ const phaseTimer = new Timer();
161
172
  const output = await phase.handle(tx, publicKernelPublicInput, lastKernelArtifact);
173
+ if (output.revertReason) {
174
+ this.metrics.recordRevertedPhase(phase.phase);
175
+ }
176
+ else {
177
+ this.metrics.recordPhaseDuration(phase.phase, phaseTimer.ms());
178
+ }
162
179
  gasUsed[phase.phase] = output.gasUsed;
163
180
  if (phase.phase === PublicKernelType.APP_LOGIC) {
164
181
  returnValues = output.returnValues;
@@ -171,8 +188,11 @@ let PublicProcessor = (() => {
171
188
  phase = PhaseManagerFactory.phaseFromOutput(publicKernelPublicInput, phase, this.db, this.publicExecutor, this.publicKernel, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
172
189
  }
173
190
  if (!finalKernelOutput) {
191
+ this.metrics.recordFailedTx();
174
192
  throw new Error('Final public kernel was not executed.');
175
193
  }
194
+ this.metrics.recordClassRegistration(...ContractClassRegisteredEvent.fromLogs(tx.unencryptedLogs.unrollLogs(), ClassRegistererAddress));
195
+ this.metrics.recordTx(phaseCount, timer.ms());
176
196
  const processedTx = makeProcessedTx(tx, finalKernelOutput, publicProvingRequests, revertReason, gasUsed);
177
197
  return [processedTx, returnValues];
178
198
  }
@@ -188,4 +208,4 @@ let PublicProcessor = (() => {
188
208
  _a;
189
209
  })();
190
210
  export { PublicProcessor };
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLHlCQUF5QixFQUV6QixnQkFBZ0IsRUFHaEIsRUFBRSxFQUVGLGVBQWUsRUFDZixtQkFBbUIsR0FDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUlqQixzQ0FBc0MsRUFDdEMsMkNBQTJDLEVBQzNDLHVCQUF1QixHQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQ0wsY0FBYyxFQUdkLDhCQUE4QixFQUM5QixpQ0FBaUMsR0FDbEMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFxQyxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHdEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBZ0MsRUFDaEMsa0JBQXNDLEVBQ3RDLFNBQTZCLEVBQzdCLGVBQWdDO1FBSGhDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDN0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsZ0JBQW9DLEVBQUUsZUFBZ0M7UUFDbEYsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTFFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRixNQUFNLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqSCxPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLENBQUMsVUFBVSxFQUNmLGNBQWMsRUFDZCxJQUFJLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDcEQsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxlQUFlLENBQ3JCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7SUFDVSxlQUFlOzs7O3NCQUFmLGVBQWU7WUFFMUIsWUFDWSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxlQUFnQyxFQUNoQyxnQkFBd0IsRUFDeEIsaUJBQThDLEVBQzlDLGFBQTRCLEVBQ3RDLGVBQWdDLEVBQ3hCLE1BQU0saUJBQWlCLENBQUMsa0NBQWtDLENBQUM7Z0JBUnpELE9BQUUsSUFISCxtREFBZSxFQUdkLEVBQUUsRUFBc0I7Z0JBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtnQkFDOUIsaUJBQVksR0FBWixZQUFZLENBQThCO2dCQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7Z0JBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtnQkFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE2QjtnQkFDOUMsa0JBQWEsR0FBYixhQUFhLENBQWU7Z0JBRTlCLFFBQUcsR0FBSCxHQUFHLENBQXdEO2dCQUVuRSxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBRUQ7Ozs7ZUFJRztZQUNJLEtBQUssQ0FBQyxPQUFPLENBQ2xCLEdBQVMsRUFDVCxlQUFlLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFDNUIsV0FBeUIsRUFDekIsV0FBc0M7Z0JBRXRDLDRFQUE0RTtnQkFDNUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxPQUFPLEdBQWdDLEVBQUUsQ0FBQztnQkFFOUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDckIsNENBQTRDO29CQUM1QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3JDLE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxJQUFJLENBQUM7d0JBQ0gsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUU7NEJBQ3RELENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUNsRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTs0QkFDN0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJOzRCQUN4QixvQkFBb0IsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7NEJBQ3hFLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsV0FBVzs0QkFDbkUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJO3lCQUM5RSxDQUFDLENBQUM7d0JBRUgsdURBQXVEO3dCQUN2RCxXQUFXLENBQUMsNkJBQTZCLEdBQUcsTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBRWxHLGlEQUFpRDt3QkFDakQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNsQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFFakMsOEJBQThCO3dCQUM5QixJQUFJLFdBQVcsRUFBRSxDQUFDOzRCQUNoQixpRUFBaUU7NEJBQ2pFLCtFQUErRTs0QkFDL0Usb0ZBQW9GOzRCQUNwRixpRkFBaUY7NEJBQ2pGLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDbEUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0NBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSw0Q0FBNEMsQ0FBQyxDQUFDOzRCQUM5RixDQUFDO3dCQUNILENBQUM7d0JBQ0Qsd0VBQXdFO3dCQUN4RSxJQUFJLFdBQVcsRUFBRSxDQUFDOzRCQUNoQixNQUFNLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzFDLENBQUM7d0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO29CQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7d0JBQ2xCLE1BQU0sWUFBWSxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQzt3QkFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxZQUFZLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBRXZGLE1BQU0sQ0FBQyxJQUFJLENBQUM7NEJBQ1YsRUFBRTs0QkFDRixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUM7eUJBQzVELENBQUMsQ0FBQzt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEQsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFFRDs7Ozs7ZUFLRztZQUNLLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxFQUFlO2dCQUN6RCxNQUFNLDZCQUE2QixHQUFHO29CQUNwQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtvQkFDdkMsR0FBRyxLQUFLLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQzdGLENBQUM7Z0JBRUYsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sNkJBQTZCLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFdBQVcsR0FBRyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLDhCQUE4QixRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUUzRSxNQUFNLHlCQUF5QixHQUFHLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNsRixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDbEMsQ0FBQztnQkFFRixNQUFNLE9BQU8sR0FDWCx5QkFBeUIsR0FBRyxDQUFDLENBQUM7b0JBQzVCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLFFBQVE7b0JBQ25FLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFbEUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLE9BQU8sVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM3RyxDQUFDO2dCQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFFN0UsNkJBQTZCLENBQzNCLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsc0NBQXNDLENBQ3BHLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUU3RCxPQUFPLDZCQUE2QixDQUFDO1lBQ3ZDLENBQUM7WUFLTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBTTtnQkFDM0MsSUFBSSxZQUFZLEdBQWdDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxxQkFBcUIsR0FBMkIsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLEtBQUssR0FBcUMsbUJBQW1CLENBQUMsV0FBVyxDQUMzRSxFQUFFLEVBQ0YsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQztnQkFDRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxFQUFFLEtBQUssV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixJQUFJLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztnQkFDMUUsSUFBSSxrQkFBa0IsR0FBcUIsbUNBQW1DLENBQUMsQ0FBQyw2REFBNkQ7Z0JBQzdJLElBQUksaUJBQXdELENBQUM7Z0JBQzdELElBQUksWUFBeUMsQ0FBQztnQkFDOUMsTUFBTSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDYixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztvQkFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUMvQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztvQkFDckMsQ0FBQztvQkFDRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDNUQsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO29CQUNwRCxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUM7b0JBQy9DLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztvQkFDN0MsWUFBWSxLQUFaLFlBQVksR0FBSyxNQUFNLENBQUMsWUFBWSxFQUFDO29CQUNyQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUN6Qyx1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2dCQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RyxPQUFPLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3JDLENBQUM7Ozs7b0RBcERBLFNBQVMsQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVELENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUU7aUJBQ2hELENBQUMsQ0FBQztZQUNILHlOQUFjLHdCQUF3Qiw2REFpRHJDOzs7OztTQTNMVSxlQUFlIn0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLHlCQUF5QixFQUd6QixnQkFBZ0IsRUFHaEIsRUFBRSxFQUVGLGVBQWUsRUFDZixtQkFBbUIsR0FDcEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLDRCQUE0QixFQUM1QixpQkFBaUIsRUFJakIsc0NBQXNDLEVBQ3RDLDJDQUEyQyxFQUMzQyx1QkFBdUIsR0FDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFDTCxjQUFjLEVBR2QsOEJBQThCLEVBQzlCLGlDQUFpQyxHQUNsQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQXFDLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxVQUFnQyxFQUNoQyxrQkFBc0MsRUFD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
@@ -0,0 +1,19 @@
1
+ import { type PublicKernelType } from '@aztec/circuit-types';
2
+ import { type ContractClassRegisteredEvent } from '@aztec/circuits.js';
3
+ import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
4
+ export declare class PublicProcessorMetrics {
5
+ readonly tracer: Tracer;
6
+ private txDuration;
7
+ private txCount;
8
+ private txPhaseCount;
9
+ private phaseDuration;
10
+ private phaseCount;
11
+ private bytecodeDeployed;
12
+ constructor(client: TelemetryClient, name?: string);
13
+ recordPhaseDuration(phaseName: PublicKernelType, durationMs: number): void;
14
+ recordTx(phaseCount: number, durationMs: number): void;
15
+ recordFailedTx(): void;
16
+ recordRevertedPhase(phaseName: PublicKernelType): void;
17
+ recordClassRegistration(...events: ContractClassRegisteredEvent[]): void;
18
+ }
19
+ //# sourceMappingURL=public_processor_metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_processor_metrics.d.ts","sourceRoot":"","sources":["../../src/public/public_processor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,sBAAsB;IACjC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,gBAAgB,CAAY;gBAExB,MAAM,EAAE,eAAe,EAAE,IAAI,SAAoB;IAkC7D,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM;IAKnE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAQ/C,cAAc;IAMd,mBAAmB,CAAC,SAAS,EAAE,gBAAgB;IAI/C,uBAAuB,CAAC,GAAG,MAAM,EAAE,4BAA4B,EAAE;CAUlE"}
@@ -0,0 +1,59 @@
1
+ import { Attributes, Metrics, ValueType, } from '@aztec/telemetry-client';
2
+ export class PublicProcessorMetrics {
3
+ constructor(client, name = 'PublicProcessor') {
4
+ this.tracer = client.getTracer(name);
5
+ const meter = client.getMeter(name);
6
+ this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION, {
7
+ description: 'How long it takes to process a transaction',
8
+ unit: 'ms',
9
+ valueType: ValueType.INT,
10
+ });
11
+ this.txCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
12
+ description: 'Number of transactions processed',
13
+ });
14
+ this.txPhaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT, {
15
+ description: 'Number of phases processed',
16
+ });
17
+ this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION, {
18
+ description: 'How long it takes to process a phase',
19
+ unit: 'ms',
20
+ valueType: ValueType.INT,
21
+ });
22
+ this.phaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
23
+ description: 'Number of failed phases',
24
+ });
25
+ this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE, {
26
+ description: 'Size of deployed bytecode',
27
+ unit: 'By',
28
+ });
29
+ }
30
+ recordPhaseDuration(phaseName, durationMs) {
31
+ this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: true });
32
+ this.phaseDuration.record(Math.ceil(durationMs), { [Attributes.TX_PHASE_NAME]: phaseName });
33
+ }
34
+ recordTx(phaseCount, durationMs) {
35
+ this.txPhaseCount.add(phaseCount);
36
+ this.txDuration.record(Math.ceil(durationMs));
37
+ this.txCount.add(1, {
38
+ [Attributes.OK]: true,
39
+ });
40
+ }
41
+ recordFailedTx() {
42
+ this.txCount.add(1, {
43
+ [Attributes.OK]: false,
44
+ });
45
+ }
46
+ recordRevertedPhase(phaseName) {
47
+ this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
48
+ }
49
+ recordClassRegistration(...events) {
50
+ let totalBytecode = 0;
51
+ for (const event of events) {
52
+ totalBytecode += event.packedPublicBytecode.length;
53
+ }
54
+ if (totalBytecode > 0) {
55
+ this.bytecodeDeployed.record(totalBytecode);
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfcHJvY2Vzc29yX21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLFVBQVUsRUFFVixPQUFPLEVBSVAsU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxPQUFPLHNCQUFzQjtJQVlqQyxZQUFZLE1BQXVCLEVBQUUsSUFBSSxHQUFHLGlCQUFpQjtRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFO1lBQzVFLFdBQVcsRUFBRSw0Q0FBNEM7WUFDekQsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFO1lBQzFFLFdBQVcsRUFBRSxrQ0FBa0M7U0FDaEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFO1lBQ3JGLFdBQVcsRUFBRSw0QkFBNEI7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtZQUNsRixXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRTtZQUNoRixXQUFXLEVBQUUseUJBQXlCO1NBQ3ZDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsRUFBRTtZQUMzRixXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQTJCLEVBQUUsVUFBa0I7UUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNsQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUEyQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsR0FBRyxNQUFzQztRQUMvRCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixhQUFhLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.47.1",
3
+ "version": "0.49.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -56,14 +56,14 @@
56
56
  ]
57
57
  },
58
58
  "dependencies": {
59
- "@aztec/circuit-types": "0.47.1",
60
- "@aztec/circuits.js": "0.47.1",
61
- "@aztec/foundation": "0.47.1",
62
- "@aztec/noir-protocol-circuits-types": "0.47.1",
63
- "@aztec/protocol-contracts": "0.47.1",
64
- "@aztec/telemetry-client": "0.47.1",
65
- "@aztec/types": "0.47.1",
66
- "@aztec/world-state": "0.47.1",
59
+ "@aztec/circuit-types": "0.49.2",
60
+ "@aztec/circuits.js": "0.49.2",
61
+ "@aztec/foundation": "0.49.2",
62
+ "@aztec/noir-protocol-circuits-types": "0.49.2",
63
+ "@aztec/protocol-contracts": "0.49.2",
64
+ "@aztec/telemetry-client": "0.49.2",
65
+ "@aztec/types": "0.49.2",
66
+ "@aztec/world-state": "0.49.2",
67
67
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
68
68
  "@noir-lang/types": "portal:../../noir/packages/types",
69
69
  "levelup": "^5.1.1",
package/src/acvm/acvm.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type NoirCallStack, type SourceCodeLocation } from '@aztec/circuit-types';
2
- import { type FunctionDebugMetadata, type OpcodeLocation } from '@aztec/foundation/abi';
2
+ import type { BrilligFunctionId, FunctionDebugMetadata, OpcodeLocation } from '@aztec/foundation/abi';
3
3
  import { createDebugLogger } from '@aztec/foundation/log';
4
4
 
5
5
  import {
@@ -41,10 +41,16 @@ export interface ACIRExecutionResult {
41
41
  function getSourceCodeLocationsFromOpcodeLocation(
42
42
  opcodeLocation: string,
43
43
  debug: FunctionDebugMetadata,
44
+ brilligFunctionId?: BrilligFunctionId,
44
45
  ): SourceCodeLocation[] {
45
46
  const { debugSymbols, files } = debug;
46
47
 
47
- const callStack = debugSymbols.locations[opcodeLocation] || [];
48
+ let callStack = debugSymbols.locations[opcodeLocation] || [];
49
+ if (callStack.length === 0) {
50
+ if (brilligFunctionId !== undefined) {
51
+ callStack = debugSymbols.brillig_locations[brilligFunctionId][opcodeLocation] || [];
52
+ }
53
+ }
48
54
  return callStack.map(call => {
49
55
  const { file: fileId, span } = call;
50
56
 
@@ -76,8 +82,11 @@ function getSourceCodeLocationsFromOpcodeLocation(
76
82
  export function resolveOpcodeLocations(
77
83
  opcodeLocations: OpcodeLocation[],
78
84
  debug: FunctionDebugMetadata,
85
+ brilligFunctionId?: BrilligFunctionId,
79
86
  ): SourceCodeLocation[] {
80
- return opcodeLocations.flatMap(opcodeLocation => getSourceCodeLocationsFromOpcodeLocation(opcodeLocation, debug));
87
+ return opcodeLocations.flatMap(opcodeLocation =>
88
+ getSourceCodeLocationsFromOpcodeLocation(opcodeLocation, debug, brilligFunctionId),
89
+ );
81
90
  }
82
91
 
83
92
  /**
@@ -143,13 +152,13 @@ export function extractCallStack(
143
152
  if (!('callStack' in error) || !error.callStack) {
144
153
  return undefined;
145
154
  }
146
- const { callStack } = error;
155
+ const { callStack, brilligFunctionId } = error;
147
156
  if (!debug) {
148
157
  return callStack;
149
158
  }
150
159
 
151
160
  try {
152
- return resolveOpcodeLocations(callStack, debug);
161
+ return resolveOpcodeLocations(callStack, debug, brilligFunctionId);
153
162
  } catch (err) {
154
163
  return callStack;
155
164
  }
@@ -247,14 +247,14 @@ export class Oracle {
247
247
  [storageSlot]: ACVMField[],
248
248
  [noteTypeId]: ACVMField[],
249
249
  note: ACVMField[],
250
- [innerNoteHash]: ACVMField[],
250
+ [noteHash]: ACVMField[],
251
251
  [counter]: ACVMField[],
252
252
  ): ACVMField {
253
253
  this.typedOracle.notifyCreatedNote(
254
254
  fromACVMField(storageSlot),
255
255
  NoteSelector.fromField(fromACVMField(noteTypeId)),
256
256
  note.map(fromACVMField),
257
- fromACVMField(innerNoteHash),
257
+ fromACVMField(noteHash),
258
258
  +counter,
259
259
  );
260
260
  return toACVMField(0);
@@ -262,10 +262,10 @@ export class Oracle {
262
262
 
263
263
  async notifyNullifiedNote(
264
264
  [innerNullifier]: ACVMField[],
265
- [innerNoteHash]: ACVMField[],
265
+ [noteHash]: ACVMField[],
266
266
  [counter]: ACVMField[],
267
267
  ): Promise<ACVMField> {
268
- await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(innerNoteHash), +counter);
268
+ await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(noteHash), +counter);
269
269
  return toACVMField(0);
270
270
  }
271
271
 
@@ -440,25 +440,6 @@ export class Oracle {
440
440
  return [endSideEffectCounter, returnsHash].map(toACVMField);
441
441
  }
442
442
 
443
- async callPublicFunction(
444
- [contractAddress]: ACVMField[],
445
- [functionSelector]: ACVMField[],
446
- [argsHash]: ACVMField[],
447
- [sideEffectCounter]: ACVMField[],
448
- [isStaticCall]: ACVMField[],
449
- [isDelegateCall]: ACVMField[],
450
- ): Promise<ACVMField[]> {
451
- const returnValues = await this.typedOracle.callPublicFunction(
452
- AztecAddress.fromField(fromACVMField(contractAddress)),
453
- FunctionSelector.fromField(fromACVMField(functionSelector)),
454
- fromACVMField(argsHash),
455
- frToNumber(fromACVMField(sideEffectCounter)),
456
- frToBoolean(fromACVMField(isStaticCall)),
457
- frToBoolean(fromACVMField(isDelegateCall)),
458
- );
459
- return returnValues.map(toACVMField);
460
- }
461
-
462
443
  async enqueuePublicFunctionCall(
463
444
  [contractAddress]: ACVMField[],
464
445
  [functionSelector]: ACVMField[],
@@ -495,6 +476,10 @@ export class Oracle {
495
476
  );
496
477
  }
497
478
 
479
+ notifySetMinRevertibleSideEffectCounter([minRevertibleSideEffectCounter]: ACVMField[]) {
480
+ this.typedOracle.notifySetMinRevertibleSideEffectCounter(frToNumber(fromACVMField(minRevertibleSideEffectCounter)));
481
+ }
482
+
498
483
  aes128Encrypt(input: ACVMField[], initializationVector: ACVMField[], key: ACVMField[]): ACVMField[] {
499
484
  // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
500
485
  const processedInput = Buffer.from(input.map(fromACVMField).map(f => f.toNumber()));
@@ -27,8 +27,8 @@ export interface NoteData {
27
27
  storageSlot: Fr;
28
28
  /** The nonce of the note. */
29
29
  nonce: Fr;
30
- /** The inner note hash of the note. */
31
- innerNoteHash: Fr;
30
+ /** A hash of the note. */
31
+ noteHash: Fr;
32
32
  /** The corresponding nullifier of the note. Undefined for pending notes. */
33
33
  siloedNullifier?: Fr;
34
34
  /** The note's leaf index in the note hash tree. Undefined for pending notes. */
@@ -158,17 +158,11 @@ export abstract class TypedOracle {
158
158
  throw new OracleMethodNotAvailableError('getNotes');
159
159
  }
160
160
 
161
- notifyCreatedNote(
162
- _storageSlot: Fr,
163
- _noteTypeId: NoteSelector,
164
- _note: Fr[],
165
- _innerNoteHash: Fr,
166
- _counter: number,
167
- ): void {
161
+ notifyCreatedNote(_storageSlot: Fr, _noteTypeId: NoteSelector, _note: Fr[], _noteHash: Fr, _counter: number): void {
168
162
  throw new OracleMethodNotAvailableError('notifyCreatedNote');
169
163
  }
170
164
 
171
- notifyNullifiedNote(_innerNullifier: Fr, _innerNoteHash: Fr, _counter: number): Promise<void> {
165
+ notifyNullifiedNote(_innerNullifier: Fr, _noteHash: Fr, _counter: number): Promise<void> {
172
166
  throw new OracleMethodNotAvailableError('notifyNullifiedNote');
173
167
  }
174
168
 
@@ -253,17 +247,6 @@ export abstract class TypedOracle {
253
247
  throw new OracleMethodNotAvailableError('callPrivateFunction');
254
248
  }
255
249
 
256
- callPublicFunction(
257
- _targetContractAddress: AztecAddress,
258
- _functionSelector: FunctionSelector,
259
- _argsHash: Fr,
260
- _sideEffectCounter: number,
261
- _isStaticCall: boolean,
262
- _isDelegateCall: boolean,
263
- ): Promise<Fr[]> {
264
- throw new OracleMethodNotAvailableError('callPublicFunction');
265
- }
266
-
267
250
  enqueuePublicFunctionCall(
268
251
  _targetContractAddress: AztecAddress,
269
252
  _functionSelector: FunctionSelector,
@@ -286,6 +269,10 @@ export abstract class TypedOracle {
286
269
  throw new OracleMethodNotAvailableError('setPublicTeardownFunctionCall');
287
270
  }
288
271
 
272
+ notifySetMinRevertibleSideEffectCounter(_minRevertibleSideEffectCounter: number): void {
273
+ throw new OracleMethodNotAvailableError('notifySetMinRevertibleSideEffectCounter');
274
+ }
275
+
289
276
  aes128Encrypt(_input: Buffer, _initializationVector: Buffer, _key: Buffer): Buffer {
290
277
  throw new OracleMethodNotAvailableError('encrypt');
291
278
  }