@aztec/simulator 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc

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 (241) hide show
  1. package/README.md +6 -4
  2. package/dest/common/errors.d.ts +7 -1
  3. package/dest/common/errors.d.ts.map +1 -1
  4. package/dest/private/acvm/acvm.d.ts +4 -2
  5. package/dest/private/acvm/acvm.d.ts.map +1 -1
  6. package/dest/private/acvm/acvm.js +4 -3
  7. package/dest/private/acvm_native.d.ts +5 -3
  8. package/dest/private/acvm_native.d.ts.map +1 -1
  9. package/dest/private/acvm_native.js +8 -6
  10. package/dest/private/acvm_wasm.d.ts +4 -3
  11. package/dest/private/acvm_wasm.d.ts.map +1 -1
  12. package/dest/private/acvm_wasm.js +4 -4
  13. package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
  14. package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
  15. package/dest/private/circuit_recording/circuit_recorder.js +20 -17
  16. package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
  17. package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
  18. package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
  19. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
  20. package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
  21. package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
  22. package/dest/private/factory.d.ts +3 -3
  23. package/dest/private/factory.d.ts.map +1 -1
  24. package/dest/private/factory.js +7 -4
  25. package/dest/public/avm/avm_context.d.ts +3 -3
  26. package/dest/public/avm/avm_context.d.ts.map +1 -1
  27. package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
  28. package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
  29. package/dest/public/avm/avm_contract_call_result.js +3 -3
  30. package/dest/public/avm/avm_execution_environment.d.ts +6 -5
  31. package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
  32. package/dest/public/avm/avm_gas.js +3 -3
  33. package/dest/public/avm/avm_machine_state.d.ts +6 -5
  34. package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
  35. package/dest/public/avm/avm_machine_state.js +3 -2
  36. package/dest/public/avm/avm_memory_types.d.ts +1 -1
  37. package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
  38. package/dest/public/avm/avm_memory_types.js +3 -0
  39. package/dest/public/avm/avm_simulator.d.ts +3 -2
  40. package/dest/public/avm/avm_simulator.d.ts.map +1 -1
  41. package/dest/public/avm/avm_simulator.js +5 -4
  42. package/dest/public/avm/calldata.d.ts +51 -0
  43. package/dest/public/avm/calldata.d.ts.map +1 -0
  44. package/dest/public/avm/calldata.js +63 -0
  45. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
  46. package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
  47. package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
  48. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
  49. package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
  50. package/dest/public/avm/fixtures/avm_simulation_tester.js +3 -2
  51. package/dest/public/avm/fixtures/initializers.d.ts +1 -1
  52. package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
  53. package/dest/public/avm/fixtures/initializers.js +2 -1
  54. package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
  55. package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
  56. package/dest/public/avm/opcodes/accrued_substate.js +42 -43
  57. package/dest/public/avm/opcodes/arithmetic.d.ts +8 -8
  58. package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
  59. package/dest/public/avm/opcodes/arithmetic.js +1 -1
  60. package/dest/public/avm/opcodes/bitwise.d.ts +7 -7
  61. package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
  62. package/dest/public/avm/opcodes/bitwise.js +5 -5
  63. package/dest/public/avm/opcodes/comparators.d.ts +4 -4
  64. package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
  65. package/dest/public/avm/opcodes/comparators.js +1 -1
  66. package/dest/public/avm/opcodes/contract.d.ts +3 -3
  67. package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
  68. package/dest/public/avm/opcodes/contract.js +8 -8
  69. package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
  70. package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
  71. package/dest/public/avm/opcodes/control_flow.js +4 -4
  72. package/dest/public/avm/opcodes/conversion.d.ts +3 -3
  73. package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
  74. package/dest/public/avm/opcodes/conversion.js +4 -4
  75. package/dest/public/avm/opcodes/ec_add.d.ts +4 -4
  76. package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
  77. package/dest/public/avm/opcodes/ec_add.js +15 -6
  78. package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
  79. package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
  80. package/dest/public/avm/opcodes/environment_getters.js +6 -6
  81. package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
  82. package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
  83. package/dest/public/avm/opcodes/external_calls.js +23 -22
  84. package/dest/public/avm/opcodes/hashing.d.ts +8 -8
  85. package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
  86. package/dest/public/avm/opcodes/hashing.js +12 -12
  87. package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
  88. package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
  89. package/dest/public/avm/opcodes/instruction_impl.js +4 -4
  90. package/dest/public/avm/opcodes/memory.d.ts +14 -14
  91. package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
  92. package/dest/public/avm/opcodes/memory.js +25 -25
  93. package/dest/public/avm/opcodes/misc.d.ts +3 -3
  94. package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
  95. package/dest/public/avm/opcodes/misc.js +4 -4
  96. package/dest/public/avm/opcodes/storage.d.ts +16 -15
  97. package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
  98. package/dest/public/avm/opcodes/storage.js +34 -24
  99. package/dest/public/avm/serialization/bytecode_serialization.js +3 -3
  100. package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
  101. package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
  102. package/dest/public/avm/serialization/instruction_serialization.js +1 -1
  103. package/dest/public/debug_fn_name.d.ts +4 -4
  104. package/dest/public/debug_fn_name.d.ts.map +1 -1
  105. package/dest/public/debug_fn_name.js +7 -5
  106. package/dest/public/executor_metrics.d.ts +1 -1
  107. package/dest/public/executor_metrics.d.ts.map +1 -1
  108. package/dest/public/executor_metrics.js +12 -33
  109. package/dest/public/fixtures/amm_test.js +2 -2
  110. package/dest/public/fixtures/bulk_test.d.ts +3 -3
  111. package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
  112. package/dest/public/fixtures/bulk_test.js +1 -17
  113. package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -11
  114. package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
  115. package/dest/public/fixtures/custom_bytecode_tests.js +18 -18
  116. package/dest/public/fixtures/minimal_public_tx.js +2 -2
  117. package/dest/public/fixtures/opcode_spammer.d.ts +3 -4
  118. package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -1
  119. package/dest/public/fixtures/opcode_spammer.js +99 -127
  120. package/dest/public/fixtures/public_tx_simulation_tester.d.ts +1 -1
  121. package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
  122. package/dest/public/fixtures/public_tx_simulation_tester.js +29 -2
  123. package/dest/public/fixtures/utils.js +4 -4
  124. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +21 -7
  125. package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
  126. package/dest/public/fuzzing/avm_fuzzer_simulator.js +42 -10
  127. package/dest/public/fuzzing/avm_simulator_bin.js +29 -11
  128. package/dest/public/hinting_db_sources.d.ts +2 -2
  129. package/dest/public/hinting_db_sources.d.ts.map +1 -1
  130. package/dest/public/hinting_db_sources.js +3 -1
  131. package/dest/public/public_db_sources.d.ts +4 -3
  132. package/dest/public/public_db_sources.d.ts.map +1 -1
  133. package/dest/public/public_db_sources.js +4 -4
  134. package/dest/public/public_processor/guarded_merkle_tree.d.ts +2 -2
  135. package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
  136. package/dest/public/public_processor/guarded_merkle_tree.js +3 -1
  137. package/dest/public/public_processor/public_processor.d.ts +8 -4
  138. package/dest/public/public_processor/public_processor.d.ts.map +1 -1
  139. package/dest/public/public_processor/public_processor.js +425 -31
  140. package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
  141. package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
  142. package/dest/public/public_processor/public_processor_metrics.js +28 -45
  143. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +3 -2
  144. package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
  145. package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +2 -2
  146. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +5 -5
  147. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
  148. package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +10 -10
  149. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +4 -4
  150. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -1
  151. package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +7 -7
  152. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +4 -4
  153. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -1
  154. package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +6 -6
  155. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +3 -2
  156. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -1
  157. package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +2 -2
  158. package/dest/public/public_tx_simulator/factories.d.ts +3 -2
  159. package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
  160. package/dest/public/public_tx_simulator/factories.js +4 -4
  161. package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +1 -1
  162. package/dest/public/public_tx_simulator/public_tx_context.d.ts +4 -3
  163. package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
  164. package/dest/public/public_tx_simulator/public_tx_context.js +8 -8
  165. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +6 -4
  166. package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
  167. package/dest/public/public_tx_simulator/public_tx_simulator.js +14 -9
  168. package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
  169. package/dest/public/side_effect_trace.d.ts +5 -4
  170. package/dest/public/side_effect_trace.d.ts.map +1 -1
  171. package/dest/public/side_effect_trace.js +3 -3
  172. package/dest/public/state_manager/state_manager.d.ts +10 -4
  173. package/dest/public/state_manager/state_manager.d.ts.map +1 -1
  174. package/dest/public/state_manager/state_manager.js +14 -7
  175. package/dest/public/test_executor_metrics.d.ts +8 -2
  176. package/dest/public/test_executor_metrics.d.ts.map +1 -1
  177. package/dest/public/test_executor_metrics.js +24 -2
  178. package/package.json +17 -17
  179. package/src/private/acvm/acvm.ts +4 -3
  180. package/src/private/acvm_native.ts +11 -5
  181. package/src/private/acvm_wasm.ts +7 -3
  182. package/src/private/circuit_recording/circuit_recorder.ts +21 -18
  183. package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
  184. package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
  185. package/src/private/factory.ts +7 -4
  186. package/src/public/avm/avm_context.ts +2 -2
  187. package/src/public/avm/avm_contract_call_result.ts +8 -6
  188. package/src/public/avm/avm_execution_environment.ts +9 -4
  189. package/src/public/avm/avm_gas.ts +2 -2
  190. package/src/public/avm/avm_machine_state.ts +6 -5
  191. package/src/public/avm/avm_memory_types.ts +4 -0
  192. package/src/public/avm/avm_simulator.ts +8 -5
  193. package/src/public/avm/calldata.ts +100 -0
  194. package/src/public/avm/fixtures/account_proof.json +553 -0
  195. package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
  196. package/src/public/avm/fixtures/avm_simulation_tester.ts +8 -2
  197. package/src/public/avm/fixtures/initializers.ts +2 -1
  198. package/src/public/avm/opcodes/accrued_substate.ts +31 -34
  199. package/src/public/avm/opcodes/arithmetic.ts +1 -1
  200. package/src/public/avm/opcodes/bitwise.ts +3 -3
  201. package/src/public/avm/opcodes/comparators.ts +1 -1
  202. package/src/public/avm/opcodes/contract.ts +4 -7
  203. package/src/public/avm/opcodes/control_flow.ts +2 -2
  204. package/src/public/avm/opcodes/conversion.ts +3 -3
  205. package/src/public/avm/opcodes/ec_add.ts +13 -4
  206. package/src/public/avm/opcodes/environment_getters.ts +7 -7
  207. package/src/public/avm/opcodes/external_calls.ts +17 -15
  208. package/src/public/avm/opcodes/hashing.ts +6 -6
  209. package/src/public/avm/opcodes/instruction_impl.ts +2 -2
  210. package/src/public/avm/opcodes/memory.ts +19 -19
  211. package/src/public/avm/opcodes/misc.ts +2 -2
  212. package/src/public/avm/opcodes/storage.ts +30 -22
  213. package/src/public/avm/serialization/bytecode_serialization.ts +2 -2
  214. package/src/public/avm/serialization/instruction_serialization.ts +1 -1
  215. package/src/public/debug_fn_name.ts +10 -8
  216. package/src/public/executor_metrics.ts +9 -33
  217. package/src/public/fixtures/amm_test.ts +2 -2
  218. package/src/public/fixtures/bulk_test.ts +2 -2
  219. package/src/public/fixtures/custom_bytecode_tests.ts +27 -18
  220. package/src/public/fixtures/minimal_public_tx.ts +2 -2
  221. package/src/public/fixtures/opcode_spammer.ts +196 -117
  222. package/src/public/fixtures/public_tx_simulation_tester.ts +34 -3
  223. package/src/public/fixtures/utils.ts +4 -4
  224. package/src/public/fuzzing/avm_fuzzer_simulator.ts +61 -13
  225. package/src/public/fuzzing/avm_simulator_bin.ts +43 -8
  226. package/src/public/hinting_db_sources.ts +1 -1
  227. package/src/public/public_db_sources.ts +15 -5
  228. package/src/public/public_processor/guarded_merkle_tree.ts +1 -1
  229. package/src/public/public_processor/public_processor.ts +43 -20
  230. package/src/public/public_processor/public_processor_metrics.ts +16 -44
  231. package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +6 -3
  232. package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +17 -7
  233. package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +7 -5
  234. package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +7 -5
  235. package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +3 -1
  236. package/src/public/public_tx_simulator/factories.ts +6 -3
  237. package/src/public/public_tx_simulator/public_tx_context.ts +13 -6
  238. package/src/public/public_tx_simulator/public_tx_simulator.ts +21 -10
  239. package/src/public/side_effect_trace.ts +5 -2
  240. package/src/public/state_manager/state_manager.ts +29 -20
  241. package/src/public/test_executor_metrics.ts +27 -3
