@aztec/simulator 0.0.1-commit.3100065 → 0.0.1-commit.330febf
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/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/{fixtures → testing}/base_avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/testing/utils.d.ts +32 -0
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +0 -33
- package/dest/public/avm_simulator.d.ts +28 -0
- package/dest/public/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm_simulator.js +4 -0
- package/dest/public/avm_simulator_pool.d.ts +45 -0
- package/dest/public/avm_simulator_pool.d.ts.map +1 -0
- package/dest/public/avm_simulator_pool.js +197 -0
- package/dest/public/cdb_ipc_server.d.ts +40 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/fixtures/index.d.ts +2 -4
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -3
- package/dest/public/fixtures/public_processor_test_env.d.ts +30 -0
- package/dest/public/fixtures/public_processor_test_env.d.ts.map +1 -0
- package/dest/public/fixtures/public_processor_test_env.js +73 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +11 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +29 -41
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +11 -4
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +24 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +4 -4
- package/dest/public/index.d.ts +5 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +2 -1
- package/dest/public/public_db_sources.d.ts +2 -2
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +4 -3
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -0
- package/dest/public/public_processor/public_processor.d.ts +8 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +19 -34
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +17 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.js → dumping_public_tx_simulator.js} +10 -23
- package/dest/public/public_tx_simulator/factories.d.ts +8 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +8 -8
- package/dest/public/public_tx_simulator/index.d.ts +4 -6
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +2 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -75
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +98 -323
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +24 -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 +31 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +5 -5
- package/dest/public/test_executor_metrics.d.ts +1 -6
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +0 -22
- package/package.json +20 -18
- package/src/public/avm/{fixtures → testing}/utils.ts +0 -39
- package/src/public/avm_simulator.ts +29 -0
- package/src/public/avm_simulator_pool.ts +226 -0
- package/src/public/cdb_ipc_server.ts +198 -0
- package/src/public/fixtures/index.ts +1 -3
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +37 -50
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +25 -10
- package/src/public/fuzzing/avm_simulator_bin.ts +3 -5
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +1 -1
- package/src/public/public_processor/guarded_merkle_tree.ts +5 -2
- package/src/public/public_processor/public_processor.ts +25 -39
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +15 -31
- package/src/public/public_tx_simulator/factories.ts +27 -10
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +139 -480
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +5 -5
- package/src/public/test_executor_metrics.ts +0 -24
- 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 -24
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -33
- 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 -98
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -110
- 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 -354
- package/dest/public/avm/avm_simulator.d.ts +0 -41
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -192
- 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/calldata.d.ts +0 -51
- package/dest/public/avm/calldata.d.ts.map +0 -1
- package/dest/public/avm/calldata.js +0 -64
- package/dest/public/avm/errors.d.ts +0 -104
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -141
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +0 -2
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +0 -1
- 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 -84
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -42
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -45
- package/dest/public/avm/fixtures/utils.d.ts +0 -39
- 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 -74
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -254
- 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 -49
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -97
- 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 -21
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -69
- 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 -17
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -79
- 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 -210
- 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 -119
- 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 -25
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -78
- 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 -39
- 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 -336
- 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 -18
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -37
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -19
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -263
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -4
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -19
- package/dest/public/fixtures/opcode_spammer.d.ts +0 -122
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1645
- package/dest/public/hinting_db_sources.d.ts +0 -80
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -356
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -19
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +0 -99
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -53
- 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 -131
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +0 -42
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +0 -86
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +0 -30
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +0 -171
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +0 -23
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -31
- 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 -135
- 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 -298
- 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 -415
- 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 -22
- 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 -170
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -402
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -69
- package/src/public/avm/avm_execution_environment.ts +0 -51
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -170
- package/src/public/avm/avm_memory_types.ts +0 -440
- package/src/public/avm/avm_simulator.ts +0 -279
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/calldata.ts +0 -101
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -122
- package/src/public/avm/fixtures/initializers.ts +0 -103
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -285
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -129
- 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 -76
- 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 -86
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -262
- package/src/public/avm/opcodes/hashing.ts +0 -151
- 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 -95
- package/src/public/avm/revert_reason.ts +0 -58
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -215
- 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 -52
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -435
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1713
- package/src/public/hinting_db_sources.ts +0 -610
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -125
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -210
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -134
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -239
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -482
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -293
- 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 -569
- /package/dest/public/avm/{fixtures → testing}/account_proof_fetcher.js +0 -0
- /package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof.json +0 -0
- /package/src/public/avm/{fixtures → testing}/account_proof_fetcher.ts +0 -0
- /package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { TestDateProvider } from '@aztec/foundation/timer';
|
|
3
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
4
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
5
|
+
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
6
|
+
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
7
|
+
import { NativeWorldStateService } from '@aztec/world-state';
|
|
8
|
+
|
|
9
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
10
|
+
import { PublicContractsDB } from '../public_db_sources.js';
|
|
11
|
+
import { GuardedMerkleTreeOperations } from '../public_processor/guarded_merkle_tree.js';
|
|
12
|
+
import { PublicProcessor } from '../public_processor/public_processor.js';
|
|
13
|
+
import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
14
|
+
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
15
|
+
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
16
|
+
|
|
17
|
+
/** Options for {@link PublicProcessorTestEnv.create}. */
|
|
18
|
+
export interface PublicProcessorTestEnvOptions {
|
|
19
|
+
/** Global variables shared by the processor and the tester. Defaults to empty with nonzero gas fees. */
|
|
20
|
+
globals?: GlobalVariables;
|
|
21
|
+
/** Simulator config for the processor's PublicTxSimulator. */
|
|
22
|
+
config?: Partial<PublicSimulatorConfig>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function defaultGlobals(): GlobalVariables {
|
|
26
|
+
const globals = GlobalVariables.empty();
|
|
27
|
+
globals.gasFees = new GasFees(2, 3);
|
|
28
|
+
return globals;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const defaultConfig = PublicSimulatorConfig.from({
|
|
32
|
+
skipFeeEnforcement: false,
|
|
33
|
+
collectDebugLogs: true,
|
|
34
|
+
collectHints: false,
|
|
35
|
+
collectStatistics: false,
|
|
36
|
+
collectCallMetadata: true,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Bundles the real-AVM wiring shared by public-processor app tests: a live WSDB world state, a CDB IPC
|
|
41
|
+
* server, a spawned AVM simulator, a {@link PublicProcessor} backed by all three, and a setup-only
|
|
42
|
+
* {@link PublicTxSimulationTester} sharing the same fork and contract data source for building txs and
|
|
43
|
+
* seeding balances. Own it with `await using`, or call {@link Symbol.asyncDispose} from `afterEach`.
|
|
44
|
+
*/
|
|
45
|
+
export class PublicProcessorTestEnv implements AsyncDisposable {
|
|
46
|
+
private constructor(
|
|
47
|
+
public readonly processor: PublicProcessor,
|
|
48
|
+
public readonly tester: PublicTxSimulationTester,
|
|
49
|
+
public readonly contractsDB: PublicContractsDB,
|
|
50
|
+
public readonly globals: GlobalVariables,
|
|
51
|
+
private readonly worldStateService: NativeWorldStateService,
|
|
52
|
+
private readonly avmSimulator: AvmSimulatorPool,
|
|
53
|
+
) {}
|
|
54
|
+
|
|
55
|
+
static async create(opts: PublicProcessorTestEnvOptions = {}): Promise<PublicProcessorTestEnv> {
|
|
56
|
+
const globals = opts.globals ?? defaultGlobals();
|
|
57
|
+
const config = opts.config ? PublicSimulatorConfig.from({ ...defaultConfig, ...opts.config }) : defaultConfig;
|
|
58
|
+
|
|
59
|
+
const contractDataSource = new SimpleContractDataSource();
|
|
60
|
+
const worldStateService = await NativeWorldStateService.tmp();
|
|
61
|
+
const merkleTrees = await worldStateService.fork();
|
|
62
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
63
|
+
|
|
64
|
+
const forkId = merkleTrees.getRevision().forkId;
|
|
65
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
66
|
+
|
|
67
|
+
const simulator = new PublicTxSimulator(avmSimulator, globals, contractsDB, forkId, config, undefined);
|
|
68
|
+
const processor = new PublicProcessor(
|
|
69
|
+
globals,
|
|
70
|
+
new GuardedMerkleTreeOperations(merkleTrees),
|
|
71
|
+
contractsDB,
|
|
72
|
+
simulator,
|
|
73
|
+
new TestDateProvider(),
|
|
74
|
+
getTelemetryClient(),
|
|
75
|
+
createLogger('simulator:public-processor'),
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const tester = new PublicTxSimulationTester(merkleTrees, contractDataSource, globals);
|
|
79
|
+
|
|
80
|
+
return new PublicProcessorTestEnv(processor, tester, contractsDB, globals, worldStateService, avmSimulator);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
async [Symbol.asyncDispose](): Promise<void> {
|
|
84
|
+
await this.avmSimulator[Symbol.asyncDispose]();
|
|
85
|
+
await this.tester.close();
|
|
86
|
+
await this.worldStateService.close();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -11,16 +11,16 @@ import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
|
11
11
|
import { GlobalVariables, PublicCallRequestWithCalldata, type Tx } from '@aztec/stdlib/tx';
|
|
12
12
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
13
13
|
|
|
14
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
14
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
15
15
|
import {
|
|
16
16
|
DEFAULT_BLOCK_NUMBER,
|
|
17
17
|
DEFAULT_TIMESTAMP,
|
|
18
18
|
getContractFunctionAbi,
|
|
19
19
|
getFunctionSelector,
|
|
20
|
-
} from '../avm/
|
|
20
|
+
} from '../avm/testing/utils.js';
|
|
21
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
21
22
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
22
|
-
import {
|
|
23
|
-
import { MeasuredCppVsTsPublicTxSimulator } from '../public_tx_simulator/cpp_vs_ts_public_tx_simulator.js';
|
|
23
|
+
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
24
24
|
import type { MeasuredPublicTxSimulatorInterface } from '../public_tx_simulator/public_tx_simulator_interface.js';
|
|
25
25
|
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
26
26
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
@@ -66,8 +66,9 @@ export type MeasuredSimulatorFactory = (
|
|
|
66
66
|
*/
|
|
67
67
|
export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
68
68
|
protected txCount: number = 0;
|
|
69
|
-
private simulator: MeasuredPublicTxSimulatorInterface;
|
|
69
|
+
private simulator: MeasuredPublicTxSimulatorInterface | undefined;
|
|
70
70
|
private metricsPrefix?: string;
|
|
71
|
+
protected avmSimulator?: AvmSimulatorPool;
|
|
71
72
|
|
|
72
73
|
constructor(
|
|
73
74
|
merkleTree: MerkleTreeWriteOperations,
|
|
@@ -83,7 +84,9 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
83
84
|
if (simulatorFactory) {
|
|
84
85
|
this.simulator = simulatorFactory(merkleTree, contractsDB, globals, this.metrics, config);
|
|
85
86
|
} else {
|
|
86
|
-
|
|
87
|
+
// No simulator — this tester can only be used for setup (setFeePayerBalance, createTx, etc.)
|
|
88
|
+
// To simulate, use PublicTxSimulationTester.create() or pass a simulatorFactory.
|
|
89
|
+
this.simulator = undefined;
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
|
|
@@ -91,15 +94,25 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
91
94
|
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
92
95
|
globals: GlobalVariables = defaultGlobals(),
|
|
93
96
|
metrics: TestExecutorMetrics = new TestExecutorMetrics(),
|
|
94
|
-
useCppSimulator = false,
|
|
95
97
|
config: PublicSimulatorConfig = defaultConfig,
|
|
96
98
|
): Promise<PublicTxSimulationTester> {
|
|
97
99
|
const contractDataSource = new SimpleContractDataSource();
|
|
98
100
|
const merkleTree = await worldStateService.fork();
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
|
|
102
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
103
|
+
const simulatorFactory: MeasuredSimulatorFactory = (mt, cdb, g, m, c) =>
|
|
104
|
+
new MeasuredPublicTxSimulator(avmSimulator, g, cdb, mt.getRevision().forkId, m, c, undefined);
|
|
105
|
+
|
|
106
|
+
const tester = new PublicTxSimulationTester(
|
|
107
|
+
merkleTree,
|
|
108
|
+
contractDataSource,
|
|
109
|
+
globals,
|
|
110
|
+
metrics,
|
|
111
|
+
simulatorFactory,
|
|
112
|
+
config,
|
|
113
|
+
);
|
|
114
|
+
tester.avmSimulator = avmSimulator;
|
|
115
|
+
return tester;
|
|
103
116
|
}
|
|
104
117
|
|
|
105
118
|
public setMetricsPrefix(prefix: string) {
|
|
@@ -166,8 +179,6 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
166
179
|
}
|
|
167
180
|
const avmResult = await this.simulator.simulate(tx, fullTxLabel);
|
|
168
181
|
|
|
169
|
-
await this.#recordBytecodeSizes(fullTxLabel, [...setupCalls, ...appCalls, ...(teardownCall ? [teardownCall] : [])]);
|
|
170
|
-
|
|
171
182
|
// Something like this is often useful for debugging:
|
|
172
183
|
//if (avmResult.revertReason) {
|
|
173
184
|
// // resolve / enrich revert reason
|
|
@@ -197,18 +208,8 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
197
208
|
teardownCall?: TestEnqueuedCall,
|
|
198
209
|
feePayer?: AztecAddress,
|
|
199
210
|
privateInsertions?: TestPrivateInsertions,
|
|
200
|
-
gasLimits?: Gas,
|
|
201
211
|
): Promise<PublicTxResult> {
|
|
202
|
-
return await this.simulateTx(
|
|
203
|
-
sender,
|
|
204
|
-
setupCalls,
|
|
205
|
-
appCalls,
|
|
206
|
-
teardownCall,
|
|
207
|
-
feePayer,
|
|
208
|
-
privateInsertions,
|
|
209
|
-
txLabel,
|
|
210
|
-
gasLimits,
|
|
211
|
-
);
|
|
212
|
+
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel);
|
|
212
213
|
}
|
|
213
214
|
|
|
214
215
|
/**
|
|
@@ -226,7 +227,6 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
226
227
|
teardownCall?: TestEnqueuedCall,
|
|
227
228
|
feePayer?: AztecAddress,
|
|
228
229
|
privateInsertions?: TestPrivateInsertions,
|
|
229
|
-
gasLimits?: Gas,
|
|
230
230
|
): Promise<PublicTxResult> {
|
|
231
231
|
return await this.simulateTxWithLabel(
|
|
232
232
|
txLabel,
|
|
@@ -236,7 +236,6 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
236
236
|
teardownCall,
|
|
237
237
|
feePayer,
|
|
238
238
|
privateInsertions,
|
|
239
|
-
gasLimits,
|
|
240
239
|
);
|
|
241
240
|
}
|
|
242
241
|
|
|
@@ -244,22 +243,31 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
244
243
|
this.metrics.prettyPrint();
|
|
245
244
|
}
|
|
246
245
|
|
|
246
|
+
/** Clean up IPC resources (AVM simulator pool and merkle tree fork) created by create(). */
|
|
247
|
+
public async close(): Promise<void> {
|
|
248
|
+
await this.avmSimulator?.[Symbol.asyncDispose]();
|
|
249
|
+
// Close the merkle tree fork to release IPC resources before the wsdb process is killed.
|
|
250
|
+
if (this.merkleTrees?.close) {
|
|
251
|
+
await this.merkleTrees.close().catch(() => {});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
247
255
|
/**
|
|
248
256
|
* Cancel the current simulation if one is in progress.
|
|
249
|
-
* This signals the underlying simulator
|
|
257
|
+
* This signals the underlying simulator to stop at the next safe point.
|
|
250
258
|
* Safe to call even if no simulation is in progress.
|
|
251
259
|
*
|
|
252
260
|
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
253
261
|
*/
|
|
254
262
|
public async cancel(waitTimeoutMs?: number): Promise<void> {
|
|
255
|
-
await this.simulator
|
|
263
|
+
await this.simulator?.cancel?.(waitTimeoutMs);
|
|
256
264
|
}
|
|
257
265
|
|
|
258
266
|
/**
|
|
259
267
|
* Get the underlying simulator for advanced test scenarios.
|
|
260
268
|
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
261
269
|
*/
|
|
262
|
-
public getSimulator(): MeasuredPublicTxSimulatorInterface {
|
|
270
|
+
public getSimulator(): MeasuredPublicTxSimulatorInterface | undefined {
|
|
263
271
|
return this.simulator;
|
|
264
272
|
}
|
|
265
273
|
|
|
@@ -296,27 +304,6 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
296
304
|
|
|
297
305
|
return new PublicCallRequestWithCalldata(request, calldata);
|
|
298
306
|
}
|
|
299
|
-
|
|
300
|
-
// WARNING: Deduplicates by artifact name, so two different artifacts with the same name
|
|
301
|
-
// in a single tx would only record the first one's bytecode size.
|
|
302
|
-
async #recordBytecodeSizes(txLabel: string, calls: TestEnqueuedCall[]) {
|
|
303
|
-
const seenArtifactNames = new Set<string>();
|
|
304
|
-
for (const call of calls) {
|
|
305
|
-
const artifact = await this.contractDataSource.getContractArtifact(call.address);
|
|
306
|
-
if (!artifact || seenArtifactNames.has(artifact.name)) {
|
|
307
|
-
continue;
|
|
308
|
-
}
|
|
309
|
-
seenArtifactNames.add(artifact.name);
|
|
310
|
-
const instance = await this.contractDataSource.getContract(call.address);
|
|
311
|
-
if (!instance) {
|
|
312
|
-
continue;
|
|
313
|
-
}
|
|
314
|
-
const contractClass = await this.contractDataSource.getContractClass(instance.currentContractClassId);
|
|
315
|
-
if (contractClass) {
|
|
316
|
-
this.metrics.recordBytecodeSize(txLabel, artifact.name, contractClass.packedBytecode.length);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
307
|
}
|
|
321
308
|
|
|
322
309
|
export function defaultGlobals() {
|
|
@@ -5,7 +5,7 @@ import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
6
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
7
7
|
|
|
8
|
-
import { getFunctionSelector } from '../avm/
|
|
8
|
+
import { getFunctionSelector } from '../avm/testing/utils.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* This class is used during public/avm testing to function as a database of
|
|
@@ -33,7 +33,8 @@ import {
|
|
|
33
33
|
} from '@aztec/stdlib/tx';
|
|
34
34
|
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
35
35
|
|
|
36
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
36
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
37
|
+
import { AvmSimulatorPool } from '../avm_simulator_pool.js';
|
|
37
38
|
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
38
39
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
39
40
|
import { PublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
@@ -75,7 +76,7 @@ export class FuzzerSimulationRequest {
|
|
|
75
76
|
|
|
76
77
|
/**
|
|
77
78
|
* Creates a TypeScript Tx object from a deserialized C++ Tx (AvmTxHint-like structure).
|
|
78
|
-
* This allows
|
|
79
|
+
* This allows simulating fuzzer-generated transactions with the C++ public tx simulator.
|
|
79
80
|
*/
|
|
80
81
|
async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
81
82
|
// Create TxHash from the C++ tx hash string
|
|
@@ -189,6 +190,8 @@ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
|
189
190
|
/**
|
|
190
191
|
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
191
192
|
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
193
|
+
* The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
|
|
194
|
+
* execution against the real AVM rather than a TS reference.
|
|
192
195
|
*/
|
|
193
196
|
export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
194
197
|
private simulator: PublicTxSimulator;
|
|
@@ -197,22 +200,27 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
197
200
|
merkleTrees: MerkleTreeWriteOperations,
|
|
198
201
|
contractDataSource: SimpleContractDataSource,
|
|
199
202
|
globals: GlobalVariables,
|
|
200
|
-
|
|
203
|
+
private avmSimulator: AvmSimulatorPool,
|
|
204
|
+
contractsDB: PublicContractsDB,
|
|
205
|
+
forkId: number,
|
|
201
206
|
) {
|
|
202
207
|
super(contractDataSource, merkleTrees);
|
|
203
|
-
|
|
208
|
+
// collectPublicInputs and collectCallMetadata are required so the C++ result carries the end
|
|
209
|
+
// tree snapshots and app-logic return values that the fuzzer bin reports back to the harness.
|
|
204
210
|
this.simulator = new PublicTxSimulator(
|
|
205
|
-
|
|
206
|
-
contractsDb,
|
|
211
|
+
avmSimulator,
|
|
207
212
|
globals,
|
|
213
|
+
contractsDB,
|
|
214
|
+
forkId,
|
|
208
215
|
{
|
|
209
216
|
skipFeeEnforcement: false,
|
|
210
217
|
collectDebugLogs: false,
|
|
211
218
|
collectHints: false,
|
|
219
|
+
collectPublicInputs: true,
|
|
212
220
|
collectStatistics: false,
|
|
213
|
-
collectCallMetadata:
|
|
221
|
+
collectCallMetadata: true,
|
|
214
222
|
},
|
|
215
|
-
|
|
223
|
+
undefined,
|
|
216
224
|
);
|
|
217
225
|
}
|
|
218
226
|
|
|
@@ -222,11 +230,18 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
222
230
|
public static async create(
|
|
223
231
|
worldStateService: NativeWorldStateService,
|
|
224
232
|
globals: GlobalVariables,
|
|
225
|
-
protocolContracts: ProtocolContracts,
|
|
226
233
|
): Promise<AvmFuzzerSimulator> {
|
|
227
234
|
const contractDataSource = new SimpleContractDataSource();
|
|
228
235
|
const merkleTrees = await worldStateService.fork();
|
|
229
|
-
|
|
236
|
+
const forkId = merkleTrees.getRevision().forkId;
|
|
237
|
+
const avmSimulator = await AvmSimulatorPool.spawn({ wsdbIpcPath: worldStateService.getIpcPath() });
|
|
238
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
239
|
+
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, avmSimulator, contractsDB, forkId);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Tear down the AVM simulator pool (AVM processes and CDB server). */
|
|
243
|
+
public async close(): Promise<void> {
|
|
244
|
+
await this.avmSimulator[Symbol.asyncDispose]();
|
|
230
245
|
}
|
|
231
246
|
|
|
232
247
|
/**
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
deserializeFromMessagePack,
|
|
8
8
|
serializeWithMessagePack,
|
|
9
9
|
} from '@aztec/stdlib/avm';
|
|
10
|
-
import { GlobalVariables,
|
|
10
|
+
import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
|
|
11
11
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
12
12
|
|
|
13
13
|
import { createInterface } from 'readline';
|
|
@@ -58,7 +58,6 @@ async function simulateWithFuzzer(
|
|
|
58
58
|
rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
|
|
59
59
|
rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
|
|
60
60
|
rawNoteHashes: any[], // Note hashes to apply before simulation
|
|
61
|
-
protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
|
|
62
61
|
): Promise<{
|
|
63
62
|
reverted: boolean;
|
|
64
63
|
output: Fr[];
|
|
@@ -68,7 +67,7 @@ async function simulateWithFuzzer(
|
|
|
68
67
|
}> {
|
|
69
68
|
const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
|
|
70
69
|
|
|
71
|
-
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals
|
|
70
|
+
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
|
|
72
71
|
|
|
73
72
|
await simulator.applyNoteHashes(rawNoteHashes);
|
|
74
73
|
|
|
@@ -108,7 +107,7 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
108
107
|
const rawRequest = deserializeFromMessagePack(buffer);
|
|
109
108
|
const request = FuzzerSimulationRequest.fromPlainObject(rawRequest);
|
|
110
109
|
|
|
111
|
-
// Run the
|
|
110
|
+
// Run the simulation on the C++ AVM simulator
|
|
112
111
|
const result = await simulateWithFuzzer(
|
|
113
112
|
request.wsDataDir,
|
|
114
113
|
request.wsMapSizeKb,
|
|
@@ -118,7 +117,6 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
118
117
|
request.contractInstances,
|
|
119
118
|
request.publicDataWrites,
|
|
120
119
|
request.noteHashes,
|
|
121
|
-
request.protocolContracts,
|
|
122
120
|
);
|
|
123
121
|
|
|
124
122
|
// Serialize the result to msgpack and encode it in base64 for output
|
package/src/public/index.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
export { AvmSimulatorPool, type AvmSimulatorPoolOptions } from './avm_simulator_pool.js';
|
|
2
|
+
export type { PublicContractsDBInterface } from './db_interfaces.js';
|
|
1
3
|
export { PublicContractsDB } from './public_db_sources.js';
|
|
2
4
|
export { GuardedMerkleTreeOperations } from './public_processor/guarded_merkle_tree.js';
|
|
3
5
|
export { PublicProcessor, PublicProcessorFactory } from './public_processor/public_processor.js';
|
|
6
|
+
export type { AvmContractsDBContext, AvmSimulator } from './avm_simulator.js';
|
|
4
7
|
export {
|
|
5
|
-
|
|
8
|
+
PublicTxSimulator,
|
|
9
|
+
MeasuredPublicTxSimulator,
|
|
6
10
|
createPublicTxSimulatorForBlockBuilding,
|
|
7
|
-
|
|
11
|
+
DumpingPublicTxSimulator,
|
|
8
12
|
type PublicTxSimulatorInterface,
|
|
9
|
-
|
|
13
|
+
TelemetryPublicTxSimulator,
|
|
10
14
|
} from './public_tx_simulator/index.js';
|
|
11
15
|
export type { PublicTxResult, PublicSimulatorConfig as PublicTxSimulatorConfig } from '@aztec/stdlib/avm';
|
|
12
16
|
export { getCallRequestsWithCalldataByPhase } from './utils.js';
|
|
@@ -55,7 +55,7 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
55
55
|
this.log = createLogger('simulator:contracts-data-source', bindings);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/** Parses raw
|
|
58
|
+
/** Parses raw contract deployment data and inserts the resulting contracts into the current checkpoint. */
|
|
59
59
|
public addContractsFromLogs(contractDeploymentData: ContractDeploymentData): void {
|
|
60
60
|
const currentState = this.getCurrentState();
|
|
61
61
|
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
TreeInfo,
|
|
13
13
|
} from '@aztec/stdlib/trees';
|
|
14
14
|
import type { BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
15
|
-
import type { WorldStateRevision
|
|
15
|
+
import type { WorldStateRevision } from '@aztec/stdlib/world-state';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Wraps an instance of `MerkleTreeWriteOperations` to allow the sequencer to gate access.
|
|
@@ -94,9 +94,12 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
|
|
|
94
94
|
getInitialHeader(): BlockHeader {
|
|
95
95
|
return this.target.getInitialHeader();
|
|
96
96
|
}
|
|
97
|
-
public getRevision(): WorldStateRevision
|
|
97
|
+
public getRevision(): WorldStateRevision {
|
|
98
98
|
return this.target.getRevision();
|
|
99
99
|
}
|
|
100
|
+
public getIpcPath(): string {
|
|
101
|
+
return this.target.getIpcPath();
|
|
102
|
+
}
|
|
100
103
|
getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>> {
|
|
101
104
|
return this.guardAndPush(() => this.target.getSiblingPath(treeId, index));
|
|
102
105
|
}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
MAX_NOTE_HASHES_PER_TX,
|
|
3
|
-
MAX_NULLIFIERS_PER_TX,
|
|
4
|
-
MAX_TX_BLOB_DATA_SIZE_IN_FIELDS,
|
|
5
|
-
NULLIFIER_SUBTREE_HEIGHT,
|
|
6
|
-
} from '@aztec/constants';
|
|
1
|
+
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT } from '@aztec/constants';
|
|
7
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
8
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
4
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
@@ -55,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
|
55
50
|
|
|
56
51
|
import { AssertionError } from 'assert';
|
|
57
52
|
|
|
53
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
58
54
|
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
59
55
|
import {
|
|
60
56
|
type PublicTxSimulatorConfig,
|
|
61
57
|
type PublicTxSimulatorInterface,
|
|
62
|
-
|
|
58
|
+
TelemetryPublicTxSimulator,
|
|
63
59
|
} from '../public_tx_simulator/index.js';
|
|
64
60
|
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
65
61
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
@@ -71,6 +67,7 @@ export class PublicProcessorFactory {
|
|
|
71
67
|
private log: Logger;
|
|
72
68
|
constructor(
|
|
73
69
|
private contractDataSource: ContractDataSource,
|
|
70
|
+
private avmSimulator: AvmSimulator,
|
|
74
71
|
private dateProvider: DateProvider = new DateProvider(),
|
|
75
72
|
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
76
73
|
bindings?: LoggerBindings,
|
|
@@ -79,7 +76,9 @@ export class PublicProcessorFactory {
|
|
|
79
76
|
}
|
|
80
77
|
|
|
81
78
|
/**
|
|
82
|
-
* Creates a new instance of a PublicProcessor.
|
|
79
|
+
* Creates a new instance of a PublicProcessor. The simulator it drives reads contract data from the fork's
|
|
80
|
+
* contracts DB, scoped by the fork id so AVM requests route to the right state.
|
|
81
|
+
*
|
|
83
82
|
* @param globalVariables - The global variables for the block being processed.
|
|
84
83
|
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
85
84
|
* @returns A new instance of a PublicProcessor.
|
|
@@ -90,8 +89,10 @@ export class PublicProcessorFactory {
|
|
|
90
89
|
config: PublicSimulatorConfig,
|
|
91
90
|
contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
|
|
92
91
|
): PublicProcessor {
|
|
92
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
93
|
+
|
|
93
94
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
94
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
95
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
95
96
|
|
|
96
97
|
return new PublicProcessor(
|
|
97
98
|
globalVariables,
|
|
@@ -105,15 +106,16 @@ export class PublicProcessorFactory {
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
protected createPublicTxSimulator(
|
|
108
|
-
|
|
109
|
-
contractsDB: PublicContractsDB,
|
|
109
|
+
forkId: number,
|
|
110
110
|
globalVariables: GlobalVariables,
|
|
111
|
+
contractsDB: PublicContractsDB,
|
|
111
112
|
config?: Partial<PublicTxSimulatorConfig>,
|
|
112
113
|
): PublicTxSimulatorInterface {
|
|
113
|
-
return new
|
|
114
|
-
|
|
115
|
-
contractsDB,
|
|
114
|
+
return new TelemetryPublicTxSimulator(
|
|
115
|
+
this.avmSimulator,
|
|
116
116
|
globalVariables,
|
|
117
|
+
contractsDB,
|
|
118
|
+
forkId,
|
|
117
119
|
this.telemetryClient,
|
|
118
120
|
config,
|
|
119
121
|
this.log.getBindings(),
|
|
@@ -135,10 +137,6 @@ class PublicProcessorAbortError extends Error {
|
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
|
|
138
|
-
function isPublicProcessorInterruptError(err: any) {
|
|
139
|
-
return err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError';
|
|
140
|
-
}
|
|
141
|
-
|
|
142
140
|
/**
|
|
143
141
|
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
144
142
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
@@ -272,22 +270,6 @@ export class PublicProcessor implements Traceable {
|
|
|
272
270
|
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
273
271
|
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
274
272
|
|
|
275
|
-
// A single tx's effects must fit within the per-tx blob encoding: the rollup circuit encodes each
|
|
276
|
-
// tx into a fixed [Field; MAX_TX_BLOB_DATA_SIZE_IN_FIELDS] array, so a larger tx effect cannot be
|
|
277
|
-
// proven. The per-category side-effect limits already guarantee this upstream, so reaching here means
|
|
278
|
-
// the tx is malformed; reject it as invalid rather than letting it poison proving.
|
|
279
|
-
if (txBlobFields > MAX_TX_BLOB_DATA_SIZE_IN_FIELDS) {
|
|
280
|
-
const error = new Error(
|
|
281
|
-
`Tx ${txHash} produced ${txBlobFields} blob fields, exceeding the per-tx maximum of ${MAX_TX_BLOB_DATA_SIZE_IN_FIELDS}`,
|
|
282
|
-
);
|
|
283
|
-
this.log.error(error.message, { txHash, txBlobFields });
|
|
284
|
-
await checkpoint.revert();
|
|
285
|
-
this.contractsDB.revertCheckpoint();
|
|
286
|
-
failed.push({ tx, error });
|
|
287
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
273
|
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
292
274
|
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
293
275
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
@@ -347,11 +329,15 @@ export class PublicProcessor implements Traceable {
|
|
|
347
329
|
// Commit the tx-level contracts checkpoint on success
|
|
348
330
|
this.contractsDB.commitCheckpoint();
|
|
349
331
|
} catch (err: any) {
|
|
350
|
-
if (
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
//
|
|
332
|
+
if (err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError') {
|
|
333
|
+
this.log.warn(
|
|
334
|
+
`Stopping tx processing due to ${err.name === 'PublicProcessorTimeoutError' ? 'timeout' : 'abort'}.`,
|
|
335
|
+
);
|
|
336
|
+
// We hit the transaction execution deadline or an external abort signal.
|
|
337
|
+
// There may still be a simulation in progress.
|
|
338
|
+
// Signal cancellation AND WAIT for the simulation to actually stop. Cancellation is
|
|
339
|
+
// cooperative: the simulator may be mid slow-operation and won't observe the flag until it
|
|
340
|
+
// completes, and without waiting we'd revert checkpoints while it's still writing to state.
|
|
355
341
|
await this.publicTxSimulator.cancel?.();
|
|
356
342
|
|
|
357
343
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|