@aztec-labs/simulator 6.0.0-nightly.20260829

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 (215) hide show
  1. package/README.md +57 -0
  2. package/dest/client.d.ts +6 -0
  3. package/dest/client.d.ts.map +1 -0
  4. package/dest/client.js +3 -0
  5. package/dest/common/errors.d.ts +51 -0
  6. package/dest/common/errors.d.ts.map +1 -0
  7. package/dest/common/errors.js +154 -0
  8. package/dest/common/index.d.ts +3 -0
  9. package/dest/common/index.d.ts.map +1 -0
  10. package/dest/common/index.js +2 -0
  11. package/dest/common/stats/index.d.ts +2 -0
  12. package/dest/common/stats/index.d.ts.map +1 -0
  13. package/dest/common/stats/index.js +1 -0
  14. package/dest/common/stats/stats.d.ts +4 -0
  15. package/dest/common/stats/stats.d.ts.map +1 -0
  16. package/dest/common/stats/stats.js +10 -0
  17. package/dest/private/acvm/acvm.d.ts +43 -0
  18. package/dest/private/acvm/acvm.d.ts.map +1 -0
  19. package/dest/private/acvm/acvm.js +65 -0
  20. package/dest/private/acvm/acvm_types.d.ts +10 -0
  21. package/dest/private/acvm/acvm_types.d.ts.map +1 -0
  22. package/dest/private/acvm/acvm_types.js +3 -0
  23. package/dest/private/acvm/deserialize.d.ts +35 -0
  24. package/dest/private/acvm/deserialize.d.ts.map +1 -0
  25. package/dest/private/acvm/deserialize.js +50 -0
  26. package/dest/private/acvm/index.d.ts +5 -0
  27. package/dest/private/acvm/index.d.ts.map +1 -0
  28. package/dest/private/acvm/index.js +4 -0
  29. package/dest/private/acvm/serialize.d.ts +41 -0
  30. package/dest/private/acvm/serialize.d.ts.map +1 -0
  31. package/dest/private/acvm/serialize.js +99 -0
  32. package/dest/private/acvm_native.d.ts +41 -0
  33. package/dest/private/acvm_native.d.ts.map +1 -0
  34. package/dest/private/acvm_native.js +147 -0
  35. package/dest/private/acvm_wasm.d.ts +16 -0
  36. package/dest/private/acvm_wasm.d.ts.map +1 -0
  37. package/dest/private/acvm_wasm.js +67 -0
  38. package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
  39. package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
  40. package/dest/private/acvm_wasm_with_blobs.js +35 -0
  41. package/dest/private/circuit_simulator.d.ts +35 -0
  42. package/dest/private/circuit_simulator.d.ts.map +1 -0
  43. package/dest/private/circuit_simulator.js +43 -0
  44. package/dest/private/factory.d.ts +12 -0
  45. package/dest/private/factory.d.ts.map +1 -0
  46. package/dest/private/factory.js +30 -0
  47. package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
  48. package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
  49. package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
  50. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts +39 -0
  51. package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
  52. package/dest/public/avm/testing/base_avm_simulation_tester.js +121 -0
  53. package/dest/public/avm/testing/utils.d.ts +32 -0
  54. package/dest/public/avm/testing/utils.d.ts.map +1 -0
  55. package/dest/public/avm/testing/utils.js +66 -0
  56. package/dest/public/avm_simulator.d.ts +28 -0
  57. package/dest/public/avm_simulator.d.ts.map +1 -0
  58. package/dest/public/avm_simulator.js +4 -0
  59. package/dest/public/avm_simulator_pool.d.ts +84 -0
  60. package/dest/public/avm_simulator_pool.d.ts.map +1 -0
  61. package/dest/public/avm_simulator_pool.js +311 -0
  62. package/dest/public/cdb_ipc_server.d.ts +40 -0
  63. package/dest/public/cdb_ipc_server.d.ts.map +1 -0
  64. package/dest/public/cdb_ipc_server.js +153 -0
  65. package/dest/public/contracts_db_checkpoint.d.ts +16 -0
  66. package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
  67. package/dest/public/contracts_db_checkpoint.js +30 -0
  68. package/dest/public/db_interfaces.d.ts +68 -0
  69. package/dest/public/db_interfaces.d.ts.map +1 -0
  70. package/dest/public/db_interfaces.js +3 -0
  71. package/dest/public/executor_metrics.d.ts +21 -0
  72. package/dest/public/executor_metrics.d.ts.map +1 -0
  73. package/dest/public/executor_metrics.js +64 -0
  74. package/dest/public/executor_metrics_interface.d.ts +10 -0
  75. package/dest/public/executor_metrics_interface.d.ts.map +1 -0
  76. package/dest/public/executor_metrics_interface.js +1 -0
  77. package/dest/public/fixtures/amm_test.d.ts +10 -0
  78. package/dest/public/fixtures/amm_test.d.ts.map +1 -0
  79. package/dest/public/fixtures/amm_test.js +213 -0
  80. package/dest/public/fixtures/bulk_test.d.ts +6 -0
  81. package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
  82. package/dest/public/fixtures/bulk_test.js +289 -0
  83. package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
  84. package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
  85. package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
  86. package/dest/public/fixtures/index.d.ts +10 -0
  87. package/dest/public/fixtures/index.d.ts.map +1 -0
  88. package/dest/public/fixtures/index.js +9 -0
  89. package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
  90. package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
  91. package/dest/public/fixtures/public_processor_test_env.js +73 -0
  92. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +77 -0
  93. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -0
  94. package/dest/public/fixtures/public_tx_simulation_tester.js +176 -0
  95. package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
  96. package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
  97. package/dest/public/fixtures/simple_contract_data_source.js +95 -0
  98. package/dest/public/fixtures/token_test.d.ts +12 -0
  99. package/dest/public/fixtures/token_test.d.ts.map +1 -0
  100. package/dest/public/fixtures/token_test.js +96 -0
  101. package/dest/public/fixtures/utils.d.ts +26 -0
  102. package/dest/public/fixtures/utils.d.ts.map +1 -0
  103. package/dest/public/fixtures/utils.js +170 -0
  104. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +65 -0
  105. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
  106. package/dest/public/fuzzing/avm_fuzzer_simulator.js +181 -0
  107. package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
  108. package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
  109. package/dest/public/fuzzing/avm_simulator_bin.js +108 -0
  110. package/dest/public/index.d.ts +10 -0
  111. package/dest/public/index.d.ts.map +1 -0
  112. package/dest/public/index.js +6 -0
  113. package/dest/public/public_db_sources.d.ts +83 -0
  114. package/dest/public/public_db_sources.d.ts.map +1 -0
  115. package/dest/public/public_db_sources.js +297 -0
  116. package/dest/public/public_errors.d.ts +12 -0
  117. package/dest/public/public_errors.d.ts.map +1 -0
  118. package/dest/public/public_errors.js +13 -0
  119. package/dest/public/public_processor/guarded_merkle_tree.d.ts +52 -0
  120. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
  121. package/dest/public/public_processor/guarded_merkle_tree.js +116 -0
  122. package/dest/public/public_processor/public_processor.d.ts +71 -0
  123. package/dest/public/public_processor/public_processor.d.ts.map +1 -0
  124. package/dest/public/public_processor/public_processor.js +858 -0
  125. package/dest/public/public_processor/public_processor_metrics.d.ts +30 -0
  126. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
  127. package/dest/public/public_processor/public_processor_metrics.js +116 -0
  128. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
  129. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
  130. package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +39 -0
  131. package/dest/public/public_tx_simulator/factories.d.ts +14 -0
  132. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
  133. package/dest/public/public_tx_simulator/factories.js +28 -0
  134. package/dest/public/public_tx_simulator/index.d.ts +6 -0
  135. package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
  136. package/dest/public/public_tx_simulator/index.js +3 -0
  137. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +53 -0
  138. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
  139. package/dest/public/public_tx_simulator/public_tx_simulator.js +127 -0
  140. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -0
  141. package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
  142. package/dest/public/public_tx_simulator/public_tx_simulator_base.js +31 -0
  143. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
  144. package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
  145. package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
  146. package/dest/public/side_effect_errors.d.ts +44 -0
  147. package/dest/public/side_effect_errors.d.ts.map +1 -0
  148. package/dest/public/side_effect_errors.js +75 -0
  149. package/dest/public/test_executor_metrics.d.ts +56 -0
  150. package/dest/public/test_executor_metrics.d.ts.map +1 -0
  151. package/dest/public/test_executor_metrics.js +305 -0
  152. package/dest/public/unique_class_ids.d.ts +37 -0
  153. package/dest/public/unique_class_ids.d.ts.map +1 -0
  154. package/dest/public/unique_class_ids.js +61 -0
  155. package/dest/public/utils.d.ts +3 -0
  156. package/dest/public/utils.d.ts.map +1 -0
  157. package/dest/public/utils.js +18 -0
  158. package/dest/server.d.ts +7 -0
  159. package/dest/server.d.ts.map +1 -0
  160. package/dest/server.js +5 -0
  161. package/package.json +109 -0
  162. package/src/client.ts +5 -0
  163. package/src/common/errors.ts +219 -0
  164. package/src/common/index.ts +2 -0
  165. package/src/common/stats/index.ts +1 -0
  166. package/src/common/stats/stats.ts +20 -0
  167. package/src/private/acvm/acvm.ts +114 -0
  168. package/src/private/acvm/acvm_types.ts +11 -0
  169. package/src/private/acvm/deserialize.ts +58 -0
  170. package/src/private/acvm/index.ts +4 -0
  171. package/src/private/acvm/serialize.ts +123 -0
  172. package/src/private/acvm_native.ts +200 -0
  173. package/src/private/acvm_wasm.ts +80 -0
  174. package/src/private/acvm_wasm_with_blobs.ts +55 -0
  175. package/src/private/circuit_simulator.ts +91 -0
  176. package/src/private/factory.ts +40 -0
  177. package/src/public/avm/testing/account_proof.json +553 -0
  178. package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
  179. package/src/public/avm/testing/base_avm_simulation_tester.ts +162 -0
  180. package/src/public/avm/testing/utils.ts +114 -0
  181. package/src/public/avm_simulator.ts +29 -0
  182. package/src/public/avm_simulator_pool.ts +355 -0
  183. package/src/public/cdb_ipc_server.ts +198 -0
  184. package/src/public/contracts_db_checkpoint.ts +41 -0
  185. package/src/public/db_interfaces.ts +76 -0
  186. package/src/public/executor_metrics.ts +102 -0
  187. package/src/public/executor_metrics_interface.ts +20 -0
  188. package/src/public/fixtures/amm_test.ts +331 -0
  189. package/src/public/fixtures/bulk_test.ts +194 -0
  190. package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
  191. package/src/public/fixtures/index.ts +13 -0
  192. package/src/public/fixtures/public_processor_test_env.ts +88 -0
  193. package/src/public/fixtures/public_tx_simulation_tester.ts +315 -0
  194. package/src/public/fixtures/simple_contract_data_source.ts +122 -0
  195. package/src/public/fixtures/token_test.ts +148 -0
  196. package/src/public/fixtures/utils.ts +269 -0
  197. package/src/public/fuzzing/avm_fuzzer_simulator.ts +302 -0
  198. package/src/public/fuzzing/avm_simulator_bin.ts +156 -0
  199. package/src/public/index.ts +16 -0
  200. package/src/public/public_db_sources.ts +405 -0
  201. package/src/public/public_errors.ts +14 -0
  202. package/src/public/public_processor/guarded_merkle_tree.ts +161 -0
  203. package/src/public/public_processor/public_processor.ts +657 -0
  204. package/src/public/public_processor/public_processor_metrics.ts +138 -0
  205. package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +66 -0
  206. package/src/public/public_tx_simulator/factories.ts +61 -0
  207. package/src/public/public_tx_simulator/index.ts +8 -0
  208. package/src/public/public_tx_simulator/public_tx_simulator.ts +190 -0
  209. package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
  210. package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
  211. package/src/public/side_effect_errors.ts +96 -0
  212. package/src/public/test_executor_metrics.ts +399 -0
  213. package/src/public/unique_class_ids.ts +79 -0
  214. package/src/public/utils.ts +16 -0
  215. package/src/server.ts +6 -0