@@ -143,7 +143,7 @@
143
143
  * - `EMITNOTEHASH`: max 64 per TX
144
144
  * - `EMITNULLIFIER`: max 63 per TX (one reserved for TX nullifier)
145
145
  * - `SENDL2TOL1MSG`: max 8 per TX
146
- * - `EMITUNENCRYPTEDLOG`: limited by total log payload size
146
+ * - `EMITPUBLICLOG`: limited by total log payload size
147
147
  *
148
148
  * By having the inner contract REVERT after emitting side effects, those effects are discarded, allowing the outer contract to call it again. This enables thousands of opcode executions per TX instead of just the limit.
149
149
  *
@@ -152,12 +152,11 @@ import { Grumpkin } from '@aztec/foundation/crypto/grumpkin';
152
152
  import { randomBigInt } from '@aztec/foundation/crypto/random';
153
153
  import { Fr } from '@aztec/foundation/curves/bn254';
154
154
  import { PublicDataWrite } from '@aztec/stdlib/avm';
155
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
156
- import { computePublicDataTreeLeafSlot, siloNullifier } from '@aztec/stdlib/hash';
155
+ import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
157
156
  import { MerkleTreeId } from '@aztec/stdlib/trees';
158
157
  import assert from 'assert';
159
158
  import { Field, TaggedMemory, TypeTag, Uint1, Uint32, Uint64 } from '../avm/avm_memory_types.js';
