@aztec/simulator 0.47.0 → 0.48.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 (113) hide show
  1. package/dest/acvm/acvm.d.ts +1 -1
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.d.ts +5 -5
  4. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  5. package/dest/acvm/oracle/oracle.js +13 -16
  6. package/dest/acvm/oracle/typed_oracle.d.ts +12 -9
  7. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  8. package/dest/acvm/oracle/typed_oracle.js +6 -6
  9. package/dest/acvm/serialize.d.ts +0 -11
  10. package/dest/acvm/serialize.d.ts.map +1 -1
  11. package/dest/acvm/serialize.js +1 -26
  12. package/dest/avm/avm_gas.d.ts.map +1 -1
  13. package/dest/avm/avm_gas.js +2 -1
  14. package/dest/avm/fixtures/index.d.ts.map +1 -1
  15. package/dest/avm/fixtures/index.js +2 -2
  16. package/dest/avm/opcodes/commitment.d.ts +16 -0
  17. package/dest/avm/opcodes/commitment.d.ts.map +1 -0
  18. package/dest/avm/opcodes/commitment.js +50 -0
  19. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  20. package/dest/avm/serialization/bytecode_serialization.js +3 -1
  21. package/dest/avm/serialization/instruction_serialization.d.ts +4 -3
  22. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  23. package/dest/avm/serialization/instruction_serialization.js +6 -5
  24. package/dest/client/client_execution_context.d.ts +20 -17
  25. package/dest/client/client_execution_context.d.ts.map +1 -1
  26. package/dest/client/client_execution_context.js +42 -45
  27. package/dest/client/db_oracle.d.ts +4 -3
  28. package/dest/client/db_oracle.d.ts.map +1 -1
  29. package/dest/client/execution_note_cache.d.ts +17 -13
  30. package/dest/client/execution_note_cache.d.ts.map +1 -1
  31. package/dest/client/execution_note_cache.js +65 -26
  32. package/dest/client/execution_result.d.ts +15 -8
  33. package/dest/client/execution_result.d.ts.map +1 -1
  34. package/dest/client/execution_result.js +40 -16
  35. package/dest/client/private_execution.js +3 -3
  36. package/dest/client/simulator.d.ts +7 -6
  37. package/dest/client/simulator.d.ts.map +1 -1
  38. package/dest/client/simulator.js +14 -12
  39. package/dest/client/test_utils.d.ts +9 -0
  40. package/dest/client/test_utils.d.ts.map +1 -0
  41. package/dest/client/test_utils.js +21 -0
  42. package/dest/client/view_data_oracle.d.ts +2 -1
  43. package/dest/client/view_data_oracle.d.ts.map +1 -1
  44. package/dest/client/view_data_oracle.js +4 -3
  45. package/dest/index.d.ts +0 -1
  46. package/dest/index.d.ts.map +1 -1
  47. package/dest/index.js +1 -2
  48. package/dest/mocks/fixtures.d.ts +5 -5
  49. package/dest/mocks/fixtures.d.ts.map +1 -1
  50. package/dest/mocks/fixtures.js +6 -9
  51. package/dest/public/abstract_phase_manager.d.ts +4 -5
  52. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  53. package/dest/public/abstract_phase_manager.js +17 -84
  54. package/dest/public/execution.d.ts +8 -10
  55. package/dest/public/execution.d.ts.map +1 -1
  56. package/dest/public/execution.js +10 -1
  57. package/dest/public/executor.d.ts +6 -2
  58. package/dest/public/executor.d.ts.map +1 -1
  59. package/dest/public/executor.js +12 -4
  60. package/dest/public/executor_metrics.d.ts +10 -0
  61. package/dest/public/executor_metrics.d.ts.map +1 -0
  62. package/dest/public/executor_metrics.js +32 -0
  63. package/dest/public/fee_payment.d.ts +2 -2
  64. package/dest/public/fee_payment.d.ts.map +1 -1
  65. package/dest/public/fee_payment.js +9 -10
  66. package/dest/public/hints_builder.d.ts.map +1 -1
  67. package/dest/public/hints_builder.js +1 -1
  68. package/dest/public/index.d.ts +1 -1
  69. package/dest/public/index.d.ts.map +1 -1
  70. package/dest/public/index.js +1 -1
  71. package/dest/public/public_processor.d.ts +3 -3
  72. package/dest/public/public_processor.d.ts.map +1 -1
  73. package/dest/public/public_processor.js +33 -14
  74. package/dest/public/public_processor_metrics.d.ts +19 -0
  75. package/dest/public/public_processor_metrics.d.ts.map +1 -0
  76. package/dest/public/public_processor_metrics.js +57 -0
  77. package/dest/public/side_effect_trace.d.ts +1 -0
  78. package/dest/public/side_effect_trace.d.ts.map +1 -1
  79. package/dest/public/side_effect_trace.js +9 -9
  80. package/package.json +9 -9
  81. package/src/acvm/acvm.ts +1 -1
  82. package/src/acvm/oracle/oracle.ts +13 -30
  83. package/src/acvm/oracle/typed_oracle.ts +12 -31
  84. package/src/acvm/serialize.ts +0 -29
  85. package/src/avm/avm_gas.ts +1 -0
  86. package/src/avm/fixtures/index.ts +1 -0
  87. package/src/avm/opcodes/commitment.ts +66 -0
  88. package/src/avm/serialization/bytecode_serialization.ts +2 -0
  89. package/src/avm/serialization/instruction_serialization.ts +2 -1
  90. package/src/client/client_execution_context.ts +51 -49
  91. package/src/client/db_oracle.ts +9 -3
  92. package/src/client/execution_note_cache.ts +76 -25
  93. package/src/client/execution_result.ts +54 -19
  94. package/src/client/private_execution.ts +2 -2
  95. package/src/client/simulator.ts +18 -14
  96. package/src/client/test_utils.ts +30 -0
  97. package/src/client/view_data_oracle.ts +2 -1
  98. package/src/index.ts +0 -1
  99. package/src/mocks/fixtures.ts +13 -11
  100. package/src/public/abstract_phase_manager.ts +23 -104
  101. package/src/public/execution.ts +30 -14
  102. package/src/public/executor.ts +18 -4
  103. package/src/public/executor_metrics.ts +48 -0
  104. package/src/public/fee_payment.ts +8 -10
  105. package/src/public/hints_builder.ts +2 -2
  106. package/src/public/index.ts +1 -1
  107. package/src/public/public_processor.ts +46 -15
  108. package/src/public/public_processor_metrics.ts +90 -0
  109. package/src/public/side_effect_trace.ts +13 -7
  110. package/dest/utils.d.ts +0 -12
  111. package/dest/utils.d.ts.map +0 -1
  112. package/dest/utils.js +0 -11
  113. package/src/utils.ts +0 -18
