@aztec/simulator 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2

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 (304) hide show
  1. package/dest/acvm/acvm.js +18 -21
  2. package/dest/acvm/acvm_types.js +3 -2
  3. package/dest/acvm/deserialize.js +9 -13
  4. package/dest/acvm/index.js +0 -1
  5. package/dest/acvm/oracle/index.js +0 -1
  6. package/dest/acvm/oracle/oracle.js +42 -23
  7. package/dest/acvm/oracle/typed_oracle.js +36 -38
  8. package/dest/acvm/serialize.js +7 -14
  9. package/dest/avm/avm_context.js +24 -27
  10. package/dest/avm/avm_contract_call_result.js +12 -7
  11. package/dest/avm/avm_execution_environment.js +10 -7
  12. package/dest/avm/avm_gas.js +93 -56
  13. package/dest/avm/avm_machine_state.js +60 -61
  14. package/dest/avm/avm_memory_types.js +166 -255
  15. package/dest/avm/avm_simulator.js +68 -47
  16. package/dest/avm/avm_tree.js +282 -276
  17. package/dest/avm/bytecode_utils.js +8 -6
  18. package/dest/avm/errors.js +46 -63
  19. package/dest/avm/fixtures/avm_simulation_tester.js +18 -17
  20. package/dest/avm/fixtures/base_avm_simulation_tester.js +21 -16
  21. package/dest/avm/fixtures/index.js +27 -26
  22. package/dest/avm/fixtures/simple_contract_data_source.js +9 -13
  23. package/dest/avm/index.js +0 -1
  24. package/dest/avm/journal/index.js +0 -1
  25. package/dest/avm/journal/journal.js +147 -200
  26. package/dest/avm/journal/nullifiers.js +43 -46
  27. package/dest/avm/journal/public_storage.js +73 -87
  28. package/dest/avm/opcodes/accrued_substate.js +140 -110
  29. package/dest/avm/opcodes/addressing_mode.js +29 -31
  30. package/dest/avm/opcodes/arithmetic.js +17 -15
  31. package/dest/avm/opcodes/bitwise.js +40 -26
  32. package/dest/avm/opcodes/comparators.js +12 -10
  33. package/dest/avm/opcodes/contract.js +31 -29
  34. package/dest/avm/opcodes/control_flow.js +47 -43
  35. package/dest/avm/opcodes/conversion.js +30 -26
  36. package/dest/avm/opcodes/ec_add.js +35 -34
  37. package/dest/avm/opcodes/environment_getters.js +33 -33
  38. package/dest/avm/opcodes/external_calls.js +83 -74
  39. package/dest/avm/opcodes/hashing.js +69 -61
  40. package/dest/avm/opcodes/index.js +0 -1
  41. package/dest/avm/opcodes/instruction.js +31 -40
  42. package/dest/avm/opcodes/instruction_impl.js +12 -15
  43. package/dest/avm/opcodes/memory.js +177 -156
  44. package/dest/avm/opcodes/misc.js +27 -25
  45. package/dest/avm/opcodes/multi_scalar_mul.js +43 -41
  46. package/dest/avm/opcodes/storage.js +28 -25
  47. package/dest/avm/serialization/buffer_cursor.js +4 -4
  48. package/dest/avm/serialization/bytecode_serialization.js +292 -89
  49. package/dest/avm/serialization/instruction_serialization.js +67 -28
  50. package/dest/avm/test_utils.js +6 -9
  51. package/dest/client/client_execution_context.js +197 -219
  52. package/dest/client/db_oracle.js +4 -7
  53. package/dest/client/execution_note_cache.js +80 -81
  54. package/dest/client/index.js +0 -1
  55. package/dest/client/pick_notes.js +27 -30
  56. package/dest/client/private_execution.js +13 -14
  57. package/dest/client/simulator.js +44 -48
  58. package/dest/client/unconstrained_execution.js +8 -11
  59. package/dest/client/view_data_oracle.js +130 -139
  60. package/dest/common/debug_fn_name.js +1 -4
  61. package/dest/common/errors.js +30 -39
  62. package/dest/common/hashed_values_cache.js +16 -20
  63. package/dest/common/index.js +0 -1
  64. package/dest/common/message_load_oracle_inputs.js +7 -7
  65. package/dest/common/simulation_provider.js +3 -6
  66. package/dest/common.js +0 -1
  67. package/dest/providers/acvm_native.js +46 -32
  68. package/dest/providers/acvm_wasm.js +18 -10
  69. package/dest/providers/acvm_wasm_with_blobs.js +2 -5
  70. package/dest/providers/factory.js +5 -5
  71. package/dest/providers/index.js +0 -1
  72. package/dest/public/bytecode_errors.js +1 -2
  73. package/dest/public/db_interfaces.js +1 -2
  74. package/dest/public/execution.js +2 -4
  75. package/dest/public/executor_metrics.js +16 -12
  76. package/dest/public/fee_payment.js +2 -5
  77. package/dest/public/fixtures/index.js +0 -1
  78. package/dest/public/fixtures/public_tx_simulation_tester.js +13 -17
  79. package/dest/public/fixtures/utils.js +11 -14
  80. package/dest/public/index.js +0 -1
  81. package/dest/public/public_db_sources.js +79 -87
  82. package/dest/public/public_processor.js +310 -306
  83. package/dest/public/public_processor_metrics.js +46 -27
  84. package/dest/public/public_tx_context.js +97 -118
  85. package/dest/public/public_tx_simulator.js +299 -314
  86. package/dest/public/side_effect_errors.js +1 -2
  87. package/dest/public/side_effect_trace.js +44 -71
  88. package/dest/public/side_effect_trace_interface.js +1 -2
  89. package/dest/public/unique_class_ids.js +22 -27
  90. package/dest/public/utils.js +16 -11
  91. package/dest/server.js +0 -1
  92. package/dest/stats/index.js +0 -1
  93. package/dest/stats/stats.js +1 -2
  94. package/dest/test/utils.js +5 -4
  95. package/package.json +11 -11
  96. package/src/acvm/oracle/typed_oracle.ts +34 -34
  97. package/src/avm/avm_machine_state.ts +18 -14
  98. package/src/avm/avm_memory_types.ts +43 -183
  99. package/src/avm/avm_simulator.ts +37 -11
  100. package/src/avm/opcodes/accrued_substate.ts +7 -21
  101. package/src/avm/opcodes/addressing_mode.ts +9 -2
  102. package/src/avm/opcodes/arithmetic.ts +1 -3
  103. package/src/avm/opcodes/bitwise.ts +2 -6
  104. package/src/avm/opcodes/comparators.ts +1 -3
  105. package/src/avm/opcodes/contract.ts +1 -3
  106. package/src/avm/opcodes/control_flow.ts +1 -9
  107. package/src/avm/opcodes/conversion.ts +1 -3
  108. package/src/avm/opcodes/ec_add.ts +1 -3
  109. package/src/avm/opcodes/environment_getters.ts +1 -3
  110. package/src/avm/opcodes/external_calls.ts +3 -6
  111. package/src/avm/opcodes/hashing.ts +3 -9
  112. package/src/avm/opcodes/memory.ts +6 -20
  113. package/src/avm/opcodes/misc.ts +1 -3
  114. package/src/avm/opcodes/multi_scalar_mul.ts +1 -7
  115. package/src/avm/opcodes/storage.ts +2 -6
  116. package/src/client/index.ts +2 -2
  117. package/dest/acvm/acvm.d.ts +0 -35
  118. package/dest/acvm/acvm.d.ts.map +0 -1
  119. package/dest/acvm/acvm_types.d.ts +0 -10
  120. package/dest/acvm/acvm_types.d.ts.map +0 -1
  121. package/dest/acvm/deserialize.d.ts +0 -36
  122. package/dest/acvm/deserialize.d.ts.map +0 -1
  123. package/dest/acvm/index.d.ts +0 -6
  124. package/dest/acvm/index.d.ts.map +0 -1
  125. package/dest/acvm/oracle/index.d.ts +0 -14
  126. package/dest/acvm/oracle/index.d.ts.map +0 -1
  127. package/dest/acvm/oracle/oracle.d.ts +0 -49
  128. package/dest/acvm/oracle/oracle.d.ts.map +0 -1
  129. package/dest/acvm/oracle/typed_oracle.d.ts +0 -75
  130. package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
  131. package/dest/acvm/serialize.d.ts +0 -20
  132. package/dest/acvm/serialize.d.ts.map +0 -1
  133. package/dest/avm/avm_context.d.ts +0 -39
  134. package/dest/avm/avm_context.d.ts.map +0 -1
  135. package/dest/avm/avm_contract_call_result.d.ts +0 -30
  136. package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
  137. package/dest/avm/avm_execution_environment.d.ts +0 -21
  138. package/dest/avm/avm_execution_environment.d.ts.map +0 -1
  139. package/dest/avm/avm_gas.d.ts +0 -60
  140. package/dest/avm/avm_gas.d.ts.map +0 -1
  141. package/dest/avm/avm_machine_state.d.ts +0 -93
  142. package/dest/avm/avm_machine_state.d.ts.map +0 -1
  143. package/dest/avm/avm_memory_types.d.ts +0 -310
  144. package/dest/avm/avm_memory_types.d.ts.map +0 -1
  145. package/dest/avm/avm_simulator.d.ts +0 -37
  146. package/dest/avm/avm_simulator.d.ts.map +0 -1
  147. package/dest/avm/avm_tree.d.ts +0 -281
  148. package/dest/avm/avm_tree.d.ts.map +0 -1
  149. package/dest/avm/bytecode_utils.d.ts +0 -5
  150. package/dest/avm/bytecode_utils.d.ts.map +0 -1
  151. package/dest/avm/errors.d.ts +0 -121
  152. package/dest/avm/errors.d.ts.map +0 -1
  153. package/dest/avm/fixtures/avm_simulation_tester.d.ts +0 -21
  154. package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
  155. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts +0 -35
  156. package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
  157. package/dest/avm/fixtures/index.d.ts +0 -67
  158. package/dest/avm/fixtures/index.d.ts.map +0 -1
  159. package/dest/avm/fixtures/simple_contract_data_source.d.ts +0 -31
  160. package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
  161. package/dest/avm/index.d.ts +0 -4
  162. package/dest/avm/index.d.ts.map +0 -1
  163. package/dest/avm/journal/index.d.ts +0 -2
  164. package/dest/avm/journal/index.d.ts.map +0 -1
  165. package/dest/avm/journal/journal.d.ts +0 -176
  166. package/dest/avm/journal/journal.d.ts.map +0 -1
  167. package/dest/avm/journal/nullifiers.d.ts +0 -62
  168. package/dest/avm/journal/nullifiers.d.ts.map +0 -1
  169. package/dest/avm/journal/public_storage.d.ts +0 -66
  170. package/dest/avm/journal/public_storage.d.ts.map +0 -1
  171. package/dest/avm/opcodes/accrued_substate.d.ts +0 -75
  172. package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
  173. package/dest/avm/opcodes/addressing_mode.d.ts +0 -27
  174. package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
  175. package/dest/avm/opcodes/arithmetic.d.ts +0 -37
  176. package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
  177. package/dest/avm/opcodes/bitwise.d.ts +0 -50
  178. package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
  179. package/dest/avm/opcodes/comparators.d.ts +0 -25
  180. package/dest/avm/opcodes/comparators.d.ts.map +0 -1
  181. package/dest/avm/opcodes/contract.d.ts +0 -21
  182. package/dest/avm/opcodes/contract.d.ts.map +0 -1
  183. package/dest/avm/opcodes/control_flow.d.ts +0 -41
  184. package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
  185. package/dest/avm/opcodes/conversion.d.ts +0 -17
  186. package/dest/avm/opcodes/conversion.d.ts.map +0 -1
  187. package/dest/avm/opcodes/ec_add.d.ts +0 -19
  188. package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
  189. package/dest/avm/opcodes/environment_getters.d.ts +0 -28
  190. package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
  191. package/dest/avm/opcodes/external_calls.d.ts +0 -50
  192. package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
  193. package/dest/avm/opcodes/hashing.d.ts +0 -36
  194. package/dest/avm/opcodes/hashing.d.ts.map +0 -1
  195. package/dest/avm/opcodes/index.d.ts +0 -16
  196. package/dest/avm/opcodes/index.d.ts.map +0 -1
  197. package/dest/avm/opcodes/instruction.d.ts +0 -70
  198. package/dest/avm/opcodes/instruction.d.ts.map +0 -1
  199. package/dest/avm/opcodes/instruction_impl.d.ts +0 -19
  200. package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
  201. package/dest/avm/opcodes/memory.d.ts +0 -74
  202. package/dest/avm/opcodes/memory.d.ts.map +0 -1
  203. package/dest/avm/opcodes/misc.d.ts +0 -17
  204. package/dest/avm/opcodes/misc.d.ts.map +0 -1
  205. package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
  206. package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
  207. package/dest/avm/opcodes/storage.d.ts +0 -24
  208. package/dest/avm/opcodes/storage.d.ts.map +0 -1
  209. package/dest/avm/serialization/buffer_cursor.d.ts +0 -28
  210. package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
  211. package/dest/avm/serialization/bytecode_serialization.d.ts +0 -21
  212. package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
  213. package/dest/avm/serialization/instruction_serialization.d.ts +0 -105
  214. package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
  215. package/dest/avm/test_utils.d.ts +0 -16
  216. package/dest/avm/test_utils.d.ts.map +0 -1
  217. package/dest/client/client_execution_context.d.ts +0 -214
  218. package/dest/client/client_execution_context.d.ts.map +0 -1
  219. package/dest/client/db_oracle.d.ts +0 -229
  220. package/dest/client/db_oracle.d.ts.map +0 -1
  221. package/dest/client/execution_note_cache.d.ts +0 -93
  222. package/dest/client/execution_note_cache.d.ts.map +0 -1
  223. package/dest/client/index.d.ts +0 -15
  224. package/dest/client/index.d.ts.map +0 -1
  225. package/dest/client/pick_notes.d.ts +0 -85
  226. package/dest/client/pick_notes.d.ts.map +0 -1
  227. package/dest/client/private_execution.d.ts +0 -19
  228. package/dest/client/private_execution.d.ts.map +0 -1
  229. package/dest/client/simulator.d.ts +0 -60
  230. package/dest/client/simulator.d.ts.map +0 -1
  231. package/dest/client/unconstrained_execution.d.ts +0 -10
  232. package/dest/client/unconstrained_execution.d.ts.map +0 -1
  233. package/dest/client/view_data_oracle.d.ts +0 -159
  234. package/dest/client/view_data_oracle.d.ts.map +0 -1
  235. package/dest/common/debug_fn_name.d.ts +0 -4
  236. package/dest/common/debug_fn_name.d.ts.map +0 -1
  237. package/dest/common/errors.d.ts +0 -54
  238. package/dest/common/errors.d.ts.map +0 -1
  239. package/dest/common/hashed_values_cache.d.ts +0 -28
  240. package/dest/common/hashed_values_cache.d.ts.map +0 -1
  241. package/dest/common/index.d.ts +0 -3
  242. package/dest/common/index.d.ts.map +0 -1
  243. package/dest/common/message_load_oracle_inputs.d.ts +0 -15
  244. package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
  245. package/dest/common/simulation_provider.d.ts +0 -19
  246. package/dest/common/simulation_provider.d.ts.map +0 -1
  247. package/dest/common.d.ts +0 -2
  248. package/dest/common.d.ts.map +0 -1
  249. package/dest/providers/acvm_native.d.ts +0 -40
  250. package/dest/providers/acvm_native.d.ts.map +0 -1
  251. package/dest/providers/acvm_wasm.d.ts +0 -15
  252. package/dest/providers/acvm_wasm.d.ts.map +0 -1
  253. package/dest/providers/acvm_wasm_with_blobs.d.ts +0 -19
  254. package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
  255. package/dest/providers/factory.d.ts +0 -12
  256. package/dest/providers/factory.d.ts.map +0 -1
  257. package/dest/providers/index.d.ts +0 -5
  258. package/dest/providers/index.d.ts.map +0 -1
  259. package/dest/public/bytecode_errors.d.ts +0 -4
  260. package/dest/public/bytecode_errors.d.ts.map +0 -1
  261. package/dest/public/db_interfaces.d.ts +0 -105
  262. package/dest/public/db_interfaces.d.ts.map +0 -1
  263. package/dest/public/execution.d.ts +0 -102
  264. package/dest/public/execution.d.ts.map +0 -1
  265. package/dest/public/executor_metrics.d.ts +0 -13
  266. package/dest/public/executor_metrics.d.ts.map +0 -1
  267. package/dest/public/fee_payment.d.ts +0 -11
  268. package/dest/public/fee_payment.d.ts.map +0 -1
  269. package/dest/public/fixtures/index.d.ts +0 -3
  270. package/dest/public/fixtures/index.d.ts.map +0 -1
  271. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +0 -21
  272. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +0 -1
  273. package/dest/public/fixtures/utils.d.ts +0 -17
  274. package/dest/public/fixtures/utils.d.ts.map +0 -1
  275. package/dest/public/index.d.ts +0 -9
  276. package/dest/public/index.d.ts.map +0 -1
  277. package/dest/public/public_db_sources.d.ts +0 -81
  278. package/dest/public/public_db_sources.d.ts.map +0 -1
  279. package/dest/public/public_processor.d.ts +0 -72
  280. package/dest/public/public_processor.d.ts.map +0 -1
  281. package/dest/public/public_processor_metrics.d.ts +0 -27
  282. package/dest/public/public_processor_metrics.d.ts.map +0 -1
  283. package/dest/public/public_tx_context.d.ts +0 -131
  284. package/dest/public/public_tx_context.d.ts.map +0 -1
  285. package/dest/public/public_tx_simulator.d.ts +0 -99
  286. package/dest/public/public_tx_simulator.d.ts.map +0 -1
  287. package/dest/public/side_effect_errors.d.ts +0 -4
  288. package/dest/public/side_effect_errors.d.ts.map +0 -1
  289. package/dest/public/side_effect_trace.d.ts +0 -126
  290. package/dest/public/side_effect_trace.d.ts.map +0 -1
  291. package/dest/public/side_effect_trace_interface.d.ts +0 -32
  292. package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
  293. package/dest/public/unique_class_ids.d.ts +0 -37
  294. package/dest/public/unique_class_ids.d.ts.map +0 -1
  295. package/dest/public/utils.d.ts +0 -5
  296. package/dest/public/utils.d.ts.map +0 -1
  297. package/dest/server.d.ts +0 -6
  298. package/dest/server.d.ts.map +0 -1
  299. package/dest/stats/index.d.ts +0 -2
  300. package/dest/stats/index.d.ts.map +0 -1
  301. package/dest/stats/stats.d.ts +0 -4
  302. package/dest/stats/stats.d.ts.map +0 -1
  303. package/dest/test/utils.d.ts +0 -12
  304. package/dest/test/utils.d.ts.map +0 -1