160
- import { Add, And, Call, CalldataCopy, Cast, DebugLog, Div, EcAdd, EmitNoteHash, EmitNullifier, EmitUnencryptedLog, Eq, FieldDiv, GetContractInstance, GetEnvVar, InternalCall, InternalReturn, Jump, JumpI, KeccakF1600, L1ToL2MessageExists, Lt, Lte, Mov, Mul, Not, NoteHashExists, NullifierExists, Or, Poseidon2, Return, ReturndataCopy, ReturndataSize, Revert, SLoad, SStore, SendL2ToL1Message, Set, Sha256Compression, Shl, Shr, StaticCall, Sub, SuccessCopy, ToRadixBE, Xor } from '../avm/opcodes/index.js';
159
+ import { Add, And, Call, CalldataCopy, Cast, DebugLog, Div, EcAdd, EmitNoteHash, EmitNullifier, EmitPublicLog, Eq, FieldDiv, GetContractInstance, GetEnvVar, InternalCall, InternalReturn, Jump, JumpI, KeccakF1600, L1ToL2MessageExists, Lt, Lte, Mov, Mul, Not, NoteHashExists, NullifierExists, Or, Poseidon2, Return, ReturndataCopy, ReturndataSize, Revert, SLoad, SStore, SendL2ToL1Message, Set, Sha256Compression, Shl, Shr, StaticCall, Sub, SuccessCopy, ToRadixBE, Xor } from '../avm/opcodes/index.js';
161
160
  import { encodeToBytecode } from '../avm/serialization/bytecode_serialization.js';
162
161
  import { Opcode } from '../avm/serialization/instruction_serialization.js';
163
162
  import { deployCustomBytecode, executeCustomBytecode } from './custom_bytecode_tester.js';
@@ -169,8 +168,7 @@ import { deployCustomBytecode, executeCustomBytecode } from './custom_bytecode_t
169
168
  * before running the spammer so that existence checks can find them.
170
169
  */ export const WARM_NOTE_HASH = new Fr(0xdeadbeefn);
171
170
  export const WARM_L1_TO_L2_MSG = new Fr(0xcafebabedeadbeefn);
172
- /** Warm nullifier constants - uses a fixed address since NULLIFIEREXISTS takes address as parameter */ export const WARM_NULLIFIER = new Fr(0xdeadbeef0001n);
173
- export const WARM_NULLIFIER_ADDRESS = AztecAddress.fromNumber(0xbeef);
171
+ /** Warm nullifier constant - a pre-siloed nullifier value inserted directly into the tree */ export const WARM_SILOED_NULLIFIER = new Fr(0xdeadbeef0001n);
174
172
  /** Warm storage constants - storage is inserted for the deployed contract's address */ export const WARM_STORAGE_SLOT = new Fr(0xdeadbeef0002n);
175
173
  export const WARM_STORAGE_VALUE = new Fr(0xcafebabe0003n);
176
174
  /**
@@ -197,10 +195,9 @@ export const WARM_L1_TO_L2_MSG_LEAF_INDEX = 0n;
197
195
  await merkleTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [
198
196
  WARM_L1_TO_L2_MSG
199
197
  ]);
200
- // Insert siloed nullifier into nullifier tree
201
- const siloedNullifier = await siloNullifier(WARM_NULLIFIER_ADDRESS, WARM_NULLIFIER);
198
+ // Insert siloed nullifier into nullifier tree (already siloed - used directly by NULLIFIEREXISTS)
202
199
  await merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [
203
- siloedNullifier.toBuffer()
200
+ WARM_SILOED_NULLIFIER.toBuffer()
204
201
  ]);
205
202
  // Insert storage value into public data tree
206
203
  const leafSlot = await computePublicDataTreeLeafSlot(contractAddress, WARM_STORAGE_SLOT);
@@ -316,11 +313,11 @@ const MAX_U32 = 0xffffffffn;
316
313
  value: new Uint32(MAX_U32)
317
314
  },
318
315
  ()=>[
319
- new CalldataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET, /*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET, /*dstOffset=*/ CALL_ADDR_OFFSET)
316
+ new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET, /*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET, /*dstOffset=*/ CALL_ADDR_OFFSET)
320
317
  ]
321
318
  ],
322
319
  targetInstructions: ()=>[
323
- new Call(/*indirect=*/ 0, /*l2GasOffset=*/ CALL_L2_GAS_OFFSET, /*daGasOffset=*/ CALL_DA_GAS_OFFSET, /*addrOffset=*/ CALL_ADDR_OFFSET, /*argsSizeOffset=*/ CALL_ARGS_SIZE_OFFSET, /*argsOffset=*/ CALL_ARGS_OFFSET)
320
+ new Call(/*addressing_mode=*/ 0, /*l2GasOffset=*/ CALL_L2_GAS_OFFSET, /*daGasOffset=*/ CALL_DA_GAS_OFFSET, /*addrOffset=*/ CALL_ADDR_OFFSET, /*argsSizeOffset=*/ CALL_ARGS_SIZE_OFFSET, /*argsOffset=*/ CALL_ARGS_OFFSET)
324
321
  ],
325
322
  addressAsCalldata: true
326
323
  };
@@ -340,11 +337,11 @@ const STATIC_CALL_CONFIG = {
340
337
  value: new Uint32(MAX_U32)
341
338
  },
