@aztec/simulator 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dest/acvm/acvm.d.ts +2 -2
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/acvm.js +3 -3
  4. package/dest/acvm/oracle/oracle.d.ts +6 -4
  5. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/oracle.js +20 -11
  7. package/dest/acvm/oracle/typed_oracle.d.ts +5 -3
  8. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  9. package/dest/acvm/oracle/typed_oracle.js +10 -4
  10. package/dest/acvm/serialize.js +2 -2
  11. package/dest/avm/avm_gas.d.ts +1 -5
  12. package/dest/avm/avm_gas.d.ts.map +1 -1
  13. package/dest/avm/avm_gas.js +67 -73
  14. package/dest/avm/avm_simulator.d.ts +5 -0
  15. package/dest/avm/avm_simulator.d.ts.map +1 -1
  16. package/dest/avm/avm_simulator.js +8 -1
  17. package/dest/avm/fixtures/index.d.ts +3 -0
  18. package/dest/avm/fixtures/index.d.ts.map +1 -1
  19. package/dest/avm/fixtures/index.js +13 -1
  20. package/dest/avm/index.d.ts +2 -0
  21. package/dest/avm/index.d.ts.map +1 -0
  22. package/dest/avm/index.js +2 -0
  23. package/dest/avm/journal/host_storage.d.ts +1 -1
  24. package/dest/avm/journal/host_storage.d.ts.map +1 -1
  25. package/dest/avm/journal/journal.d.ts +2 -0
  26. package/dest/avm/journal/journal.d.ts.map +1 -1
  27. package/dest/avm/journal/journal.js +6 -2
  28. package/dest/avm/journal/trace.d.ts +2 -0
  29. package/dest/avm/journal/trace.d.ts.map +1 -1
  30. package/dest/avm/journal/trace.js +7 -1
  31. package/dest/avm/journal/trace_types.d.ts +1 -0
  32. package/dest/avm/journal/trace_types.d.ts.map +1 -1
  33. package/dest/avm/journal/trace_types.js +1 -1
  34. package/dest/avm/opcodes/arithmetic.d.ts +1 -7
  35. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
  36. package/dest/avm/opcodes/arithmetic.js +1 -12
  37. package/dest/avm/opcodes/conversion.js +2 -2
  38. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  39. package/dest/avm/opcodes/external_calls.js +4 -3
  40. package/dest/avm/opcodes/instruction.d.ts +1 -1
  41. package/dest/avm/opcodes/instruction.d.ts.map +1 -1
  42. package/dest/avm/opcodes/instruction.js +6 -4
  43. package/dest/avm/opcodes/memory.d.ts +0 -4
  44. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  45. package/dest/avm/opcodes/memory.js +1 -7
  46. package/dest/avm/opcodes/storage.d.ts +0 -5
  47. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  48. package/dest/avm/opcodes/storage.js +1 -7
  49. package/dest/avm/serialization/bytecode_serialization.js +2 -2
  50. package/dest/client/client_execution_context.d.ts +11 -19
  51. package/dest/client/client_execution_context.d.ts.map +1 -1
  52. package/dest/client/client_execution_context.js +26 -43
  53. package/dest/client/db_oracle.d.ts +7 -1
  54. package/dest/client/db_oracle.d.ts.map +1 -1
  55. package/dest/client/execution_note_cache.d.ts +0 -17
  56. package/dest/client/execution_note_cache.d.ts.map +1 -1
  57. package/dest/client/execution_note_cache.js +1 -24
  58. package/dest/client/execution_result.d.ts +8 -4
  59. package/dest/client/execution_result.d.ts.map +1 -1
  60. package/dest/client/execution_result.js +16 -6
  61. package/dest/client/private_execution.d.ts +2 -3
  62. package/dest/client/private_execution.d.ts.map +1 -1
  63. package/dest/client/private_execution.js +20 -9
  64. package/dest/client/simulator.d.ts +0 -16
  65. package/dest/client/simulator.d.ts.map +1 -1
  66. package/dest/client/simulator.js +8 -25
  67. package/dest/client/unconstrained_execution.d.ts +2 -3
  68. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  69. package/dest/client/unconstrained_execution.js +5 -7
  70. package/dest/client/view_data_oracle.d.ts +2 -0
  71. package/dest/client/view_data_oracle.d.ts.map +1 -1
  72. package/dest/client/view_data_oracle.js +7 -1
  73. package/dest/index.d.ts +3 -1
  74. package/dest/index.d.ts.map +1 -1
  75. package/dest/index.js +4 -2
  76. package/dest/mocks/fixtures.d.ts +14 -10
  77. package/dest/mocks/fixtures.d.ts.map +1 -1
  78. package/dest/mocks/fixtures.js +22 -16
  79. package/dest/{simulator → providers}/acvm_native.d.ts.map +1 -1
  80. package/dest/{simulator → providers}/acvm_native.js +13 -14
  81. package/dest/providers/acvm_wasm.d.ts.map +1 -0
  82. package/dest/providers/acvm_wasm.js +15 -0
  83. package/dest/providers/index.d.ts.map +1 -0
  84. package/dest/{simulator → providers}/index.js +1 -1
  85. package/dest/{simulator → providers}/simulation_provider.d.ts.map +1 -1
  86. package/dest/{simulator → providers}/simulation_provider.js +1 -1
  87. package/dest/public/abstract_phase_manager.d.ts +43 -42
  88. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  89. package/dest/public/abstract_phase_manager.js +77 -106
  90. package/dest/public/app_logic_phase_manager.d.ts +6 -7
  91. package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
  92. package/dest/public/app_logic_phase_manager.js +14 -14
  93. package/dest/public/{db.d.ts → db_interfaces.d.ts} +3 -3
  94. package/dest/public/db_interfaces.d.ts.map +1 -0
  95. package/dest/public/db_interfaces.js +2 -0
  96. package/dest/public/execution.d.ts +16 -9
  97. package/dest/public/execution.d.ts.map +1 -1
  98. package/dest/public/execution.js +1 -1
  99. package/dest/public/executor.d.ts +3 -30
  100. package/dest/public/executor.d.ts.map +1 -1
  101. package/dest/public/executor.js +32 -282
  102. package/dest/public/fee_payment.d.ts +11 -0
  103. package/dest/public/fee_payment.d.ts.map +1 -0
  104. package/dest/public/fee_payment.js +24 -0
  105. package/dest/public/hints_builder.d.ts +1 -0
  106. package/dest/public/hints_builder.d.ts.map +1 -1
  107. package/dest/public/hints_builder.js +6 -2
  108. package/dest/public/index.d.ts +4 -2
  109. package/dest/public/index.d.ts.map +1 -1
  110. package/dest/public/index.js +5 -3
  111. package/dest/public/phase_manager_factory.d.ts +1 -1
  112. package/dest/public/phase_manager_factory.d.ts.map +1 -1
  113. package/dest/public/{public_executor.d.ts → public_db_sources.d.ts} +3 -2
  114. package/dest/public/public_db_sources.d.ts.map +1 -0
  115. package/dest/public/public_db_sources.js +198 -0
  116. package/dest/public/public_kernel.js +14 -14
  117. package/dest/public/public_processor.d.ts +6 -4
  118. package/dest/public/public_processor.d.ts.map +1 -1
  119. package/dest/public/public_processor.js +46 -27
  120. package/dest/public/setup_phase_manager.d.ts +6 -8
  121. package/dest/public/setup_phase_manager.d.ts.map +1 -1
  122. package/dest/public/setup_phase_manager.js +11 -20
  123. package/dest/public/tail_phase_manager.d.ts +4 -10
  124. package/dest/public/tail_phase_manager.d.ts.map +1 -1
  125. package/dest/public/tail_phase_manager.js +15 -35
  126. package/dest/public/teardown_phase_manager.d.ts +6 -8
  127. package/dest/public/teardown_phase_manager.d.ts.map +1 -1
  128. package/dest/public/teardown_phase_manager.js +15 -21
  129. package/dest/public/transitional_adaptors.d.ts +1 -1
  130. package/dest/public/transitional_adaptors.d.ts.map +1 -1
  131. package/dest/public/transitional_adaptors.js +8 -6
  132. package/dest/public/utils.d.ts +2 -2
  133. package/dest/public/utils.d.ts.map +1 -1
  134. package/dest/public/utils.js +21 -14
  135. package/package.json +12 -9
  136. package/src/acvm/acvm.ts +0 -3
  137. package/src/acvm/oracle/oracle.ts +36 -13
  138. package/src/acvm/oracle/typed_oracle.ts +12 -3
  139. package/src/acvm/serialize.ts +1 -1
  140. package/src/avm/avm_gas.ts +66 -73
  141. package/src/avm/avm_simulator.ts +9 -0
  142. package/src/avm/fixtures/index.ts +20 -0
  143. package/src/avm/index.ts +1 -0
  144. package/src/avm/journal/host_storage.ts +1 -1
  145. package/src/avm/journal/journal.ts +6 -1
  146. package/src/avm/journal/trace.ts +12 -0
  147. package/src/avm/journal/trace_types.ts +1 -0
  148. package/src/avm/opcodes/arithmetic.ts +1 -14
  149. package/src/avm/opcodes/conversion.ts +1 -1
  150. package/src/avm/opcodes/external_calls.ts +3 -1
  151. package/src/avm/opcodes/instruction.ts +5 -3
  152. package/src/avm/opcodes/memory.ts +1 -8
  153. package/src/avm/opcodes/storage.ts +1 -8
  154. package/src/avm/serialization/bytecode_serialization.ts +1 -1
  155. package/src/client/client_execution_context.ts +33 -45
  156. package/src/client/db_oracle.ts +8 -1
  157. package/src/client/execution_note_cache.ts +0 -28
  158. package/src/client/execution_result.ts +21 -7
  159. package/src/client/private_execution.ts +36 -21
  160. package/src/client/simulator.ts +7 -27
  161. package/src/client/unconstrained_execution.ts +9 -12
  162. package/src/client/view_data_oracle.ts +8 -0
  163. package/src/index.ts +3 -1
  164. package/src/mocks/fixtures.ts +30 -32
  165. package/src/{simulator → providers}/acvm_native.ts +21 -19
  166. package/src/{simulator → providers}/acvm_wasm.ts +2 -16
  167. package/src/public/abstract_phase_manager.ts +138 -205
  168. package/src/public/app_logic_phase_manager.ts +23 -39
  169. package/src/public/{db.ts → db_interfaces.ts} +2 -2
  170. package/src/public/execution.ts +15 -8
  171. package/src/public/executor.ts +51 -398
  172. package/src/public/fee_payment.ts +26 -0
  173. package/src/public/hints_builder.ts +6 -0
  174. package/src/public/index.ts +4 -2
  175. package/src/public/phase_manager_factory.ts +1 -1
  176. package/src/public/{public_executor.ts → public_db_sources.ts} +3 -2
  177. package/src/public/public_kernel.ts +24 -24
  178. package/src/public/public_processor.ts +77 -33
  179. package/src/public/setup_phase_manager.ts +20 -45
  180. package/src/public/tail_phase_manager.ts +17 -65
  181. package/src/public/teardown_phase_manager.ts +22 -41
  182. package/src/public/transitional_adaptors.ts +7 -11
  183. package/src/public/utils.ts +20 -14
  184. package/dest/public/db.d.ts.map +0 -1
  185. package/dest/public/db.js +0 -2
  186. package/dest/public/public_execution_context.d.ts +0 -121
  187. package/dest/public/public_execution_context.d.ts.map +0 -1
  188. package/dest/public/public_execution_context.js +0 -214
  189. package/dest/public/public_executor.d.ts.map +0 -1
  190. package/dest/public/public_executor.js +0 -197
  191. package/dest/public/state_actions.d.ts +0 -39
  192. package/dest/public/state_actions.d.ts.map +0 -1
  193. package/dest/public/state_actions.js +0 -80
  194. package/dest/simulator/acvm_wasm.d.ts.map +0 -1
  195. package/dest/simulator/acvm_wasm.js +0 -22
  196. package/dest/simulator/index.d.ts.map +0 -1
  197. package/src/public/public_execution_context.ts +0 -289
  198. package/src/public/state_actions.ts +0 -102
  199. /package/dest/{simulator → providers}/acvm_native.d.ts +0 -0
  200. /package/dest/{simulator → providers}/acvm_wasm.d.ts +0 -0
  201. /package/dest/{simulator → providers}/index.d.ts +0 -0
  202. /package/dest/{simulator → providers}/simulation_provider.d.ts +0 -0
  203. /package/src/{simulator → providers}/index.ts +0 -0
  204. /package/src/{simulator → providers}/simulation_provider.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  // All code in this file needs to die once the public executor is phased out in favor of the AVM.
