@aztec/simulator 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c
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 +2 -0
- package/dest/client.d.ts +1 -1
- package/dest/common/errors.d.ts +2 -2
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/index.d.ts +1 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +1 -1
- package/dest/private/acvm/acvm_types.d.ts +1 -1
- package/dest/private/acvm/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +1 -1
- package/dest/private/acvm/index.d.ts +1 -1
- package/dest/private/acvm/serialize.d.ts +2 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +1 -1
- package/dest/private/acvm_native.d.ts +1 -1
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_wasm.d.ts +1 -1
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.d.ts +1 -1
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +16 -15
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_simulator.d.ts +1 -1
- package/dest/private/factory.d.ts +1 -1
- package/dest/public/avm/avm_context.d.ts +2 -2
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +2 -2
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.d.ts +5 -5
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -8
- package/dest/public/avm/avm_gas.d.ts +2 -2
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.d.ts +2 -2
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.d.ts +14 -14
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +4 -1
- package/dest/public/avm/avm_simulator.d.ts +4 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +8 -7
- package/dest/public/avm/avm_simulator_interface.d.ts +1 -1
- package/dest/public/avm/errors.d.ts +8 -2
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +14 -2
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -3
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +2 -2
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts +2 -3
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +7 -5
- package/dest/public/avm/fixtures/utils.d.ts +4 -3
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -1
- package/dest/public/avm/fixtures/utils.js +3 -2
- package/dest/public/avm/index.d.ts +1 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +15 -15
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +29 -29
- package/dest/public/avm/opcodes/addressing_mode.d.ts +1 -1
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +2 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts +3 -1
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +12 -2
- package/dest/public/avm/opcodes/bitwise.d.ts +3 -3
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +5 -5
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +1 -1
- package/dest/public/avm/opcodes/contract.d.ts +3 -3
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +8 -8
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +4 -4
- package/dest/public/avm/opcodes/conversion.d.ts +3 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +4 -4
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +17 -8
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +6 -6
- package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +17 -16
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +21 -16
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +2 -2
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +13 -13
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +25 -25
- package/dest/public/avm/opcodes/misc.d.ts +3 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +8 -8
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +34 -24
- package/dest/public/avm/revert_reason.d.ts +2 -2
- package/dest/public/avm/revert_reason.d.ts.map +1 -1
- package/dest/public/avm/revert_reason.js +3 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -1
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +9 -6
- package/dest/public/avm/serialization/instruction_serialization.d.ts +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +1 -1
- package/dest/public/avm/test_utils.d.ts +2 -2
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +1 -1
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +14 -2
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/debug_fn_name.d.ts +15 -2
- package/dest/public/debug_fn_name.d.ts.map +1 -1
- package/dest/public/debug_fn_name.js +28 -2
- package/dest/public/executor_metrics.d.ts +3 -2
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +9 -35
- package/dest/public/executor_metrics_interface.d.ts +3 -2
- package/dest/public/executor_metrics_interface.d.ts.map +1 -1
- package/dest/public/fixtures/amm_test.d.ts +1 -1
- package/dest/public/fixtures/amm_test.js +2 -2
- package/dest/public/fixtures/bulk_test.d.ts +3 -3
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +5 -69
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +29 -7
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -8
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +83 -18
- package/dest/public/fixtures/index.d.ts +4 -2
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +3 -1
- package/dest/public/fixtures/minimal_public_tx.d.ts +2 -8
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
- package/dest/public/fixtures/minimal_public_tx.js +6 -16
- package/dest/public/fixtures/opcode_spammer.d.ts +123 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1693 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +24 -6
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +62 -21
- package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
- package/dest/public/fixtures/simple_contract_data_source.js +4 -4
- package/dest/public/fixtures/token_test.d.ts +6 -2
- package/dest/public/fixtures/token_test.d.ts.map +1 -1
- package/dest/public/fixtures/token_test.js +13 -12
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +4 -3
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +14 -4
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +71 -13
- package/dest/public/index.d.ts +3 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_db_sources.d.ts +22 -63
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +74 -131
- package/dest/public/public_errors.d.ts +1 -1
- package/dest/public/public_errors.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +6 -4
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +5 -0
- package/dest/public/public_processor/public_processor.d.ts +12 -19
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +456 -64
- package/dest/public/public_processor/public_processor_metrics.d.ts +1 -1
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +12 -45
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +18 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +34 -22
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +93 -50
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +22 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +13 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +5 -1
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +3 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +14 -7
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +5 -5
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +6 -3
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +13 -5
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +13 -32
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +112 -127
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +25 -2
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +4 -4
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
- package/dest/public/side_effect_errors.d.ts +1 -1
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_trace.d.ts +2 -2
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +1 -1
- package/dest/public/side_effect_trace_interface.d.ts +3 -4
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +1 -1
- package/dest/public/state_manager/nullifiers.d.ts +2 -2
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
- package/dest/public/state_manager/public_storage.d.ts +2 -2
- package/dest/public/state_manager/public_storage.d.ts.map +1 -1
- package/dest/public/state_manager/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +9 -11
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +12 -8
- package/dest/public/test_executor_metrics.d.ts +4 -3
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +5 -4
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +1 -1
- package/dest/server.d.ts +1 -1
- package/dest/testing.d.ts +1 -1
- package/package.json +21 -20
- package/src/common/errors.ts +1 -1
- package/src/private/acvm/deserialize.ts +1 -1
- package/src/private/acvm/serialize.ts +1 -1
- package/src/private/circuit_recording/circuit_recorder.ts +17 -16
- package/src/public/avm/avm_context.ts +1 -1
- package/src/public/avm/avm_contract_call_result.ts +1 -1
- package/src/public/avm/avm_execution_environment.ts +4 -6
- package/src/public/avm/avm_gas.ts +3 -3
- package/src/public/avm/avm_machine_state.ts +1 -1
- package/src/public/avm/avm_memory_types.ts +5 -1
- package/src/public/avm/avm_simulator.ts +11 -9
- package/src/public/avm/errors.ts +17 -3
- package/src/public/avm/fixtures/avm_simulation_tester.ts +10 -2
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +1 -1
- package/src/public/avm/fixtures/initializers.ts +8 -10
- package/src/public/avm/fixtures/utils.ts +3 -2
- package/src/public/avm/opcodes/accrued_substate.ts +15 -15
- package/src/public/avm/opcodes/addressing_mode.ts +2 -2
- package/src/public/avm/opcodes/arithmetic.ts +14 -2
- package/src/public/avm/opcodes/bitwise.ts +3 -3
- package/src/public/avm/opcodes/comparators.ts +1 -1
- package/src/public/avm/opcodes/contract.ts +4 -7
- package/src/public/avm/opcodes/control_flow.ts +2 -2
- package/src/public/avm/opcodes/conversion.ts +3 -3
- package/src/public/avm/opcodes/ec_add.ts +15 -6
- package/src/public/avm/opcodes/environment_getters.ts +7 -7
- package/src/public/avm/opcodes/external_calls.ts +10 -9
- package/src/public/avm/opcodes/hashing.ts +16 -10
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +19 -19
- package/src/public/avm/opcodes/misc.ts +6 -6
- package/src/public/avm/opcodes/storage.ts +30 -22
- package/src/public/avm/revert_reason.ts +6 -3
- package/src/public/avm/serialization/bytecode_serialization.ts +17 -6
- package/src/public/avm/serialization/instruction_serialization.ts +1 -1
- package/src/public/avm/test_utils.ts +1 -1
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +16 -1
- package/src/public/debug_fn_name.ts +35 -3
- package/src/public/executor_metrics.ts +9 -35
- package/src/public/executor_metrics_interface.ts +2 -1
- package/src/public/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +9 -9
- package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
- package/src/public/fixtures/custom_bytecode_tests.ts +111 -18
- package/src/public/fixtures/index.ts +7 -1
- package/src/public/fixtures/minimal_public_tx.ts +7 -17
- package/src/public/fixtures/opcode_spammer.ts +1754 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +85 -21
- package/src/public/fixtures/simple_contract_data_source.ts +8 -9
- package/src/public/fixtures/token_test.ts +18 -10
- package/src/public/fixtures/utils.ts +2 -3
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +112 -10
- package/src/public/index.ts +6 -4
- package/src/public/public_db_sources.ts +93 -172
- package/src/public/public_processor/guarded_merkle_tree.ts +8 -3
- package/src/public/public_processor/public_processor.ts +86 -59
- package/src/public/public_processor/public_processor_metrics.ts +11 -45
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +121 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +137 -57
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +132 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +237 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +81 -0
- package/src/public/public_tx_simulator/factories.ts +41 -0
- package/src/public/public_tx_simulator/index.ts +4 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +10 -14
- package/src/public/public_tx_simulator/public_tx_context.ts +9 -3
- package/src/public/public_tx_simulator/public_tx_simulator.ts +163 -193
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +3 -3
- package/src/public/side_effect_trace.ts +1 -1
- package/src/public/side_effect_trace_interface.ts +1 -1
- package/src/public/state_manager/nullifiers.ts +1 -1
- package/src/public/state_manager/public_storage.ts +1 -1
- package/src/public/state_manager/state_manager.ts +16 -30
- package/src/public/test_executor_metrics.ts +7 -5
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/src/public/tx_contract_cache.ts +0 -69
|
@@ -1,24 +1,16 @@
|
|
|
1
|
-
import { AVM_MAX_PROCESSABLE_L2_GAS
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { ProtocolContractAddress, ProtocolContractsList } from '@aztec/protocol-contracts';
|
|
5
5
|
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
6
|
-
import {
|
|
7
|
-
AvmCircuitInputs,
|
|
8
|
-
AvmCircuitPublicInputs,
|
|
9
|
-
AvmExecutionHints,
|
|
10
|
-
type AvmProvingRequest,
|
|
11
|
-
AvmTxHint,
|
|
12
|
-
type RevertCode,
|
|
13
|
-
} from '@aztec/stdlib/avm';
|
|
6
|
+
import { AvmExecutionHints, AvmTxHint, PublicSimulatorConfig, PublicTxEffect, PublicTxResult } from '@aztec/stdlib/avm';
|
|
14
7
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
15
|
-
import
|
|
16
|
-
import type { DebugLog } from '@aztec/stdlib/logs';
|
|
17
|
-
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
8
|
+
import { Gas } from '@aztec/stdlib/gas';
|
|
18
9
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
19
10
|
import {
|
|
20
11
|
type GlobalVariables,
|
|
21
12
|
NestedProcessReturnValues,
|
|
13
|
+
ProtocolContracts,
|
|
22
14
|
PublicCallRequestWithCalldata,
|
|
23
15
|
Tx,
|
|
24
16
|
TxExecutionPhase,
|
|
@@ -41,33 +33,6 @@ import type { PublicPersistableStateManager } from '../state_manager/state_manag
|
|
|
41
33
|
import { PublicTxContext } from './public_tx_context.js';
|
|
42
34
|
import type { PublicTxSimulatorInterface } from './public_tx_simulator_interface.js';
|
|
43
35
|
|
|
44
|
-
export type ProcessedPhase = {
|
|
45
|
-
phase: TxExecutionPhase;
|
|
46
|
-
durationMs?: number;
|
|
47
|
-
returnValues: NestedProcessReturnValues[];
|
|
48
|
-
reverted: boolean;
|
|
49
|
-
revertReason?: SimulationError;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export type PublicTxResult = {
|
|
53
|
-
avmProvingRequest: AvmProvingRequest;
|
|
54
|
-
/** Gas used during the execution of this tx */
|
|
55
|
-
gasUsed: GasUsed;
|
|
56
|
-
revertCode: RevertCode;
|
|
57
|
-
/** Revert reason, if any */
|
|
58
|
-
revertReason?: SimulationError;
|
|
59
|
-
processedPhases: ProcessedPhase[];
|
|
60
|
-
logs: DebugLog[];
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export type PublicTxSimulatorConfig = {
|
|
64
|
-
proverId: Fr;
|
|
65
|
-
doMerkleOperations: boolean;
|
|
66
|
-
skipFeeEnforcement: boolean;
|
|
67
|
-
clientInitiatedSimulation: boolean;
|
|
68
|
-
maxDebugLogMemoryReads: number;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
36
|
// The errors below are only thrown here in the public tx simulator,
|
|
72
37
|
// and only during revertible phases (revertible insertions, app logic and teardown).
|
|
73
38
|
// These are strictly "checked" errors (not exported and never propagated).
|
|
@@ -103,23 +68,27 @@ class TxSimTeardownRevert extends Error {
|
|
|
103
68
|
}
|
|
104
69
|
}
|
|
105
70
|
|
|
71
|
+
/** Only used internally. */
|
|
72
|
+
type ProcessedPhase = {
|
|
73
|
+
phase: TxExecutionPhase;
|
|
74
|
+
durationMs?: number;
|
|
75
|
+
returnValues: NestedProcessReturnValues[];
|
|
76
|
+
reverted: boolean;
|
|
77
|
+
revertReason?: SimulationError;
|
|
78
|
+
};
|
|
79
|
+
|
|
106
80
|
export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
107
81
|
protected log: Logger;
|
|
108
|
-
|
|
82
|
+
protected readonly config: PublicSimulatorConfig;
|
|
109
83
|
|
|
110
84
|
constructor(
|
|
111
85
|
protected merkleTree: MerkleTreeWriteOperations,
|
|
112
86
|
protected contractsDB: PublicContractsDB,
|
|
113
87
|
protected globalVariables: GlobalVariables,
|
|
114
|
-
config?: Partial<
|
|
88
|
+
config?: Partial<PublicSimulatorConfig>,
|
|
89
|
+
protected protocolContracts: ProtocolContracts = ProtocolContractsList,
|
|
115
90
|
) {
|
|
116
|
-
this.config = {
|
|
117
|
-
proverId: config?.proverId ?? Fr.ZERO,
|
|
118
|
-
doMerkleOperations: config?.doMerkleOperations ?? false,
|
|
119
|
-
skipFeeEnforcement: config?.skipFeeEnforcement ?? false,
|
|
120
|
-
clientInitiatedSimulation: config?.clientInitiatedSimulation ?? false,
|
|
121
|
-
maxDebugLogMemoryReads: config?.maxDebugLogMemoryReads ?? DEFAULT_MAX_DEBUG_LOG_MEMORY_READS,
|
|
122
|
-
};
|
|
91
|
+
this.config = PublicSimulatorConfig.from(config ?? {});
|
|
123
92
|
this.log = createLogger(`simulator:public_tx_simulator`);
|
|
124
93
|
}
|
|
125
94
|
|
|
@@ -129,136 +98,143 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
129
98
|
* @returns The result of the transaction's public execution.
|
|
130
99
|
*/
|
|
131
100
|
public async simulate(tx: Tx): Promise<PublicTxResult> {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
|
|
135
|
-
|
|
136
|
-
// Create hinting DBs.
|
|
137
|
-
const hints = new AvmExecutionHints(
|
|
138
|
-
this.globalVariables,
|
|
139
|
-
AvmTxHint.fromTx(tx, this.globalVariables.gasFees),
|
|
140
|
-
ProtocolContractsList, // imported from file
|
|
141
|
-
);
|
|
142
|
-
const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
|
|
143
|
-
const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
|
|
144
|
-
const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
|
|
145
|
-
|
|
146
|
-
const context = await PublicTxContext.create(
|
|
147
|
-
hintingTreesDB,
|
|
148
|
-
hintingContractsDB,
|
|
149
|
-
tx,
|
|
150
|
-
this.globalVariables,
|
|
151
|
-
ProtocolContractsList, // imported from file
|
|
152
|
-
this.config.doMerkleOperations,
|
|
153
|
-
this.config.proverId,
|
|
154
|
-
);
|
|
101
|
+
const txHash = this.computeTxHash(tx);
|
|
102
|
+
this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}`, { txHash });
|
|
155
103
|
|
|
156
|
-
|
|
104
|
+
// Create hinting DBs.
|
|
105
|
+
const hints = new AvmExecutionHints(
|
|
106
|
+
this.globalVariables,
|
|
107
|
+
AvmTxHint.fromTx(tx, this.globalVariables.gasFees),
|
|
108
|
+
this.protocolContracts,
|
|
109
|
+
);
|
|
110
|
+
const hintingMerkleTree = await HintingMerkleWriteOperations.create(this.merkleTree, hints);
|
|
111
|
+
const hintingTreesDB = new PublicTreesDB(hintingMerkleTree);
|
|
112
|
+
const hintingContractsDB = new HintingPublicContractsDB(this.contractsDB, hints);
|
|
113
|
+
|
|
114
|
+
const context = await PublicTxContext.create(
|
|
115
|
+
hintingTreesDB,
|
|
116
|
+
hintingContractsDB,
|
|
117
|
+
tx,
|
|
118
|
+
this.globalVariables,
|
|
119
|
+
this.protocolContracts,
|
|
120
|
+
this.config.proverId,
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
// This will throw if there is a nullifier collision.
|
|
124
|
+
// In that case the transaction will be thrown out.
|
|
125
|
+
await this.insertNonRevertiblesFromPrivate(context);
|
|
126
|
+
|
|
127
|
+
const processedPhases: ProcessedPhase[] = [];
|
|
128
|
+
if (context.hasPhase(TxExecutionPhase.SETUP)) {
|
|
129
|
+
// This will throw if the setup phase reverts.
|
|
157
130
|
// In that case the transaction will be thrown out.
|
|
158
|
-
await this.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
// In that case the transaction will be thrown out.
|
|
164
|
-
const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
|
|
165
|
-
if (setupResult.reverted) {
|
|
166
|
-
throw new Error(
|
|
167
|
-
`Setup phase reverted! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
processedPhases.push(setupResult);
|
|
131
|
+
const setupResult = await this.simulatePhase(TxExecutionPhase.SETUP, context);
|
|
132
|
+
if (setupResult.reverted) {
|
|
133
|
+
throw new Error(
|
|
134
|
+
`[SETUP] UNRECOVERABLE ERROR! The transaction will be thrown out. ${setupResult.revertReason?.message}`,
|
|
135
|
+
);
|
|
171
136
|
}
|
|
137
|
+
processedPhases.push(setupResult);
|
|
138
|
+
}
|
|
172
139
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
try {
|
|
177
|
-
// This will throw if there is a nullifier collision or other insertion error (limit reached).
|
|
178
|
-
await this.insertRevertiblesFromPrivate(context, tx);
|
|
140
|
+
// The checkpoint we should go back to if anything from now on reverts.
|
|
141
|
+
await context.state.fork();
|
|
142
|
+
hintingContractsDB.createCheckpoint();
|
|
179
143
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
// We revert to the post-setup state.
|
|
191
|
-
await context.state.discardForkedState();
|
|
192
|
-
// But we also create a new fork so that the teardown phase can transparently
|
|
193
|
-
// commit or rollback at the end of teardown.
|
|
194
|
-
await context.state.fork();
|
|
195
|
-
} else {
|
|
196
|
-
// Unchecked/unknown error - re-throw as-is
|
|
197
|
-
throw e;
|
|
144
|
+
try {
|
|
145
|
+
// This will throw if there is a nullifier collision or other insertion error (limit reached).
|
|
146
|
+
await this.insertRevertiblesFromPrivate(context);
|
|
147
|
+
|
|
148
|
+
// Only proceed with app logic if there was no revert during revertible insertion.
|
|
149
|
+
if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
|
|
150
|
+
const appLogicResult = await this.simulatePhase(TxExecutionPhase.APP_LOGIC, context);
|
|
151
|
+
processedPhases.push(appLogicResult);
|
|
152
|
+
if (appLogicResult.reverted) {
|
|
153
|
+
throw new TxSimAppLogicRevert();
|
|
198
154
|
}
|
|
199
155
|
}
|
|
156
|
+
} catch (e: any) {
|
|
157
|
+
if (e instanceof TxSimRevertibleInsertionsRevert || e instanceof TxSimAppLogicRevert) {
|
|
158
|
+
// We revert to the post-setup state.
|
|
159
|
+
await context.state.discardForkedState();
|
|
160
|
+
hintingContractsDB.revertCheckpoint();
|
|
161
|
+
// But we also create a new fork so that the teardown phase can transparently
|
|
162
|
+
// commit or rollback at the end of teardown.
|
|
163
|
+
await context.state.fork();
|
|
164
|
+
hintingContractsDB.createCheckpoint();
|
|
165
|
+
} else {
|
|
166
|
+
// Unchecked/unknown error - re-throw as-is
|
|
167
|
+
throw e;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
200
170
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
// We commit the forked state and we are done.
|
|
210
|
-
await context.state.mergeForkedState();
|
|
211
|
-
} catch (e: any) {
|
|
212
|
-
if (e instanceof TxSimTeardownRevert) {
|
|
213
|
-
// We revert to the post-setup state and we are done.
|
|
214
|
-
await context.state.discardForkedState();
|
|
215
|
-
} else {
|
|
216
|
-
// Unchecked/unknown error - re-throw as-is
|
|
217
|
-
throw e;
|
|
171
|
+
try {
|
|
172
|
+
if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
173
|
+
const teardownResult = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
|
|
174
|
+
processedPhases.push(teardownResult);
|
|
175
|
+
if (teardownResult.reverted) {
|
|
176
|
+
throw new TxSimTeardownRevert();
|
|
218
177
|
}
|
|
219
178
|
}
|
|
179
|
+
// We commit the forked state and we are done.
|
|
180
|
+
await context.state.mergeForkedState();
|
|
181
|
+
hintingContractsDB.commitCheckpoint();
|
|
182
|
+
} catch (e: any) {
|
|
183
|
+
if (e instanceof TxSimTeardownRevert) {
|
|
184
|
+
// We revert to the post-setup state and we are done.
|
|
185
|
+
await context.state.discardForkedState();
|
|
186
|
+
hintingContractsDB.revertCheckpoint();
|
|
187
|
+
} else {
|
|
188
|
+
// Unchecked/unknown error - re-throw as-is
|
|
189
|
+
throw e;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
220
192
|
|
|
221
|
-
|
|
193
|
+
context.halt();
|
|
222
194
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
this.contractsDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
|
|
241
|
-
|
|
242
|
-
return {
|
|
243
|
-
avmProvingRequest,
|
|
244
|
-
gasUsed: {
|
|
245
|
-
totalGas: context.getActualGasUsed(),
|
|
246
|
-
teardownGas: context.teardownGasUsed,
|
|
247
|
-
publicGas: context.getActualPublicGasUsed(),
|
|
248
|
-
billedGas: context.getTotalGasUsed(),
|
|
249
|
-
},
|
|
250
|
-
revertCode,
|
|
251
|
-
revertReason: context.revertReason,
|
|
252
|
-
processedPhases: processedPhases,
|
|
253
|
-
logs: context.state.getActiveStateManager().getLogs(),
|
|
254
|
-
};
|
|
255
|
-
} finally {
|
|
256
|
-
// Make sure there are no new contracts in the tx-level cache.
|
|
257
|
-
// They should either be committed to block-level cache or cleared.
|
|
258
|
-
// FIXME(fcarreiro): this should conceptually use the hinted contracts db.
|
|
259
|
-
// However things should work as they are now because the hinted db would still pick up the new contracts.
|
|
260
|
-
this.contractsDB.clearContractsForTx();
|
|
195
|
+
// Such transactions should be filtered by GasTxValidator.
|
|
196
|
+
assert(
|
|
197
|
+
context.getActualGasUsed().l2Gas <= AVM_MAX_PROCESSABLE_L2_GAS,
|
|
198
|
+
`Transaction consumes ${context.getActualGasUsed().l2Gas} L2 gas, which exceeds the AVM maximum processable gas of ${AVM_MAX_PROCESSABLE_L2_GAS}`,
|
|
199
|
+
);
|
|
200
|
+
await this.payFee(context);
|
|
201
|
+
|
|
202
|
+
const publicInputs = await context.generateAvmCircuitPublicInputs();
|
|
203
|
+
const revertCode = context.getFinalRevertCode();
|
|
204
|
+
|
|
205
|
+
// We only return the app logic phase information, and only 1 per phase.
|
|
206
|
+
const appLogicReturnValues: NestedProcessReturnValues[] =
|
|
207
|
+
processedPhases.find(({ phase }) => phase === TxExecutionPhase.APP_LOGIC)?.returnValues ?? [];
|
|
208
|
+
|
|
209
|
+
// TODO(fcarreiro): This is a temporary backwards compatibility layer until we migrate to the C++ simulator.
|
|
210
|
+
if (context.revertReason !== undefined) {
|
|
211
|
+
(appLogicReturnValues as any).revertReason = context.revertReason;
|
|
261
212
|
}
|
|
213
|
+
|
|
214
|
+
// Create PublicTxEffect from PublicInputs.
|
|
215
|
+
const publicTxEffect = new PublicTxEffect(
|
|
216
|
+
publicInputs.transactionFee,
|
|
217
|
+
publicInputs.accumulatedData.noteHashes.filter(h => !h.isEmpty()),
|
|
218
|
+
publicInputs.accumulatedData.nullifiers.filter(n => !n.isEmpty()),
|
|
219
|
+
publicInputs.accumulatedData.l2ToL1Msgs.filter(m => !m.isEmpty()),
|
|
220
|
+
publicInputs.accumulatedData.publicLogs.toLogs(),
|
|
221
|
+
publicInputs.accumulatedData.publicDataWrites.filter(w => !w.isEmpty()),
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
return new PublicTxResult(
|
|
225
|
+
/*gasUsed=*/ {
|
|
226
|
+
totalGas: context.getActualGasUsed(),
|
|
227
|
+
teardownGas: context.teardownGasUsed,
|
|
228
|
+
publicGas: context.getActualPublicGasUsed(),
|
|
229
|
+
billedGas: context.getTotalGasUsed(),
|
|
230
|
+
},
|
|
231
|
+
/*revertCode=*/ revertCode,
|
|
232
|
+
/*publicTxEffect=*/ publicTxEffect,
|
|
233
|
+
/*callStackMetadata=*/ appLogicReturnValues,
|
|
234
|
+
/*logs=*/ context.state.getActiveStateManager().getLogs(),
|
|
235
|
+
/*hints=*/ hints,
|
|
236
|
+
/*publicInputs=*/ publicInputs,
|
|
237
|
+
);
|
|
262
238
|
}
|
|
263
239
|
|
|
264
240
|
protected computeTxHash(tx: Tx) {
|
|
@@ -340,7 +316,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
340
316
|
);
|
|
341
317
|
|
|
342
318
|
if (result.reverted) {
|
|
343
|
-
const culprit = `${contractAddress}:${
|
|
319
|
+
const culprit = `${contractAddress}:${fnName}`;
|
|
344
320
|
context.revert(phase, result.revertReason, culprit);
|
|
345
321
|
}
|
|
346
322
|
|
|
@@ -383,8 +359,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
383
359
|
request.isStaticCall,
|
|
384
360
|
calldata,
|
|
385
361
|
allocatedGas,
|
|
386
|
-
this.config
|
|
387
|
-
this.config.maxDebugLogMemoryReads,
|
|
362
|
+
this.config,
|
|
388
363
|
);
|
|
389
364
|
const avmCallResult = await simulator.execute();
|
|
390
365
|
return avmCallResult.finalize();
|
|
@@ -393,7 +368,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
393
368
|
/**
|
|
394
369
|
* Insert the non-revertible accumulated data from private into the public state.
|
|
395
370
|
*/
|
|
396
|
-
protected async insertNonRevertiblesFromPrivate(context: PublicTxContext
|
|
371
|
+
protected async insertNonRevertiblesFromPrivate(context: PublicTxContext) {
|
|
397
372
|
const stateManager = context.state.getActiveStateManager();
|
|
398
373
|
|
|
399
374
|
for (const siloedNullifier of context.nonRevertibleAccumulatedDataFromPrivate.nullifiers.filter(
|
|
@@ -412,11 +387,12 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
412
387
|
}
|
|
413
388
|
}
|
|
414
389
|
|
|
415
|
-
// add new contracts to the contracts db so that their
|
|
416
|
-
//
|
|
417
|
-
//
|
|
418
|
-
//
|
|
419
|
-
|
|
390
|
+
// add new contracts to the contracts db so that their code may be found and called
|
|
391
|
+
// FIXME(fcarreiro): this should conceptually use the hinting contracts db.
|
|
392
|
+
// However, things work as expected because later calls to getters on the hintingContractsDB
|
|
393
|
+
// will pick up the new contracts and will generate the necessary hints.
|
|
394
|
+
// So, a consumer of the hints will always see the new contracts.
|
|
395
|
+
await this.contractsDB.addContracts(context.nonRevertibleContractDeploymentData);
|
|
420
396
|
}
|
|
421
397
|
|
|
422
398
|
/**
|
|
@@ -428,7 +404,7 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
428
404
|
* - NoteHashLimitReachedError
|
|
429
405
|
* - L2ToL1MessageLimitReachedError
|
|
430
406
|
*/
|
|
431
|
-
protected async insertRevertiblesFromPrivate(context: PublicTxContext
|
|
407
|
+
protected async insertRevertiblesFromPrivate(context: PublicTxContext) {
|
|
432
408
|
const stateManager = context.state.getActiveStateManager();
|
|
433
409
|
|
|
434
410
|
try {
|
|
@@ -497,16 +473,21 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
497
473
|
}
|
|
498
474
|
|
|
499
475
|
// add new contracts to the contracts db so that their functions may be found and called
|
|
500
|
-
// FIXME(fcarreiro): this should conceptually use the
|
|
501
|
-
// However things
|
|
502
|
-
|
|
476
|
+
// FIXME(fcarreiro): this should conceptually use the hinting contracts db.
|
|
477
|
+
// However, things work as expected because later calls to getters on the hintingContractsDB
|
|
478
|
+
// will pick up the new contracts and will generate the necessary hints.
|
|
479
|
+
// So, a consumer of the hints will always see the new contracts.
|
|
480
|
+
await this.contractsDB.addContracts(context.revertibleContractDeploymentData);
|
|
503
481
|
}
|
|
504
482
|
|
|
505
483
|
private async payFee(context: PublicTxContext) {
|
|
506
484
|
const txFee = context.getTransactionFee(TxExecutionPhase.TEARDOWN);
|
|
507
485
|
|
|
508
486
|
if (context.feePayer.isZero()) {
|
|
509
|
-
|
|
487
|
+
// Real transactions are enforced by private kernel to have nonzero fee payer.
|
|
488
|
+
// Real transactions cannot skip fee enforcement (skipping fee enforcement makes them unprovable).
|
|
489
|
+
assert(this.config.skipFeeEnforcement, 'Fee payer cannot be 0 unless skipping fee enforcement for simulation');
|
|
490
|
+
this.log.debug(`Fee payer is 0. Skipping fee enforcement. No one is paying the fee of ${txFee.toBigInt()}`);
|
|
510
491
|
return;
|
|
511
492
|
}
|
|
512
493
|
|
|
@@ -526,23 +507,12 @@ export class PublicTxSimulator implements PublicTxSimulatorInterface {
|
|
|
526
507
|
this.config.skipFeeEnforcement,
|
|
527
508
|
`Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
|
|
528
509
|
);
|
|
510
|
+
this.log.debug(`Fee payer balance insufficient, but we're skipping fee enforcement`);
|
|
511
|
+
// We still proceed and perform the storage write to minimize deviation from normal execution.
|
|
529
512
|
currentBalance = txFee;
|
|
530
513
|
}
|
|
531
514
|
|
|
532
515
|
const updatedBalance = currentBalance.sub(txFee);
|
|
533
516
|
await stateManager.writeStorage(feeJuiceAddress, balanceSlot, updatedBalance, true);
|
|
534
517
|
}
|
|
535
|
-
|
|
536
|
-
/**
|
|
537
|
-
* Generate the proving request for the AVM circuit.
|
|
538
|
-
*/
|
|
539
|
-
private static generateProvingRequest(
|
|
540
|
-
publicInputs: AvmCircuitPublicInputs,
|
|
541
|
-
hints: AvmExecutionHints,
|
|
542
|
-
): AvmProvingRequest {
|
|
543
|
-
return {
|
|
544
|
-
type: ProvingRequestType.PUBLIC_VM,
|
|
545
|
-
inputs: new AvmCircuitInputs(hints, publicInputs),
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
518
|
}
|
|
@@ -1,11 +1,33 @@
|
|
|
1
|
+
import type { PublicTxResult } from '@aztec/stdlib/avm';
|
|
1
2
|
import type { Tx } from '@aztec/stdlib/tx';
|
|
2
3
|
|
|
3
|
-
import type { PublicTxResult } from './public_tx_simulator.js';
|
|
4
|
-
|
|
5
4
|
export interface PublicTxSimulatorInterface {
|
|
6
5
|
simulate(tx: Tx): Promise<PublicTxResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Cancel the current simulation if one is in progress.
|
|
8
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
9
|
+
* Safe to call even if no simulation is in progress.
|
|
10
|
+
* Optional - not all implementations support cancellation.
|
|
11
|
+
*
|
|
12
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
13
|
+
* This is important because signaling cancellation doesn't immediately stop C++ -
|
|
14
|
+
* it only sets a flag that C++ checks at certain points. If C++ is in the middle
|
|
15
|
+
* of a slow operation (e.g., pad_trees), it won't stop until that completes.
|
|
16
|
+
* @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
|
|
17
|
+
*/
|
|
18
|
+
cancel?(waitTimeoutMs?: number): Promise<void>;
|
|
7
19
|
}
|
|
8
20
|
|
|
9
21
|
export interface MeasuredPublicTxSimulatorInterface {
|
|
10
22
|
simulate(tx: Tx, txLabel: string): Promise<PublicTxResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Cancel the current simulation if one is in progress.
|
|
25
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
26
|
+
* Safe to call even if no simulation is in progress.
|
|
27
|
+
* Optional - not all implementations support cancellation.
|
|
28
|
+
*
|
|
29
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
30
|
+
* @returns Promise that resolves when cancellation is signaled (and optionally when simulation stops)
|
|
31
|
+
*/
|
|
32
|
+
cancel?(waitTimeoutMs?: number): Promise<void>;
|
|
11
33
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
+
import type { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
2
3
|
import type { Gas } from '@aztec/stdlib/gas';
|
|
3
4
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
4
5
|
import { type GlobalVariables, PublicCallRequestWithCalldata, TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
@@ -10,7 +11,6 @@ import type { PublicContractsDB } from '../public_db_sources.js';
|
|
|
10
11
|
import type { PublicPersistableStateManager } from '../state_manager/state_manager.js';
|
|
11
12
|
import { MeasuredPublicTxSimulator } from './measured_public_tx_simulator.js';
|
|
12
13
|
import { PublicTxContext } from './public_tx_context.js';
|
|
13
|
-
import type { PublicTxSimulatorConfig } from './public_tx_simulator.js';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* A public tx simulator that tracks runtime/production metrics with telemetry.
|
|
@@ -24,7 +24,7 @@ export class TelemetryPublicTxSimulator extends MeasuredPublicTxSimulator {
|
|
|
24
24
|
contractsDB: PublicContractsDB,
|
|
25
25
|
globalVariables: GlobalVariables,
|
|
26
26
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
27
|
-
config?: Partial<
|
|
27
|
+
config?: Partial<PublicSimulatorConfig>,
|
|
28
28
|
) {
|
|
29
29
|
const metrics = new ExecutorMetrics(telemetryClient, 'PublicTxSimulator');
|
|
30
30
|
super(merkleTree, contractsDB, globalVariables, metrics, config);
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
8
8
|
PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
9
9
|
} from '@aztec/constants';
|
|
10
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
11
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
12
12
|
import { type LogLevel, createLogger } from '@aztec/foundation/log';
|
|
13
13
|
import { PublicDataUpdateRequest } from '@aztec/stdlib/avm';
|
|
14
14
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { LogLevel } from '@aztec/foundation/log';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { DebugLog } from '@aztec/stdlib/logs';
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
|
|
5
|
-
FEE_JUICE_ADDRESS,
|
|
6
|
-
MULTI_CALL_ENTRYPOINT_ADDRESS,
|
|
7
|
-
ROUTER_ADDRESS,
|
|
8
|
-
} from '@aztec/constants';
|
|
9
|
-
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
10
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
1
|
+
import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, MAX_PROTOCOL_CONTRACTS } from '@aztec/constants';
|
|
2
|
+
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
11
4
|
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
12
5
|
import { type LogLevel, createLogger } from '@aztec/foundation/log';
|
|
13
6
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
7
|
+
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
14
8
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
15
9
|
import type { ContractClassPublicWithCommitment, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
16
10
|
import { SerializableContractInstance } from '@aztec/stdlib/contract';
|
|
@@ -26,7 +20,7 @@ import { strict as assert } from 'assert';
|
|
|
26
20
|
|
|
27
21
|
import type { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
|
|
28
22
|
import type { PublicContractsDBInterface } from '../db_interfaces.js';
|
|
29
|
-
import { getPublicFunctionDebugName } from '../debug_fn_name.js';
|
|
23
|
+
import { getPublicFunctionDebugName, getPublicFunctionSelectorAndName } from '../debug_fn_name.js';
|
|
30
24
|
import type { PublicTreesDB } from '../public_db_sources.js';
|
|
31
25
|
import {
|
|
32
26
|
L1ToL2MessageIndexOutOfRangeError,
|
|
@@ -59,7 +53,7 @@ export class PublicPersistableStateManager {
|
|
|
59
53
|
private readonly trace: PublicSideEffectTraceInterface,
|
|
60
54
|
private readonly firstNullifier: Fr, // Needed for note hashes.
|
|
61
55
|
private readonly timestamp: UInt64, // Needed for contract updates.
|
|
62
|
-
private readonly doMerkleOperations: boolean =
|
|
56
|
+
private readonly doMerkleOperations: boolean = true,
|
|
63
57
|
private readonly publicStorage: PublicStorage = new PublicStorage(treesDB),
|
|
64
58
|
private readonly nullifiers: NullifierManager = new NullifierManager(treesDB),
|
|
65
59
|
) {}
|
|
@@ -71,18 +65,10 @@ export class PublicPersistableStateManager {
|
|
|
71
65
|
treesDB: PublicTreesDB,
|
|
72
66
|
contractsDB: PublicContractsDBInterface,
|
|
73
67
|
trace: PublicSideEffectTraceInterface,
|
|
74
|
-
doMerkleOperations: boolean = false,
|
|
75
68
|
firstNullifier: Fr,
|
|
76
69
|
timestamp: UInt64,
|
|
77
70
|
): PublicPersistableStateManager {
|
|
78
|
-
return new PublicPersistableStateManager(
|
|
79
|
-
treesDB,
|
|
80
|
-
contractsDB,
|
|
81
|
-
trace,
|
|
82
|
-
firstNullifier,
|
|
83
|
-
timestamp,
|
|
84
|
-
doMerkleOperations,
|
|
85
|
-
);
|
|
71
|
+
return new PublicPersistableStateManager(treesDB, contractsDB, trace, firstNullifier, timestamp);
|
|
86
72
|
}
|
|
87
73
|
|
|
88
74
|
/**
|
|
@@ -171,7 +157,6 @@ export class PublicPersistableStateManager {
|
|
|
171
157
|
if (this.doMerkleOperations) {
|
|
172
158
|
return await this.treesDB.storageRead(contractAddress, slot);
|
|
173
159
|
} else {
|
|
174
|
-
// TODO(fcarreiro): I don't get this. PublicStorage CAN end up reading the tree. Why is it in the "dont do merkle operations" branch?
|
|
175
160
|
const read = await this.publicStorage.read(contractAddress, slot);
|
|
176
161
|
this.log.trace(
|
|
177
162
|
`Storage read results (address=${contractAddress}, slot=${slot}): value=${read.value}, cached=${read.cached}`,
|
|
@@ -437,6 +422,8 @@ export class PublicPersistableStateManager {
|
|
|
437
422
|
await this.readStorage(ProtocolContractAddress.ContractInstanceRegistry, storageSlot);
|
|
438
423
|
|
|
439
424
|
const hash = await readDeployerStorage(delayedPublicMutableHashSlot);
|
|
425
|
+
// NOTE: The below reads are either not performed (if hash.isZero()) or only performed in unconstrained in c++ simulation.
|
|
426
|
+
// See UpdateCheck::check_current_class_id documentation - this means if we generate hints from the merkle db, they are unused:
|
|
440
427
|
const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(
|
|
441
428
|
delayedPublicMutableSlot,
|
|
442
429
|
readDeployerStorage,
|
|
@@ -539,6 +526,12 @@ export class PublicPersistableStateManager {
|
|
|
539
526
|
return await getPublicFunctionDebugName(this.contractsDB, avmEnvironment.address, avmEnvironment.calldata);
|
|
540
527
|
}
|
|
541
528
|
|
|
529
|
+
public async getPublicFunctionSelectorAndName(
|
|
530
|
+
avmEnvironment: AvmExecutionEnvironment,
|
|
531
|
+
): Promise<{ functionSelector?: FunctionSelector; functionName?: string }> {
|
|
532
|
+
return await getPublicFunctionSelectorAndName(this.contractsDB, avmEnvironment.address, avmEnvironment.calldata);
|
|
533
|
+
}
|
|
534
|
+
|
|
542
535
|
public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
|
|
543
536
|
await this.treesDB.padTree(treeId, leavesToInsert);
|
|
544
537
|
}
|
|
@@ -549,12 +542,5 @@ export class PublicPersistableStateManager {
|
|
|
549
542
|
}
|
|
550
543
|
|
|
551
544
|
function contractAddressIsCanonical(contractAddress: AztecAddress): boolean {
|
|
552
|
-
return (
|
|
553
|
-
contractAddress.equals(AztecAddress.fromNumber(CANONICAL_AUTH_REGISTRY_ADDRESS)) ||
|
|
554
|
-
contractAddress.equals(AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS)) ||
|
|
555
|
-
contractAddress.equals(AztecAddress.fromNumber(CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS)) ||
|
|
556
|
-
contractAddress.equals(AztecAddress.fromNumber(MULTI_CALL_ENTRYPOINT_ADDRESS)) ||
|
|
557
|
-
contractAddress.equals(AztecAddress.fromNumber(FEE_JUICE_ADDRESS)) ||
|
|
558
|
-
contractAddress.equals(AztecAddress.fromNumber(ROUTER_ADDRESS))
|
|
559
|
-
);
|
|
545
|
+
return contractAddress.toBigInt() >= 1 && contractAddress.toBigInt() <= MAX_PROTOCOL_CONTRACTS;
|
|
560
546
|
}
|