342
339
  ()=>[
343
- new CalldataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET, /*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET, /*dstOffset=*/ CALL_ADDR_OFFSET)
340
+ new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ CALL_COPY_SIZE_OFFSET, /*cdStartOffset=*/ CALL_CALLDATA_INDEX_OFFSET, /*dstOffset=*/ CALL_ADDR_OFFSET)
344
341
  ]
345
342
  ],
346
343
  targetInstructions: ()=>[
347
- new StaticCall(/*indirect=*/ 0, /*l2GasOffset=*/ CALL_L2_GAS_OFFSET, /*daGasOffset=*/ CALL_DA_GAS_OFFSET, /*addrOffset=*/ CALL_ADDR_OFFSET, /*argsSizeOffset=*/ CALL_ARGS_SIZE_OFFSET, /*argsOffset=*/ CALL_ARGS_OFFSET)
344
+ new StaticCall(/*addressing_mode=*/ 0, /*l2GasOffset=*/ CALL_L2_GAS_OFFSET, /*daGasOffset=*/ CALL_DA_GAS_OFFSET, /*addrOffset=*/ CALL_ADDR_OFFSET, /*argsSizeOffset=*/ CALL_ARGS_SIZE_OFFSET, /*argsOffset=*/ CALL_ARGS_OFFSET)
348
345
  ],
349
346
  addressAsCalldata: true
350
347
  };
@@ -372,7 +369,7 @@ const STATIC_CALL_CONFIG = {
372
369
  }
373
370
  ],
374
371
  targetInstructions: ()=>[
375
- new Add(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
372
+ new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
376
373
  ]
377
374
  })),
378
375
  [Opcode.SUB_8]: ALL_TAGS.map((tag)=>({
@@ -388,7 +385,7 @@ const STATIC_CALL_CONFIG = {
388
385
  }
389
386
  ],
390
387
  targetInstructions: ()=>[
391
- new Sub(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SUB_8, Sub.wireFormat8)
388
+ new Sub(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SUB_8, Sub.wireFormat8)
392
389
  ]
393
390
  })),
394
391
  [Opcode.MUL_8]: ALL_TAGS.map((tag)=>({
@@ -404,7 +401,7 @@ const STATIC_CALL_CONFIG = {
404
401
  }
405
402
  ],
406
403
  targetInstructions: ()=>[
407
- new Mul(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.MUL_8, Mul.wireFormat8)
404
+ new Mul(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.MUL_8, Mul.wireFormat8)
408
405
  ]
409
406
  })),
410
407
  // DIV doesn't support FIELD type
@@ -421,7 +418,7 @@ const STATIC_CALL_CONFIG = {
421
418
  }
422
419
  ],
423
420
  targetInstructions: ()=>[
424
- new Div(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.DIV_8, Div.wireFormat8)
421
+ new Div(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.DIV_8, Div.wireFormat8)
425
422
  ]
426
423
  })),
427
424
  // Field-only
@@ -438,7 +435,7 @@ const STATIC_CALL_CONFIG = {
438
435
  }
439
436
  ],
440
437
  targetInstructions: ()=>[
441
- new FieldDiv(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.FDIV_8, FieldDiv.wireFormat8)
438
+ new FieldDiv(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.FDIV_8, FieldDiv.wireFormat8)
442
439
  ]
443
440
  }
444
441
  ],
@@ -458,7 +455,7 @@ const STATIC_CALL_CONFIG = {
458
455
  }
459
456
  ],
460
457
  targetInstructions: ()=>[
461
- new Eq(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.EQ_8, Eq.wireFormat8)
458
+ new Eq(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.EQ_8, Eq.wireFormat8)
462
459
  ]
463
460
  })),
464
461
  [Opcode.LT_8]: ALL_TAGS.map((tag)=>({
@@ -474,7 +471,7 @@ const STATIC_CALL_CONFIG = {
474
471
  }
475
472
  ],
476
473
  targetInstructions: ()=>[
477
- new Lt(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.LT_8, Lt.wireFormat8)
474
+ new Lt(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.LT_8, Lt.wireFormat8)
478
475
  ]
479
476
  })),
480
477
  [Opcode.LTE_8]: ALL_TAGS.map((tag)=>({
@@ -490,7 +487,7 @@ const STATIC_CALL_CONFIG = {
490
487
  }
491
488
  ],
492
489
  targetInstructions: ()=>[
493
- new Lte(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.LTE_8, Lte.wireFormat8)
490
+ new Lte(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 2).as(Opcode.LTE_8, Lte.wireFormat8)
494
491
  ]
495
492
  })),
496
493
  // ═══════════════════════════════════════════════════════════════════════════
@@ -509,7 +506,7 @@ const STATIC_CALL_CONFIG = {
509
506
  }
510
507
  ],
511
508
  targetInstructions: ()=>[
512
- new And(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.AND_8, And.wireFormat8)
509
+ new And(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.AND_8, And.wireFormat8)
513
510
  ]
514
511
  })),
515
512
  [Opcode.OR_8]: INT_TAGS.map((tag)=>({
@@ -525,7 +522,7 @@ const STATIC_CALL_CONFIG = {
525
522
  }
526
523
  ],
527
524
  targetInstructions: ()=>[
528
- new Or(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.OR_8, Or.wireFormat8)
525
+ new Or(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.OR_8, Or.wireFormat8)
529
526
  ]
530
527
  })),
531
528
  [Opcode.XOR_8]: INT_TAGS.map((tag)=>({
@@ -541,7 +538,7 @@ const STATIC_CALL_CONFIG = {
541
538
  }
542
539
  ],
543
540
  targetInstructions: ()=>[
544
- new Xor(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.XOR_8, Xor.wireFormat8)
541
+ new Xor(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.XOR_8, Xor.wireFormat8)
545
542
  ]
546
543
  })),