2
2
  import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
3
- import { CallContext, FunctionData, } from '@aztec/circuits.js';
3
+ import { CallContext } from '@aztec/circuits.js';
4
4
  import { Fr } from '@aztec/foundation/fields';
5
5
  import { promisify } from 'util';
6
6
  import { gunzip } from 'zlib';
@@ -16,7 +16,7 @@ import { createSimulationError } from '../common/errors.js';
16
16
  */
17
17
  export function createAvmExecutionEnvironment(current, header, globalVariables, gasSettings, transactionFee) {
18
18
  return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
19
- /*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionData.selector);
19
+ /*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionSelector);
20
20
  }
21
21
  export function createPublicExecution(startSideEffectCounter, avmEnvironment, calldata) {
22
22
  const callContext = CallContext.from({
@@ -27,16 +27,15 @@ export function createPublicExecution(startSideEffectCounter, avmEnvironment, ca
27
27
  isStaticCall: avmEnvironment.isStaticCall,
28
28
  sideEffectCounter: startSideEffectCounter,
29
29
  });
30
- const functionData = new FunctionData(avmEnvironment.temporaryFunctionSelector, /*isPrivate=*/ false);
31
30
  const execution = {
32
31
  contractAddress: avmEnvironment.address,
33
32
  callContext,
34
33
  args: calldata,
35
- functionData,
34
+ functionSelector: avmEnvironment.temporaryFunctionSelector,
36
35
  };
