@aztec/simulator 0.0.0-test.1 → 0.0.1-fake-ceab37513c
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.
- package/README.md +6 -0
- package/dest/client.d.ts +5 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +4 -7
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +0 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/private/acvm/acvm.d.ts +11 -5
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +10 -16
- package/dest/private/acvm/acvm_types.d.ts +1 -1
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +17 -18
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +31 -23
- package/dest/private/acvm/index.d.ts +0 -1
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +19 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +53 -0
- package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +10 -10
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +11 -7
- package/dest/private/acvm_wasm.d.ts +15 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +108 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +209 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +5 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +2 -2
- package/dest/public/avm/avm_context.d.ts +5 -5
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +11 -7
- package/dest/public/avm/avm_execution_environment.d.ts +2 -1
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +4 -2
- package/dest/public/avm/avm_gas.d.ts +4 -20
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +2 -0
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +2 -0
- package/dest/public/avm/avm_memory_types.d.ts +98 -87
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +17 -6
- package/dest/public/avm/avm_simulator.d.ts +4 -5
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +13 -18
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/errors.d.ts +1 -16
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +0 -37
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +3 -3
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +10 -11
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +4 -4
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +16 -15
- package/dest/public/avm/fixtures/initializers.d.ts +43 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +42 -0
- package/dest/public/avm/fixtures/utils.d.ts +38 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +95 -0
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +22 -19
- package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +48 -27
- package/dest/public/avm/opcodes/arithmetic.d.ts +11 -1
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +16 -2
- package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +19 -26
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +1 -2
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +9 -10
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +10 -8
- package/dest/public/avm/opcodes/conversion.d.ts +1 -0
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +264 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +2 -2
- package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +12 -12
- package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +39 -33
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +6 -6
- package/dest/public/avm/opcodes/instruction.d.ts +14 -10
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +18 -13
- package/dest/public/avm/opcodes/memory.d.ts +4 -4
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +37 -33
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +17 -12
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +7 -5
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +38 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
- package/dest/public/avm/serialization/instruction_serialization.d.ts +5 -4
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +60 -35
- package/dest/public/avm/test_utils.d.ts +10 -13
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +12 -17
- package/dest/public/db_interfaces.d.ts +56 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +5 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +9 -0
- package/dest/public/executor_metrics.d.ts +10 -3
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +37 -6
- package/dest/public/executor_metrics_interface.d.ts +9 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +393 -0
- package/dest/public/fixtures/index.d.ts +6 -0
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +6 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +43 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +33 -13
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +90 -70
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +8 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +95 -0
- package/dest/public/fixtures/utils.d.ts +16 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +100 -58
- package/dest/public/hinting_db_sources.d.ts +68 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +294 -0
- package/dest/public/index.d.ts +4 -8
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +30 -39
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +141 -67
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +47 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +105 -0
- package/dest/public/public_processor/public_processor.d.ts +19 -29
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +133 -94
- package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +1 -1
- package/dest/public/public_tx_simulator/index.d.ts +3 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +2 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +17 -29
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +59 -91
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +27 -42
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +128 -171
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +20 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +39 -0
- package/dest/public/side_effect_trace.d.ts +10 -62
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +43 -108
- package/dest/public/side_effect_trace_interface.d.ts +5 -22
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +2 -2
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +2 -2
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +2 -2
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +37 -85
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +352 -0
- package/dest/public/test_executor_metrics.d.ts +54 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +306 -0
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +2 -4
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +6 -3
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +31 -30
- package/src/client.ts +5 -3
- package/src/common/errors.ts +79 -44
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +17 -32
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +35 -29
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +63 -0
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +31 -15
- package/src/private/acvm_wasm.ts +72 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +260 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +6 -6
- package/src/public/avm/avm_context.ts +4 -4
- package/src/public/avm/avm_contract_call_result.ts +17 -5
- package/src/public/avm/avm_execution_environment.ts +7 -1
- package/src/public/avm/avm_gas.ts +23 -35
- package/src/public/avm/avm_machine_state.ts +5 -0
- package/src/public/avm/avm_memory_types.ts +19 -6
- package/src/public/avm/avm_simulator.ts +30 -29
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/errors.ts +1 -53
- package/src/public/avm/fixtures/avm_simulation_tester.ts +19 -18
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +15 -14
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +150 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +62 -27
- package/src/public/avm/opcodes/addressing_mode.ts +57 -33
- package/src/public/avm/opcodes/arithmetic.ts +24 -2
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -7
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +23 -3
- package/src/public/avm/opcodes/ec_add.ts +5 -2
- package/src/public/avm/opcodes/environment_getters.ts +22 -15
- package/src/public/avm/opcodes/external_calls.ts +61 -28
- package/src/public/avm/opcodes/hashing.ts +28 -8
- package/src/public/avm/opcodes/instruction.ts +23 -15
- package/src/public/avm/opcodes/memory.ts +71 -32
- package/src/public/avm/opcodes/misc.ts +24 -16
- package/src/public/avm/opcodes/storage.ts +22 -6
- package/src/public/avm/revert_reason.ts +55 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
- package/src/public/avm/serialization/instruction_serialization.ts +63 -34
- package/src/public/avm/test_utils.ts +23 -32
- package/src/public/db_interfaces.ts +61 -0
- package/src/{common → public}/debug_fn_name.ts +7 -7
- package/src/public/executor_metrics.ts +55 -6
- package/src/public/executor_metrics_interface.ts +14 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +151 -0
- package/src/public/fixtures/index.ts +6 -0
- package/src/public/fixtures/minimal_public_tx.ts +59 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +154 -113
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
- package/src/public/fixtures/token_test.ts +140 -0
- package/src/public/fixtures/utils.ts +141 -68
- package/src/public/hinting_db_sources.ts +500 -0
- package/src/public/index.ts +4 -8
- package/src/public/public_db_sources.ts +179 -96
- package/src/public/public_processor/guarded_merkle_tree.ts +149 -0
- package/src/public/public_processor/public_processor.ts +179 -139
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/index.ts +2 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +106 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +153 -193
- package/src/public/public_tx_simulator/public_tx_simulator.ts +167 -211
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +72 -0
- package/src/public/side_effect_trace.ts +52 -303
- package/src/public/side_effect_trace_interface.ts +4 -58
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +4 -4
- package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
- package/src/public/state_manager/state_manager.ts +512 -0
- package/src/public/test_executor_metrics.ts +395 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/execution.ts +0 -140
- package/src/test/utils.ts +0 -36
- /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
|
@@ -1,36 +1,39 @@
|
|
|
1
|
+
import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
|
|
1
2
|
import type { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
5
|
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
6
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
AvmCircuitInputs,
|
|
8
|
+
AvmCircuitPublicInputs,
|
|
9
|
+
AvmExecutionHints,
|
|
10
|
+
type AvmProvingRequest,
|
|
11
|
+
AvmTxHint,
|
|
12
|
+
type RevertCode,
|
|
13
|
+
} from '@aztec/stdlib/avm';
|
|
7
14
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
8
15
|
import type { Gas, GasUsed } from '@aztec/stdlib/gas';
|
|
9
|
-
import
|
|
10
|
-
import type {
|
|
11
|
-
import type { AvmSimulationStats } from '@aztec/stdlib/stats';
|
|
16
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
17
|
+
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
12
18
|
import {
|
|
13
19
|
type GlobalVariables,
|
|
14
20
|
NestedProcessReturnValues,
|
|
15
|
-
|
|
21
|
+
PublicCallRequestWithCalldata,
|
|
16
22
|
Tx,
|
|
17
23
|
TxExecutionPhase,
|
|
18
24
|
} from '@aztec/stdlib/tx';
|
|
19
|
-
import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
20
|
-
|
|
21
|
-
import { strict as assert } from 'assert';
|
|
22
25
|
|
|
23
|
-
import { getPublicFunctionDebugName } from '../../common/debug_fn_name.js';
|
|
24
26
|
import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import type
|
|
27
|
+
import { AvmSimulator } from '../avm/index.js';
|
|
28
|
+
import { getPublicFunctionDebugName } from '../debug_fn_name.js';
|
|
29
|
+
import { HintingMerkleWriteOperations, HintingPublicContractsDB } from '../hinting_db_sources.js';
|
|
30
|
+
import { type PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
31
|
+
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
29
32
|
import { PublicTxContext } from './public_tx_context.js';
|
|
30
33
|
|
|
31
34
|
export type ProcessedPhase = {
|
|
32
35
|
phase: TxExecutionPhase;
|
|
33
|
-
durationMs
|
|
36
|
+
durationMs?: number;
|
|
34
37
|
returnValues: NestedProcessReturnValues[];
|
|
35
38
|
reverted: boolean;
|
|
36
39
|
revertReason?: SimulationError;
|
|
@@ -47,25 +50,19 @@ export type PublicTxResult = {
|
|
|
47
50
|
};
|
|
48
51
|
|
|
49
52
|
export class PublicTxSimulator {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
private log: Logger;
|
|
53
|
+
protected log: Logger;
|
|
53
54
|
|
|
54
55
|
constructor(
|
|
55
|
-
private
|
|
56
|
-
private
|
|
56
|
+
private merkleTree: MerkleTreeWriteOperations,
|
|
57
|
+
private contractsDB: PublicContractsDB,
|
|
57
58
|
private globalVariables: GlobalVariables,
|
|
58
59
|
private doMerkleOperations: boolean = false,
|
|
59
60
|
private skipFeeEnforcement: boolean = false,
|
|
60
|
-
|
|
61
|
+
private clientInitiatedSimulation: boolean = false,
|
|
61
62
|
) {
|
|
62
63
|
this.log = createLogger(`simulator:public_tx_simulator`);
|
|
63
|
-
this.metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
get tracer(): Tracer {
|
|
67
|
-
return this.metrics.tracer;
|
|
68
|
-
}
|
|
69
66
|
/**
|
|
70
67
|
* Simulate a transaction's public portion including all of its phases.
|
|
71
68
|
* @param tx - The transaction to simulate.
|
|
@@ -73,74 +70,100 @@ export class PublicTxSimulator {
|
|
|
73
70
|
*/
|
|
74
71
|
public async simulate(tx: Tx): Promise<PublicTxResult> {
|
|
75
72
|
try {
|
|
76
|
-
const
|
|
73
|
+
const txHash = this.computeTxHash(tx);
|
|
74
|
+
this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
|
|
77
75
|
|
|
78
|
-
|
|
79
|
-
this.
|
|
76
|
+
// Create hinting DBs.
|
|
77
|
+
const hints = new AvmExecutionHints(this.globalVariables, AvmTxHint.fromTx(tx, this.globalVariables.gasFees));
|
|
78
|
+
const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
|
|
79
|
+
const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
|
|
80
|
+
const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
|
|
80
81
|
|
|
81
82
|
const context = await PublicTxContext.create(
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
hintingTreesDB,
|
|
84
|
+
hintingContractsDB,
|
|
84
85
|
tx,
|
|
85
86
|
this.globalVariables,
|
|
86
87
|
this.doMerkleOperations,
|
|
87
88
|
);
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// TODO(#6464): Should we allow emitting contracts in the private setup phase?
|
|
93
|
-
await this.worldStateDB.addNewNonRevertibleContracts(tx);
|
|
94
|
-
const nonRevertEnd = process.hrtime.bigint();
|
|
95
|
-
this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
|
|
90
|
+
// This will throw if there is a nullifier collision.
|
|
91
|
+
// In that case the transaction will be thrown out.
|
|
92
|
+
await this.insertNonRevertiblesFromPrivate(context, tx);
|
|
96
93
|
|
|
97
94
|
const processedPhases: ProcessedPhase[] = [];
|
|
98
95
|
if (context.hasPhase(TxExecutionPhase.SETUP)) {
|
|
99
|
-
|
|
96
|
+
// This will throw if the setup phase reverts.
|
|
97
|
+
// In that case the transaction will be thrown out.
|
|
98
|
+
const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
|
|
99
|
+
if (setupResult.reverted) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
`Setup phase reverted! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
100
104
|
processedPhases.push(setupResult);
|
|
101
105
|
}
|
|
102
106
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (success) {
|
|
106
|
-
// add new contracts to the contracts db so that their functions may be found and called
|
|
107
|
-
await this.worldStateDB.addNewRevertibleContracts(tx);
|
|
108
|
-
const revertEnd = process.hrtime.bigint();
|
|
109
|
-
this.metrics.recordPrivateEffectsInsertion(Number(revertEnd - revertStart) / 1_000, 'revertible');
|
|
107
|
+
// The checkpoint we should go back to if anything from now on reverts.
|
|
108
|
+
await context.state.fork();
|
|
110
109
|
|
|
111
|
-
|
|
110
|
+
try {
|
|
111
|
+
// This will throw if there is a nullifier collision.
|
|
112
|
+
await this.insertRevertiblesFromPrivate(context, tx);
|
|
113
|
+
// Only proceed with app logic if there was no revert during revertible insertion.
|
|
112
114
|
if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
|
|
113
|
-
const appLogicResult
|
|
115
|
+
const appLogicResult = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
|
|
114
116
|
processedPhases.push(appLogicResult);
|
|
117
|
+
if (appLogicResult.reverted) {
|
|
118
|
+
throw new Error(`App logic phase reverted! ${appLogicResult.revertReason?.message}`);
|
|
119
|
+
}
|
|
115
120
|
}
|
|
116
|
-
}
|
|
117
|
-
this.log.debug(
|
|
121
|
+
} catch (e) {
|
|
122
|
+
this.log.debug(String(e));
|
|
123
|
+
// We revert to the post-setup state.
|
|
124
|
+
await context.state.discardForkedState();
|
|
125
|
+
// But we also create a new fork so that the teardown phase can transparently
|
|
126
|
+
// commit or rollback at the end of teardown.
|
|
127
|
+
await context.state.fork();
|
|
118
128
|
}
|
|
119
129
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
try {
|
|
131
|
+
if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
132
|
+
const teardownResult = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
|
|
133
|
+
processedPhases.push(teardownResult);
|
|
134
|
+
if (teardownResult.reverted) {
|
|
135
|
+
throw new Error(`Teardown phase reverted! ${teardownResult.revertReason?.message}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// We commit the forked state and we are done.
|
|
140
|
+
await context.state.mergeForkedState();
|
|
141
|
+
} catch (e) {
|
|
142
|
+
this.log.debug(String(e));
|
|
143
|
+
// We rollback to the post-setup state.
|
|
144
|
+
await context.state.discardForkedState();
|
|
123
145
|
}
|
|
124
146
|
|
|
125
|
-
|
|
126
|
-
await this.payFee(context);
|
|
147
|
+
context.halt();
|
|
127
148
|
|
|
128
|
-
|
|
149
|
+
if (context.getActualGasUsed().l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`Transaction consumes ${context.getActualGasUsed().l2Gas} L2 gas, which exceeds the AVM maximum processable gas of ${AVM_MAX_PROCESSABLE_L2_GAS}`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
await this.payFee(context);
|
|
129
155
|
|
|
130
|
-
const
|
|
156
|
+
const publicInputs = await context.generateAvmCircuitPublicInputs();
|
|
157
|
+
const avmProvingRequest = PublicTxSimulator.generateProvingRequest(publicInputs, hints);
|
|
131
158
|
|
|
132
159
|
const revertCode = context.getFinalRevertCode();
|
|
133
160
|
|
|
134
|
-
if (!revertCode.isOK()) {
|
|
135
|
-
await tx.filterRevertedLogs();
|
|
136
|
-
}
|
|
137
161
|
// Commit contracts from this TX to the block-level cache and clear tx cache
|
|
138
162
|
// If the tx reverted, only commit non-revertible contracts
|
|
139
163
|
// NOTE: You can't create contracts in public, so this is only relevant for private-created contracts
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
|
|
164
|
+
// FIXME(fcarreiro): this should conceptually use the hinted contracts db.
|
|
165
|
+
// However things should work as they are now because the hinted db would still pick up the new contracts.
|
|
166
|
+
this.contractsDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
|
|
144
167
|
|
|
145
168
|
return {
|
|
146
169
|
avmProvingRequest,
|
|
@@ -157,97 +180,41 @@ export class PublicTxSimulator {
|
|
|
157
180
|
} finally {
|
|
158
181
|
// Make sure there are no new contracts in the tx-level cache.
|
|
159
182
|
// They should either be committed to block-level cache or cleared.
|
|
160
|
-
this.
|
|
183
|
+
// FIXME(fcarreiro): this should conceptually use the hinted contracts db.
|
|
184
|
+
// However things should work as they are now because the hinted db would still pick up the new contracts.
|
|
185
|
+
this.contractsDB.clearContractsForTx();
|
|
161
186
|
}
|
|
162
187
|
}
|
|
163
188
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
* @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
|
|
167
|
-
* @returns The phase result.
|
|
168
|
-
*/
|
|
169
|
-
private async simulateSetupPhase(context: PublicTxContext): Promise<ProcessedPhase> {
|
|
170
|
-
return await this.simulatePhase(TxExecutionPhase.SETUP, context);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Simulate the app logic phase of a transaction's public execution.
|
|
175
|
-
* @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
|
|
176
|
-
* @returns The phase result.
|
|
177
|
-
*/
|
|
178
|
-
private async simulateAppLogicPhase(context: PublicTxContext): Promise<ProcessedPhase> {
|
|
179
|
-
assert(context.state.isForked(), 'App logic phase should operate with forked state.');
|
|
180
|
-
|
|
181
|
-
const result = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
|
|
182
|
-
|
|
183
|
-
if (result.reverted) {
|
|
184
|
-
// Drop the currently active forked state manager and rollback to end of setup.
|
|
185
|
-
await context.state.discardForkedState();
|
|
186
|
-
} else {
|
|
187
|
-
if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
188
|
-
// Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
|
|
189
|
-
await context.state.mergeForkedState();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return result;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Simulate the teardown phase of a transaction's public execution.
|
|
198
|
-
* @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
|
|
199
|
-
* @returns The phase result.
|
|
200
|
-
*/
|
|
201
|
-
private async simulateTeardownPhase(context: PublicTxContext): Promise<ProcessedPhase> {
|
|
202
|
-
if (!context.state.isForked()) {
|
|
203
|
-
// If state isn't forked (app logic reverted), fork now
|
|
204
|
-
// so we can rollback to the end of setup if teardown reverts.
|
|
205
|
-
await context.state.fork();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
|
|
209
|
-
|
|
210
|
-
if (result.reverted) {
|
|
211
|
-
// Drop the currently active forked state manager and rollback to end of setup.
|
|
212
|
-
await context.state.discardForkedState();
|
|
213
|
-
} else {
|
|
214
|
-
// Merge state updates from teardown,
|
|
215
|
-
await context.state.mergeForkedState();
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return result;
|
|
189
|
+
protected computeTxHash(tx: Tx) {
|
|
190
|
+
return tx.getTxHash();
|
|
219
191
|
}
|
|
220
192
|
|
|
221
193
|
/**
|
|
222
|
-
* Simulate
|
|
223
|
-
* @param phase - The current phase
|
|
194
|
+
* Simulate the setup phase of a transaction's public execution.
|
|
224
195
|
* @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
|
|
225
196
|
* @returns The phase result.
|
|
226
197
|
*/
|
|
227
|
-
|
|
198
|
+
protected async simulatePhase(phase: TxExecutionPhase, context: PublicTxContext): Promise<ProcessedPhase> {
|
|
228
199
|
const callRequests = context.getCallRequestsForPhase(phase);
|
|
229
|
-
const executionRequests = context.getExecutionRequestsForPhase(phase);
|
|
230
200
|
|
|
231
201
|
this.log.debug(`Processing phase ${TxExecutionPhase[phase]} for tx ${context.txHash}`, {
|
|
232
202
|
txHash: context.txHash.toString(),
|
|
233
203
|
phase: TxExecutionPhase[phase],
|
|
234
204
|
callRequests: callRequests.length,
|
|
235
|
-
executionRequests: executionRequests.length,
|
|
236
205
|
});
|
|
237
206
|
|
|
238
207
|
const returnValues: NestedProcessReturnValues[] = [];
|
|
239
208
|
let reverted = false;
|
|
240
209
|
let revertReason: SimulationError | undefined;
|
|
241
|
-
|
|
242
|
-
for (let i = callRequests.length - 1; i >= 0; i--) {
|
|
210
|
+
for (let i = 0; i < callRequests.length; i++) {
|
|
243
211
|
if (reverted) {
|
|
244
212
|
break;
|
|
245
213
|
}
|
|
246
214
|
|
|
247
215
|
const callRequest = callRequests[i];
|
|
248
|
-
const executionRequest = executionRequests[i];
|
|
249
216
|
|
|
250
|
-
const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest
|
|
217
|
+
const enqueuedCallResult = await this.simulateEnqueuedCall(phase, context, callRequest);
|
|
251
218
|
|
|
252
219
|
returnValues.push(new NestedProcessReturnValues(enqueuedCallResult.output));
|
|
253
220
|
|
|
@@ -259,7 +226,6 @@ export class PublicTxSimulator {
|
|
|
259
226
|
|
|
260
227
|
return {
|
|
261
228
|
phase,
|
|
262
|
-
durationMs: phaseTimer.ms(),
|
|
263
229
|
returnValues,
|
|
264
230
|
reverted,
|
|
265
231
|
revertReason,
|
|
@@ -270,31 +236,23 @@ export class PublicTxSimulator {
|
|
|
270
236
|
* Simulate an enqueued public call.
|
|
271
237
|
* @param phase - The current phase of public execution
|
|
272
238
|
* @param context - WILL BE MUTATED. The context of the currently executing public transaction portion
|
|
273
|
-
* @param callRequest - The
|
|
274
|
-
* @param executionRequest - The execution request (includes args)
|
|
239
|
+
* @param callRequest - The public function call request, including the calldata.
|
|
275
240
|
* @returns The result of execution.
|
|
276
241
|
*/
|
|
277
|
-
|
|
278
|
-
[Attributes.TX_HASH]: context.txHash.toString(),
|
|
279
|
-
[Attributes.TARGET_ADDRESS]: executionRequest.callContext.contractAddress.toString(),
|
|
280
|
-
[Attributes.SENDER_ADDRESS]: executionRequest.callContext.msgSender.toString(),
|
|
281
|
-
[Attributes.SIMULATOR_PHASE]: TxExecutionPhase[phase].toString(),
|
|
282
|
-
}))
|
|
283
|
-
private async simulateEnqueuedCall(
|
|
242
|
+
protected async simulateEnqueuedCall(
|
|
284
243
|
phase: TxExecutionPhase,
|
|
285
244
|
context: PublicTxContext,
|
|
286
|
-
callRequest:
|
|
287
|
-
executionRequest: PublicExecutionRequest,
|
|
245
|
+
callRequest: PublicCallRequestWithCalldata,
|
|
288
246
|
): Promise<AvmFinalizedCallResult> {
|
|
289
247
|
const stateManager = context.state.getActiveStateManager();
|
|
290
|
-
const
|
|
291
|
-
const fnName = await getPublicFunctionDebugName(this.
|
|
248
|
+
const contractAddress = callRequest.request.contractAddress;
|
|
249
|
+
const fnName = await getPublicFunctionDebugName(this.contractsDB, contractAddress, callRequest.calldata);
|
|
292
250
|
|
|
293
251
|
const allocatedGas = context.getGasLeftAtPhase(phase);
|
|
294
252
|
|
|
295
253
|
const result = await this.simulateEnqueuedCallInternal(
|
|
296
|
-
|
|
297
|
-
|
|
254
|
+
stateManager,
|
|
255
|
+
callRequest,
|
|
298
256
|
allocatedGas,
|
|
299
257
|
/*transactionFee=*/ context.getTransactionFee(phase),
|
|
300
258
|
fnName,
|
|
@@ -306,11 +264,9 @@ export class PublicTxSimulator {
|
|
|
306
264
|
`Simulated enqueued public call (${fnName}) consumed ${gasUsed.l2Gas} L2 gas ending with ${result.gasLeft.l2Gas} L2 gas left.`,
|
|
307
265
|
);
|
|
308
266
|
|
|
309
|
-
stateManager.traceEnqueuedCall(callRequest, executionRequest.args, result.reverted);
|
|
310
|
-
|
|
311
267
|
if (result.reverted) {
|
|
312
|
-
const culprit = `${
|
|
313
|
-
context.revert(phase, result.revertReason, culprit);
|
|
268
|
+
const culprit = `${contractAddress}:${callRequest.functionSelector}`;
|
|
269
|
+
context.revert(phase, result.revertReason, culprit);
|
|
314
270
|
}
|
|
315
271
|
|
|
316
272
|
return result;
|
|
@@ -324,32 +280,24 @@ export class PublicTxSimulator {
|
|
|
324
280
|
* while still simulating phases and generating a proving request.
|
|
325
281
|
*
|
|
326
282
|
* @param stateManager - The state manager for AvmSimulation
|
|
327
|
-
* @param
|
|
328
|
-
* @param executionRequest - The execution request (includes args)
|
|
283
|
+
* @param callRequest - The public function call request, including the calldata.
|
|
329
284
|
* @param allocatedGas - The gas allocated to the enqueued call
|
|
330
285
|
* @param fnName - The name of the function
|
|
331
286
|
* @returns The result of execution.
|
|
332
287
|
*/
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
[Attributes.APP_CIRCUIT_NAME]: fnName,
|
|
337
|
-
}),
|
|
338
|
-
)
|
|
339
|
-
private async simulateEnqueuedCallInternal(
|
|
340
|
-
stateManager: AvmPersistableStateManager,
|
|
341
|
-
executionRequest: PublicExecutionRequest,
|
|
288
|
+
protected async simulateEnqueuedCallInternal(
|
|
289
|
+
stateManager: PublicPersistableStateManager,
|
|
290
|
+
{ request, calldata }: PublicCallRequestWithCalldata,
|
|
342
291
|
allocatedGas: Gas,
|
|
343
292
|
transactionFee: Fr,
|
|
344
293
|
fnName: string,
|
|
345
294
|
): Promise<AvmFinalizedCallResult> {
|
|
346
|
-
const address =
|
|
347
|
-
const sender =
|
|
295
|
+
const address = request.contractAddress;
|
|
296
|
+
const sender = request.msgSender;
|
|
348
297
|
|
|
349
298
|
this.log.debug(
|
|
350
299
|
`Executing enqueued public call to external function ${fnName}@${address} with ${allocatedGas.l2Gas} allocated L2 gas.`,
|
|
351
300
|
);
|
|
352
|
-
const timer = new Timer();
|
|
353
301
|
|
|
354
302
|
const simulator = await AvmSimulator.create(
|
|
355
303
|
stateManager,
|
|
@@ -357,79 +305,64 @@ export class PublicTxSimulator {
|
|
|
357
305
|
sender,
|
|
358
306
|
transactionFee,
|
|
359
307
|
this.globalVariables,
|
|
360
|
-
|
|
361
|
-
|
|
308
|
+
request.isStaticCall,
|
|
309
|
+
calldata,
|
|
362
310
|
allocatedGas,
|
|
311
|
+
this.clientInitiatedSimulation,
|
|
363
312
|
);
|
|
364
313
|
const avmCallResult = await simulator.execute();
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
this.log.verbose(
|
|
368
|
-
result.reverted
|
|
369
|
-
? `Simulation of enqueued public call ${fnName} reverted with reason ${result.revertReason}.`
|
|
370
|
-
: `Simulation of enqueued public call ${fnName} completed successfully.`,
|
|
371
|
-
{
|
|
372
|
-
eventName: 'avm-simulation',
|
|
373
|
-
appCircuitName: fnName,
|
|
374
|
-
duration: timer.ms(),
|
|
375
|
-
} satisfies AvmSimulationStats,
|
|
376
|
-
);
|
|
377
|
-
|
|
378
|
-
if (result.reverted) {
|
|
379
|
-
this.metrics.recordFunctionSimulationFailure();
|
|
380
|
-
} else {
|
|
381
|
-
this.metrics.recordFunctionSimulation(timer.ms(), allocatedGas.sub(result.gasLeft).l2Gas, fnName);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
return result;
|
|
314
|
+
return avmCallResult.finalize();
|
|
385
315
|
}
|
|
386
316
|
|
|
387
317
|
/**
|
|
388
318
|
* Insert the non-revertible accumulated data from private into the public state.
|
|
389
319
|
*/
|
|
390
|
-
|
|
320
|
+
protected async insertNonRevertiblesFromPrivate(context: PublicTxContext, tx: Tx) {
|
|
391
321
|
const stateManager = context.state.getActiveStateManager();
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
`Nullifier collision encountered when inserting non-revertible nullifiers from private.\nDetails: ${e.message}\nStack:${e.stack}`,
|
|
398
|
-
);
|
|
399
|
-
}
|
|
322
|
+
|
|
323
|
+
for (const siloedNullifier of context.nonRevertibleAccumulatedDataFromPrivate.nullifiers.filter(
|
|
324
|
+
n => !n.isEmpty(),
|
|
325
|
+
)) {
|
|
326
|
+
await stateManager.writeSiloedNullifier(siloedNullifier);
|
|
400
327
|
}
|
|
401
328
|
for (const noteHash of context.nonRevertibleAccumulatedDataFromPrivate.noteHashes) {
|
|
402
329
|
if (!noteHash.isEmpty()) {
|
|
403
330
|
await stateManager.writeUniqueNoteHash(noteHash);
|
|
404
331
|
}
|
|
405
332
|
}
|
|
333
|
+
for (const l2ToL1Message of context.nonRevertibleAccumulatedDataFromPrivate.l2ToL1Msgs) {
|
|
334
|
+
if (!l2ToL1Message.isEmpty()) {
|
|
335
|
+
stateManager.writeScopedL2ToL1Message(l2ToL1Message);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// add new contracts to the contracts db so that their functions may be found and called
|
|
340
|
+
// TODO(#6464): Should we allow emitting contracts in the private setup phase?
|
|
341
|
+
// FIXME(fcarreiro): this should conceptually use the hinted contracts db.
|
|
342
|
+
// However things should work as they are now because the hinted db would still pick up the new contracts.
|
|
343
|
+
await this.contractsDB.addNewNonRevertibleContracts(tx);
|
|
406
344
|
}
|
|
407
345
|
|
|
408
346
|
/**
|
|
409
347
|
* Insert the revertible accumulated data from private into the public state.
|
|
410
348
|
* Start by forking state so we can rollback to the end of setup if app logic or teardown reverts.
|
|
411
349
|
*/
|
|
412
|
-
|
|
413
|
-
// Fork the state manager so we can rollback to end of setup if app logic reverts.
|
|
414
|
-
await context.state.fork();
|
|
350
|
+
protected async insertRevertiblesFromPrivate(context: PublicTxContext, tx: Tx): /*success=*/ Promise<boolean> {
|
|
415
351
|
const stateManager = context.state.getActiveStateManager();
|
|
352
|
+
|
|
416
353
|
try {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
if (e instanceof NullifierCollisionError) {
|
|
420
|
-
// Instead of throwing, revert the app_logic phase
|
|
421
|
-
context.revert(
|
|
422
|
-
TxExecutionPhase.APP_LOGIC,
|
|
423
|
-
new SimulationError(
|
|
424
|
-
`Nullifier collision encountered when inserting revertible nullifiers from private\nDetails: ${e.message}\nError stack: ${e.stack}`,
|
|
425
|
-
[],
|
|
426
|
-
),
|
|
427
|
-
/*culprit=*/ 'insertRevertiblesFromPrivate',
|
|
428
|
-
);
|
|
429
|
-
return /*success=*/ false;
|
|
430
|
-
} else {
|
|
431
|
-
throw e;
|
|
354
|
+
for (const siloedNullifier of context.revertibleAccumulatedDataFromPrivate.nullifiers.filter(n => !n.isEmpty())) {
|
|
355
|
+
await stateManager.writeSiloedNullifier(siloedNullifier);
|
|
432
356
|
}
|
|
357
|
+
} catch (e) {
|
|
358
|
+
context.revert(
|
|
359
|
+
TxExecutionPhase.APP_LOGIC,
|
|
360
|
+
new SimulationError(
|
|
361
|
+
`Nullifier collision encountered when inserting revertible nullifiers from private.\nDetails: ${String(e)}`,
|
|
362
|
+
[],
|
|
363
|
+
),
|
|
364
|
+
);
|
|
365
|
+
throw e;
|
|
433
366
|
}
|
|
434
367
|
for (const noteHash of context.revertibleAccumulatedDataFromPrivate.noteHashes) {
|
|
435
368
|
if (!noteHash.isEmpty()) {
|
|
@@ -437,6 +370,16 @@ export class PublicTxSimulator {
|
|
|
437
370
|
await stateManager.writeSiloedNoteHash(noteHash);
|
|
438
371
|
}
|
|
439
372
|
}
|
|
373
|
+
for (const l2ToL1Message of context.revertibleAccumulatedDataFromPrivate.l2ToL1Msgs) {
|
|
374
|
+
if (!l2ToL1Message.isEmpty()) {
|
|
375
|
+
stateManager.writeScopedL2ToL1Message(l2ToL1Message);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// add new contracts to the contracts db so that their functions may be found and called
|
|
379
|
+
// FIXME(fcarreiro): this should conceptually use the hinted contracts db.
|
|
380
|
+
// However things should work as they are now because the hinted db would still pick up the new contracts.
|
|
381
|
+
await this.contractsDB.addNewRevertibleContracts(tx);
|
|
382
|
+
|
|
440
383
|
return /*success=*/ true;
|
|
441
384
|
}
|
|
442
385
|
|
|
@@ -471,4 +414,17 @@ export class PublicTxSimulator {
|
|
|
471
414
|
const updatedBalance = currentBalance.sub(txFee);
|
|
472
415
|
await stateManager.writeStorage(feeJuiceAddress, balanceSlot, updatedBalance, true);
|
|
473
416
|
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Generate the proving request for the AVM circuit.
|
|
420
|
+
*/
|
|
421
|
+
private static generateProvingRequest(
|
|
422
|
+
publicInputs: AvmCircuitPublicInputs,
|
|
423
|
+
hints: AvmExecutionHints,
|
|
424
|
+
): AvmProvingRequest {
|
|
425
|
+
return {
|
|
426
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
427
|
+
inputs: new AvmCircuitInputs(hints, publicInputs),
|
|
428
|
+
};
|
|
429
|
+
}
|
|
474
430
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import type { Gas } from '@aztec/stdlib/gas';
|
|
3
|
+
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
4
|
+
import { type GlobalVariables, PublicCallRequestWithCalldata, TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
5
|
+
import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
6
|
+
|
|
7
|
+
import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
|
|
8
|
+
import { ExecutorMetrics } from '../executor_metrics.js';
|
|
9
|
+
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
10
|
+
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
11
|
+
import { MeasuredPublicTxSimulator } from './measured_public_tx_simulator.js';
|
|
12
|
+
import { PublicTxContext } from './public_tx_context.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A public tx simulator that tracks runtime/production metrics with telemetry.
|
|
16
|
+
*/
|
|
17
|
+
export class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
|
|
18
|
+
/* tracer needed by trackSpans */
|
|
19
|
+
public readonly tracer: Tracer;
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
23
|
+
contractsDB: PublicContractsDB,
|
|
24
|
+
globalVariables: GlobalVariables,
|
|
25
|
+
doMerkleOperations: boolean = false,
|
|
26
|
+
skipFeeEnforcement: boolean = false,
|
|
27
|
+
clientInitiatedSimulation: boolean = false,
|
|
28
|
+
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
29
|
+
) {
|
|
30
|
+
const metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
|
|
31
|
+
super(
|
|
32
|
+
merkleTree,
|
|
33
|
+
contractsDB,
|
|
34
|
+
globalVariables,
|
|
35
|
+
doMerkleOperations,
|
|
36
|
+
skipFeeEnforcement,
|
|
37
|
+
clientInitiatedSimulation,
|
|
38
|
+
metrics,
|
|
39
|
+
);
|
|
40
|
+
this.tracer = metrics.tracer;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@trackSpan('PublicTxSimulator.simulateEnqueuedCall', (phase, context, callRequest) => ({
|
|
44
|
+
[Attributes.TX_HASH]: context.txHash.toString(),
|
|
45
|
+
[Attributes.TARGET_ADDRESS]: callRequest.request.contractAddress.toString(),
|
|
46
|
+
[Attributes.SENDER_ADDRESS]: callRequest.request.msgSender.toString(),
|
|
47
|
+
[Attributes.SIMULATOR_PHASE]: TxExecutionPhase[phase].toString(),
|
|
48
|
+
}))
|
|
49
|
+
protected override async simulateEnqueuedCall(
|
|
50
|
+
phase: TxExecutionPhase,
|
|
51
|
+
context: PublicTxContext,
|
|
52
|
+
callRequest: PublicCallRequestWithCalldata,
|
|
53
|
+
): Promise<AvmFinalizedCallResult> {
|
|
54
|
+
return await super.simulateEnqueuedCall(phase, context, callRequest);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@trackSpan(
|
|
58
|
+
'PublicTxSimulator.simulateEnqueuedCallInternal',
|
|
59
|
+
(_stateManager, _callRequest, _allocatedGas, _transactionFee, fnName) => ({
|
|
60
|
+
[Attributes.APP_CIRCUIT_NAME]: fnName,
|
|
61
|
+
}),
|
|
62
|
+
)
|
|
63
|
+
protected override async simulateEnqueuedCallInternal(
|
|
64
|
+
stateManager: PublicPersistableStateManager,
|
|
65
|
+
callRequest: PublicCallRequestWithCalldata,
|
|
66
|
+
allocatedGas: Gas,
|
|
67
|
+
transactionFee: Fr,
|
|
68
|
+
fnName: string,
|
|
69
|
+
): Promise<AvmFinalizedCallResult> {
|
|
70
|
+
return await super.simulateEnqueuedCallInternal(stateManager, callRequest, allocatedGas, transactionFee, fnName);
|
|
71
|
+
}
|
|
72
|
+
}
|