547
544
  [Opcode.NOT_8]: INT_TAGS.map((tag)=>({
@@ -553,7 +550,7 @@ const STATIC_CALL_CONFIG = {
553
550
  }
554
551
  ],
555
552
  targetInstructions: ()=>[
556
- new Not(/*indirect=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 0).as(Opcode.NOT_8, Not.wireFormat8)
553
+ new Not(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 0).as(Opcode.NOT_8, Not.wireFormat8)
557
554
  ]
558
555
  })),
559
556
  [Opcode.SHL_8]: INT_TAGS.map((tag)=>({
@@ -569,7 +566,7 @@ const STATIC_CALL_CONFIG = {
569
566
  }
570
567
  ],
571
568
  targetInstructions: ()=>[
572
- new Shl(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SHL_8, Shl.wireFormat8)
569
+ new Shl(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SHL_8, Shl.wireFormat8)
573
570
  ]
574
571
  })),
575
572
  [Opcode.SHR_8]: INT_TAGS.map((tag)=>({
@@ -585,7 +582,7 @@ const STATIC_CALL_CONFIG = {
585
582
  }
586
583
  ],
587
584
  targetInstructions: ()=>[
588
- new Shr(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SHR_8, Shr.wireFormat8)
585
+ new Shr(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.SHR_8, Shr.wireFormat8)
589
586
  ]
590
587
  })),
591
588
  // ═══════════════════════════════════════════════════════════════════════════
@@ -600,7 +597,7 @@ const STATIC_CALL_CONFIG = {
600
597
  }
601
598
  ],
602
599
  targetInstructions: ()=>[
603
- new Cast(/*indirect=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1, /*dstTag=*/ TypeTag.UINT32).as(Opcode.CAST_8, Cast.wireFormat8)
600
+ new Cast(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1, /*dstTag=*/ TypeTag.UINT32).as(Opcode.CAST_8, Cast.wireFormat8)
604
601
  ]
605
602
  })),
606
603
  [Opcode.MOV_8]: ALL_TAGS.map((tag)=>({
@@ -612,7 +609,7 @@ const STATIC_CALL_CONFIG = {
612
609
  }
613
610
  ],
614
611
  targetInstructions: ()=>[
615
- new Mov(/*indirect=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1).as(Opcode.MOV_8, Mov.wireFormat8)
612
+ new Mov(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*dstOffset=*/ 1).as(Opcode.MOV_8, Mov.wireFormat8)
616
613
  ]
617
614
  })),
618
615
  // ═══════════════════════════════════════════════════════════════════════════
@@ -648,7 +645,7 @@ const STATIC_CALL_CONFIG = {
648
645
  {
649
646
  setup: [],
650
647
  targetInstructions: ()=>[
651
- new Set(/*indirect=*/ 0, /*dstOffset=*/ 0, /*inTag=*/ TypeTag.UINT128, /*value=*/ 4242424242424242n).as(Opcode.SET_128, Set.wireFormat128)
648
+ new Set(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*inTag=*/ TypeTag.UINT128, /*value=*/ 4242424242424242n).as(Opcode.SET_128, Set.wireFormat128)
652
649
  ]
653
650
  }
654
651
  ],
@@ -679,7 +676,7 @@ const STATIC_CALL_CONFIG = {
679
676
  }
680
677
  ],
681
678
  targetInstructions: ()=>[
682
- new JumpI(/*indirect=*/ 0, /*condOffset=*/ 0, /*loc=*/ 0)
679
+ new JumpI(/*addressing_mode=*/ 0, /*condOffset=*/ 0, /*loc=*/ 0)
683
680
  ]
684
681
  }
685
682
  ],
@@ -725,7 +722,7 @@ const STATIC_CALL_CONFIG = {
725
722
  }
726
723
  ],
727
724
  targetInstructions: ()=>[
728
- new Return(/*indirect=*/ 0, /*returnSizeOffset=*/ 0, /*returnOffset=*/ 0)
725
+ new Return(/*addressing_mode=*/ 0, /*returnSizeOffset=*/ 0, /*returnOffset=*/ 0)
729
726
  ],
730
727
  // Use the side-effect-limit pattern (even though it's not a side-effect) as it fits
731
728
  // this case (we want to CALL, RETURN, then CALL again back in parent). We omit "cleanup"
@@ -744,7 +741,7 @@ const STATIC_CALL_CONFIG = {
744
741
  }
745
742
  ],
746
743
  targetInstructions: ()=>[
747
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 0, /*returnOffset=*/ 1).as(Opcode.REVERT_8, Revert.wireFormat8)
744
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 0, /*returnOffset=*/ 1).as(Opcode.REVERT_8, Revert.wireFormat8)
748
745
  ],
749
746
  limit: 1
750
747
  }
@@ -756,7 +753,7 @@ const STATIC_CALL_CONFIG = {
756
753
  {
757
754
  setup: [],
758
755
  targetInstructions: ()=>[
759
- new GetEnvVar(/*indirect=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
756
+ new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
760
757
  ]
761
758
  }
762
759
  ],
@@ -776,7 +773,7 @@ const STATIC_CALL_CONFIG = {
776
773
  }
777
774
  ],
778
775
  targetInstructions: ()=>[
779
- new CalldataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
776
+ new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
780
777
  ]
781
778
  },
782
779
  {
@@ -795,7 +792,7 @@ const STATIC_CALL_CONFIG = {
795
792
  }
796
793
  ],
797
794
  targetInstructions: ()=>[
798
- new CalldataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
795
+ new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
799
796
  ]
800
797
  },
801
798
  {
@@ -812,7 +809,7 @@ const STATIC_CALL_CONFIG = {
812
809
  }
813
810
  ],
814
811
  targetInstructions: ()=>[
815
- new CalldataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
812
+ new CalldataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*cdStartOffset=*/ 1, /*dstOffset=*/ 2)
816
813
  ]
817
814
  }
818
815
  ],
@@ -820,7 +817,7 @@ const STATIC_CALL_CONFIG = {
820
817
  {
821
818
  setup: [],
822
819
  targetInstructions: ()=>[
823
- new SuccessCopy(/*indirect=*/ 0, /*dstOffset=*/ 0)
820
+ new SuccessCopy(/*addressing_mode=*/ 0, /*dstOffset=*/ 0)
824
821
  ]
825
822
  }
826
823
  ],
@@ -828,7 +825,7 @@ const STATIC_CALL_CONFIG = {
828
825
  {
829
826
  setup: [],
830
827
  targetInstructions: ()=>[
831
- new ReturndataSize(/*indirect=*/ 0, /*dstOffset=*/ 0)
828
+ new ReturndataSize(/*addressing_mode=*/ 0, /*dstOffset=*/ 0)
832
829
  ]
833
830
  }
834
831
  ],
@@ -847,7 +844,7 @@ const STATIC_CALL_CONFIG = {
847
844
  }
848
845
  ],
849
846
  targetInstructions: ()=>[
850
- new ReturndataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
847
+ new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
851
848
  ]
852
849
  },
853
850
  {
@@ -866,7 +863,7 @@ const STATIC_CALL_CONFIG = {
866
863
  }
867
864
  ],
868
865
  targetInstructions: ()=>[
869
- new ReturndataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
866
+ new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
870
867
  ]
871
868
  },
872
869
  {
@@ -883,7 +880,7 @@ const STATIC_CALL_CONFIG = {
883
880
  }
884
881
  ],