@@ -0,0 +1,30 @@
1
+ import type { ContractClassPublishedEvent } from '@aztec-labs/protocol-contracts/class-registry';
2
+ import type { Gas } from '@aztec-labs/stdlib/gas';
3
+ import { TxExecutionPhase } from '@aztec-labs/stdlib/tx';
4
+ import { type TelemetryClient, type Tracer } from '@aztec-labs/telemetry-client';
5
+ export declare class PublicProcessorMetrics {
6
+ readonly tracer: Tracer;
7
+ private txDuration;
8
+ private txCount;
9
+ private txPhaseCount;
10
+ private phaseDuration;
11
+ private phaseCount;
12
+ private bytecodeDeployed;
13
+ private totalGas;
14
+ private totalGasHistogram;
15
+ private gasRate;
16
+ private txGas;
17
+ private treeInsertionDuration;
18
+ private silentlySkippedCount;
19
+ private silentlySkippedDuration;
20
+ constructor(client: TelemetryClient, name?: string);
21
+ recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number): void;
22
+ recordTx(phaseCount: number, durationMs: number, gasUsed: Gas): void;
23
+ recordAllTxs(totalGas: Gas, gasRate: number): void;
24
+ recordFailedTx(): void;
25
+ recordRevertedPhase(phaseName: TxExecutionPhase): void;
26
+ recordClassPublication(...events: ContractClassPublishedEvent[]): void;
27
+ recordTreeInsertions(durationUs: number): void;
28
+ recordSilentlySkipped(durationMs: number): void;
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY19wcm9jZXNzb3IvcHVibGljX3Byb2Nlc3Nvcl9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakcsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUtMLEtBQUssZUFBZSxFQUNwQixLQUFLLE1BQU0sRUFHWixNQUFNLDhCQUE4QixDQUFDO0FBRXRDLHFCQUFhLHNCQUFzQjtJQUNqQyxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLE9BQU8sQ0FBQyxVQUFVLENBQVk7SUFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBZ0I7SUFDL0IsT0FBTyxDQUFDLFlBQVksQ0FBZ0I7SUFFcEMsT0FBTyxDQUFDLGFBQWEsQ0FBWTtJQUNqQyxPQUFPLENBQUMsVUFBVSxDQUFnQjtJQUVsQyxPQUFPLENBQUMsZ0JBQWdCLENBQVk7SUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBUTtJQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQVk7SUFDckMsT0FBTyxDQUFDLE9BQU8sQ0FBWTtJQUMzQixPQUFPLENBQUMsS0FBSyxDQUFZO0lBRXpCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBWTtJQUV6QyxPQUFPLENBQUMsb0JBQW9CLENBQWdCO0lBQzVDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBWTtJQUUzQyxZQUFZLE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxTQUFvQixFQWtDNUQ7SUFFRCxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFHbEU7SUFFRCxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBWTVEO0lBRUQsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFnQjFDO0lBRUQsY0FBYyxTQUliO0lBRUQsbUJBQW1CLENBQUMsU0FBUyxFQUFFLGdCQUFnQixRQUU5QztJQUVELHNCQUFzQixDQUFDLEdBQUcsTUFBTSxFQUFFLDJCQUEyQixFQUFFLFFBUzlEO0lBRUQsb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sUUFFdEM7SUFFRCxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQUd2QztDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_processor_metrics.d.ts","sourceRoot":"","sources":["../../../src/public/public_processor/public_processor_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;AACjG,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,8BAA8B,CAAC;AAEtC,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;IACpC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,KAAK,CAAY;IAEzB,OAAO,CAAC,qBAAqB,CAAY;IAEzC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,uBAAuB,CAAY;IAE3C,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAoB,EAkC5D;IAED,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,QAGlE;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAY5D;IAED,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAgB1C;IAED,cAAc,SAIb;IAED,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,QAE9C;IAED,sBAAsB,CAAC,GAAG,MAAM,EAAE,2BAA2B,EAAE,QAS9D;IAED,oBAAoB,CAAC,UAAU,EAAE,MAAM,QAEtC;IAED,qBAAqB,CAAC,UAAU,EAAE,MAAM,QAGvC;CACF"}
@@ -0,0 +1,116 @@
1
+ import { TxExecutionPhase } from '@aztec-labs/stdlib/tx';
2
+ import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec-labs/telemetry-client';
3
+ export class PublicProcessorMetrics {
4
+ tracer;
5
+ txDuration;
6
+ txCount;
7
+ txPhaseCount;
8
+ phaseDuration;
9
+ phaseCount;
10
+ bytecodeDeployed;
11
+ totalGas;
12
+ totalGasHistogram;
13
+ gasRate;
14
+ txGas;
15
+ treeInsertionDuration;
16
+ silentlySkippedCount;
17
+ silentlySkippedDuration;
18
+ constructor(client, name = 'PublicProcessor'){
19
+ this.tracer = client.getTracer(name);
20
+ const meter = client.getMeter(name);
21
+ this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION);
22
+ this.txCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
23
+ [Attributes.OK]: [
24
+ true,
25
+ false
26
+ ]
27
+ });
28
+ this.txPhaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT);
29
+ this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION);
30
+ this.phaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
31
+ [Attributes.TX_PHASE_NAME]: [
32
+ TxExecutionPhase.SETUP,
33
+ TxExecutionPhase.APP_LOGIC,
34
+ TxExecutionPhase.TEARDOWN
35
+ ],
36
+ [Attributes.OK]: [
37
+ true,
38
+ false
39
+ ]
40
+ });
41
+ this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE);
42
+ this.totalGas = meter.createGauge(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS);
43
+ this.totalGasHistogram = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM);
44
+ this.txGas = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS);
45
+ this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
46
+ this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
47
+ this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
48
+ this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
49
+ }
50
+ recordPhaseDuration(phaseName, durationMs) {
51
+ this.phaseCount.add(1, {
52
+ [Attributes.TX_PHASE_NAME]: phaseName,
53
+ [Attributes.OK]: true
54
+ });
55
+ this.phaseDuration.record(Math.ceil(durationMs), {
56
+ [Attributes.TX_PHASE_NAME]: phaseName
57
+ });
58
+ }
59
+ recordTx(phaseCount, durationMs, gasUsed) {
60
+ this.txPhaseCount.add(phaseCount);
61
+ this.txDuration.record(Math.ceil(durationMs));
62
+ this.txCount.add(1, {
63
+ [Attributes.OK]: true
64
+ });
65
+ this.txGas.record(gasUsed.daGas, {
66
+ [Attributes.GAS_DIMENSION]: 'DA'
67
+ });
68
+ this.txGas.record(gasUsed.l2Gas, {
69
+ [Attributes.GAS_DIMENSION]: 'L2'
70
+ });
71
+ }
72
+ recordAllTxs(totalGas, gasRate) {
73
+ this.totalGas.record(totalGas.daGas, {
74
+ [Attributes.GAS_DIMENSION]: 'DA'
75
+ });
76
+ this.totalGas.record(totalGas.l2Gas, {
77
+ [Attributes.GAS_DIMENSION]: 'L2'
78
+ });
79
+ this.gasRate.record(gasRate, {
80
+ [Attributes.GAS_DIMENSION]: 'L2'
81
+ });
82
+ this.totalGasHistogram.record(totalGas.daGas, {
83
+ [Attributes.GAS_DIMENSION]: 'DA'
84
+ });
85
+ this.totalGasHistogram.record(totalGas.l2Gas, {
86
+ [Attributes.GAS_DIMENSION]: 'L2'
87
+ });
88
+ }
89
+ recordFailedTx() {
90
+ this.txCount.add(1, {
91
+ [Attributes.OK]: false
92
+ });
93
+ }
94
+ recordRevertedPhase(phaseName) {
95
+ this.phaseCount.add(1, {
96
+ [Attributes.TX_PHASE_NAME]: phaseName,
97
+ [Attributes.OK]: false
98
+ });
99
+ }
100
+ recordClassPublication(...events) {
101
+ let totalBytecode = 0;
102
+ for (const event of events){
103
+ totalBytecode += event.packedPublicBytecode.length;
104
+ }
105
+ if (totalBytecode > 0) {
106
+ this.bytecodeDeployed.record(totalBytecode);
107
+ }
108
+ }
109
+ recordTreeInsertions(durationUs) {
110
+ this.treeInsertionDuration.record(Math.ceil(durationUs));
111
+ }
112
+ recordSilentlySkipped(durationMs) {
113
+ this.silentlySkippedCount.add(1);
114
+ this.silentlySkippedDuration.record(Math.ceil(durationMs));
115
+ }
116
+ }
@@ -0,0 +1,17 @@
1
+ import type { LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import { type PublicSimulatorConfig, type PublicTxResult } from '@aztec-labs/stdlib/avm';
3
+ import type { GlobalVariables, Tx } from '@aztec-labs/stdlib/tx';
4
+ import type { AvmSimulator } from '../avm_simulator.js';
5
+ import type { PublicContractsDB } from '../public_db_sources.js';
6
+ import { PublicTxSimulator } from './public_tx_simulator.js';
7
+ /**
8
+ * A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
9
+ * Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
10
+ */
11
+ export declare class DumpingPublicTxSimulator extends PublicTxSimulator {
12
+ private readonly outputDir;
13
+ constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, config: Partial<PublicSimulatorConfig>, outputDir: string, bindings?: LoggerBindings);
14
+ simulate(tx: Tx): Promise<PublicTxResult>;
15
+ private dumpAvmCircuitInputs;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtcGluZ19wdWJsaWNfdHhfc2ltdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvZHVtcGluZ19wdWJsaWNfdHhfc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCxLQUFLLHFCQUFxQixFQUMxQixLQUFLLGNBQWMsRUFFcEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLakUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RDs7O0dBR0c7QUFDSCxxQkFBYSx3QkFBeUIsU0FBUSxpQkFBaUI7SUFDN0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQVM7SUFFbkMsWUFDRSxZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxXQUFXLEVBQUUsaUJBQWlCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUN0QyxTQUFTLEVBQUUsTUFBTSxFQUNqQixRQUFRLENBQUMsRUFBRSxjQUFjLEVBTTFCO0lBRXFCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FJOUQ7SUFFRCxPQUFPLENBQUMsb0JBQW9CO0NBbUI3QiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumping_public_tx_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/dumping_public_tx_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAIL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,YACE,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,cAAc,EAM1B;IAEqB,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAI9D;IAED,OAAO,CAAC,oBAAoB;CAmB7B"}
@@ -0,0 +1,39 @@
1
+ import { AvmCircuitInputs, AvmCircuitPublicInputs, AvmExecutionHints, serializeWithMessagePack } from '@aztec-labs/stdlib/avm';
2
+ import { strict as assert } from 'assert';
3
+ import { mkdirSync, writeFileSync } from 'fs';
4
+ import { join } from 'path';
5
+ import { PublicTxSimulator } from './public_tx_simulator.js';
6
+ /**
7
+ * A {@link PublicTxSimulator} that dumps AVM circuit inputs to disk after simulation.
8
+ * Used during nightly CI runs to collect circuit inputs for AVM proving benchmarks.
9
+ */ export class DumpingPublicTxSimulator extends PublicTxSimulator {
10
+ outputDir;
11
+ constructor(avmSimulator, globalVariables, contractsDB, forkId, config, outputDir, bindings){
12
+ super(avmSimulator, globalVariables, contractsDB, forkId, config, bindings);
13
+ assert(config.collectHints === true, 'collectHints must be enabled to dump AVM circuit inputs');
14
+ assert(config.collectPublicInputs === true, 'collectPublicInputs must be enabled to dump AVM circuit inputs');
15
+ this.outputDir = outputDir;
16
+ }
17
+ async simulate(tx) {
18
+ const result = await super.simulate(tx);
19
+ this.dumpAvmCircuitInputs(result, tx.getTxHash().toString());
20
+ return result;
21
+ }
22
+ dumpAvmCircuitInputs(result, txHash) {
23
+ try {
24
+ mkdirSync(this.outputDir, {
25
+ recursive: true
26
+ });
27
+ const filename = `avm-circuit-inputs-tx-${txHash}.bin`;
28
+ const filepath = join(this.outputDir, filename);
29
+ const hints = result.hints ?? AvmExecutionHints.empty();
30
+ const publicInputs = result.publicInputs ?? AvmCircuitPublicInputs.empty();
31
+ const avmCircuitInputs = new AvmCircuitInputs(hints, publicInputs);
32
+ const serialized = serializeWithMessagePack(avmCircuitInputs);
33
+ writeFileSync(filepath, serialized);
34
+ this.log.debug(`Dumped AVM circuit inputs to ${filepath}`);
35
+ } catch (error) {
36
+ this.log.warn(`Failed to dump AVM circuit inputs for tx ${txHash}: ${error}`);
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,14 @@
1
+ import type { LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import type { GlobalVariables } from '@aztec-labs/stdlib/tx';
3
+ import type { TelemetryClient } from '@aztec-labs/telemetry-client';
4
+ import type { AvmSimulator } from '../avm_simulator.js';
5
+ import type { PublicContractsDB } from '../public_db_sources.js';
6
+ import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
7
+ import { TelemetryPublicTxSimulator } from './public_tx_simulator.js';
8
+ /**
9
+ * Creates an IPC-based public tx simulator for block building.
10
+ * Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit),
11
+ * otherwise uses TelemetryPublicTxSimulator (for production).
12
+ */
13
+ export declare function createPublicTxSimulatorForBlockBuilding(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, telemetryClient: TelemetryClient, bindings?: LoggerBindings, collectDebugLogs?: boolean): DumpingPublicTxSimulator | TelemetryPublicTxSimulator;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yaWVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvZmFjdG9yaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEU7Ozs7R0FJRztBQUNILHdCQUFnQix1Q0FBdUMsQ0FDckQsWUFBWSxFQUFFLFlBQVksRUFDMUIsZUFBZSxFQUFFLGVBQWUsRUFDaEMsV0FBVyxFQUFFLGlCQUFpQixFQUM5QixNQUFNLEVBQUUsTUFBTSxFQUNkLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFDekIsZ0JBQWdCLFVBQVEseURBc0N6QiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,QAAQ,CAAC,EAAE,cAAc,EACzB,gBAAgB,UAAQ,yDAsCzB"}
@@ -0,0 +1,28 @@
1
+ import { PublicSimulatorConfig } from '@aztec-labs/stdlib/avm';
2
+ import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
3
+ import { TelemetryPublicTxSimulator } from './public_tx_simulator.js';
4
+ /**
5
+ * Creates an IPC-based public tx simulator for block building.
6
+ * Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit),
7
+ * otherwise uses TelemetryPublicTxSimulator (for production).
8
+ */ export function createPublicTxSimulatorForBlockBuilding(avmSimulator, globalVariables, contractsDB, forkId, telemetryClient, bindings, collectDebugLogs = false) {
9
+ const config = PublicSimulatorConfig.from({
10
+ skipFeeEnforcement: false,
11
+ collectDebugLogs,
12
+ collectHints: false,
13
+ collectPublicInputs: false,
14
+ collectStatistics: false,
15
+ collectCallMetadata: false
16
+ });
17
+ const dumpDir = process.env.DUMP_AVM_INPUTS_TO_DIR;
18
+ if (dumpDir) {
19
+ // must collect hints and PIs for dumping
20
+ const dumpingConfig = {
21
+ ...config,
22
+ collectHints: true,
23
+ collectPublicInputs: true
24
+ };
25
+ return new DumpingPublicTxSimulator(avmSimulator, globalVariables, contractsDB, forkId, dumpingConfig, dumpDir, bindings);
26
+ }
27
+ return new TelemetryPublicTxSimulator(avmSimulator, globalVariables, contractsDB, forkId, telemetryClient, config, bindings);
28
+ }
@@ -0,0 +1,6 @@
1
+ export { PublicTxSimulator, MeasuredPublicTxSimulator, TelemetryPublicTxSimulator } from './public_tx_simulator.js';
2
+ export { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
3
+ export { createPublicTxSimulatorForBlockBuilding } from './factories.js';
4
+ export type { PublicTxSimulatorInterface, MeasuredPublicTxSimulatorInterface, } from './public_tx_simulator_interface.js';
5
+ export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec-labs/stdlib/avm';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxZQUFZLEVBQ1YsMEJBQTBCLEVBQzFCLGtDQUFrQyxHQUNuQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLFlBQVksRUFBRSxjQUFjLEVBQUUscUJBQXFCLElBQUksdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACpH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uCAAuC,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EACV,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,qBAAqB,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PublicTxSimulator, MeasuredPublicTxSimulator, TelemetryPublicTxSimulator } from './public_tx_simulator.js';
2
+ export { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js';
3
+ export { createPublicTxSimulatorForBlockBuilding } from './factories.js';
@@ -0,0 +1,53 @@
1
+ import { type Logger, type LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import { type PublicSimulatorConfig, PublicTxResult } from '@aztec-labs/stdlib/avm';
3
+ import type { GlobalVariables, Tx } from '@aztec-labs/stdlib/tx';
4
+ import { type TelemetryClient, type Tracer } from '@aztec-labs/telemetry-client';
5
+ import type { AvmSimulator } from '../avm_simulator.js';
6
+ import type { ExecutorMetricsInterface } from '../executor_metrics_interface.js';
7
+ import type { PublicContractsDB } from '../public_db_sources.js';
8
+ import { PublicTxSimulatorBase } from './public_tx_simulator_base.js';
9
+ import type { MeasuredPublicTxSimulatorInterface, PublicTxSimulatorInterface } from './public_tx_simulator_interface.js';
10
+ /**
11
+ * Simulates a transaction's public portion by running its public calls through an {@link AvmSimulator}.
12
+ * `forkId` selects the fork whose contract data the simulation reads.
13
+ */
14
+ export declare class PublicTxSimulator extends PublicTxSimulatorBase implements PublicTxSimulatorInterface {
15
+ protected log: Logger;
16
+ /** Aborts the in-flight simulation. */
17
+ private abortController?;
18
+ /** Current simulation promise, used to wait for completion after cancellation. */
19
+ private simulationPromise?;
20
+ constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, config?: Partial<PublicSimulatorConfig>, bindings?: LoggerBindings);
21
+ /**
22
+ * Simulate a transaction's public portion.
23
+ *
24
+ * @param tx - The transaction to simulate.
25
+ * @returns The result of the transaction's public execution.
26
+ */
27
+ simulate(tx: Tx): Promise<PublicTxResult>;
28
+ protected doSimulate(tx: Tx, signal: AbortSignal): Promise<PublicTxResult>;
29
+ /**
30
+ * Cancel the current simulation if one is in progress.
31
+ * This signals the underlying simulator to stop at the next safe point (between opcodes, before a
32
+ * world-state write). Safe to call even if no simulation is in progress.
33
+ *
34
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
35
+ * Cancellation is cooperative: the simulator may be mid slow-operation and
36
+ * won't observe the cancellation until it completes.
37
+ * Default timeout of 100ms after cancellation.
38
+ */
39
+ cancel(waitTimeoutMs?: number): Promise<void>;
40
+ }
41
+ export declare class MeasuredPublicTxSimulator extends PublicTxSimulator implements MeasuredPublicTxSimulatorInterface {
42
+ protected readonly metrics: ExecutorMetricsInterface;
43
+ constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, metrics: ExecutorMetricsInterface, config?: Partial<PublicSimulatorConfig>, bindings?: LoggerBindings);
44
+ simulate(tx: Tx, txLabel?: string): Promise<PublicTxResult>;
45
+ }
46
+ /**
47
+ * A public tx simulator that tracks runtime/production metrics with telemetry.
48
+ */
49
+ export declare class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
50
+ readonly tracer: Tracer;
51
+ constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, telemetryClient?: TelemetryClient, config?: Partial<PublicSimulatorConfig>, bindings?: LoggerBindings);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9wdWJsaWNfdHhfc2ltdWxhdG9yL3B1YmxpY190eF9zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBRTVGLE9BQU8sRUFHTCxLQUFLLHFCQUFxQixFQUMxQixjQUFjLEVBRWYsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBRXJHLE9BQU8sS0FBSyxFQUF5QixZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQ1Ysa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMzQixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDOzs7R0FHRztBQUNILHFCQUFhLGlCQUFrQixTQUFRLHFCQUFzQixZQUFXLDBCQUEwQjtJQUNoRyxVQUFtQixHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQy9CLHVDQUF1QztJQUN2QyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQWtCO0lBQzFDLGtGQUFrRjtJQUNsRixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBMEI7SUFFcEQsWUFDRSxZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxXQUFXLEVBQUUsaUJBQWlCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQ3ZDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFJMUI7SUFFRDs7Ozs7T0FLRztJQUNVLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FTckQ7SUFFRCxVQUFnQixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FtRC9FO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ1UsTUFBTSxDQUFDLGFBQWEsR0FBRSxNQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWM5RDtDQUNGO0FBRUQscUJBQWEseUJBQTBCLFNBQVEsaUJBQWtCLFlBQVcsa0NBQWtDO0lBTTFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLHdCQUF3QjtJQUx0RCxZQUNFLFlBQVksRUFBRSxZQUFZLEVBQzFCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFdBQVcsRUFBRSxpQkFBaUIsRUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFDSyxPQUFPLEVBQUUsd0JBQXdCLEVBQ3BELE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUN2QyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRXFCLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRSxNQUFzQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FTL0Y7Q0FDRjtBQUVEOztHQUVHO0FBQ0gscUJBQWEsMEJBQTJCLFNBQVEseUJBQXlCO0lBRXZFLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFL0IsWUFDRSxZQUFZLEVBQUUsWUFBWSxFQUMxQixlQUFlLEVBQUUsZUFBZSxFQUNoQyxXQUFXLEVBQUUsaUJBQWlCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsZUFBZSxHQUFFLGVBQXNDLEVBQ3ZELE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUN2QyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBSzFCO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_tx_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/public_tx_simulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAE5F,OAAO,EAGL,KAAK,qBAAqB,EAC1B,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAsB,MAAM,8BAA8B,CAAC;AAErG,OAAO,KAAK,EAAyB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EACV,kCAAkC,EAClC,0BAA0B,EAC3B,MAAM,oCAAoC,CAAC;AAE5C;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,qBAAsB,YAAW,0BAA0B;IAChG,UAAmB,GAAG,EAAE,MAAM,CAAC;IAC/B,uCAAuC;IACvC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,kFAAkF;IAClF,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IAEpD,YACE,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAED;;;;;OAKG;IACU,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CASrD;IAED,UAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAmD/E;IAED;;;;;;;;;OASG;IACU,MAAM,CAAC,aAAa,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9D;CACF;AAED,qBAAa,yBAA0B,SAAQ,iBAAkB,YAAW,kCAAkC;IAM1G,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB;IALtD,YACE,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACK,OAAO,EAAE,wBAAwB,EACpD,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAEqB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAS/F;CACF;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,yBAAyB;IAEvE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACE,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,eAAsC,EACvD,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,QAAQ,CAAC,EAAE,cAAc,EAK1B;CACF"}
@@ -0,0 +1,127 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { sleep } from '@aztec-labs/foundation/sleep';
3
+ import { AvmFastSimulationInputs, AvmTxHint, PublicTxResult, deserializeFromMessagePack } from '@aztec-labs/stdlib/avm';
4
+ import { SimulationError } from '@aztec-labs/stdlib/errors';
5
+ import { WorldStateRevision } from '@aztec-labs/stdlib/world-state';
6
+ import { getTelemetryClient } from '@aztec-labs/telemetry-client';
7
+ import { ExecutorMetrics } from '../executor_metrics.js';
8
+ import { PublicTxSimulatorBase } from './public_tx_simulator_base.js';
9
+ /**
10
+ * Simulates a transaction's public portion by running its public calls through an {@link AvmSimulator}.
11
+ * `forkId` selects the fork whose contract data the simulation reads.
12
+ */ export class PublicTxSimulator extends PublicTxSimulatorBase {
13
+ log;
14
+ /** Aborts the in-flight simulation. */ abortController;
15
+ /** Current simulation promise, used to wait for completion after cancellation. */ simulationPromise;
16
+ constructor(avmSimulator, globalVariables, contractsDB, forkId, config, bindings){
17
+ super(avmSimulator, globalVariables, contractsDB, forkId, config, undefined, bindings);
18
+ this.log = createLogger(`simulator:public_tx_simulator`, bindings);
19
+ }
20
+ /**
21
+ * Simulate a transaction's public portion.
22
+ *
23
+ * @param tx - The transaction to simulate.
24
+ * @returns The result of the transaction's public execution.
25
+ */ async simulate(tx) {
26
+ this.abortController = new AbortController();
27
+ this.simulationPromise = this.doSimulate(tx, this.abortController.signal);
28
+ try {
29
+ return await this.simulationPromise;
30
+ } finally{
31
+ this.abortController = undefined;
32
+ this.simulationPromise = undefined;
33
+ }
34
+ }
35
+ async doSimulate(tx, signal) {
36
+ const txHash = this.computeTxHash(tx);
37
+ this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}, forkId=${this.forkId}`, {
38
+ txHash
39
+ });
40
+ // Create the fast simulation inputs.
41
+ const txHint = AvmTxHint.fromTx(tx, this.globalVariables.gasFees);
42
+ const fastSimInputs = new AvmFastSimulationInputs(// blockNumber: WorldStateRevision.LATEST sentinel so the WSDB walks the fork's current
43
+ // uncommitted state. Using 0 here makes WSDB treat this as a historical query against
44
+ // the empty genesis tree and miss any in-fork uncommitted leaves (deployed contracts,
45
+ // etc.) from earlier txs in the same block.
46
+ {
47
+ forkId: this.forkId,
48
+ blockNumber: WorldStateRevision.LATEST,
49
+ includeUncommitted: true
50
+ }, this.config, txHint, this.globalVariables, this.protocolContracts);
51
+ this.log.trace(`Serializing fast simulation inputs to msgpack...`);
52
+ const inputBuffer = fastSimInputs.serializeWithMessagePack();
53
+ this.log.debug(`Running AVM simulation for tx ${txHash}`);
54
+ const context = {
55
+ contractsDB: this.contractsDB,
56
+ forkId: this.forkId,
57
+ timestamp: this.globalVariables.timestamp
58
+ };
59
+ let resultBuffer;
60
+ try {
61
+ resultBuffer = await this.avmSimulator.simulate(inputBuffer, context, signal);
62
+ } catch (error) {
63
+ if (error.message?.includes('cancelled')) {
64
+ throw new SimulationError(`AVM simulation cancelled`, []);
65
+ }
66
+ throw new SimulationError(`AVM simulation failed: ${error.message}`, []);
67
+ }
68
+ this.log.trace(`Deserializing simulation result from buffer (size: ${resultBuffer.length})...`);
69
+ const resultJSON = deserializeFromMessagePack(Buffer.from(resultBuffer));
70
+ const result = PublicTxResult.fromPlainObject(resultJSON);
71
+ this.log.trace(`AVM simulation completed for tx ${txHash}`, {
72
+ txHash,
73
+ reverted: !result.revertCode.isOK(),
74
+ l2GasUsed: result.gasUsed.totalGas.l2Gas
75
+ });
76
+ return result;
77
+ }
78
+ /**
79
+ * Cancel the current simulation if one is in progress.
80
+ * This signals the underlying simulator to stop at the next safe point (between opcodes, before a
81
+ * world-state write). Safe to call even if no simulation is in progress.
82
+ *
83
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
84
+ * Cancellation is cooperative: the simulator may be mid slow-operation and
85
+ * won't observe the cancellation until it completes.
86
+ * Default timeout of 100ms after cancellation.
87
+ */ async cancel(waitTimeoutMs = 100) {
88
+ if (this.abortController) {
89
+ this.log.debug('Cancelling AVM simulation');
90
+ this.abortController.abort();
91
+ }
92
+ if (this.simulationPromise) {
93
+ this.log.debug(`Waiting up to ${waitTimeoutMs}ms for AVM simulation to stop`);
94
+ await Promise.race([
95
+ this.simulationPromise.catch(()=>{}),
96
+ sleep(waitTimeoutMs)
97
+ ]);
98
+ this.log.debug('AVM simulation stopped or wait timed out');
99
+ }
100
+ }
101
+ }
102
+ export class MeasuredPublicTxSimulator extends PublicTxSimulator {
103
+ metrics;
104
+ constructor(avmSimulator, globalVariables, contractsDB, forkId, metrics, config, bindings){
105
+ super(avmSimulator, globalVariables, contractsDB, forkId, config, bindings), this.metrics = metrics;
106
+ }
107
+ async simulate(tx, txLabel = 'unlabeledTx') {
108
+ this.metrics.startRecordingTxSimulation(txLabel);
109
+ let result;
110
+ try {
111
+ result = await super.simulate(tx);
112
+ } finally{
113
+ this.metrics.stopRecordingTxSimulation(txLabel, result?.gasUsed, result?.revertCode, result?.stats);
114
+ }
115
+ return result;
116
+ }
117
+ }
118
+ /**
119
+ * A public tx simulator that tracks runtime/production metrics with telemetry.
120
+ */ export class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
121
+ /* tracer needed by trackSpans */ tracer;
122
+ constructor(avmSimulator, globalVariables, contractsDB, forkId, telemetryClient = getTelemetryClient(), config, bindings){
123
+ const metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
124
+ super(avmSimulator, globalVariables, contractsDB, forkId, metrics, config, bindings);
125
+ this.tracer = metrics.tracer;
126
+ }
127
+ }
@@ -0,0 +1,24 @@
1
+ import { type Logger, type LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import { PublicSimulatorConfig } from '@aztec-labs/stdlib/avm';
3
+ import type { GlobalVariables, ProtocolContracts, Tx } from '@aztec-labs/stdlib/tx';
4
+ import type { AvmSimulator } from '../avm_simulator.js';
5
+ import type { PublicContractsDB } from '../public_db_sources.js';
6
+ /**
7
+ * Shared base for public tx simulators: holds the common configuration, the {@link AvmSimulator} used
8
+ * to run the transaction's public calls, the contracts DB and fork id that scope the simulation's
9
+ * contract-data lookups, the logger, and the tx-hash helper. Concrete simulators extend this and
10
+ * implement `simulate`.
11
+ */
12
+ export declare abstract class PublicTxSimulatorBase {
13
+ protected avmSimulator: AvmSimulator;
14
+ protected globalVariables: GlobalVariables;
15
+ protected contractsDB: PublicContractsDB;
16
+ protected forkId: number;
17
+ protected protocolContracts: ProtocolContracts;
18
+ protected log: Logger;
19
+ protected readonly config: PublicSimulatorConfig;
20
+ protected readonly bindings?: LoggerBindings;
21
+ constructor(avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, config?: Partial<PublicSimulatorConfig>, protocolContracts?: ProtocolContracts, bindings?: LoggerBindings);
22
+ protected computeTxHash(tx: Tx): import("@aztec-labs/stdlib/tx").TxHash;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvcl9iYXNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL3B1YmxpY190eF9zaW11bGF0b3IvcHVibGljX3R4X3NpbXVsYXRvcl9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEYsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRTs7Ozs7R0FLRztBQUNILDhCQUFzQixxQkFBcUI7SUFNdkMsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZO0lBQ3BDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsZUFBZTtJQUMxQyxTQUFTLENBQUMsV0FBVyxFQUFFLGlCQUFpQjtJQUN4QyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU07SUFFeEIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQjtJQVZoRCxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUN0QixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztJQUNqRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUU3QyxZQUNZLFlBQVksRUFBRSxZQUFZLEVBQzFCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFdBQVcsRUFBRSxpQkFBaUIsRUFDOUIsTUFBTSxFQUFFLE1BQU0sRUFDeEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEVBQzdCLGlCQUFpQixHQUFFLGlCQUF5QyxFQUN0RSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBSzFCO0lBRUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSwwQ0FFN0I7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_tx_simulator_base.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/public_tx_simulator_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAE5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;;;GAKG;AACH,8BAAsB,qBAAqB;IAMvC,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,WAAW,EAAE,iBAAiB;IACxC,SAAS,CAAC,MAAM,EAAE,MAAM;IAExB,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;IAVhD,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE7C,YACY,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAC7B,iBAAiB,GAAE,iBAAyC,EACtE,QAAQ,CAAC,EAAE,cAAc,EAK1B;IAED,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,0CAE7B;CACF"}
@@ -0,0 +1,31 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import { ProtocolContractsList } from '@aztec-labs/protocol-contracts';
3
+ import { PublicSimulatorConfig } from '@aztec-labs/stdlib/avm';
4
+ /**
5
+ * Shared base for public tx simulators: holds the common configuration, the {@link AvmSimulator} used
6
+ * to run the transaction's public calls, the contracts DB and fork id that scope the simulation's
7
+ * contract-data lookups, the logger, and the tx-hash helper. Concrete simulators extend this and
8
+ * implement `simulate`.
9
+ */ export class PublicTxSimulatorBase {
10
+ avmSimulator;
11
+ globalVariables;
12
+ contractsDB;
13
+ forkId;
14
+ protocolContracts;
15
+ log;
16
+ config;
17
+ bindings;
18
+ constructor(avmSimulator, globalVariables, contractsDB, forkId, config, protocolContracts = ProtocolContractsList, bindings){
19
+ this.avmSimulator = avmSimulator;
20
+ this.globalVariables = globalVariables;
21
+ this.contractsDB = contractsDB;
22
+ this.forkId = forkId;
23
+ this.protocolContracts = protocolContracts;
24
+ this.config = PublicSimulatorConfig.from(config ?? {});
25
+ this.bindings = bindings;
26
+ this.log = createLogger(`simulator:public_tx_simulator`, bindings);
27
+ }
28
+ computeTxHash(tx) {
29
+ return tx.getTxHash();
30
+ }
31
+ }
@@ -0,0 +1,32 @@
1
+ import type { PublicTxResult } from '@aztec-labs/stdlib/avm';
2
+ import type { Tx } from '@aztec-labs/stdlib/tx';
3
+ export interface PublicTxSimulatorInterface {
4
+ simulate(tx: Tx): Promise<PublicTxResult>;
5
+ /**
6
+ * Cancel the current simulation if one is in progress.
7
+ * This signals the underlying simulator to stop at the next safe point.
8
+ * Safe to call even if no simulation is in progress.
9
+ * Optional - not all implementations support cancellation.
10
+ *
11
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
12
+ * Cancellation is cooperative: signaling it only sets a flag the simulator
13
+ * checks at certain points, so if it's mid slow-operation it won't stop until
14
+ * that completes.
15
+ * @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
16
+ */
17
+ cancel?(waitTimeoutMs?: number): Promise<void>;
18
+ }
19
+ export interface MeasuredPublicTxSimulatorInterface {
20
+ simulate(tx: Tx, txLabel: string): Promise<PublicTxResult>;
21
+ /**
22
+ * Cancel the current simulation if one is in progress.
23
+ * This signals the underlying simulator to stop at the next safe point.
24
+ * Safe to call even if no simulation is in progress.
25
+ * Optional - not all implementations support cancellation.
26
+ *
27
+ * @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
28
+ * @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
29
+ */
30
+ cancel?(waitTimeoutMs?: number): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRvcl9pbnRlcmZhY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvcHVibGljX3R4X3NpbXVsYXRvci9wdWJsaWNfdHhfc2ltdWxhdG9yX2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxNQUFNLFdBQVcsMEJBQTBCO0lBQ3pDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxQzs7Ozs7Ozs7Ozs7T0FXRztJQUNILE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDaEQ7QUFFRCxNQUFNLFdBQVcsa0NBQWtDO0lBQ2pELFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNoRCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_tx_simulator_interface.d.ts","sourceRoot":"","sources":["../../../src/public/public_tx_simulator/public_tx_simulator_interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAEhD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3D;;;;;;;;OAQG;IACH,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"}
@@ -0,0 +1,44 @@
1
+ import { CheckedPublicExecutionError } from './public_errors.js';
2
+ /**
3
+ * Any error that can be thrown during side effect insertion in public.
4
+ * Includes SideEffectLimitReachedError and NullifierCollisionError.
5
+ */
6
+ export declare abstract class SideEffectError extends CheckedPublicExecutionError {
7
+ constructor(message: string);
8
+ }
9
+ export declare class SideEffectLimitReachedError extends SideEffectError {
10
+ constructor(sideEffectType: string, limit: number);
11
+ }
12
+ export declare class MaxCallsToUniqueContractClassIdsError extends SideEffectLimitReachedError {
13
+ constructor();
14
+ }
15
+ export declare class NullifierLimitReachedError extends SideEffectLimitReachedError {
16
+ constructor();
17
+ }
18
+ export declare class NoteHashLimitReachedError extends SideEffectLimitReachedError {
19
+ constructor();
20
+ }
21
+ export declare class L2ToL1MessageLimitReachedError extends SideEffectLimitReachedError {
22
+ constructor();
23
+ }
24
+ export declare class NullifierCollisionError extends SideEffectError {
25
+ constructor(message: string);
26
+ }
27
+ /**
28
+ * Any error that can be thrown during side effect reads in public.
29
+ * Note: Thrown at state manager level and unknown by simulation, hence NOT considered
30
+ * CheckedPublicExecutionErrors. Currently only includes append-only tree reads.
31
+ */
32
+ export declare abstract class SideEffectReadError extends Error {
33
+ constructor(message: string);
34
+ }
35
+ export declare class IndexOutOfRangeError extends SideEffectReadError {
36
+ constructor(tree: string, index: number, limit: number);
37
+ }
38
+ export declare class NoteHashIndexOutOfRangeError extends IndexOutOfRangeError {
39
+ constructor(index: number);
40
+ }
41
+ export declare class L1ToL2MessageIndexOutOfRangeError extends IndexOutOfRangeError {
42
+ constructor(index: number);
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZV9lZmZlY3RfZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3NpZGVfZWZmZWN0X2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRTs7O0dBR0c7QUFDSCw4QkFBc0IsZUFBZ0IsU0FBUSwyQkFBMkI7SUFDdkUsWUFBWSxPQUFPLEVBQUUsTUFBTSxFQUcxQjtDQUNGO0FBRUQscUJBQWEsMkJBQTRCLFNBQVEsZUFBZTtJQUM5RCxZQUFZLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFHaEQ7Q0FDRjtBQUVELHFCQUFhLHFDQUFzQyxTQUFRLDJCQUEyQjtJQUNwRixjQUdDO0NBQ0Y7QUFFRCxxQkFBYSwwQkFBMkIsU0FBUSwyQkFBMkI7SUFDekUsY0FHQztDQUNGO0FBRUQscUJBQWEseUJBQTBCLFNBQVEsMkJBQTJCO0lBQ3hFLGNBR0M7Q0FDRjtBQUVELHFCQUFhLDhCQUErQixTQUFRLDJCQUEyQjtJQUM3RSxjQUdDO0NBQ0Y7QUFFRCxxQkFBYSx1QkFBd0IsU0FBUSxlQUFlO0lBQzFELFlBQVksT0FBTyxFQUFFLE1BQU0sRUFHMUI7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCw4QkFBc0IsbUJBQW9CLFNBQVEsS0FBSztJQUNyRCxZQUFZLE9BQU8sRUFBRSxNQUFNLEVBRzFCO0NBQ0Y7QUFFRCxxQkFBYSxvQkFBcUIsU0FBUSxtQkFBbUI7SUFDM0QsWUFBWSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFHckQ7Q0FDRjtBQUVELHFCQUFhLDRCQUE2QixTQUFRLG9CQUFvQjtJQUNwRSxZQUFZLEtBQUssRUFBRSxNQUFNLEVBR3hCO0NBQ0Y7QUFFRCxxQkFBYSxpQ0FBa0MsU0FBUSxvQkFBb0I7SUFDekUsWUFBWSxLQUFLLEVBQUUsTUFBTSxFQUd4QjtDQUNGIn0=