@@ -1,13 +1,11 @@
1
- import { MEM_TAG_FF, MEM_TAG_U1, MEM_TAG_U8, MEM_TAG_U16, MEM_TAG_U32, MEM_TAG_U64, MEM_TAG_U128, } from '@aztec/circuits.js';
1
+ import { MEM_TAG_FF, MEM_TAG_U1, MEM_TAG_U8, MEM_TAG_U16, MEM_TAG_U32, MEM_TAG_U64, MEM_TAG_U128 } from '@aztec/circuits.js';
2
2
  import { AztecAddress } from '@aztec/foundation/aztec-address';
3
3
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
4
4
  import { Fr } from '@aztec/foundation/fields';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
6
  import { strict as assert } from 'assert';
7
- import { InstructionExecutionError, InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError, } from './errors.js';
8
- import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
9
- /** MemoryValue gathers the common operations for all memory types. */
10
- export class MemoryValue {
7
+ import { InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError } from './errors.js';
8
+ /** MemoryValue gathers the common operations for all memory types. */ export class MemoryValue {
11
9
  // To field
12
10
  toFr() {
13
11
  return new Fr(this.toBigInt());
@@ -23,76 +21,73 @@ export class MemoryValue {
23
21
  return `${this.constructor.name}(0x${this.toBigInt().toString(16)})`;
24
22
  }
25
23
  }
26
- /** IntegralValue gathers the common operations for all integral memory types. */
27
- export class IntegralValue extends MemoryValue {
24
+ /** IntegralValue gathers the common operations for all integral memory types. */ export class IntegralValue extends MemoryValue {
28
25
  }
29
26
  /**
30
27
  * This function creates a class for unsigned integers of a given number of bits.
31
28
  * In TypeScript terms, it's a class mixin.
32
- **/
33
- function UnsignedIntegerClassFactory(bits) {
34
- var _a;
35
- return _a = class NewUintClass extends IntegralValue {
36
- constructor(n) {
37
- super();
38
- this.n = BigInt(n);
39
- assert(n < _a.mod, `Value ${n} is too large for ${this.constructor.name}.`);
40
- }
41
- build(n) {
42
- return new this.constructor.prototype.constructor(n);
43
- }
44
- add(rhs) {
45
- return this.build((this.n + rhs.n) & _a.bitmask);
46
- }
47
- sub(rhs) {
48
- const res = this.n - rhs.n;
49
- return this.build(res >= 0 ? res : res + _a.mod);
50
- }
51
- mul(rhs) {
52
- return this.build((this.n * rhs.n) & _a.bitmask);
53
- }
54
- div(rhs) {
55
- return this.build(this.n / rhs.n);
56
- }
57
- // No sign extension.
58
- shr(rhs) {
59
- // Note that this.n is > 0 by class invariant.
60
- return this.build(this.n >> rhs.n);
61
- }
62
- shl(rhs) {
63
- return this.build((this.n << rhs.n) & _a.bitmask);
64
- }
65
- and(rhs) {
66
- return this.build(this.n & rhs.n);
67
- }
68
- or(rhs) {
69
- return this.build(this.n | rhs.n);
70
- }
71
- xor(rhs) {
72
- return this.build(this.n ^ rhs.n);
73
- }
74
- not() {
75
- return this.build(~this.n & _a.bitmask);
76
- }
77
- equals(rhs) {
78
- return this.n === rhs.n;
79
- }
80
- lt(rhs) {
81
- return this.n < rhs.n;
82
- }
83
- toBigInt() {
84
- return this.n;
85
- }
86
- toBuffer() {
87
- if (bits < 8) {
88
- return toBufferBE(this.n, 1);
89
- }
90
- return toBufferBE(this.n, bits / 8);
29
+ **/ function UnsignedIntegerClassFactory(bits) {
30
+ return class NewUintClass extends IntegralValue {
31
+ static mod = 1n << BigInt(bits);
32
+ static bitmask = this.mod - 1n;
33
+ n;
34
+ constructor(n){
35
+ super();
36
+ this.n = BigInt(n);
37
+ assert(n < NewUintClass.mod, `Value ${n} is too large for ${this.constructor.name}.`);
38
+ }
39
+ build(n) {
40
+ return new this.constructor.prototype.constructor(n);
41
+ }
42
+ add(rhs) {
43
+ return this.build(this.n + rhs.n & NewUintClass.bitmask);
44
+ }
45
+ sub(rhs) {
46
+ const res = this.n - rhs.n;
47
+ return this.build(res >= 0 ? res : res + NewUintClass.mod);
48
+ }
49
+ mul(rhs) {
50
+ return this.build(this.n * rhs.n & NewUintClass.bitmask);
51
+ }
52
+ div(rhs) {
53
+ return this.build(this.n / rhs.n);
54
+ }
55
+ // No sign extension.
56
+ shr(rhs) {
57
+ // Note that this.n is > 0 by class invariant.
58
+ return this.build(this.n >> rhs.n);
59
+ }
60
+ shl(rhs) {
61
+ return this.build(this.n << rhs.n & NewUintClass.bitmask);
62
+ }
63
+ and(rhs) {
64
+ return this.build(this.n & rhs.n);
65
+ }
66
+ or(rhs) {
67
+ return this.build(this.n | rhs.n);
68
+ }
69
+ xor(rhs) {
70
+ return this.build(this.n ^ rhs.n);
71
+ }
72
+ not() {
73
+ return this.build(~this.n & NewUintClass.bitmask);
74
+ }
75
+ equals(rhs) {
76
+ return this.n === rhs.n;
77
+ }
78
+ lt(rhs) {
79
+ return this.n < rhs.n;
80
+ }
81
+ toBigInt() {
82
+ return this.n;
83
+ }
84
+ toBuffer() {
85
+ if (bits < 8) {
86
+ return toBufferBE(this.n, 1);
91
87
  }
92
- },
93
- _a.mod = 1n << BigInt(bits),
94
- _a.bitmask = _a.mod - 1n,
95
- _a;
88
+ return toBufferBE(this.n, bits / 8);
89
+ }
90
+ };
96
91
  }
97
92
  // Now we can create the classes for each unsigned integer type.
98
93
  // We extend instead of just assigning so that the class has the right name.
@@ -110,7 +105,9 @@ export class Uint64 extends UnsignedIntegerClassFactory(64) {
110
105
  export class Uint128 extends UnsignedIntegerClassFactory(128) {
111
106
  }
112
107
  export class Field extends MemoryValue {
113
- constructor(v) {
108
+ static MODULUS = Fr.MODULUS;
109
+ rep;
110
+ constructor(v){
114
111
  super();
115
112
  this.rep = new Fr(v);
116
113
  }
@@ -147,39 +144,39 @@ export class Field extends MemoryValue {
147
144
  return this.rep.toBuffer();
148
145
  }
149
146
  }
150
- Field.MODULUS = Fr.MODULUS;
151
- export var TypeTag;
152
- (function (TypeTag) {
153
- TypeTag[TypeTag["FIELD"] = 0] = "FIELD";
154
- TypeTag[TypeTag["UINT1"] = 1] = "UINT1";
155
- TypeTag[TypeTag["UINT8"] = 2] = "UINT8";
156
- TypeTag[TypeTag["UINT16"] = 3] = "UINT16";
157
- TypeTag[TypeTag["UINT32"] = 4] = "UINT32";
158
- TypeTag[TypeTag["UINT64"] = 5] = "UINT64";
159
- TypeTag[TypeTag["UINT128"] = 6] = "UINT128";
160
- TypeTag[TypeTag["INVALID"] = 7] = "INVALID";
161
- })(TypeTag || (TypeTag = {}));
147
+ export var TypeTag = /*#__PURE__*/ function(TypeTag) {
148
+ TypeTag[TypeTag["FIELD"] = MEM_TAG_FF] = "FIELD";
149
+ TypeTag[TypeTag["UINT1"] = MEM_TAG_U1] = "UINT1";
150
+ TypeTag[TypeTag["UINT8"] = MEM_TAG_U8] = "UINT8";
151
+ TypeTag[TypeTag["UINT16"] = MEM_TAG_U16] = "UINT16";
152
+ TypeTag[TypeTag["UINT32"] = MEM_TAG_U32] = "UINT32";
153
+ TypeTag[TypeTag["UINT64"] = MEM_TAG_U64] = "UINT64";
154
+ TypeTag[TypeTag["UINT128"] = MEM_TAG_U128] = "UINT128";
155
+ TypeTag[TypeTag["INVALID"] = void 0] = "INVALID";
156
+ return TypeTag;
157
+ }({});
162
158
  export class TaggedMemory {
163
- constructor() {
159
+ static log = createLogger('simulator:avm:memory');
160
+ // Whether to track and validate memory accesses for each instruction.
161
+ static TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
162
+ // Memory is modelled by a map with key type being number.
163
+ // We however restrict the keys to be non-negative integers smaller than
164
+ // MAX_MEMORY_SIZE.
165
+ static MAX_MEMORY_SIZE = Number(1n << 32n);
166
+ _mem;
167
+ constructor(){
164
168
  this._mem = new Map();
165
169
  }
166
170
  getMaxMemorySize() {
167
171
  return TaggedMemory.MAX_MEMORY_SIZE;
168
172
  }
169
- /** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
170
- track(type = 'instruction') {
171
- return TaggedMemory.TRACK_MEMORY_ACCESSES ? new MeteredTaggedMemory(this, type) : this;
172
- }
173
173
  get(offset) {
174
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
175
- const value = this.getAs(offset);
176
- return value;
174
+ return this.getAs(offset);
177
175
  }
178
176
  getAs(offset) {
179
- assert(Number.isInteger(offset));
180
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
177
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
181
178
  const word = this._mem.get(offset);
182
- TaggedMemory.log.trace(`get(${offset}) = ${word}`);
179
+ //TaggedMemory.log.trace(`get(${offset}) = ${word}`);
183
180
  if (word === undefined) {
184
181
  TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
185
182
  return new Field(0);
@@ -192,7 +189,7 @@ export class TaggedMemory {
192
189
  throw new MemorySliceOutOfRangeError(offset, size);
193
190
  }
194
191
  const slice = new Array(size);
195
- for (let i = 0; i < size; i++) {
192
+ for(let i = 0; i < size; i++){
196
193
  slice[i] = this._mem.get(offset + i) ?? new Field(0);
197
194
  }
198
195
  TaggedMemory.log.trace(`getSlice(${offset}, ${size}) = ${slice}`);
@@ -205,30 +202,27 @@ export class TaggedMemory {
205
202
  return this.getSlice(offset, size).map(TaggedMemory.getTag);
206
203
  }
207
204
  set(offset, v) {
208
- assert(Number.isInteger(offset));
209
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
205
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
210
206
  this._mem.set(offset, v);
211
- TaggedMemory.log.trace(`set(${offset}, ${v})`);
207
+ //TaggedMemory.log.trace(`set(${offset}, ${v})`);
212
208
  }
213
209
  setSlice(offset, slice) {
214
210
  assert(Number.isInteger(offset));
215
211
  if (offset + slice.length > TaggedMemory.MAX_MEMORY_SIZE) {
216
212
  throw new MemorySliceOutOfRangeError(offset, slice.length);
217
213
  }
218
- slice.forEach((element, idx) => {
214
+ slice.forEach((element, idx)=>{
219
215
  this._mem.set(offset + idx, element);
220
216
  });
221
217
  TaggedMemory.log.trace(`setSlice(${offset}, ${slice})`);
222
218
  }
223
219
  getTag(offset) {
224
- assert(Number.isInteger(offset));
225
- assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
220
+ assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
226
221
  return TaggedMemory.getTag(this._mem.get(offset));
227
222
  }
228
223
  /**
229
- * Check that the memory at the given offset matches the specified tag.
230
- */
231
- checkTag(tag, offset) {
224
+ * Check that the memory at the given offset matches the specified tag.
225
+ */ checkTag(tag, offset) {
232
226
  const gotTag = this.getTag(offset);
233
227
  if (gotTag !== tag) {
234
228
  throw TagCheckError.forOffset(offset, TypeTag[gotTag], TypeTag[tag]);
@@ -238,192 +232,109 @@ export class TaggedMemory {
238
232
  this.checkTag(TypeTag.UINT32, offset);
239
233
  }
240
234
  static checkIsIntegralTag(tag) {
241
- if (![TypeTag.UINT1, TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag)) {
235
+ if (!INTEGRAL_TAGS.has(tag)) {
242
236
  throw TagCheckError.forTag(TypeTag[tag], 'integral');
243
237
  }
244
238
  }
245
239
  static checkIsValidTag(tagNumber) {
246
- if (![
247
- TypeTag.FIELD,
248
- TypeTag.UINT1,
249
- TypeTag.UINT8,
250
- TypeTag.UINT16,
251
- TypeTag.UINT32,
252
- TypeTag.UINT64,
253
- TypeTag.UINT128,
254
- ].includes(tagNumber)) {
240
+ if (!VALID_TAGS.has(tagNumber)) {
255
241
  throw new InvalidTagValueError(tagNumber);
256
242
  }
257
243
  }
258
244
  /**
259
- * Check tags for memory at all of the specified offsets.
260
- */
261
- checkTags(tag, ...offsets) {
262
- for (const offset of offsets) {
245
+ * Check tags for memory at all of the specified offsets.
246
+ */ checkTags(tag, ...offsets) {
247
+ for (const offset of offsets){
263
248
  this.checkTag(tag, offset);
264
249
  }
265
250
  }
266
251
  /**
267
- * Check that all tags at the given offsets are the same.
268
- */
269
- checkTagsAreSame(...offsets) {
270
- const tag = this.getTag(offsets[0]);
271
- for (let i = 1; i < offsets.length; i++) {
272
- this.checkTag(tag, offsets[i]);
273
- }
252
+ * Check that all tags at the given offsets are the same.
253
+ */ checkTagsAreSame(offset0, offset1) {
254
+ const tag0 = this.getTag(offset0);
255
+ this.checkTag(tag0, offset1);
274
256
  }
275
257
  /**
276
- * Check tags for all memory in the specified range.
277
- */
278
- checkTagsRange(tag, startOffset, size) {
279
- for (let offset = startOffset; offset < startOffset + size; offset++) {
258
+ * Check tags for all memory in the specified range.
259
+ */ checkTagsRange(tag, startOffset, size) {
260
+ for(let offset = startOffset; offset < startOffset + size; offset++){
280
261
  this.checkTag(tag, offset);
281
262
  }
282
263
  }
283
- // TODO: this might be slow, but I don't want to have the types know of their tags.
284
- // It might be possible to have a map<Prototype, TypeTag>.
285
264
  static getTag(v) {
286
- let tag = TypeTag.INVALID;
287
- // Not sure why, but using instanceof here doesn't work and leads odd behavior,
288
- // but using constructor.name does the job...
289
265
  if (v === undefined) {
290
- tag = TypeTag.FIELD; // uninitialized memory is Field(0)
291
- }
292
- else if (v.constructor.name == 'Field') {
293
- tag = TypeTag.FIELD;
266
+ return TypeTag.FIELD; // uninitialized memory is Field(0)
267
+ } else {
268
+ return TAG_FOR_MEM_VAL.get(v.constructor.name) ?? TypeTag.INVALID;
294
269
  }
295
- else if (v.constructor.name == 'Uint1') {
296
- tag = TypeTag.UINT1;
297
- }
298
- else if (v.constructor.name == 'Uint8') {
299
- tag = TypeTag.UINT8;
300
- }
301
- else if (v.constructor.name == 'Uint16') {
302
- tag = TypeTag.UINT16;
303
- }
304
- else if (v.constructor.name == 'Uint32') {
305
- tag = TypeTag.UINT32;
306
- }
307
- else if (v.constructor.name == 'Uint64') {
308
- tag = TypeTag.UINT64;
309
- }
310
- else if (v.constructor.name == 'Uint128') {
311
- tag = TypeTag.UINT128;
312
- }
313
- return tag;
314
270
  }
315
271
  // Truncates the value to fit the type.
316
272
  static buildFromTagTruncating(v, tag) {
317
273
  v = BigInt(v);
318
- switch (tag) {
274
+ switch(tag){
319
275
  case TypeTag.FIELD:
320
276
  return new Field(v);
321
277
  case TypeTag.UINT1:
322
278
  return new Uint1(v & 1n);
323
279
  case TypeTag.UINT8:
324
- return new Uint8(v & ((1n << 8n) - 1n));
280
+ return new Uint8(v & (1n << 8n) - 1n);
325
281
  case TypeTag.UINT16:
326
- return new Uint16(v & ((1n << 16n) - 1n));
282
+ return new Uint16(v & (1n << 16n) - 1n);
327
283
  case TypeTag.UINT32:
328
- return new Uint32(v & ((1n << 32n) - 1n));
284
+ return new Uint32(v & (1n << 32n) - 1n);
329
285
  case TypeTag.UINT64:
330
- return new Uint64(v & ((1n << 64n) - 1n));
286
+ return new Uint64(v & (1n << 64n) - 1n);
331
287
  case TypeTag.UINT128:
332
- return new Uint128(v & ((1n << 128n) - 1n));
288
+ return new Uint128(v & (1n << 128n) - 1n);
333
289
  default:
334
290
  throw new InvalidTagValueError(tag);
335
291
  }
336
292
  }
337
- /** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
338
- assert(_operations) { }
339
- }
340
- TaggedMemory.log = createLogger('simulator:avm:memory');
341
- // Whether to track and validate memory accesses for each instruction.
342
- TaggedMemory.TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
343
- // Memory is modelled by a map with key type being number.
344
- // We however restrict the keys to be non-negative integers smaller than
345
- // MAX_MEMORY_SIZE.
346
- TaggedMemory.MAX_MEMORY_SIZE = Number(1n << 32n);
347
- /** Tagged memory wrapper with metering for each memory read and write operation. */
348
- export class MeteredTaggedMemory {
349
- constructor(wrapped, type = 'instruction') {
350
- this.wrapped = wrapped;
351
- this.type = type;
352
- this.reads = 0;
353
- this.writes = 0;
354
- }
355
- /** Returns the number of reads and writes tracked so far and resets them to zero. */
356
- reset() {
357
- const stats = { reads: this.reads, writes: this.writes };
358
- this.reads = 0;
359
- this.writes = 0;
360
- return stats;
361
- }
362
- /**
363
- * Asserts that the exact number of memory operations have been performed.
364
- * Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
365
- */
366
- assert(operations) {
367
- const { reads: expectedReads, writes: expectedWrites, addressing, } = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
368
- const totalExpectedReads = expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
369
- const { reads: actualReads, writes: actualWrites } = this.reset();
370
- if (actualReads !== totalExpectedReads) {
371
- throw new InstructionExecutionError(`Incorrect number of memory reads for ${this.type}: expected ${totalExpectedReads} but executed ${actualReads}`);
372
- }
373
- if (actualWrites !== expectedWrites) {
374
- throw new InstructionExecutionError(`Incorrect number of memory writes for ${this.type}: expected ${expectedWrites} but executed ${actualWrites}`);
375
- }
376
- }
377
- getMaxMemorySize() {
378
- return this.wrapped.getMaxMemorySize();
379
- }
380
- track(type = 'instruction') {
381
- return new MeteredTaggedMemory(this.wrapped, type);
382
- }
383
- get(offset) {
384
- this.reads++;
385
- return this.wrapped.get(offset);
386
- }
387
- getSliceAs(offset, size) {
388
- this.reads += size;
389
- return this.wrapped.getSliceAs(offset, size);
390
- }
391
- getAs(offset) {
392
- this.reads++;
393
- return this.wrapped.getAs(offset);
394
- }
395
- getSlice(offset, size) {
396
- this.reads += size;
397
- return this.wrapped.getSlice(offset, size);
398
- }
399
- set(offset, v) {
400
- this.writes++;
401
- this.wrapped.set(offset, v);
402
- }
403
- setSlice(offset, vs) {
404
- this.writes += vs.length;
405
- this.wrapped.setSlice(offset, vs);
406
- }
407
- getSliceTags(offset, size) {
408
- return this.wrapped.getSliceTags(offset, size);
409
- }
410
- getTag(offset) {
411
- return this.wrapped.getTag(offset);
412
- }
413
- checkTag(tag, offset) {
414
- this.wrapped.checkTag(tag, offset);
415
- }
416
- checkIsValidMemoryOffsetTag(offset) {
417
- this.wrapped.checkIsValidMemoryOffsetTag(offset);
418
- }
419
- checkTags(tag, ...offsets) {
420
- this.wrapped.checkTags(tag, ...offsets);
421
- }
422
- checkTagsAreSame(...offsets) {
423
- this.wrapped.checkTagsAreSame(...offsets);
424
- }
425
- checkTagsRange(tag, startOffset, size) {
426
- this.wrapped.checkTagsRange(tag, startOffset, size);
427
- }
428
293
  }
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lbW9yeV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX21lbW9yeV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTFDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLDBCQUEwQixFQUMxQixhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxzRUFBc0U7QUFDdEUsTUFBTSxPQUFnQixXQUFXO0lBa0IvQixXQUFXO0lBQ0osSUFBSTtRQUNULE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkNBQTZDO0lBQ3RDLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sR0FBRyxJQUFJ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
294
+ const TAG_FOR_MEM_VAL = new Map([
295
+ [
296
+ 'Field',
297
+ TypeTag.FIELD
298
+ ],
299
+ [
300
+ 'Uint1',
301
+ TypeTag.UINT1
302
+ ],
303
+ [
304
+ 'Uint8',
305
+ TypeTag.UINT8
306
+ ],
307
+ [
308
+ 'Uint16',
309
+ TypeTag.UINT16
310
+ ],
311
+ [
312
+ 'Uint32',
313
+ TypeTag.UINT32
314
+ ],
315
+ [
316
+ 'Uint64',
317
+ TypeTag.UINT64
318
+ ],
319
+ [
320
+ 'Uint128',
321
+ TypeTag.UINT128
322
+ ]
323
+ ]);
324
+ const VALID_TAGS = new Set([
325
+ TypeTag.FIELD,
326
+ TypeTag.UINT1,
327
+ TypeTag.UINT8,
328
+ TypeTag.UINT16,
329
+ TypeTag.UINT32,
330
+ TypeTag.UINT64,
331
+ TypeTag.UINT128
332
+ ]);
333
+ const INTEGRAL_TAGS = new Set([
334
+ TypeTag.UINT1,
335
+ TypeTag.UINT8,
336
+ TypeTag.UINT16,
337
+ TypeTag.UINT32,
338
+ TypeTag.UINT64,
339
+ TypeTag.UINT128
340
+ ]);