885
882
  targetInstructions: ()=>[
886
- new ReturndataCopy(/*indirect=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
883
+ new ReturndataCopy(/*addressing_mode=*/ 0, /*copySizeOffset=*/ 0, /*rdStartOffset=*/ 1, /*dstOffset=*/ 2)
887
884
  ]
888
885
  }
889
886
  ],
@@ -897,10 +894,14 @@ const STATIC_CALL_CONFIG = {
897
894
  {
898
895
  offset: 0,
899
896
  value: new Field(Fr.random())
900
- }
897
+ },
898
+ ()=>[
899
+ // Get current contract address into offset 1
900
+ new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
901
+ ]
901
902
  ],
902
903
  targetInstructions: ()=>[
903
- new SLoad(/*indirect=*/ 0, /*slotOffset=*/ 0, /*dstOffset=*/ 1)
904
+ new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 1, /*dstOffset=*/ 2)
904
905
  ]
905
906
  },
906
907
  {
@@ -910,15 +911,19 @@ const STATIC_CALL_CONFIG = {
910
911
  {
911
912
  offset: 0,
912
913
  value: new Field(WARM_STORAGE_SLOT)
913
- }
914
+ },
915
+ ()=>[
916
+ // Get current contract address into offset 1
917
+ new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 1, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
918
+ ]
914
919
  ],
915
920
  targetInstructions: ()=>[
916
- new SLoad(/*indirect=*/ 0, /*slotOffset=*/ 0, /*dstOffset=*/ 1)
921
+ new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 1, /*dstOffset=*/ 2)
917
922
  ]
918
923
  },
919
924
  {
920
925
  label: 'Warm read (SSTORE first, unique slot per SLOAD)',
921
- // Memory layout: slot (incremented), value, constant 1, revertSize, loaded value
926
+ // Memory layout: slot (incremented), value, constant 1, contract address (from GETENVVAR), revertSize, loaded value
922
927
  setup: [
923
928
  {
924
929
  offset: 0,
@@ -932,18 +937,22 @@ const STATIC_CALL_CONFIG = {
932
937
  offset: 2,
933
938
  value: new Field(1n)
934
939
  },
940
+ ()=>[
941
+ // Get current contract address into offset 3
942
+ new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 3, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
943
+ ],
935
944
  {
936
- offset: 3,
945
+ offset: 4,
937
946
  value: new Uint32(0n)
938
947
  }
939
948
  ],
940
949
  targetInstructions: ()=>[
941
- new SStore(/*indirect=*/ 0, /*srcOffset=*/ 1, /*slotOffset=*/ 0),
942
- new SLoad(/*indirect=*/ 0, /*slotOffset=*/ 0, /*dstOffset=*/ 4),
943
- new Add(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 2, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
950
+ new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 1, /*slotOffset=*/ 0),
951
+ new SLoad(/*addressing_mode=*/ 0, /*slotOffset=*/ 0, /*contractAddressOffset=*/ 3, /*dstOffset=*/ 5),
952
+ new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 2, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
944
953
  ],
945
954
  cleanupInstructions: ()=>[
946
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
955
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 4, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
947
956
  ],
948
957
  limit: MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
949
958
  }
@@ -964,7 +973,7 @@ const STATIC_CALL_CONFIG = {
964
973
  }
965
974
  ],
966
975
  targetInstructions: ()=>[
967
- new NoteHashExists(/*indirect=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2)
976
+ new NoteHashExists(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2)
968
977
  ]
969
978
  },
970
979
  {
@@ -981,74 +990,37 @@ const STATIC_CALL_CONFIG = {
981
990
  }
982
991
  ],
983
992
  targetInstructions: ()=>[
984
- new NoteHashExists(/*indirect=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2)
993
+ new NoteHashExists(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0, /*leafIndexOffset=*/ 1, /*existsOffset=*/ 2)
985
994
  ]
986
995
  }
987
996
  ],
988
997
  [Opcode.NULLIFIEREXISTS]: [
989
998
  {
990
999
  label: 'Non-existent nullifier',
1000
+ // NULLIFIEREXISTS now takes a siloed nullifier directly (no address parameter)
991
1001
  setup: [
992
1002
  {
993
1003
  offset: 0,
994
1004
  value: new Field(Fr.random())
995
- },
996
- {
997
- offset: 1,
998
- value: new Field(Fr.random())
999
1005
  }
1000
1006
  ],
1001
1007
  targetInstructions: ()=>[
1002
- new NullifierExists(/*indirect=*/ 0, /*nullifierOffset=*/ 0, /*addressOffset=*/ 1, /*existsOffset=*/ 2)
1008
+ new NullifierExists(/*addressing_mode=*/ 0, /*siloedNullifierOffset=*/ 0, /*existsOffset=*/ 1)
1003
1009
  ]
1004
1010
  },
1005
1011
  {
1006
1012
  label: 'Existing nullifier (warm - from tree)',
1007
- // Uses pre-inserted nullifier from insertWarmTreeEntries()
1013
+ // Uses pre-inserted siloed nullifier from insertWarmTreeEntries()
1014
+ // NULLIFIEREXISTS now takes a siloed nullifier directly
1008
1015
  setup: [
1009
1016
  {
1010
1017
  offset: 0,
1011
- value: new Field(WARM_NULLIFIER)
1012
- },
1013
- {
1014
- offset: 1,
1015
- value: new Field(WARM_NULLIFIER_ADDRESS.toField())
1018
+ value: new Field(WARM_SILOED_NULLIFIER)
1016
1019
  }
1017
1020
  ],
1018
1021
  targetInstructions: ()=>[
1019
- new NullifierExists(/*indirect=*/ 0, /*nullifierOffset=*/ 0, /*addressOffset=*/ 1, /*existsOffset=*/ 2)
1022
+ new NullifierExists(/*addressing_mode=*/ 0, /*siloedNullifierOffset=*/ 0, /*existsOffset=*/ 1)
1020
1023
  ]
1021
- },
1022
- {
1023
- label: 'Existing nullifier (warm - EMITNULLIFIER first)',
1024
- // Memory layout: nullifier (incremented), constant 1, current address (from GETENVVAR), revertSize, exists result
1025
- setup: [
1026
- {
1027
- offset: 0,
1028
- value: new Field(Fr.random())
1029
- },
1030
- {
1031
- offset: 1,
1032
- value: new Field(1n)
1033
- },
1034
- ()=>[
1035
- // Get current contract address into offset 2
1036
- new GetEnvVar(/*indirect=*/ 0, /*dstOffset=*/ 2, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
1037
- ],
1038
- {
1039
- offset: 3,
1040
- value: new Uint32(0n)
1041
- }
1042
- ],
1043
- targetInstructions: ()=>[
1044
- new EmitNullifier(/*indirect=*/ 0, /*nullifierOffset=*/ 0),
1045
- new NullifierExists(/*indirect=*/ 0, /*nullifierOffset=*/ 0, /*addressOffset=*/ 2, /*existsOffset=*/ 4),
1046
- new Add(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
1047
- ],
1048
- cleanupInstructions: ()=>[
1049
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1050
- ],
1051
- limit: MAX_NULLIFIERS_PER_TX - 1
1052
1024
  }
1053
1025
  ],
1054
1026
  [Opcode.L1TOL2MSGEXISTS]: [
@@ -1065,7 +1037,7 @@ const STATIC_CALL_CONFIG = {
1065
1037
  }
1066
1038
  ],
1067
1039
  targetInstructions: ()=>[
1068
- new L1ToL2MessageExists(/*indirect=*/ 0, /*msgHashOffset=*/ 0, /*msgLeafIndexOffset=*/ 1, /*existsOffset=*/ 2)
1040
+ new L1ToL2MessageExists(/*addressing_mode=*/ 0, /*msgHashOffset=*/ 0, /*msgLeafIndexOffset=*/ 1, /*existsOffset=*/ 2)
1069
1041
  ]
1070
1042
  },
1071
1043
  {
@@ -1082,7 +1054,7 @@ const STATIC_CALL_CONFIG = {
1082
1054
  }
1083
1055
  ],
1084
1056
  targetInstructions: ()=>[
1085
- new L1ToL2MessageExists(/*indirect=*/ 0, /*msgHashOffset=*/ 0, /*msgLeafIndexOffset=*/ 1, /*existsOffset=*/ 2)
1057
+ new L1ToL2MessageExists(/*addressing_mode=*/ 0, /*msgHashOffset=*/ 0, /*msgLeafIndexOffset=*/ 1, /*existsOffset=*/ 2)
1086
1058
  ]
1087
1059
  }