37
36
  return execution;
38
37
  }
39
- export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext) {
38
+ export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext, bytecode) {
40
39
  const endPersistableState = endAvmContext.persistableState;
41
40
  const endMachineState = endAvmContext.machineState;
42
41
  return {
@@ -52,6 +51,9 @@ export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, f
52
51
  startGasLeft: startGas,
53
52
  endGasLeft: endMachineState.gasLeft,
54
53
  transactionFee: endAvmContext.environment.transactionFee,
54
+ bytecode: bytecode,
55
+ calldata: endAvmContext.environment.calldata,
56
+ avmHints: endPersistableState.trace.toHints(),
55
57
  };
56
58
  }
57
59
  const AVM_MAGIC_SUFFIX = Buffer.from([
@@ -79,4 +81,4 @@ export async function isAvmBytecode(bytecode) {
79
81
  const magicSize = AVM_MAGIC_SUFFIX.length;
80
82
  return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
81
83
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxHQUtiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsY0FBa0I7SUFFbEIsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVztJQUNuQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ2hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNs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
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQWlFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEgsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsV0FBd0IsRUFDeEIsY0FBa0I7SUFFbEIsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUMxQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFDN0IsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ25DLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVztJQUNuQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ2hDLE1BQU0sRUFDTixlQUFlLEVBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNsQyxPQUFPLENB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
@@ -1,8 +1,8 @@
1
- import { type Tx } from '@aztec/circuit-types';
1
+ import { type PublicKernelCircuitPublicInputs } from '@aztec/circuits.js';
2
2
  /**
3
3
  * Looks at the side effects of a transaction and returns the highest counter
4
4
  * @param tx - A transaction
5
5
  * @returns The highest side effect counter in the transaction so far
6
6
  */
7
- export declare function lastSideEffectCounter(tx: Tx): number;
7
+ export declare function lastSideEffectCounter(inputs: PublicKernelCircuitPublicInputs): number;
8
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAwBpD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/public/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,+BAA+B,GAAG,MAAM,CA+BrF"}
@@ -1,31 +1,38 @@
1
- import { CallRequest } from '@aztec/circuits.js';
2
1
  /**
3
2
  * Looks at the side effects of a transaction and returns the highest counter
4
3
  * @param tx - A transaction
5
4
  * @returns The highest side effect counter in the transaction so far
6
5
  */
7
- export function lastSideEffectCounter(tx) {
8
- const data = tx.data.forPublic;
6
+ export function lastSideEffectCounter(inputs) {
9
7
  const sideEffectCounters = [
10
- ...data.endNonRevertibleData.newNoteHashes,
11
- ...data.endNonRevertibleData.newNullifiers,
12
- ...data.endNonRevertibleData.unencryptedLogsHashes,
13
- ...data.endNonRevertibleData.publicCallStack,
14
- ...data.end.newNoteHashes,
15
- ...data.end.newNullifiers,
16
- ...data.end.unencryptedLogsHashes,
17
- ...data.end.publicCallStack,
8
+ ...inputs.endNonRevertibleData.newNoteHashes,
9
+ ...inputs.endNonRevertibleData.newNullifiers,
10
+ ...inputs.endNonRevertibleData.noteEncryptedLogsHashes,
11
+ ...inputs.endNonRevertibleData.encryptedLogsHashes,
12
+ ...inputs.endNonRevertibleData.unencryptedLogsHashes,
13
+ ...inputs.endNonRevertibleData.publicCallStack,
14
+ ...inputs.endNonRevertibleData.publicDataUpdateRequests,
15
+ ...inputs.end.newNoteHashes,
16
+ ...inputs.end.newNullifiers,
17
+ ...inputs.end.noteEncryptedLogsHashes,
18
+ ...inputs.end.encryptedLogsHashes,
19
+ ...inputs.end.unencryptedLogsHashes,
20
+ ...inputs.end.publicCallStack,
21
+ ...inputs.end.publicDataUpdateRequests,
18
22
  ];
19
23
  let max = 0;
20
24
  for (const sideEffect of sideEffectCounters) {
21
- if (sideEffect instanceof CallRequest) {
25
+ if ('startSideEffectCounter' in sideEffect) {
22
26
  // look at both start and end counters because for enqueued public calls start > 0 while end === 0
23
27
  max = Math.max(max, sideEffect.startSideEffectCounter.toNumber(), sideEffect.endSideEffectCounter.toNumber());
24
28
  }
25
- else {
29
+ else if ('counter' in sideEffect) {
26
30
  max = Math.max(max, sideEffect.counter);
27
31
  }
32
+ else {
33
+ throw new Error('Unknown side effect type');
34
+ }
28
35
  }
29
36
  return max;
30
37
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEVBQU07SUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUM7SUFDaEMsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDMUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCO1FBQ2xELEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWU7UUFDNUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDekIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDekIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtRQUNqQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZTtLQUM1QixDQUFDO0lBRUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLElBQUksVUFBVSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLGtHQUFrRztZQUNsRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHVibGljL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBdUM7SUFDM0UsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhO1FBQzVDLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7UUFDNUMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCO1FBQ3RELEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQjtRQUNsRCxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUI7UUFDcEQsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZTtRQUM5QyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0I7UUFDdkQsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWE7UUFDM0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QjtRQUNyQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1FBQ2pDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7UUFDbkMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWU7UUFDN0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtLQUN2QyxDQUFDO0lBRUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLElBQUksd0JBQXdCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDM0Msa0dBQWtHO1lBQ2xHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQzthQUFNLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMifQ==
package/package.json CHANGED
@@ -1,8 +1,11 @@
1
1
  {
2
2
  "name": "@aztec/simulator",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "type": "module",
5
- "exports": "./dest/index.js",
5
+ "exports": {
6
+ ".": "./dest/index.js",
7
+ "./avm/fixtures": "./dest/avm/fixtures/index.js"
8
+ },
6
9
  "typedocOptions": {
7
10
  "entryPoints": [
8
11
  "./src/index.ts"
@@ -45,13 +48,13 @@
45
48
  ]
46
49
  },
47
50
  "dependencies": {
48
- "@aztec/circuit-types": "0.41.0",
49
- "@aztec/circuits.js": "0.41.0",
50
- "@aztec/foundation": "0.41.0",
51
- "@aztec/noir-protocol-circuits-types": "0.41.0",
52
- "@aztec/protocol-contracts": "0.41.0",
53
- "@aztec/types": "0.41.0",
54
- "@aztec/world-state": "0.41.0",
51
+ "@aztec/circuit-types": "0.42.0",
52
+ "@aztec/circuits.js": "0.42.0",
53
+ "@aztec/foundation": "0.42.0",
54
+ "@aztec/noir-protocol-circuits-types": "0.42.0",
55
+ "@aztec/protocol-contracts": "0.42.0",
56
+ "@aztec/types": "0.42.0",
57
+ "@aztec/world-state": "0.42.0",
55
58
  "@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
56
59
  "@noir-lang/types": "portal:../../noir/packages/types",
57
60
  "levelup": "^5.1.1",
package/src/acvm/acvm.ts CHANGED
@@ -6,7 +6,6 @@ import {
6
6
  type ExecutionError,
7
7
  type ForeignCallInput,
8
8
  type ForeignCallOutput,
9
- type WasmBlackBoxFunctionSolver,
10
9
  executeCircuitWithReturnWitness,
11
10
  } from '@noir-lang/acvm_js';
12
11
 
@@ -85,7 +84,6 @@ export function resolveOpcodeLocations(
85
84
  * The function call that executes an ACIR.
86
85
  */
87
86
  export async function acvm(
88
- solver: WasmBlackBoxFunctionSolver,
89
87
  acir: Buffer,
90
88
  initialWitness: ACVMWitness,
91
89
  callback: ACIRCallback,
@@ -93,7 +91,6 @@ export async function acvm(
93
91
  const logger = createDebugLogger('aztec:simulator:acvm');
94
92
 
95
93
  const solvedAndReturnWitness = await executeCircuitWithReturnWitness(
96
- solver,
97
94
  acir,
98
95
  initialWitness,
99
96
  async (name: string, args: ForeignCallInput[]) => {
@@ -1,4 +1,5 @@
1
1
  import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
2
+ import { KeyValidationRequest } from '@aztec/circuits.js';
2
3
  import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
3
4
  import { AztecAddress } from '@aztec/foundation/aztec-address';
4
5
  import { Fr, Point } from '@aztec/foundation/fields';
@@ -40,12 +41,18 @@ export class Oracle {
40
41
  return unpacked.map(toACVMField);
41
42
  }
42
43
 
43
- async getKeyValidationRequest([masterPublicKeyHash]: ACVMField[]): Promise<ACVMField[]> {
44
- const { masterPublicKey, appSecretKey } = await this.typedOracle.getKeyValidationRequest(
45
- fromACVMField(masterPublicKeyHash),
46
- );
44
+ async getBlockNumber(): Promise<ACVMField> {
45
+ return toACVMField(await this.typedOracle.getBlockNumber());
46
+ }
47
+
48
+ async getContractAddress(): Promise<ACVMField> {
49
+ return toACVMField(await this.typedOracle.getContractAddress());
50
+ }
51
+
52
+ async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
53
+ const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
47
54
 
48
- return [toACVMField(masterPublicKey.x), toACVMField(masterPublicKey.y), toACVMField(appSecretKey)];
55
+ return [toACVMField(pkM.x), toACVMField(pkM.y), toACVMField(skApp)];
49
56
  }
50
57
 
51
58
  async getContractInstance([address]: ACVMField[]) {
@@ -282,32 +289,48 @@ export class Oracle {
282
289
  return newValues.map(toACVMField);
283
290
  }
284
291
 
285
- emitEncryptedLog(encryptedLog: ACVMField[], [counter]: ACVMField[]): void {
292
+ emitEncryptedLog(
293
+ [contractAddress]: ACVMField[],
294
+ [randomness]: ACVMField[],
295
+ encryptedLog: ACVMField[],
296
+ [counter]: ACVMField[],
297
+ ): void {
286
298
  // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
287
299
  const processedInput = Buffer.from(encryptedLog.map(fromACVMField).map(f => f.toNumber()));
288
- this.typedOracle.emitEncryptedLog(processedInput, +counter);
300
+ this.typedOracle.emitEncryptedLog(
301
+ AztecAddress.fromString(contractAddress),
302
+ Fr.fromString(randomness),
303
+ processedInput,
304
+ +counter,
305
+ );
289
306
  }
290
307
 
291
- emitEncryptedNoteLog([noteHash]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
308
+ emitEncryptedNoteLog([noteHashCounter]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
292
309
  // Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
293
310
  const processedInput = Buffer.from(encryptedNote.map(fromACVMField).map(f => f.toNumber()));
294
- this.typedOracle.emitEncryptedNoteLog(fromACVMField(noteHash), processedInput, +counter);
311
+ this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
295
312
  }
296
313
 
297
314
  computeEncryptedLog(
298
315
  [contractAddress]: ACVMField[],
299
316
  [storageSlot]: ACVMField[],
300
317
  [noteTypeId]: ACVMField[],
301
- [publicKeyX]: ACVMField[],
302
- [publicKeyY]: ACVMField[],
318
+ [ovskApp]: ACVMField[],
319
+ [ovpkMX]: ACVMField[],
320
+ [ovpkMY]: ACVMField[],
321
+ [ivpkMX]: ACVMField[],
322
+ [ivpkMY]: ACVMField[],
303
323
  preimage: ACVMField[],
304
324
  ): ACVMField[] {
305
- const publicKey = new Point(fromACVMField(publicKeyX), fromACVMField(publicKeyY));
325
+ const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
326
+ const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
327
+ const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
306
328
  const encLog = this.typedOracle.computeEncryptedLog(
307
329
  AztecAddress.fromString(contractAddress),
308
330
  Fr.fromString(storageSlot),
309
331
  Fr.fromString(noteTypeId),
310
- publicKey,
332
+ ovKeys,
333
+ ivpkM,
311
334
  preimage.map(fromACVMField),
312
335
  );
313
336
  const bytes: ACVMField[] = [];
@@ -82,6 +82,14 @@ export abstract class TypedOracle {
82
82
  throw new OracleMethodNotAvailableError('unpackReturns');
83
83
  }
84
84
 
85
+ getBlockNumber(): Promise<number> {
86
+ throw new OracleMethodNotAvailableError('getBlockNumber');
87
+ }
88
+
89
+ getContractAddress(): Promise<AztecAddress> {
90
+ throw new OracleMethodNotAvailableError('getContractAddress');
91
+ }
92
+
85
93
  getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
86
94
  throw new OracleMethodNotAvailableError('getKeyValidationRequest');
87
95
  }
@@ -176,11 +184,11 @@ export abstract class TypedOracle {
176
184
  throw new OracleMethodNotAvailableError('storageWrite');
177
185
  }
178
186
 
179
- emitEncryptedLog(_encryptedNote: Buffer, _counter: number): void {
187
+ emitEncryptedLog(_contractAddress: AztecAddress, _randomness: Fr, _encryptedNote: Buffer, _counter: number): void {
180
188
  throw new OracleMethodNotAvailableError('emitEncryptedLog');
181
189
  }
182
190
 
183
- emitEncryptedNoteLog(_noteHash: Fr, _encryptedNote: Buffer, _counter: number): void {
191
+ emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
184
192
  throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
185
193
  }
186
194
 
@@ -188,7 +196,8 @@ export abstract class TypedOracle {
188
196
  _contractAddress: AztecAddress,
189
197
  _storageSlot: Fr,
190
198
  _noteTypeId: Fr,
191
- _publicKey: PublicKey,
199
+ _ovKeys: KeyValidationRequest,
200
+ _ivpkM: PublicKey,
192
201
  _preimage: Fr[],
193
202
  ): Buffer {
194
203
  throw new OracleMethodNotAvailableError('computeEncryptedLog');
@@ -55,7 +55,7 @@ export function toACVMField(
55
55
  export function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[] {
56
56
  const fields = [
57
57
  item.contractAddress.toField(),
58
- ...item.functionData.toFields(),
58
+ item.functionSelector.toField(),
59
59
  ...item.callContext.toFields(),
60
60
  item.getArgsHash(),
61
61
  ];
@@ -49,93 +49,86 @@ export const EmptyGas: Gas = {
49
49
  /** Dimensions of gas usage: L1, L2, and DA. */
50
50
  export const GasDimensions = ['l2Gas', 'daGas'] as const;
51
51
 
52
- /** Null object to represent a gas cost that's dynamic instead of fixed for a given instruction. */
53
- export const DynamicGasCost = Symbol('DynamicGasCost');
54
-
55
- /** Temporary default gas cost. We should eventually remove all usage of this variable in favor of actual gas for each opcode. */
56
- const TemporaryDefaultGasCost = { l2Gas: 10, daGas: 0 };
52
+ /** Default gas cost for an opcode. */
53
+ const DefaultBaseGasCost: Gas = { l2Gas: 10, daGas: 0 };
57
54
 
58
55
  /** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */
59
- export const GasCosts: Record<Opcode, Gas | typeof DynamicGasCost> = {
60
- [Opcode.ADD]: TemporaryDefaultGasCost,
61
- [Opcode.SUB]: TemporaryDefaultGasCost,
62
- [Opcode.MUL]: TemporaryDefaultGasCost,
63
- [Opcode.DIV]: TemporaryDefaultGasCost,
64
- [Opcode.FDIV]: TemporaryDefaultGasCost,
65
- [Opcode.EQ]: TemporaryDefaultGasCost,
66
- [Opcode.LT]: TemporaryDefaultGasCost,
67
- [Opcode.LTE]: TemporaryDefaultGasCost,
68
- [Opcode.AND]: TemporaryDefaultGasCost,
69
- [Opcode.OR]: TemporaryDefaultGasCost,
70
- [Opcode.XOR]: TemporaryDefaultGasCost,
71
- [Opcode.NOT]: TemporaryDefaultGasCost,
72
- [Opcode.SHL]: TemporaryDefaultGasCost,
73
- [Opcode.SHR]: TemporaryDefaultGasCost,
74
- [Opcode.CAST]: TemporaryDefaultGasCost,
56
+ const BaseGasCosts: Record<Opcode, Gas> = {
57
+ [Opcode.ADD]: DefaultBaseGasCost,
58
+ [Opcode.SUB]: DefaultBaseGasCost,
59
+ [Opcode.MUL]: DefaultBaseGasCost,
60
+ [Opcode.DIV]: DefaultBaseGasCost,
61
+ [Opcode.FDIV]: DefaultBaseGasCost,
62
+ [Opcode.EQ]: DefaultBaseGasCost,
63
+ [Opcode.LT]: DefaultBaseGasCost,
64
+ [Opcode.LTE]: DefaultBaseGasCost,
65
+ [Opcode.AND]: DefaultBaseGasCost,
66
+ [Opcode.OR]: DefaultBaseGasCost,
67
+ [Opcode.XOR]: DefaultBaseGasCost,
68
+ [Opcode.NOT]: DefaultBaseGasCost,
69
+ [Opcode.SHL]: DefaultBaseGasCost,
70
+ [Opcode.SHR]: DefaultBaseGasCost,
71
+ [Opcode.CAST]: DefaultBaseGasCost,
75
72
  // Execution environment
76
- [Opcode.ADDRESS]: TemporaryDefaultGasCost,
77
- [Opcode.STORAGEADDRESS]: TemporaryDefaultGasCost,
78
- [Opcode.SENDER]: TemporaryDefaultGasCost,
79
- [Opcode.FEEPERL2GAS]: TemporaryDefaultGasCost,
80
- [Opcode.FEEPERDAGAS]: TemporaryDefaultGasCost,
81
- [Opcode.TRANSACTIONFEE]: TemporaryDefaultGasCost,
82
- [Opcode.CONTRACTCALLDEPTH]: TemporaryDefaultGasCost,
83
- [Opcode.CHAINID]: TemporaryDefaultGasCost,
84
- [Opcode.VERSION]: TemporaryDefaultGasCost,
85
- [Opcode.BLOCKNUMBER]: TemporaryDefaultGasCost,
86
- [Opcode.TIMESTAMP]: TemporaryDefaultGasCost,
87
- [Opcode.COINBASE]: TemporaryDefaultGasCost,
88
- [Opcode.BLOCKL2GASLIMIT]: TemporaryDefaultGasCost,
89
- [Opcode.BLOCKDAGASLIMIT]: TemporaryDefaultGasCost,
90
- [Opcode.CALLDATACOPY]: TemporaryDefaultGasCost,
73
+ [Opcode.ADDRESS]: DefaultBaseGasCost,
74
+ [Opcode.STORAGEADDRESS]: DefaultBaseGasCost,
75
+ [Opcode.SENDER]: DefaultBaseGasCost,
76
+ [Opcode.FEEPERL2GAS]: DefaultBaseGasCost,
77
+ [Opcode.FEEPERDAGAS]: DefaultBaseGasCost,
78
+ [Opcode.TRANSACTIONFEE]: DefaultBaseGasCost,
79
+ [Opcode.CONTRACTCALLDEPTH]: DefaultBaseGasCost,
80
+ [Opcode.CHAINID]: DefaultBaseGasCost,
81
+ [Opcode.VERSION]: DefaultBaseGasCost,
82
+ [Opcode.BLOCKNUMBER]: DefaultBaseGasCost,
83
+ [Opcode.TIMESTAMP]: DefaultBaseGasCost,
84
+ [Opcode.COINBASE]: DefaultBaseGasCost,
85
+ [Opcode.BLOCKL2GASLIMIT]: DefaultBaseGasCost,
86
+ [Opcode.BLOCKDAGASLIMIT]: DefaultBaseGasCost,
87
+ [Opcode.CALLDATACOPY]: DefaultBaseGasCost,
91
88
  // Gas
92
- [Opcode.L2GASLEFT]: TemporaryDefaultGasCost,
93
- [Opcode.DAGASLEFT]: TemporaryDefaultGasCost,
89
+ [Opcode.L2GASLEFT]: DefaultBaseGasCost,
90
+ [Opcode.DAGASLEFT]: DefaultBaseGasCost,
94
91
  // Control flow
95
- [Opcode.JUMP]: TemporaryDefaultGasCost,
96
- [Opcode.JUMPI]: TemporaryDefaultGasCost,
97
- [Opcode.INTERNALCALL]: TemporaryDefaultGasCost,
98
- [Opcode.INTERNALRETURN]: TemporaryDefaultGasCost,
92
+ [Opcode.JUMP]: DefaultBaseGasCost,
93
+ [Opcode.JUMPI]: DefaultBaseGasCost,
94
+ [Opcode.INTERNALCALL]: DefaultBaseGasCost,
95
+ [Opcode.INTERNALRETURN]: DefaultBaseGasCost,
99
96
  // Memory
100
- [Opcode.SET]: TemporaryDefaultGasCost,
101
- [Opcode.MOV]: TemporaryDefaultGasCost,
102
- [Opcode.CMOV]: TemporaryDefaultGasCost,
97
+ [Opcode.SET]: DefaultBaseGasCost,
98
+ [Opcode.MOV]: DefaultBaseGasCost,
99
+ [Opcode.CMOV]: DefaultBaseGasCost,
103
100
  // World state
104
- [Opcode.SLOAD]: TemporaryDefaultGasCost,
105
- [Opcode.SSTORE]: TemporaryDefaultGasCost,
106
- [Opcode.NOTEHASHEXISTS]: TemporaryDefaultGasCost,
107
- [Opcode.EMITNOTEHASH]: TemporaryDefaultGasCost,
108
- [Opcode.NULLIFIEREXISTS]: TemporaryDefaultGasCost,
109
- [Opcode.EMITNULLIFIER]: TemporaryDefaultGasCost,
110
- [Opcode.L1TOL2MSGEXISTS]: TemporaryDefaultGasCost,
111
- [Opcode.HEADERMEMBER]: TemporaryDefaultGasCost,
112
- [Opcode.EMITUNENCRYPTEDLOG]: TemporaryDefaultGasCost,
113
- [Opcode.SENDL2TOL1MSG]: TemporaryDefaultGasCost,
114
- [Opcode.GETCONTRACTINSTANCE]: TemporaryDefaultGasCost,
101
+ [Opcode.SLOAD]: DefaultBaseGasCost,
102
+ [Opcode.SSTORE]: DefaultBaseGasCost,
103
+ [Opcode.NOTEHASHEXISTS]: DefaultBaseGasCost,
104
+ [Opcode.EMITNOTEHASH]: DefaultBaseGasCost,
105
+ [Opcode.NULLIFIEREXISTS]: DefaultBaseGasCost,
106
+ [Opcode.EMITNULLIFIER]: DefaultBaseGasCost,
107
+ [Opcode.L1TOL2MSGEXISTS]: DefaultBaseGasCost,
108
+ [Opcode.HEADERMEMBER]: DefaultBaseGasCost,
109
+ [Opcode.EMITUNENCRYPTEDLOG]: DefaultBaseGasCost,
110
+ [Opcode.SENDL2TOL1MSG]: DefaultBaseGasCost,
111
+ [Opcode.GETCONTRACTINSTANCE]: DefaultBaseGasCost,
115
112
  // External calls
116
- [Opcode.CALL]: TemporaryDefaultGasCost,
117
- [Opcode.STATICCALL]: TemporaryDefaultGasCost,
118
- [Opcode.DELEGATECALL]: TemporaryDefaultGasCost,
119
- [Opcode.RETURN]: TemporaryDefaultGasCost,
120
- [Opcode.REVERT]: TemporaryDefaultGasCost,
113
+ [Opcode.CALL]: DefaultBaseGasCost,
114
+ [Opcode.STATICCALL]: DefaultBaseGasCost,
115
+ [Opcode.DELEGATECALL]: DefaultBaseGasCost,
116
+ [Opcode.RETURN]: DefaultBaseGasCost,
117
+ [Opcode.REVERT]: DefaultBaseGasCost,
121
118
  // Misc
122
- [Opcode.DEBUGLOG]: TemporaryDefaultGasCost,
119
+ [Opcode.DEBUGLOG]: DefaultBaseGasCost,
123
120
  // Gadgets
124
- [Opcode.KECCAK]: TemporaryDefaultGasCost,
125
- [Opcode.POSEIDON2]: TemporaryDefaultGasCost,
126
- [Opcode.SHA256]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost,
127
- [Opcode.PEDERSEN]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost,t
121
+ [Opcode.KECCAK]: DefaultBaseGasCost,
122
+ [Opcode.POSEIDON2]: DefaultBaseGasCost,
123
+ [Opcode.SHA256]: DefaultBaseGasCost,
124
+ [Opcode.PEDERSEN]: DefaultBaseGasCost,
128
125
  // Conversions
129
- [Opcode.TORADIXLE]: TemporaryDefaultGasCost,
126
+ [Opcode.TORADIXLE]: DefaultBaseGasCost,
130
127
  };
131
128
 
132
- /** Returns the fixed base gas cost for a given opcode, or throws if set to dynamic. */
129
+ /** Returns the fixed base gas cost for a given opcode. */
133
130
  export function getBaseGasCost(opcode: Opcode): Gas {
134
- const cost = GasCosts[opcode];
135
- if (cost === DynamicGasCost) {
136
- throw new Error(`Opcode ${Opcode[opcode]} has dynamic gas cost`);
137
- }
138
- return cost;
131
+ return BaseGasCosts[opcode];
139
132
  }
140
133
 
141
134
  /** Returns the gas cost associated with the memory operations performed. */
@@ -17,6 +17,7 @@ import { decodeFromBytecode } from './serialization/bytecode_serialization.js';
17
17
 
18
18
  export class AvmSimulator {
19
19
  private log: DebugLogger;
20
+ private bytecode: Buffer | undefined;
20
21
 
21
22
  constructor(private context: AvmContext) {
22
23
  this.log = createDebugLogger(
@@ -43,6 +44,13 @@ export class AvmSimulator {
43
44
  return await this.executeBytecode(bytecode);
44
45
  }
45
46
 
47
+ /**
48
+ * Return the bytecode used for execution, if any.
49
+ */
50
+ public getBytecode(): Buffer | undefined {
51
+ return this.bytecode;
52
+ }
53
+
46
54
  /**
47
55
  * Executes the provided bytecode in the current context.
48
56
  * This method is useful for testing and debugging.
@@ -51,6 +59,7 @@ export class AvmSimulator {
51
59
  const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
52
60
  assert(isAvmBytecode(decompressedBytecode), "AVM simulator can't execute non-AVM bytecode");
53
61
 
62
+ this.bytecode = decompressedBytecode;
54
63
  return await this.executeInstructions(decodeFromBytecode(decompressedBytecode));
55
64
  }
56
65
 
@@ -3,7 +3,9 @@ import { FunctionSelector } from '@aztec/foundation/abi';
3
3
  import { AztecAddress } from '@aztec/foundation/aztec-address';
4
4
  import { EthAddress } from '@aztec/foundation/eth-address';
5
5
  import { Fr } from '@aztec/foundation/fields';
6
+ import { AvmNestedCallsTestContractArtifact, AvmTestContractArtifact } from '@aztec/noir-contracts.js';
6
7
 
8
+ import { strict as assert } from 'assert';
7
9
  import { mock } from 'jest-mock-extended';
8
10
  import merge from 'lodash.merge';
9
11
 
@@ -125,3 +127,21 @@ export function randomMemoryBytes(length: number): Uint8[] {
125
127
  export function randomMemoryFields(length: number): Field[] {
126
128
  return [...Array(length)].map(_ => new Field(Fr.random()));
127
129
  }
130
+
131
+ export function getAvmTestContractBytecode(functionName: string): Buffer {
132
+ const artifact = AvmTestContractArtifact.functions.find(f => f.name === functionName)!;
133
+ assert(
134
+ !!artifact?.bytecode,
135
+ `No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
136
+ );
137
+ return artifact.bytecode;
138
+ }
139
+
140
+ export function getAvmNestedCallsTestContractBytecode(functionName: string): Buffer {
141
+ const artifact = AvmNestedCallsTestContractArtifact.functions.find(f => f.name === functionName)!;
142
+ assert(
143
+ !!artifact?.bytecode,
144
+ `No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
145
+ );
146
+ return artifact.bytecode;
147
+ }
@@ -0,0 +1 @@
1
+ export * from './avm_simulator.js';
@@ -1,4 +1,4 @@
1
- import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db.js';
1
+ import { type CommitmentsDB, type PublicContractsDB, type PublicStateDB } from '../../public/db_interfaces.js';
2
2
 
3
3
  /**
4
4
  * Host storage
@@ -56,8 +56,10 @@ export type JournalData = {
56
56
 
57
57
  // TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
58
58
  type PartialPublicExecutionResult = {
59
+ noteHashReadRequests: ReadRequest[];
59
60
  nullifierReadRequests: ReadRequest[];
60
61
  nullifierNonExistentReadRequests: ReadRequest[];
62
+ l1ToL2MsgReadRequests: ReadRequest[];
61
63
  newNoteHashes: NoteHash[];
62
64
  newL2ToL1Messages: L2ToL1Message[];
63
65
  startSideEffectCounter: number;
@@ -108,8 +110,10 @@ export class AvmPersistableStateManager {
108
110
  this.trace = new WorldStateAccessTrace(parent?.trace);
109
111
 
110
112
  this.transitionalExecutionResult = {
113
+ noteHashReadRequests: [],
111
114
  nullifierReadRequests: [],
112
115
  nullifierNonExistentReadRequests: [],
116
+ l1ToL2MsgReadRequests: [],
113
117
  newNoteHashes: [],
114
118
  newL2ToL1Messages: [],
115
119
  startSideEffectCounter: this.trace.accessCounter,
@@ -308,7 +312,8 @@ export class AvmPersistableStateManager {
308
312
  this.transitionalExecutionResult.allUnencryptedLogs.push(ulog);
309
313
  // this duplicates exactly what happens in the trace just for the purpose of transitional integration with the kernel
310
314
  this.transitionalExecutionResult.unencryptedLogsHashes.push(
311
- new LogHash(logHash, this.trace.accessCounter, new Fr(ulog.length)),
315
+ // TODO(6578): explain magic number 4 here
316
+ new LogHash(logHash, this.trace.accessCounter, new Fr(ulog.length + 4)),
312
317
  );
313
318
  // TODO(6206): likely need to track this here and not just in the transitional logic.
314
319
 
@@ -1,3 +1,4 @@
1
+ import { AvmExecutionHints, AvmHint, Vector } from '@aztec/circuits.js';
1
2
  import { Fr } from '@aztec/foundation/fields';
2
3
 
3
4
  import {
@@ -131,6 +132,7 @@ export class WorldStateAccessTrace {
131
132
  leafIndex: msgLeafIndex,
132
133
  msgHash: msgHash,
133
134
  exists: exists,
135
+ counter: new Fr(this.accessCounter),
134
136
  //endLifetime: Fr.ZERO, // FIXME
135
137
  };
136
138
  this.l1ToL2MessageChecks.push(traced);
@@ -169,4 +171,14 @@ export class WorldStateAccessTrace {
169
171
  // it is assumed that the incoming trace was initialized with this as parent, so accept counter
170
172
  this.accessCounter = incomingTrace.accessCounter;
171
173
  }
174
+
175
+ // TODO(dbanks12): should only return hints for one call.... shouldn't include nested calls (merged in traces)
176
+ public toHints(): AvmExecutionHints {
177
+ return new AvmExecutionHints(
178
+ new Vector(this.publicStorageReads.map(read => new AvmHint(read.counter, read.value))),
179
+ new Vector(this.noteHashChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
180
+ new Vector(this.nullifierChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
181
+ new Vector(this.l1ToL2MessageChecks.map(check => new AvmHint(check.counter, new Fr(check.exists ? 1 : 0)))),
182
+ );
183
+ }
172
184
  }
@@ -71,6 +71,7 @@ export type TracedL1toL2MessageCheck = {
71
71
  leafIndex: Fr;
72
72
  msgHash: Fr;
73
73
  exists: boolean;
74
+ counter: Fr;
74
75
  //endLifetime: Fr;
75
76
  };
76
77