@aztec/simulator 0.0.1-commit.b655e406 → 0.0.1-commit.b9865e97
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 -4
- 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 +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- 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 +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +7 -5
- 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 +4 -3
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +23 -20
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
- 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 +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +3 -2
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
- package/dest/public/avm/{fixtures → testing}/utils.d.ts +4 -10
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +6 -35
- 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/executor_metrics.d.ts +3 -2
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +13 -34
- 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 +4 -4
- 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 +36 -73
- 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/index.d.ts +2 -3
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -2
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +30 -11
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +98 -31
- 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 +5 -5
- 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 +3 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +23 -23
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +62 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +176 -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/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 +29 -66
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +83 -134
- 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 +8 -5
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +12 -4
- package/dest/public/public_processor/public_processor.d.ts +19 -21
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +553 -123
- package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +36 -45
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -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 +99 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -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 -3
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +3 -2
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -89
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +101 -334
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +22 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +28 -0
- 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/side_effect_errors.d.ts +1 -1
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.d.ts +11 -4
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +29 -6
- 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 +22 -22
- package/src/common/errors.ts +1 -1
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm/deserialize.ts +1 -1
- package/src/private/acvm/serialize.ts +1 -1
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +24 -21
- package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/factory.ts +7 -4
- package/src/public/avm/testing/account_proof.json +553 -0
- package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
- package/src/public/avm/{fixtures → testing}/utils.ts +6 -41
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +16 -1
- package/src/public/executor_metrics.ts +11 -34
- package/src/public/executor_metrics_interface.ts +2 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +38 -13
- package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
- package/src/public/fixtures/index.ts +5 -2
- package/src/public/fixtures/public_tx_simulation_tester.ts +129 -27
- package/src/public/fixtures/simple_contract_data_source.ts +9 -10
- package/src/public/fixtures/token_test.ts +18 -10
- package/src/public/fixtures/utils.ts +28 -25
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +285 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +173 -0
- package/src/public/index.ts +4 -2
- package/src/public/public_db_sources.ts +112 -174
- package/src/public/public_processor/guarded_merkle_tree.ts +14 -6
- package/src/public/public_processor/public_processor.ts +225 -136
- package/src/public/public_processor/public_processor_metrics.ts +28 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
- package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +44 -0
- package/src/public/public_tx_simulator/index.ts +4 -2
- package/src/public/public_tx_simulator/public_tx_simulator.ts +153 -500
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +35 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
- package/src/public/test_executor_metrics.ts +34 -8
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -23
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -36
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -97
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -109
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -351
- package/dest/public/avm/avm_simulator.d.ts +0 -39
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -190
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/errors.d.ts +0 -98
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -129
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -74
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -43
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -42
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -255
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -47
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -87
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -84
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -209
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -114
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -24
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -68
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -38
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -333
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -5
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -109
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -10
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -29
- package/dest/public/hinting_db_sources.d.ts +0 -70
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -297
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -41
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -89
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -24
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -127
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -292
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -39
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -23
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -166
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -391
- 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/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -67
- package/src/public/avm/avm_execution_environment.ts +0 -48
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -169
- package/src/public/avm/avm_memory_types.ts +0 -436
- package/src/public/avm/avm_simulator.ts +0 -274
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -163
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -108
- package/src/public/avm/fixtures/initializers.ts +0 -104
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -288
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -117
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -75
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -96
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -260
- package/src/public/avm/opcodes/hashing.ts +0 -145
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -87
- package/src/public/avm/revert_reason.ts +0 -55
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -204
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -18
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -135
- package/src/public/fixtures/minimal_public_tx.ts +0 -36
- package/src/public/hinting_db_sources.ts +0 -505
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -128
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -109
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -471
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -290
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -560
- package/src/public/tx_contract_cache.ts +0 -69
|
@@ -1,49 +1,83 @@
|
|
|
1
1
|
import { FunctionType, emptyContractArtifact, emptyFunctionArtifact } from '@aztec/stdlib/abi';
|
|
2
|
+
import type { PublicTxResult } from '@aztec/stdlib/avm';
|
|
2
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
3
5
|
|
|
4
|
-
import type { PublicTxResult } from '../public_tx_simulator/public_tx_simulator.js';
|
|
5
6
|
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
-
* Test custom bytecode (simulation or proving) with the provided bytecode.
|
|
9
|
+
* Deploy a contract with the provided bytecode.
|
|
10
10
|
* @param bytecode - The bytecode buffer to use
|
|
11
|
-
* @param tester - The tester to use
|
|
12
|
-
* @param
|
|
13
|
-
* @param
|
|
11
|
+
* @param tester - The tester to use
|
|
12
|
+
* @param contractName - The name of the contract
|
|
13
|
+
* @param deployer - The deployer address
|
|
14
|
+
* @returns The deployed contract instance
|
|
14
15
|
*/
|
|
15
|
-
export async function
|
|
16
|
+
export async function deployCustomBytecode(
|
|
16
17
|
bytecode: Buffer,
|
|
17
18
|
tester: PublicTxSimulationTester,
|
|
18
|
-
txLabel: string,
|
|
19
19
|
contractName: string = 'CustomBytecodeContract',
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
deployer: AztecAddress = AztecAddress.fromNumber(42),
|
|
21
|
+
): Promise<ContractInstanceWithAddress> {
|
|
23
22
|
const contractArtifact = emptyContractArtifact();
|
|
24
23
|
contractArtifact.name = contractName;
|
|
25
24
|
contractArtifact.functions = [emptyFunctionArtifact()];
|
|
25
|
+
// We use name 'public_dispatch' since that is what is expected
|
|
26
|
+
// in a ContractArtifact. But function selectors are not required
|
|
27
|
+
// when executing since the custom bytecode likely has no dispatch.
|
|
26
28
|
contractArtifact.functions[0].name = 'public_dispatch';
|
|
27
29
|
contractArtifact.functions[0].functionType = FunctionType.PUBLIC;
|
|
28
30
|
contractArtifact.functions[0].bytecode = bytecode;
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
// return the contract instance
|
|
33
|
+
return await tester.registerAndDeployContract(
|
|
31
34
|
/*constructorArgs=*/ [],
|
|
32
35
|
deployer,
|
|
33
36
|
/*contractArtifact=*/ contractArtifact,
|
|
34
37
|
);
|
|
38
|
+
}
|
|
35
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Execute a custom bytecode contract.
|
|
42
|
+
* @param contract - The contract instance to execute
|
|
43
|
+
* @param tester - The tester to use
|
|
44
|
+
* @param txLabel - The label of the transaction
|
|
45
|
+
* @param calldata - The calldata to use
|
|
46
|
+
* @returns The execution result
|
|
47
|
+
*/
|
|
48
|
+
export async function executeCustomBytecode(
|
|
49
|
+
contract: ContractInstanceWithAddress,
|
|
50
|
+
tester: PublicTxSimulationTester,
|
|
51
|
+
txLabel: string = 'CustomBytecodeTest',
|
|
52
|
+
calldata: any[] = [],
|
|
53
|
+
): Promise<PublicTxResult> {
|
|
36
54
|
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
37
55
|
return await tester.executeTxWithLabel(
|
|
38
56
|
/*txLabel=*/ txLabel,
|
|
39
|
-
/*sender=*/ deployer,
|
|
57
|
+
/*sender=*/ contract.deployer,
|
|
40
58
|
/*setupCalls=*/ [],
|
|
41
|
-
/*appCalls=*/ [
|
|
42
|
-
{
|
|
43
|
-
address: testContract.address,
|
|
44
|
-
fnName: 'public_dispatch',
|
|
45
|
-
args: [],
|
|
46
|
-
},
|
|
47
|
-
],
|
|
59
|
+
/*appCalls=*/ [{ address: contract.address, args: calldata }],
|
|
48
60
|
);
|
|
49
61
|
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Deploy and execute a custom bytecode contract.
|
|
65
|
+
* @param bytecode - The bytecode buffer to use
|
|
66
|
+
* @param tester - The tester to use
|
|
67
|
+
* @param txLabel - The label of the transaction
|
|
68
|
+
* @param contractName - The name of the contract
|
|
69
|
+
* @param deployer - The deployer address
|
|
70
|
+
* @param calldata - The calldata to use
|
|
71
|
+
* @returns The execution result
|
|
72
|
+
*/
|
|
73
|
+
export async function deployAndExecuteCustomBytecode(
|
|
74
|
+
bytecode: Buffer,
|
|
75
|
+
tester: PublicTxSimulationTester,
|
|
76
|
+
txLabel: string = 'CustomBytecodeTest',
|
|
77
|
+
contractName: string = 'CustomBytecodeContract',
|
|
78
|
+
deployer: AztecAddress = AztecAddress.fromNumber(42),
|
|
79
|
+
calldata: any[] = [],
|
|
80
|
+
): Promise<PublicTxResult> {
|
|
81
|
+
const testContract = await deployCustomBytecode(bytecode, tester, contractName, deployer);
|
|
82
|
+
return await executeCustomBytecode(testContract, tester, txLabel, calldata);
|
|
83
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export * from './public_tx_simulation_tester.js';
|
|
2
2
|
export * from './utils.js';
|
|
3
3
|
export * from './simple_contract_data_source.js';
|
|
4
|
-
export { readAvmMinimalPublicTxInputsFromFile, executeAvmMinimalPublicTx } from './minimal_public_tx.js';
|
|
5
4
|
export { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
6
5
|
export { ammTest } from './amm_test.js';
|
|
7
6
|
export { bulkTest, megaBulkTest } from './bulk_test.js';
|
|
8
7
|
export { tokenTest } from './token_test.js';
|
|
9
|
-
export
|
|
8
|
+
export {
|
|
9
|
+
deployCustomBytecode,
|
|
10
|
+
executeCustomBytecode,
|
|
11
|
+
deployAndExecuteCustomBytecode,
|
|
12
|
+
} from './custom_bytecode_tester.js';
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
+
import { PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
1
2
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
2
|
-
import {
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { type ContractArtifact, encodeArguments } from '@aztec/stdlib/abi';
|
|
6
|
+
import { PublicSimulatorConfig, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
4
7
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { Gas, GasFees } from '@aztec/stdlib/gas';
|
|
8
|
+
import { FALLBACK_TEARDOWN_DA_GAS_LIMIT, FALLBACK_TEARDOWN_L2_GAS_LIMIT, Gas, GasFees } from '@aztec/stdlib/gas';
|
|
6
9
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
7
10
|
import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
8
11
|
import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/stdlib/tx';
|
|
9
12
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
10
13
|
|
|
11
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
14
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
12
15
|
import {
|
|
13
16
|
DEFAULT_BLOCK_NUMBER,
|
|
14
17
|
DEFAULT_TIMESTAMP,
|
|
15
18
|
getContractFunctionAbi,
|
|
16
19
|
getFunctionSelector,
|
|
17
|
-
} from '../avm/
|
|
20
|
+
} from '../avm/testing/utils.js';
|
|
18
21
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
19
|
-
import {
|
|
20
|
-
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
|
|
21
|
-
import type { PublicTxResult } from '../public_tx_simulator/public_tx_simulator.js';
|
|
22
|
+
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
22
23
|
import type { MeasuredPublicTxSimulatorInterface } from '../public_tx_simulator/public_tx_simulator_interface.js';
|
|
23
24
|
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
24
25
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
@@ -29,12 +30,32 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
29
30
|
export type TestEnqueuedCall = {
|
|
30
31
|
sender?: AztecAddress;
|
|
31
32
|
address: AztecAddress;
|
|
32
|
-
fnName
|
|
33
|
+
fnName?: string;
|
|
33
34
|
args: any[];
|
|
34
35
|
isStaticCall?: boolean;
|
|
35
36
|
contractArtifact?: ContractArtifact;
|
|
36
37
|
};
|
|
37
38
|
|
|
39
|
+
const defaultConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
|
|
40
|
+
skipFeeEnforcement: false,
|
|
41
|
+
collectCallMetadata: true,
|
|
42
|
+
collectDebugLogs: true,
|
|
43
|
+
collectHints: false,
|
|
44
|
+
collectPublicInputs: false,
|
|
45
|
+
collectStatistics: false,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Factory type for creating a MeasuredPublicTxSimulatorInterface.
|
|
50
|
+
*/
|
|
51
|
+
export type MeasuredSimulatorFactory = (
|
|
52
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
53
|
+
contractsDB: PublicContractsDB,
|
|
54
|
+
globals: GlobalVariables,
|
|
55
|
+
metrics: TestExecutorMetrics,
|
|
56
|
+
config: PublicSimulatorConfig,
|
|
57
|
+
) => MeasuredPublicTxSimulatorInterface;
|
|
58
|
+
|
|
38
59
|
/**
|
|
39
60
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
40
61
|
* It provides an interface for simulating one transaction at a time and maintains state between subsequent
|
|
@@ -50,30 +71,30 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
50
71
|
contractDataSource: SimpleContractDataSource,
|
|
51
72
|
globals: GlobalVariables = defaultGlobals(),
|
|
52
73
|
private metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
53
|
-
|
|
74
|
+
simulatorFactory?: MeasuredSimulatorFactory,
|
|
75
|
+
config: PublicSimulatorConfig = defaultConfig,
|
|
54
76
|
) {
|
|
55
77
|
super(contractDataSource, merkleTree);
|
|
56
78
|
|
|
57
79
|
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
this.simulator = useCppSimulator
|
|
64
|
-
? new MeasuredCppPublicTxSimulatorHintedDbs(merkleTree, contractsDB, globals, this.metrics, config)
|
|
65
|
-
: new MeasuredPublicTxSimulator(merkleTree, contractsDB, globals, this.metrics, config);
|
|
80
|
+
if (simulatorFactory) {
|
|
81
|
+
this.simulator = simulatorFactory(merkleTree, contractsDB, globals, this.metrics, config);
|
|
82
|
+
} else {
|
|
83
|
+
this.simulator = new MeasuredPublicTxSimulator(merkleTree, contractsDB, globals, this.metrics, config);
|
|
84
|
+
}
|
|
66
85
|
}
|
|
67
86
|
|
|
68
87
|
public static async create(
|
|
69
88
|
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
70
89
|
globals: GlobalVariables = defaultGlobals(),
|
|
71
90
|
metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
72
|
-
|
|
91
|
+
config: PublicSimulatorConfig = defaultConfig,
|
|
73
92
|
): Promise<PublicTxSimulationTester> {
|
|
74
93
|
const contractDataSource = new SimpleContractDataSource();
|
|
75
94
|
const merkleTree = await worldStateService.fork();
|
|
76
|
-
|
|
95
|
+
const simulatorFactory: MeasuredSimulatorFactory = (mt, cdb, g, m, c) =>
|
|
96
|
+
new MeasuredPublicTxSimulator(mt, cdb, g, m, c);
|
|
97
|
+
return new PublicTxSimulationTester(merkleTree, contractDataSource, globals, metrics, simulatorFactory, config);
|
|
77
98
|
}
|
|
78
99
|
|
|
79
100
|
public setMetricsPrefix(prefix: string) {
|
|
@@ -88,6 +109,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
88
109
|
feePayer: AztecAddress = sender,
|
|
89
110
|
/* need some unique first nullifier for note-nonce computations */
|
|
90
111
|
privateInsertions: TestPrivateInsertions = { nonRevertible: { nullifiers: [new Fr(420000 + this.txCount)] } },
|
|
112
|
+
gasLimits?: Gas,
|
|
91
113
|
): Promise<Tx> {
|
|
92
114
|
const setupCallRequests = await asyncMap(setupCalls, call =>
|
|
93
115
|
this.#createPubicCallRequestForCall(call, call.sender ?? sender),
|
|
@@ -106,8 +128,14 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
106
128
|
appCallRequests,
|
|
107
129
|
teardownCallRequest,
|
|
108
130
|
feePayer,
|
|
109
|
-
/*gasUsedByPrivate*/
|
|
131
|
+
/*gasUsedByPrivate*/ teardownCall
|
|
132
|
+
? new Gas(
|
|
133
|
+
FALLBACK_TEARDOWN_DA_GAS_LIMIT + TX_DA_GAS_OVERHEAD,
|
|
134
|
+
FALLBACK_TEARDOWN_L2_GAS_LIMIT + PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
135
|
+
)
|
|
136
|
+
: new Gas(TX_DA_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD),
|
|
110
137
|
defaultGlobals(),
|
|
138
|
+
gasLimits,
|
|
111
139
|
);
|
|
112
140
|
}
|
|
113
141
|
|
|
@@ -120,16 +148,24 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
120
148
|
/* need some unique first nullifier for note-nonce computations */
|
|
121
149
|
privateInsertions?: TestPrivateInsertions,
|
|
122
150
|
txLabel: string = 'unlabeledTx',
|
|
151
|
+
gasLimits?: Gas,
|
|
123
152
|
): Promise<PublicTxResult> {
|
|
124
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
153
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
125
154
|
|
|
126
155
|
await this.setFeePayerBalance(feePayer);
|
|
127
156
|
|
|
128
157
|
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
129
158
|
const fullTxLabel = this.metricsPrefix ? `${this.metricsPrefix}/${txLabelWithCount}` : txLabelWithCount;
|
|
130
159
|
|
|
160
|
+
if (!this.simulator) {
|
|
161
|
+
throw new Error(
|
|
162
|
+
'No simulator configured. Pass a simulatorFactory to the constructor or use PublicTxSimulationTester.create()',
|
|
163
|
+
);
|
|
164
|
+
}
|
|
131
165
|
const avmResult = await this.simulator.simulate(tx, fullTxLabel);
|
|
132
166
|
|
|
167
|
+
await this.#recordBytecodeSizes(fullTxLabel, [...setupCalls, ...appCalls, ...(teardownCall ? [teardownCall] : [])]);
|
|
168
|
+
|
|
133
169
|
// Something like this is often useful for debugging:
|
|
134
170
|
//if (avmResult.revertReason) {
|
|
135
171
|
// // resolve / enrich revert reason
|
|
@@ -159,8 +195,18 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
159
195
|
teardownCall?: TestEnqueuedCall,
|
|
160
196
|
feePayer?: AztecAddress,
|
|
161
197
|
privateInsertions?: TestPrivateInsertions,
|
|
198
|
+
gasLimits?: Gas,
|
|
162
199
|
): Promise<PublicTxResult> {
|
|
163
|
-
return await this.simulateTx(
|
|
200
|
+
return await this.simulateTx(
|
|
201
|
+
sender,
|
|
202
|
+
setupCalls,
|
|
203
|
+
appCalls,
|
|
204
|
+
teardownCall,
|
|
205
|
+
feePayer,
|
|
206
|
+
privateInsertions,
|
|
207
|
+
txLabel,
|
|
208
|
+
gasLimits,
|
|
209
|
+
);
|
|
164
210
|
}
|
|
165
211
|
|
|
166
212
|
/**
|
|
@@ -178,6 +224,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
178
224
|
teardownCall?: TestEnqueuedCall,
|
|
179
225
|
feePayer?: AztecAddress,
|
|
180
226
|
privateInsertions?: TestPrivateInsertions,
|
|
227
|
+
gasLimits?: Gas,
|
|
181
228
|
): Promise<PublicTxResult> {
|
|
182
229
|
return await this.simulateTxWithLabel(
|
|
183
230
|
txLabel,
|
|
@@ -187,6 +234,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
187
234
|
teardownCall,
|
|
188
235
|
feePayer,
|
|
189
236
|
privateInsertions,
|
|
237
|
+
gasLimits,
|
|
190
238
|
);
|
|
191
239
|
}
|
|
192
240
|
|
|
@@ -194,6 +242,25 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
194
242
|
this.metrics.prettyPrint();
|
|
195
243
|
}
|
|
196
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Cancel the current simulation if one is in progress.
|
|
247
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
248
|
+
* Safe to call even if no simulation is in progress.
|
|
249
|
+
*
|
|
250
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
251
|
+
*/
|
|
252
|
+
public async cancel(waitTimeoutMs?: number): Promise<void> {
|
|
253
|
+
await this.simulator.cancel?.(waitTimeoutMs);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
258
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
259
|
+
*/
|
|
260
|
+
public getSimulator(): MeasuredPublicTxSimulatorInterface {
|
|
261
|
+
return this.simulator;
|
|
262
|
+
}
|
|
263
|
+
|
|
197
264
|
async #createPubicCallRequestForCall(
|
|
198
265
|
call: TestEnqueuedCall,
|
|
199
266
|
sender: AztecAddress,
|
|
@@ -204,21 +271,56 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
204
271
|
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
205
272
|
}
|
|
206
273
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
274
|
+
let calldata: Fr[] = [];
|
|
275
|
+
if (!call.fnName) {
|
|
276
|
+
this.logger.debug(
|
|
277
|
+
`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`,
|
|
278
|
+
);
|
|
279
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
280
|
+
try {
|
|
281
|
+
calldata = call.args.map(arg => new Fr(arg));
|
|
282
|
+
} catch (error) {
|
|
283
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
284
|
+
throw error;
|
|
285
|
+
}
|
|
286
|
+
} else {
|
|
287
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
288
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact)!;
|
|
289
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
290
|
+
calldata = [fnSelector.toField(), ...encodedArgs];
|
|
291
|
+
}
|
|
211
292
|
const isStaticCall = call.isStaticCall ?? false;
|
|
212
293
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
213
294
|
|
|
214
295
|
return new PublicCallRequestWithCalldata(request, calldata);
|
|
215
296
|
}
|
|
297
|
+
|
|
298
|
+
// WARNING: Deduplicates by artifact name, so two different artifacts with the same name
|
|
299
|
+
// in a single tx would only record the first one's bytecode size.
|
|
300
|
+
async #recordBytecodeSizes(txLabel: string, calls: TestEnqueuedCall[]) {
|
|
301
|
+
const seenArtifactNames = new Set<string>();
|
|
302
|
+
for (const call of calls) {
|
|
303
|
+
const artifact = await this.contractDataSource.getContractArtifact(call.address);
|
|
304
|
+
if (!artifact || seenArtifactNames.has(artifact.name)) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
seenArtifactNames.add(artifact.name);
|
|
308
|
+
const instance = await this.contractDataSource.getContract(call.address);
|
|
309
|
+
if (!instance) {
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
const contractClass = await this.contractDataSource.getContractClass(instance.currentContractClassId);
|
|
313
|
+
if (contractClass) {
|
|
314
|
+
this.metrics.recordBytecodeSize(txLabel, artifact.name, contractClass.packedBytecode.length);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
216
318
|
}
|
|
217
319
|
|
|
218
320
|
export function defaultGlobals() {
|
|
219
321
|
const globals = GlobalVariables.empty();
|
|
220
322
|
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
221
323
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
222
|
-
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
324
|
+
globals.blockNumber = BlockNumber(DEFAULT_BLOCK_NUMBER);
|
|
223
325
|
return globals;
|
|
224
326
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
4
|
import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
4
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
6
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
6
7
|
|
|
7
|
-
import { getFunctionSelector } from '../avm/
|
|
8
|
+
import { getFunctionSelector } from '../avm/testing/utils.js';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* This class is used during public/avm testing to function as a database of
|
|
@@ -59,7 +60,7 @@ export class SimpleContractDataSource implements ContractDataSource {
|
|
|
59
60
|
|
|
60
61
|
/////////////////////////////////////////////////////////////
|
|
61
62
|
// ContractDataSource function implementations
|
|
62
|
-
getBlockNumber(): Promise<
|
|
63
|
+
getBlockNumber(): Promise<BlockNumber> {
|
|
63
64
|
throw new Error('Method not implemented.');
|
|
64
65
|
}
|
|
65
66
|
|
|
@@ -90,19 +91,17 @@ export class SimpleContractDataSource implements ContractDataSource {
|
|
|
90
91
|
return this.contractArtifacts.get(contractInstance!.currentContractClassId.toString());
|
|
91
92
|
}
|
|
92
93
|
|
|
93
|
-
async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string> {
|
|
94
|
+
async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
94
95
|
const contractInstance = await this.getContract(address);
|
|
95
96
|
if (!contractInstance) {
|
|
96
|
-
this.logger.warn(
|
|
97
|
-
|
|
98
|
-
);
|
|
99
|
-
return `selector:${selector.toString()}`;
|
|
97
|
+
this.logger.warn(`Couldn't get fn name for debugging. Contract not in tester's ContractDataSource.`);
|
|
98
|
+
return undefined;
|
|
100
99
|
}
|
|
101
100
|
const key = `${contractInstance.currentContractClassId.toString()}:${selector.toString()}`;
|
|
102
101
|
const fnName = this.debugFunctionName.get(key);
|
|
103
102
|
if (!fnName) {
|
|
104
|
-
this.logger.warn(`Couldn't get fn name for debugging
|
|
105
|
-
return
|
|
103
|
+
this.logger.warn(`Couldn't get fn name for debugging...`);
|
|
104
|
+
return undefined;
|
|
106
105
|
}
|
|
107
106
|
return fnName;
|
|
108
107
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
4
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
@@ -7,11 +7,17 @@ import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
|
7
7
|
|
|
8
8
|
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
9
9
|
|
|
10
|
+
export type TokenTestOptions = {
|
|
11
|
+
/** Skip return value assertions in balance checks (useful for benchmarking with collectCallMetadata=false) */
|
|
12
|
+
skipReturnValueAssertions?: boolean;
|
|
13
|
+
};
|
|
14
|
+
|
|
10
15
|
export async function tokenTest(
|
|
11
16
|
tester: PublicTxSimulationTester,
|
|
12
17
|
logger: Logger,
|
|
13
18
|
tokenArtifact: ContractArtifact,
|
|
14
19
|
expectToBeTrue: (x: boolean) => void,
|
|
20
|
+
options: TokenTestOptions = {},
|
|
15
21
|
) {
|
|
16
22
|
const timer = new Timer();
|
|
17
23
|
|
|
@@ -36,7 +42,7 @@ export async function tokenTest(
|
|
|
36
42
|
],
|
|
37
43
|
);
|
|
38
44
|
expectToBeTrue(mintResult.revertCode.isOK());
|
|
39
|
-
await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue);
|
|
45
|
+
await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue, options);
|
|
40
46
|
|
|
41
47
|
const authwitNonce = new Fr(0);
|
|
42
48
|
const transferAmount = 50n;
|
|
@@ -54,8 +60,8 @@ export async function tokenTest(
|
|
|
54
60
|
],
|
|
55
61
|
);
|
|
56
62
|
expectToBeTrue(transferResult.revertCode.isOK());
|
|
57
|
-
await checkBalance(tester, token, sender,
|
|
58
|
-
await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue);
|
|
63
|
+
await checkBalance(tester, token, sender, sender, mintAmount - transferAmount, expectToBeTrue, options);
|
|
64
|
+
await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue, options);
|
|
59
65
|
|
|
60
66
|
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
61
67
|
const burnResult = await tester.executeTxWithLabel(
|
|
@@ -71,7 +77,7 @@ export async function tokenTest(
|
|
|
71
77
|
],
|
|
72
78
|
);
|
|
73
79
|
expectToBeTrue(burnResult.revertCode.isOK());
|
|
74
|
-
await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue);
|
|
80
|
+
await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue, options);
|
|
75
81
|
|
|
76
82
|
logger.info(`TokenContract test took ${timer.ms()}ms\n`);
|
|
77
83
|
}
|
|
@@ -116,6 +122,7 @@ async function checkBalance(
|
|
|
116
122
|
account: AztecAddress,
|
|
117
123
|
expectedBalance: bigint,
|
|
118
124
|
expectToBeTrue: (x: boolean) => void,
|
|
125
|
+
options: TokenTestOptions = {},
|
|
119
126
|
) {
|
|
120
127
|
// Strictly simulate this! No need to "execute" (aka prove if using AvmProvingTester subclass).
|
|
121
128
|
const balResult = await tester.simulateTxWithLabel(
|
|
@@ -132,9 +139,10 @@ async function checkBalance(
|
|
|
132
139
|
],
|
|
133
140
|
);
|
|
134
141
|
expectToBeTrue(balResult.revertCode.isOK());
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
if (!options.skipReturnValueAssertions) {
|
|
143
|
+
// should be 1 call with 1 return value that is expectedBalance
|
|
144
|
+
const appLogicReturnValues = balResult.getAppLogicReturnValues();
|
|
145
|
+
expectToBeTrue(appLogicReturnValues.length === 1);
|
|
146
|
+
expectToBeTrue(appLogicReturnValues[0].values?.[0]?.toBigInt() === expectedBalance);
|
|
147
|
+
}
|
|
140
148
|
}
|
|
@@ -2,19 +2,23 @@ import {
|
|
|
2
2
|
CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE,
|
|
3
3
|
CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,
|
|
4
4
|
CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
DEFAULT_TEARDOWN_DA_GAS_LIMIT,
|
|
8
|
-
DEFAULT_TEARDOWN_L2_GAS_LIMIT,
|
|
5
|
+
MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT,
|
|
6
|
+
MAX_PROCESSABLE_L2_GAS,
|
|
9
7
|
PRIVATE_LOG_SIZE_IN_FIELDS,
|
|
10
8
|
} from '@aztec/constants';
|
|
11
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
12
|
-
import { Fr } from '@aztec/foundation/
|
|
10
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
13
11
|
import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec/protocol-contracts';
|
|
14
12
|
import { bufferAsFields } from '@aztec/stdlib/abi';
|
|
15
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
16
14
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
17
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
FALLBACK_TEARDOWN_DA_GAS_LIMIT,
|
|
17
|
+
FALLBACK_TEARDOWN_L2_GAS_LIMIT,
|
|
18
|
+
Gas,
|
|
19
|
+
GasFees,
|
|
20
|
+
GasSettings,
|
|
21
|
+
} from '@aztec/stdlib/gas';
|
|
18
22
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
19
23
|
import {
|
|
20
24
|
LogHash,
|
|
@@ -62,13 +66,14 @@ export async function createTxForPublicCalls(
|
|
|
62
66
|
feePayer = AztecAddress.zero(),
|
|
63
67
|
gasUsedByPrivate: Gas = Gas.empty(),
|
|
64
68
|
globals: GlobalVariables = GlobalVariables.empty(),
|
|
69
|
+
gasLimits?: Gas,
|
|
65
70
|
): Promise<Tx> {
|
|
66
71
|
assert(
|
|
67
72
|
setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined,
|
|
68
73
|
"Can't create public tx with no enqueued calls",
|
|
69
74
|
);
|
|
70
75
|
// use max limits
|
|
71
|
-
|
|
76
|
+
gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
72
77
|
|
|
73
78
|
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
74
79
|
|
|
@@ -128,20 +133,19 @@ export async function createTxForPublicCalls(
|
|
|
128
133
|
|
|
129
134
|
const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
|
|
130
135
|
const teardownGasLimits = teardownCallRequest
|
|
131
|
-
? new Gas(
|
|
136
|
+
? new Gas(FALLBACK_TEARDOWN_DA_GAS_LIMIT, FALLBACK_TEARDOWN_L2_GAS_LIMIT)
|
|
132
137
|
: Gas.empty();
|
|
133
138
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
134
139
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
135
|
-
const header = BlockHeader.empty();
|
|
136
|
-
header.globalVariables = globals;
|
|
140
|
+
const header = BlockHeader.empty({ globalVariables: globals });
|
|
137
141
|
const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
|
|
138
|
-
const
|
|
142
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
139
143
|
|
|
140
144
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
141
145
|
constantData,
|
|
142
146
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
143
147
|
feePayer,
|
|
144
|
-
|
|
148
|
+
expirationTimestamp,
|
|
145
149
|
forPublic,
|
|
146
150
|
);
|
|
147
151
|
|
|
@@ -164,7 +168,7 @@ export async function createTxForPrivateOnly(
|
|
|
164
168
|
gasUsedByPrivate: Gas = new Gas(10, 10),
|
|
165
169
|
): Promise<Tx> {
|
|
166
170
|
// use max limits
|
|
167
|
-
const gasLimits = new Gas(
|
|
171
|
+
const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
168
172
|
|
|
169
173
|
const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
|
|
170
174
|
|
|
@@ -172,13 +176,13 @@ export async function createTxForPrivateOnly(
|
|
|
172
176
|
const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
|
|
173
177
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
174
178
|
const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
|
|
175
|
-
const
|
|
179
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
176
180
|
|
|
177
181
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
178
182
|
constantData,
|
|
179
183
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
180
184
|
feePayer,
|
|
181
|
-
|
|
185
|
+
expirationTimestamp,
|
|
182
186
|
/*forPublic=*/ undefined,
|
|
183
187
|
forRollup,
|
|
184
188
|
);
|
|
@@ -229,17 +233,15 @@ export async function addNewContractInstanceToTx(
|
|
|
229
233
|
contractInstance: ContractInstanceWithAddress,
|
|
230
234
|
skipNullifierInsertion = false,
|
|
231
235
|
) {
|
|
232
|
-
//
|
|
233
|
-
// is not broadcast in such private logs
|
|
236
|
+
// Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
|
|
234
237
|
const publicKeysAsFields = [
|
|
235
|
-
contractInstance.publicKeys.
|
|
236
|
-
contractInstance.publicKeys.
|
|
237
|
-
contractInstance.publicKeys.
|
|
238
|
-
contractInstance.publicKeys.
|
|
239
|
-
contractInstance.publicKeys.
|
|
240
|
-
contractInstance.publicKeys.
|
|
241
|
-
contractInstance.publicKeys.
|
|
242
|
-
contractInstance.publicKeys.masterTaggingPublicKey.y,
|
|
238
|
+
contractInstance.publicKeys.npkMHash,
|
|
239
|
+
contractInstance.publicKeys.ivpkM.x,
|
|
240
|
+
contractInstance.publicKeys.ivpkM.y,
|
|
241
|
+
contractInstance.publicKeys.ovpkMHash,
|
|
242
|
+
contractInstance.publicKeys.tpkMHash,
|
|
243
|
+
contractInstance.publicKeys.mspkMHash,
|
|
244
|
+
contractInstance.publicKeys.fbpkMHash,
|
|
243
245
|
];
|
|
244
246
|
const logFields = [
|
|
245
247
|
CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
|
|
@@ -248,6 +250,7 @@ export async function addNewContractInstanceToTx(
|
|
|
248
250
|
new Fr(contractInstance.salt),
|
|
249
251
|
contractInstance.currentContractClassId,
|
|
250
252
|
contractInstance.initializationHash,
|
|
253
|
+
contractInstance.immutablesHash,
|
|
251
254
|
...publicKeysAsFields,
|
|
252
255
|
contractInstance.deployer.toField(),
|
|
253
256
|
];
|