1088
1060
  ],
@@ -1092,12 +1064,12 @@ const STATIC_CALL_CONFIG = {
1092
1064
  // This ensures we're querying a valid deployed contract
1093
1065
  setup: [
1094
1066
  ()=>[
1095
- new GetEnvVar(/*indirect=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
1067
+ new GetEnvVar(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*varEnum=*/ 0).as(Opcode.GETENVVAR_16, GetEnvVar.wireFormat16)
1096
1068
  ]
1097
1069
  ],
1098
1070
  // memberEnum 0 = DEPLOYER
1099
1071
  targetInstructions: ()=>[
1100
- new GetContractInstance(/*indirect=*/ 0, /*addressOffset=*/ 0, /*dstOffset=*/ 1, /*memberEnum=*/ 0)
1072
+ new GetContractInstance(/*addressing_mode=*/ 0, /*addressOffset=*/ 0, /*dstOffset=*/ 1, /*memberEnum=*/ 0)
1101
1073
  ]
1102
1074
  }
1103
1075
  ],
@@ -1117,10 +1089,10 @@ const STATIC_CALL_CONFIG = {
1117
1089
  }
1118
1090
  ],
1119
1091
  targetInstructions: ()=>[
1120
- new EmitNoteHash(/*indirect=*/ 0, /*noteHashOffset=*/ 0)
1092
+ new EmitNoteHash(/*addressing_mode=*/ 0, /*noteHashOffset=*/ 0)
1121
1093
  ],
1122
1094
  cleanupInstructions: ()=>[
1123
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1095
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1124
1096
  ],
1125
1097
  limit: MAX_NOTE_HASHES_PER_TX
1126
1098
  }
@@ -1144,11 +1116,11 @@ const STATIC_CALL_CONFIG = {
1144
1116
  }
1145
1117
  ],
1146
1118
  targetInstructions: ()=>[
1147
- new EmitNullifier(/*indirect=*/ 0, /*nullifierOffset=*/ 0),
1148
- new Add(/*indirect=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
1119
+ new EmitNullifier(/*addressing_mode=*/ 0, /*nullifierOffset=*/ 0),
1120
+ new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 0, /*bOffset=*/ 1, /*dstOffset=*/ 0).as(Opcode.ADD_8, Add.wireFormat8)
1149
1121
  ],
1150
1122
  cleanupInstructions: ()=>[
1151
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1123
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1152
1124
  ],
1153
1125
  limit: MAX_NULLIFIERS_PER_TX - 1
1154
1126
  }
@@ -1170,10 +1142,10 @@ const STATIC_CALL_CONFIG = {
1170
1142
  }
1171
1143
  ],
1172
1144
  targetInstructions: ()=>[
1173
- new SendL2ToL1Message(/*indirect=*/ 0, /*recipientOffset=*/ 0, /*contentOffset=*/ 1)
1145
+ new SendL2ToL1Message(/*addressing_mode=*/ 0, /*recipientOffset=*/ 0, /*contentOffset=*/ 1)
1174
1146
  ],
1175
1147
  cleanupInstructions: ()=>[
1176
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1148
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1177
1149
  ],
1178
1150
  limit: MAX_L2_TO_L1_MSGS_PER_TX
1179
1151
  }
@@ -1199,10 +1171,10 @@ const STATIC_CALL_CONFIG = {
1199
1171
  }
1200
1172
  ],
1201
1173
  targetInstructions: ()=>[
1202
- new SStore(/*indirect=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1)
1174
+ new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1)
1203
1175
  ],
1204
1176
  cleanupInstructions: ()=>[
1205
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1177
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 2, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1206
1178
  ]
1207
1179
  },
1208
1180
  {
@@ -1226,17 +1198,17 @@ const STATIC_CALL_CONFIG = {
1226
1198
  }
1227
1199
  ],
1228
1200
  targetInstructions: ()=>[
1229
- new SStore(/*indirect=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1),
1230
- new Add(/*indirect=*/ 0, /*aOffset=*/ 1, /*bOffset=*/ 2, /*dstOffset=*/ 1).as(Opcode.ADD_8, Add.wireFormat8)
1201
+ new SStore(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*slotOffset=*/ 1),
1202
+ new Add(/*addressing_mode=*/ 0, /*aOffset=*/ 1, /*bOffset=*/ 2, /*dstOffset=*/ 1).as(Opcode.ADD_8, Add.wireFormat8)
1231
1203
  ],
1232
1204
  cleanupInstructions: ()=>[
1233
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1205
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 3, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1234
1206
  ],
1235
1207
  limit: MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX
1236
1208
  }
1237
1209
  ],