@@ -0,0 +1,90 @@
1
+ import { type PublicKernelType } from '@aztec/circuit-types';
2
+ import { type ContractClassRegisteredEvent } from '@aztec/circuits.js';
3
+ import {
4
+ Attributes,
5
+ type Histogram,
6
+ Metrics,
7
+ type TelemetryClient,
8
+ type Tracer,
9
+ type UpDownCounter,
10
+ ValueType,
11
+ } from '@aztec/telemetry-client';
12
+
13
+ export class PublicProcessorMetrics {
14
+ public readonly tracer: Tracer;
15
+
16
+ private txDuration: Histogram;
17
+ private txCount: UpDownCounter;
18
+ private txPhaseCount: UpDownCounter;
19
+
20
+ private phaseDuration: Histogram;
21
+ private phaseCount: UpDownCounter;
22
+
23
+ private bytecodeDeployed: Histogram;
24
+
25
+ constructor(client: TelemetryClient, name = 'PublicProcessor') {
26
+ this.tracer = client.getTracer(name);
27
+ const meter = client.getMeter(name);
28
+
29
+ this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION, {
30
+ description: 'How long it takes to process a transaction',
31
+ unit: 'ms',
32
+ valueType: ValueType.INT,
33
+ });
34
+
35
+ this.txCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
36
+ description: 'Number of transactions processed',
37
+ });
38
+
39
+ this.txPhaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT, {
40
+ description: 'Number of phases processed',
41
+ });
42
+
43
+ this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION, {
44
+ description: 'How long it takes to process a phase',
45
+ unit: 'ms',
46
+ valueType: ValueType.INT,
47
+ });
48
+
49
+ this.phaseCount = meter.createUpDownCounter(Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
50
+ description: 'Number of failed phases',
51
+ });
52
+
53
+ this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE, {
54
+ description: 'Size of deployed bytecode',
55
+ unit: 'By',
56
+ });
57
+ }
58
+
59
+ recordPhaseDuration(phaseName: PublicKernelType, durationMs: number) {
60
+ this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: true });
61
+ this.phaseDuration.record(Math.ceil(durationMs), { [Attributes.TX_PHASE_NAME]: phaseName });
62
+ }
63
+
64
+ recordTx(phaseCount: number, durationMs: number) {
65
+ this.txPhaseCount.add(phaseCount);
66
+ this.txDuration.record(Math.ceil(durationMs));
67
+ this.txCount.add(1, {
68
+ [Attributes.OK]: true,
69
+ });
70
+ }
71
+
72
+ recordFailedTx() {
73
+ this.txCount.add(1, {
74
+ [Attributes.OK]: false,
75
+ });
76
+ }
77
+
78
+ recordRevertedPhase(phaseName: PublicKernelType) {
79
+ this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
80
+ }
81
+
82
+ recordClassRegistration(...events: ContractClassRegisteredEvent[]) {
83
+ let totalBytecode = 0;
84
+ for (const event of events) {
85
+ totalBytecode += event.packedPublicBytecode.length;
86
+ }
87
+
88
+ this.bytecodeDeployed.record(totalBytecode);
89
+ }
90
+ }
@@ -1,4 +1,4 @@
1
- import { UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
1
+ import { PublicExecutionRequest, UnencryptedFunctionL2Logs, UnencryptedL2Log } from '@aztec/circuit-types';
2
2
  import {
3
3
  AvmContractInstanceHint,
4
4
  AvmExecutionHints,
@@ -14,6 +14,7 @@ import {
14
14
  LogHash,
15
15
  NoteHash,
16
16
  Nullifier,
17
+ type PublicCallRequest,
17
18
  ReadRequest,
18
19
  } from '@aztec/circuits.js';
19
20
  import { Fr } from '@aztec/foundation/fields';
@@ -23,7 +24,7 @@ import { type ContractInstanceWithAddress } from '@aztec/types/contracts';
23
24
  import { type AvmContractCallResult } from '../avm/avm_contract_call_result.js';
24
25
  import { type AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
25
26
  import { createSimulationError } from '../common/errors.js';
26
- import { type PublicExecutionRequest, type PublicExecutionResult } from './execution.js';
27
+ import { type PublicExecutionResult, resultToPublicCallRequest } from './execution.js';
27
28
  import { type PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
28
29
 
29
30
  export type TracedContractInstance = { exists: boolean } & ContractInstanceWithAddress;
@@ -51,6 +52,8 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
51
52
  private allUnencryptedLogs: UnencryptedL2Log[] = [];
52
53
  private unencryptedLogsHashes: LogHash[] = [];
53
54
 
55
+ private publicCallRequests: PublicCallRequest[] = [];
56
+
54
57
  private gotContractInstances: ContractInstanceWithAddress[] = [];
55
58
 
56
59
  private nestedExecutions: PublicExecutionResult[] = [];
@@ -247,6 +250,9 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
247
250
  result.startGasLeft.daGas - result.endGasLeft.daGas,
248
251
  result.startGasLeft.l2Gas - result.endGasLeft.l2Gas,
249
252
  );
253
+
254
+ this.publicCallRequests.push(resultToPublicCallRequest(result));
255
+
250
256
  this.avmCircuitHints.externalCalls.items.push(
251
257
  new AvmExternalCallHint(
252
258
  /*success=*/ new Fr(result.reverted ? 0 : 1),
@@ -305,6 +311,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
305
311
  // TODO(dbanks12): process contract instance read requests in public kernel
306
312
  //gotContractInstances: this.gotContractInstances,
307
313
 
314
+ publicCallRequests: this.publicCallRequests,
308
315
  nestedExecutions: this.nestedExecutions,
309
316
 
310
317
  avmCircuitHints: this.avmCircuitHints,
@@ -325,11 +332,10 @@ function createPublicExecutionRequest(avmEnvironment: AvmExecutionEnvironment):
325
332
  isDelegateCall: avmEnvironment.isDelegateCall,
326
333
  isStaticCall: avmEnvironment.isStaticCall,
327
334
  });
328
- return {
329
- contractAddress: avmEnvironment.address,
330
- functionSelector: avmEnvironment.functionSelector,
335
+ return new PublicExecutionRequest(
336
+ avmEnvironment.address,
331
337
  callContext,
332
338
  // execution request does not contain AvmContextInputs prefix
333
- args: avmEnvironment.getCalldataWithoutPrefix(),
334
- };
339
+ avmEnvironment.getCalldataWithoutPrefix(),
340
+ );
335
341
  }
package/dest/utils.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import { type Fr } from '@aztec/foundation/fields';
2
- /**
3
- * Computes the resulting storage slot for an entry in a mapping.
4
- * @param mappingSlot - The slot of the mapping within state.
5
- * @param key - The key of the mapping.
6
- * @returns The slot in the contract storage where the value is stored.
7
- */
8
- export declare function computeSlotForMapping(mappingSlot: Fr, key: {
9
- /** Serialize to a field. */
10
- toField: () => Fr;
11
- }): Fr;
12
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,EAAE,EACf,GAAG,EAAE;IACH,4BAA4B;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,MAGF"}
package/dest/utils.js DELETED
@@ -1,11 +0,0 @@
1
- import { pedersenHash } from '@aztec/foundation/crypto';
2
- /**
3
- * Computes the resulting storage slot for an entry in a mapping.
4
- * @param mappingSlot - The slot of the mapping within state.
5
- * @param key - The key of the mapping.
6
- * @returns The slot in the contract storage where the value is stored.
7
- */
8
- export function computeSlotForMapping(mappingSlot, key) {
9
- return pedersenHash([mappingSlot, key.toField()]);
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxXQUFlLEVBQ2YsR0FHQztJQUVELE9BQU8sWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyJ9
package/src/utils.ts DELETED
@@ -1,18 +0,0 @@
1
- import { pedersenHash } from '@aztec/foundation/crypto';
2
- import { type Fr } from '@aztec/foundation/fields';
3
-
4
- /**
5
- * Computes the resulting storage slot for an entry in a mapping.
6
- * @param mappingSlot - The slot of the mapping within state.
7
- * @param key - The key of the mapping.
8
- * @returns The slot in the contract storage where the value is stored.
9
- */
10
- export function computeSlotForMapping(
11
- mappingSlot: Fr,
12
- key: {
13
- /** Serialize to a field. */
14
- toField: () => Fr;
15
- },
16
- ) {
17
- return pedersenHash([mappingSlot, key.toField()]);
18
- }