1238
- // EMITUNENCRYPTEDLOG - two configs: minimal (many small logs) and max-size (one large log)
1239
- [Opcode.EMITUNENCRYPTEDLOG]: [
1210
+ // EMITPUBLICLOG - two configs: minimal (many small logs) and max-size (one large log)
1211
+ [Opcode.EMITPUBLICLOG]: [
1240
1212
  {
1241
1213
  label: 'Many empty logs, revert, repeat',
1242
1214
  setup: [
@@ -1250,10 +1222,10 @@ const STATIC_CALL_CONFIG = {
1250
1222
  }
1251
1223
  ],
1252
1224
  targetInstructions: ()=>[
1253
- new EmitUnencryptedLog(/*indirect=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 1)
1225
+ new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 1)
1254
1226
  ],
1255
1227
  cleanupInstructions: ()=>[
1256
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1228
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1257
1229
  ],
1258
1230
  // Max logs with 0-field content: floor(4096 / 2) = 2048
1259
1231
  limit: Math.floor(FLAT_PUBLIC_LOGS_PAYLOAD_LENGTH / PUBLIC_LOG_HEADER_LENGTH)
@@ -1272,10 +1244,10 @@ const STATIC_CALL_CONFIG = {
1272
1244
  }
1273
1245
  ],
1274
1246
  targetInstructions: ()=>[
1275
- new EmitUnencryptedLog(/*indirect=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 2)
1247
+ new EmitPublicLog(/*addressing_mode=*/ 0, /*logSizeOffset=*/ 0, /*logOffset=*/ 2)
1276
1248
  ],
1277
1249
  cleanupInstructions: ()=>[
1278
- new Revert(/*indirect=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1250
+ new Revert(/*addressing_mode=*/ 0, /*retSizeOffset=*/ 1, /*returnOffset=*/ 0).as(Opcode.REVERT_8, Revert.wireFormat8)
1279
1251
  ],
1280
1252
  limit: 1
1281
1253
  }
@@ -1294,7 +1266,7 @@ const STATIC_CALL_CONFIG = {
1294
1266
  })),
1295
1267
  // Poseidon hash data at M[0..3], write result to M[0:3] (reuse results as next inputs)
1296
1268
  targetInstructions: ()=>[
1297
- new Poseidon2(/*indirect=*/ 0, /*inputStateOffset=*/ 0, /*outputStateOffset=*/ 0)
1269
+ new Poseidon2(/*addressing_mode=*/ 0, /*inputStateOffset=*/ 0, /*outputStateOffset=*/ 0)
1298
1270
  ]
1299
1271
  }
1300
1272
  ],
@@ -1317,7 +1289,7 @@ const STATIC_CALL_CONFIG = {
1317
1289
  }))
1318
1290
  ],
1319
1291
  targetInstructions: ()=>[
1320
- new Sha256Compression(/*indirect=*/ 0, /*outputOffset=*/ 0, /*stateOffset=*/ 0, /*inputsOffset=*/ 8)
1292
+ new Sha256Compression(/*addressing_mode=*/ 0, /*outputOffset=*/ 0, /*stateOffset=*/ 0, /*inputsOffset=*/ 8)
1321
1293
  ]
1322
1294
  }
1323
1295
  ],
@@ -1331,7 +1303,7 @@ const STATIC_CALL_CONFIG = {
1331
1303
  value: randomWithTag(TypeTag.UINT64)
1332
1304
  })),
1333
1305
  targetInstructions: ()=>[
1334
- new KeccakF1600(/*indirect=*/ 0, /*dstOffset=*/ 0, /*inputOffset=*/ 0)
1306
+ new KeccakF1600(/*addressing_mode=*/ 0, /*dstOffset=*/ 0, /*inputOffset=*/ 0)
1335
1307
  ]
1336
1308
  }
1337
1309
  ],
@@ -1365,7 +1337,7 @@ const STATIC_CALL_CONFIG = {
1365
1337
  }
1366
1338
  ],
1367
1339
  targetInstructions: ()=>[
1368
- new EcAdd(/*indirect=*/ 0, /*p1XOffset=*/ 0, /*p1YOffset=*/ 1, /*p1IsInfiniteOffset=*/ 2, /*p2XOffset=*/ 3, /*p2YOffset=*/ 4, /*p2IsInfiniteOffset=*/ 5, /*dstOffset=*/ 0)
1340
+ new EcAdd(/*addressing_mode=*/ 0, /*p1XOffset=*/ 0, /*p1YOffset=*/ 1, /*p1IsInfiniteOffset=*/ 2, /*p2XOffset=*/ 3, /*p2YOffset=*/ 4, /*p2IsInfiniteOffset=*/ 5, /*dstOffset=*/ 0)
1369
1341
  ]
1370
1342
  }
1371
1343
  ],
@@ -1392,7 +1364,7 @@ const STATIC_CALL_CONFIG = {
1392
1364
  }
1393
1365
  ],
1394
1366
  targetInstructions: ()=>[
1395
- new ToRadixBE(/*indirect=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1367
+ new ToRadixBE(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1396
1368
  ]
1397
1369
  },
1398
1370
  {
@@ -1416,7 +1388,7 @@ const STATIC_CALL_CONFIG = {
1416
1388
  }
1417
1389
  ],
1418
1390
  targetInstructions: ()=>[
1419
- new ToRadixBE(/*indirect=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1391
+ new ToRadixBE(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1420
1392
  ]
1421
1393
  },
1422
1394
  {
@@ -1442,7 +1414,7 @@ const STATIC_CALL_CONFIG = {
1442
1414
  }
1443
1415
  ],
1444
1416
  targetInstructions: ()=>[
1445
- new ToRadixBE(/*indirect=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1417
+ new ToRadixBE(/*addressing_mode=*/ 0, /*srcOffset=*/ 0, /*radixOffset=*/ 1, /*numLimbsOffset=*/ 2, /*outputBitsOffset=*/ 3, /*dstOffset=*/ 4)
1446
1418
  ]
1447
1419
  }
1448
1420
  ],
@@ -1473,7 +1445,7 @@ const STATIC_CALL_CONFIG = {
1473
1445
  ],
1474
1446
  // messageSize = 0
1475
1447
  targetInstructions: ()=>[
1476
- new DebugLog(/*indirect=*/ 0, /*levelOffset=*/ 0, /*messageOffset=*/ 1, /*fieldsOffset=*/ 2, /*fieldsSizeOffset=*/ 3, /*messageSize=*/ 0)
1448
+ new DebugLog(/*addressing_mode=*/ 0, /*levelOffset=*/ 0, /*messageOffset=*/ 1, /*fieldsOffset=*/ 2, /*fieldsSizeOffset=*/ 3, /*messageSize=*/ 0)
1477
1449
  ]
1478
1450
  }
1479
1451
  ]