@aztec/simulator 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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 +4 -4
- package/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- 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_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/circuit_recording/circuit_recorder.d.ts +39 -25
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +70 -72
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +9 -20
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +39 -43
- 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_recording/simulator_recorder_wrapper.js +11 -14
- 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 +2 -1
- 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/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 +4 -34
- 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/generated/api_types.d.ts +171 -0
- package/dest/public/cdb/generated/api_types.d.ts.map +1 -0
- package/dest/public/cdb/generated/api_types.js +314 -0
- package/dest/public/cdb/generated/server.d.ts +26 -0
- package/dest/public/cdb/generated/server.d.ts.map +1 -0
- package/dest/public/cdb/generated/server.js +135 -0
- package/dest/public/cdb_ipc_server.d.ts +33 -0
- package/dest/public/cdb_ipc_server.d.ts.map +1 -0
- package/dest/public/cdb_ipc_server.js +153 -0
- package/dest/public/contracts_db_checkpoint.d.ts +2 -2
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -1
- package/dest/public/contracts_db_checkpoint.js +1 -1
- package/dest/public/executor_metrics.d.ts +1 -1
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +7 -2
- package/dest/public/fixtures/amm_test.js +4 -4
- package/dest/public/fixtures/bulk_test.d.ts +1 -1
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +33 -6
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +2 -2
- 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 +12 -7
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +32 -15
- package/dest/public/fixtures/simple_contract_data_source.js +1 -1
- package/dest/public/fixtures/token_test.js +3 -3
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +21 -20
- 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 +11 -8
- 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 +9 -5
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +20 -14
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -7
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +8 -5
- package/dest/public/public_processor/public_processor.d.ts +17 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +119 -77
- 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 +28 -4
- 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 +9 -8
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +9 -9
- 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 +43 -71
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +99 -316
- 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 +3 -2
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +2 -2
- package/package.json +22 -19
- package/src/client.ts +0 -2
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +89 -81
- package/src/private/circuit_recording/file_circuit_recorder.ts +45 -50
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +9 -15
- 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 +4 -40
- package/src/public/avm_simulator.ts +29 -0
- package/src/public/avm_simulator_pool.ts +226 -0
- package/src/public/cdb/generated/api_types.ts +457 -0
- package/src/public/cdb/generated/server.ts +109 -0
- package/src/public/cdb_ipc_server.ts +197 -0
- package/src/public/contracts_db_checkpoint.ts +1 -1
- package/src/public/executor_metrics.ts +4 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +31 -6
- package/src/public/fixtures/custom_bytecode_tester.ts +2 -2
- 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 +45 -18
- package/src/public/fixtures/simple_contract_data_source.ts +1 -1
- package/src/public/fixtures/token_test.ts +3 -3
- package/src/public/fixtures/utils.ts +23 -24
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +26 -11
- package/src/public/fuzzing/avm_simulator_bin.ts +14 -6
- package/src/public/index.ts +7 -3
- package/src/public/public_db_sources.ts +36 -19
- package/src/public/public_processor/guarded_merkle_tree.ts +11 -8
- package/src/public/public_processor/public_processor.ts +166 -97
- package/src/public/public_processor/public_processor_metrics.ts +22 -4
- package/src/public/public_tx_simulator/{dumping_cpp_public_tx_simulator.ts → dumping_public_tx_simulator.ts} +17 -31
- package/src/public/public_tx_simulator/factories.ts +31 -11
- package/src/public/public_tx_simulator/index.ts +6 -5
- package/src/public/public_tx_simulator/public_tx_simulator.ts +142 -470
- 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 +3 -3
- 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 -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 -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 -40
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -191
- 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 -104
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -141
- 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 -83
- 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 -44
- 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 -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 -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 -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 -93
- 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 -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 -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 -35
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -12
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -174
- 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 -123
- package/dest/public/fixtures/opcode_spammer.d.ts.map +0 -1
- package/dest/public/fixtures/opcode_spammer.js +0 -1681
- 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 -355
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +0 -18
- 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 -98
- 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 -132
- 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 -22
- 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 -130
- 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 -300
- 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 -164
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -395
- 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 -46
- 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 -276
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -177
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -116
- package/src/public/avm/fixtures/initializers.ts +0 -102
- 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 -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 -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 -105
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -261
- 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 -87
- 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 -50
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -228
- package/src/public/fixtures/minimal_public_tx.ts +0 -26
- package/src/public/fixtures/opcode_spammer.ts +0 -1725
- package/src/public/hinting_db_sources.ts +0 -607
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +0 -121
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -208
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +0 -132
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +0 -237
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -105
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -477
- 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 -546
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
|
-
import { DateProvider, Timer, elapsed,
|
|
6
|
+
import { DateProvider, Timer, elapsed, execWithSignal } from '@aztec/foundation/timer';
|
|
7
7
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
8
8
|
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
9
9
|
import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
@@ -25,6 +25,7 @@ import type {
|
|
|
25
25
|
PublicProcessorValidator,
|
|
26
26
|
SequencerConfig,
|
|
27
27
|
} from '@aztec/stdlib/interfaces/server';
|
|
28
|
+
import { type DebugLog, type DebugLogStore, NullDebugLogStore } from '@aztec/stdlib/logs';
|
|
28
29
|
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
29
30
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
30
31
|
import {
|
|
@@ -49,11 +50,12 @@ import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
|
49
50
|
|
|
50
51
|
import { AssertionError } from 'assert';
|
|
51
52
|
|
|
53
|
+
import type { AvmSimulator } from '../avm_simulator.js';
|
|
52
54
|
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
53
55
|
import {
|
|
54
56
|
type PublicTxSimulatorConfig,
|
|
55
57
|
type PublicTxSimulatorInterface,
|
|
56
|
-
|
|
58
|
+
TelemetryPublicTxSimulator,
|
|
57
59
|
} from '../public_tx_simulator/index.js';
|
|
58
60
|
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
59
61
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
@@ -62,27 +64,35 @@ import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
|
62
64
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
63
65
|
*/
|
|
64
66
|
export class PublicProcessorFactory {
|
|
67
|
+
private log: Logger;
|
|
65
68
|
constructor(
|
|
66
69
|
private contractDataSource: ContractDataSource,
|
|
70
|
+
private avmSimulator: AvmSimulator,
|
|
67
71
|
private dateProvider: DateProvider = new DateProvider(),
|
|
68
72
|
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
69
|
-
|
|
73
|
+
bindings?: LoggerBindings,
|
|
74
|
+
) {
|
|
75
|
+
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
76
|
+
}
|
|
70
77
|
|
|
71
78
|
/**
|
|
72
|
-
* 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
|
+
*
|
|
73
82
|
* @param globalVariables - The global variables for the block being processed.
|
|
74
|
-
* @param
|
|
83
|
+
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
75
84
|
* @returns A new instance of a PublicProcessor.
|
|
76
85
|
*/
|
|
77
86
|
public create(
|
|
78
87
|
merkleTree: MerkleTreeWriteOperations,
|
|
79
88
|
globalVariables: GlobalVariables,
|
|
80
89
|
config: PublicSimulatorConfig,
|
|
90
|
+
contractsDB: PublicContractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings()),
|
|
81
91
|
): PublicProcessor {
|
|
82
|
-
const
|
|
92
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
83
93
|
|
|
84
94
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
85
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
95
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
86
96
|
|
|
87
97
|
return new PublicProcessor(
|
|
88
98
|
globalVariables,
|
|
@@ -91,16 +101,25 @@ export class PublicProcessorFactory {
|
|
|
91
101
|
publicTxSimulator,
|
|
92
102
|
this.dateProvider,
|
|
93
103
|
this.telemetryClient,
|
|
104
|
+
createLogger('simulator:public-processor', this.log.getBindings()),
|
|
94
105
|
);
|
|
95
106
|
}
|
|
96
107
|
|
|
97
108
|
protected createPublicTxSimulator(
|
|
98
|
-
|
|
99
|
-
contractsDB: PublicContractsDB,
|
|
109
|
+
forkId: number,
|
|
100
110
|
globalVariables: GlobalVariables,
|
|
111
|
+
contractsDB: PublicContractsDB,
|
|
101
112
|
config?: Partial<PublicTxSimulatorConfig>,
|
|
102
113
|
): PublicTxSimulatorInterface {
|
|
103
|
-
return new
|
|
114
|
+
return new TelemetryPublicTxSimulator(
|
|
115
|
+
this.avmSimulator,
|
|
116
|
+
globalVariables,
|
|
117
|
+
contractsDB,
|
|
118
|
+
forkId,
|
|
119
|
+
this.telemetryClient,
|
|
120
|
+
config,
|
|
121
|
+
this.log.getBindings(),
|
|
122
|
+
);
|
|
104
123
|
}
|
|
105
124
|
}
|
|
106
125
|
|
|
@@ -111,13 +130,19 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
132
|
|
|
133
|
+
class PublicProcessorAbortError extends Error {
|
|
134
|
+
constructor(message: string = 'Aborted while processing tx') {
|
|
135
|
+
super(message);
|
|
136
|
+
this.name = 'PublicProcessorAbortError';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
114
140
|
/**
|
|
115
141
|
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
116
142
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
117
143
|
*/
|
|
118
144
|
export class PublicProcessor implements Traceable {
|
|
119
145
|
private metrics: PublicProcessorMetrics;
|
|
120
|
-
|
|
121
146
|
constructor(
|
|
122
147
|
protected globalVariables: GlobalVariables,
|
|
123
148
|
private guardedMerkleTree: GuardedMerkleTreeOperations,
|
|
@@ -125,8 +150,9 @@ export class PublicProcessor implements Traceable {
|
|
|
125
150
|
protected publicTxSimulator: PublicTxSimulatorInterface,
|
|
126
151
|
private dateProvider: DateProvider,
|
|
127
152
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
128
|
-
private log
|
|
153
|
+
private log: Logger,
|
|
129
154
|
private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs' | 'fakeThrowAfterProcessingTxCount'> = {},
|
|
155
|
+
private debugLogStore: DebugLogStore = new NullDebugLogStore(),
|
|
130
156
|
) {
|
|
131
157
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
132
158
|
}
|
|
@@ -146,12 +172,13 @@ export class PublicProcessor implements Traceable {
|
|
|
146
172
|
txs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
147
173
|
limits: PublicProcessorLimits = {},
|
|
148
174
|
validator: PublicProcessorValidator = {},
|
|
149
|
-
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[],
|
|
150
|
-
const { maxTransactions,
|
|
175
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
|
|
176
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
|
|
151
177
|
const { preprocessValidator, nullifierCache } = validator;
|
|
152
178
|
const result: ProcessedTx[] = [];
|
|
153
179
|
const usedTxs: Tx[] = [];
|
|
154
180
|
const failed: FailedTx[] = [];
|
|
181
|
+
const debugLogs: DebugLog[] = [];
|
|
155
182
|
const timer = new Timer();
|
|
156
183
|
|
|
157
184
|
let totalSizeInBytes = 0;
|
|
@@ -159,6 +186,8 @@ export class PublicProcessor implements Traceable {
|
|
|
159
186
|
let totalPublicGas = new Gas(0, 0);
|
|
160
187
|
let totalBlockGas = new Gas(0, 0);
|
|
161
188
|
let totalBlobFields = 0;
|
|
189
|
+
let silentlySkippedCount = 0;
|
|
190
|
+
let totalSilentlySkippedDurationMs = 0;
|
|
162
191
|
|
|
163
192
|
for await (const tx of txs) {
|
|
164
193
|
// Only process up to the max tx limit
|
|
@@ -167,28 +196,33 @@ export class PublicProcessor implements Traceable {
|
|
|
167
196
|
break;
|
|
168
197
|
}
|
|
169
198
|
|
|
170
|
-
// Bail if we've hit the deadline
|
|
199
|
+
// Bail if we've hit the deadline or have been interrupted.
|
|
171
200
|
if (deadline && this.dateProvider.now() > +deadline) {
|
|
172
201
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
173
202
|
break;
|
|
174
203
|
}
|
|
204
|
+
if (signal?.aborted) {
|
|
205
|
+
this.log.warn(`Stopping tx processing due to abort signal.`);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
175
208
|
|
|
176
|
-
// Skip this tx if it'd exceed max block size
|
|
177
209
|
const txHash = tx.getTxHash().toString();
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
210
|
+
|
|
211
|
+
// Skip this tx if its estimated blob fields would exceed the limit.
|
|
212
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
213
|
+
const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
|
|
214
|
+
if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
215
|
+
this.log.warn(
|
|
216
|
+
`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,
|
|
217
|
+
{ txHash, txBlobFields, totalBlobFields, maxBlobFields },
|
|
218
|
+
);
|
|
186
219
|
continue;
|
|
187
220
|
}
|
|
188
221
|
|
|
189
|
-
// Skip this tx if its gas limit would exceed the block gas limit
|
|
222
|
+
// Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
|
|
223
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
190
224
|
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
191
|
-
if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
225
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
192
226
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
193
227
|
txHash,
|
|
194
228
|
txGasLimit,
|
|
@@ -208,11 +242,6 @@ export class PublicProcessor implements Traceable {
|
|
|
208
242
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
209
243
|
returns.push(new NestedProcessReturnValues([]));
|
|
210
244
|
continue;
|
|
211
|
-
} else if (result.result === 'skipped') {
|
|
212
|
-
const reason = result.reason.join(', ');
|
|
213
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
214
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
215
|
-
continue;
|
|
216
245
|
} else {
|
|
217
246
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
218
247
|
}
|
|
@@ -228,7 +257,9 @@ export class PublicProcessor implements Traceable {
|
|
|
228
257
|
this.contractsDB.createCheckpoint();
|
|
229
258
|
|
|
230
259
|
try {
|
|
231
|
-
const [processedTx, returnValues] = await
|
|
260
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(() =>
|
|
261
|
+
this.processTx(tx, deadline, signal),
|
|
262
|
+
);
|
|
232
263
|
|
|
233
264
|
// Inject a fake processing failure after N txs if requested
|
|
234
265
|
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
@@ -237,23 +268,9 @@ export class PublicProcessor implements Traceable {
|
|
|
237
268
|
}
|
|
238
269
|
|
|
239
270
|
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
240
|
-
|
|
241
|
-
// If the actual size of this tx would exceed block size, skip it
|
|
242
271
|
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
243
|
-
if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
|
|
244
|
-
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
245
|
-
txHash,
|
|
246
|
-
sizeInBytes: txSize,
|
|
247
|
-
totalSizeInBytes,
|
|
248
|
-
maxBlockSize,
|
|
249
|
-
});
|
|
250
|
-
// Need to revert the checkpoint here and don't go any further
|
|
251
|
-
await checkpoint.revert();
|
|
252
|
-
this.contractsDB.revertCheckpoint();
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
272
|
|
|
256
|
-
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
273
|
+
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
257
274
|
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
258
275
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
259
276
|
this.log.debug(
|
|
@@ -263,35 +280,64 @@ export class PublicProcessor implements Traceable {
|
|
|
263
280
|
txBlobFields,
|
|
264
281
|
totalBlobFields,
|
|
265
282
|
maxBlobFields,
|
|
283
|
+
txProcessingTimeMs,
|
|
266
284
|
},
|
|
267
285
|
);
|
|
286
|
+
silentlySkippedCount += 1;
|
|
287
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
288
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
268
289
|
// Need to revert the checkpoint here and don't go any further
|
|
269
290
|
await checkpoint.revert();
|
|
270
291
|
this.contractsDB.revertCheckpoint();
|
|
271
292
|
continue;
|
|
272
293
|
}
|
|
273
294
|
|
|
295
|
+
// During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
|
|
296
|
+
// Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
|
|
297
|
+
// this uses actual gas and stops processing when the limit is exceeded.
|
|
298
|
+
if (
|
|
299
|
+
!isBuildingProposal &&
|
|
300
|
+
maxBlockGas !== undefined &&
|
|
301
|
+
totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)
|
|
302
|
+
) {
|
|
303
|
+
this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
|
|
304
|
+
txHash,
|
|
305
|
+
txGas: processedTx.gasUsed.totalGas,
|
|
306
|
+
totalBlockGas,
|
|
307
|
+
maxBlockGas,
|
|
308
|
+
});
|
|
309
|
+
await checkpoint.revert();
|
|
310
|
+
this.contractsDB.revertCheckpoint();
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
|
|
274
314
|
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
275
315
|
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
276
316
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
277
317
|
result.push(processedTx);
|
|
278
318
|
usedTxs.push(tx);
|
|
279
319
|
returns = returns.concat(returnValues);
|
|
320
|
+
debugLogs.push(...txDebugLogs);
|
|
321
|
+
|
|
322
|
+
this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
|
|
280
323
|
|
|
281
324
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
282
325
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
283
326
|
totalSizeInBytes += txSize;
|
|
284
327
|
totalBlobFields += txBlobFields;
|
|
328
|
+
|
|
329
|
+
// Commit the tx-level contracts checkpoint on success
|
|
330
|
+
this.contractsDB.commitCheckpoint();
|
|
285
331
|
} catch (err: any) {
|
|
286
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
287
|
-
this.log.warn(
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
//
|
|
291
|
-
//
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
//
|
|
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.
|
|
295
341
|
await this.publicTxSimulator.cancel?.();
|
|
296
342
|
|
|
297
343
|
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
@@ -301,14 +347,10 @@ export class PublicProcessor implements Traceable {
|
|
|
301
347
|
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
302
348
|
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
303
349
|
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
//
|
|
307
|
-
await checkpoint.
|
|
308
|
-
|
|
309
|
-
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
310
|
-
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
311
|
-
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
350
|
+
// Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
|
|
351
|
+
// updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
|
|
352
|
+
// created by callers below our depth.
|
|
353
|
+
await checkpoint.revertToCheckpoint();
|
|
312
354
|
|
|
313
355
|
// Revert any contracts added to the DB for the tx.
|
|
314
356
|
this.contractsDB.revertCheckpoint();
|
|
@@ -320,9 +362,9 @@ export class PublicProcessor implements Traceable {
|
|
|
320
362
|
break;
|
|
321
363
|
}
|
|
322
364
|
|
|
323
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
324
|
-
|
|
325
|
-
await
|
|
365
|
+
// Roll back state to start of TX before proceeding to next TX.
|
|
366
|
+
// Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
|
|
367
|
+
await checkpoint.revertToCheckpoint();
|
|
326
368
|
this.contractsDB.revertCheckpoint();
|
|
327
369
|
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
328
370
|
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
@@ -334,7 +376,6 @@ export class PublicProcessor implements Traceable {
|
|
|
334
376
|
} finally {
|
|
335
377
|
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
336
378
|
await checkpoint.commit();
|
|
337
|
-
this.contractsDB.commitCheckpointOkIfNone();
|
|
338
379
|
}
|
|
339
380
|
}
|
|
340
381
|
|
|
@@ -342,15 +383,26 @@ export class PublicProcessor implements Traceable {
|
|
|
342
383
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
343
384
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
344
385
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
386
|
+
const silentlySkippedDurationMs = Math.round(totalSilentlySkippedDurationMs);
|
|
387
|
+
this.log.info(
|
|
388
|
+
`Processed ${result.length} successful txs and ${failed.length} failed txs ` +
|
|
389
|
+
`(${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) ` +
|
|
390
|
+
`in ${duration}s`,
|
|
391
|
+
{
|
|
392
|
+
blockNumber: this.globalVariables.blockNumber,
|
|
393
|
+
successfulCount: result.length,
|
|
394
|
+
failedCount: failed.length,
|
|
395
|
+
duration,
|
|
396
|
+
rate,
|
|
397
|
+
totalPublicGas,
|
|
398
|
+
totalBlockGas,
|
|
399
|
+
totalSizeInBytes,
|
|
400
|
+
silentlySkippedCount,
|
|
401
|
+
silentlySkippedDurationMs,
|
|
402
|
+
},
|
|
403
|
+
);
|
|
352
404
|
|
|
353
|
-
return [result, failed, usedTxs, returns,
|
|
405
|
+
return [result, failed, usedTxs, returns, debugLogs];
|
|
354
406
|
}
|
|
355
407
|
|
|
356
408
|
private async checkWorldStateUnchanged(
|
|
@@ -370,8 +422,14 @@ export class PublicProcessor implements Traceable {
|
|
|
370
422
|
}
|
|
371
423
|
|
|
372
424
|
@trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
|
|
373
|
-
private async processTx(
|
|
374
|
-
|
|
425
|
+
private async processTx(
|
|
426
|
+
tx: Tx,
|
|
427
|
+
deadline: Date | undefined,
|
|
428
|
+
signal: AbortSignal | undefined,
|
|
429
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
430
|
+
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
|
|
431
|
+
this.processTxWithinDeadline(tx, deadline, signal),
|
|
432
|
+
);
|
|
375
433
|
|
|
376
434
|
this.log.verbose(
|
|
377
435
|
!tx.hasPublicCalls()
|
|
@@ -394,7 +452,7 @@ export class PublicProcessor implements Traceable {
|
|
|
394
452
|
},
|
|
395
453
|
);
|
|
396
454
|
|
|
397
|
-
return [processedTx, returnValues ?? []];
|
|
455
|
+
return [processedTx, returnValues ?? [], debugLogs];
|
|
398
456
|
}
|
|
399
457
|
|
|
400
458
|
private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
|
|
@@ -424,14 +482,14 @@ export class PublicProcessor implements Traceable {
|
|
|
424
482
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
425
483
|
}
|
|
426
484
|
|
|
427
|
-
/** Processes the given tx within deadline
|
|
485
|
+
/** Processes the given tx within deadline or until the signal is aborted. */
|
|
428
486
|
private async processTxWithinDeadline(
|
|
429
487
|
tx: Tx,
|
|
430
488
|
deadline: Date | undefined,
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
: () => this.processPrivateOnlyTx(tx);
|
|
489
|
+
signal: AbortSignal | undefined,
|
|
490
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
|
|
491
|
+
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
|
|
492
|
+
tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
|
|
435
493
|
|
|
436
494
|
// Fake a delay per tx if instructed (used for tests)
|
|
437
495
|
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
@@ -445,27 +503,38 @@ export class PublicProcessor implements Traceable {
|
|
|
445
503
|
}
|
|
446
504
|
: innerProcessFn;
|
|
447
505
|
|
|
448
|
-
|
|
506
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
507
|
+
if (!processingSignal) {
|
|
449
508
|
return await processFn();
|
|
450
509
|
}
|
|
451
510
|
|
|
452
|
-
|
|
511
|
+
return await execWithSignal(
|
|
512
|
+
() => processFn(),
|
|
513
|
+
processingSignal,
|
|
514
|
+
signal =>
|
|
515
|
+
signal.reason?.name === 'TimeoutError' ? new PublicProcessorTimeoutError() : new PublicProcessorAbortError(),
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
private getProcessingSignal(tx: Tx, deadline: Date | undefined, signal: AbortSignal | undefined) {
|
|
520
|
+
if (!deadline) {
|
|
521
|
+
return signal;
|
|
522
|
+
}
|
|
523
|
+
|
|
453
524
|
const timeout = +deadline - this.dateProvider.now();
|
|
454
525
|
if (timeout <= 0) {
|
|
455
526
|
throw new PublicProcessorTimeoutError();
|
|
456
527
|
}
|
|
457
528
|
|
|
529
|
+
const txHash = tx.getTxHash();
|
|
458
530
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
459
531
|
deadline: deadline.toISOString(),
|
|
460
532
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
461
533
|
txHash,
|
|
462
534
|
});
|
|
463
535
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
timeout,
|
|
467
|
-
() => new PublicProcessorTimeoutError(),
|
|
468
|
-
);
|
|
536
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
537
|
+
return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
469
538
|
}
|
|
470
539
|
|
|
471
540
|
/**
|
|
@@ -499,7 +568,7 @@ export class PublicProcessor implements Traceable {
|
|
|
499
568
|
@trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
|
|
500
569
|
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
501
570
|
}))
|
|
502
|
-
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
|
|
571
|
+
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined, DebugLog[]]> {
|
|
503
572
|
const gasFees = this.globalVariables.gasFees;
|
|
504
573
|
const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
|
|
505
574
|
|
|
@@ -522,15 +591,15 @@ export class PublicProcessor implements Traceable {
|
|
|
522
591
|
// Fee payment insertion has already been done. Do the rest.
|
|
523
592
|
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
524
593
|
|
|
525
|
-
|
|
594
|
+
this.contractsDB.addNewContracts(tx);
|
|
526
595
|
|
|
527
|
-
return [processedTx, undefined];
|
|
596
|
+
return [processedTx, undefined, []];
|
|
528
597
|
}
|
|
529
598
|
|
|
530
599
|
@trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
|
|
531
600
|
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
532
601
|
}))
|
|
533
|
-
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
602
|
+
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
534
603
|
const timer = new Timer();
|
|
535
604
|
|
|
536
605
|
const result = await this.publicTxSimulator.simulate(tx);
|
|
@@ -568,7 +637,7 @@ export class PublicProcessor implements Traceable {
|
|
|
568
637
|
revertReason,
|
|
569
638
|
);
|
|
570
639
|
|
|
571
|
-
return [processedTx, appLogicReturnValues];
|
|
640
|
+
return [processedTx, appLogicReturnValues, result.logs ?? []];
|
|
572
641
|
}
|
|
573
642
|
|
|
574
643
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
2
2
|
import type { Gas } from '@aztec/stdlib/gas';
|
|
3
|
-
import
|
|
3
|
+
import { TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
4
|
import {
|
|
5
5
|
Attributes,
|
|
6
6
|
type Gauge,
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type TelemetryClient,
|
|
10
10
|
type Tracer,
|
|
11
11
|
type UpDownCounter,
|
|
12
|
+
createUpDownCounterWithDefault,
|
|
12
13
|
} from '@aztec/telemetry-client';
|
|
13
14
|
|
|
14
15
|
export class PublicProcessorMetrics {
|
|
@@ -29,19 +30,27 @@ export class PublicProcessorMetrics {
|
|
|
29
30
|
|
|
30
31
|
private treeInsertionDuration: Histogram;
|
|
31
32
|
|
|
33
|
+
private silentlySkippedCount: UpDownCounter;
|
|
34
|
+
private silentlySkippedDuration: Histogram;
|
|
35
|
+
|
|
32
36
|
constructor(client: TelemetryClient, name = 'PublicProcessor') {
|
|
33
37
|
this.tracer = client.getTracer(name);
|
|
34
38
|
const meter = client.getMeter(name);
|
|
35
39
|
|
|
36
40
|
this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION);
|
|
37
41
|
|
|
38
|
-
this.txCount = meter
|
|
42
|
+
this.txCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
|
|
43
|
+
[Attributes.OK]: [true, false],
|
|
44
|
+
});
|
|
39
45
|
|
|
40
|
-
this.txPhaseCount = meter
|
|
46
|
+
this.txPhaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT);
|
|
41
47
|
|
|
42
48
|
this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION);
|
|
43
49
|
|
|
44
|
-
this.phaseCount = meter
|
|
50
|
+
this.phaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
|
|
51
|
+
[Attributes.TX_PHASE_NAME]: [TxExecutionPhase.SETUP, TxExecutionPhase.APP_LOGIC, TxExecutionPhase.TEARDOWN],
|
|
52
|
+
[Attributes.OK]: [true, false],
|
|
53
|
+
});
|
|
45
54
|
|
|
46
55
|
this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE);
|
|
47
56
|
|
|
@@ -54,6 +63,10 @@ export class PublicProcessorMetrics {
|
|
|
54
63
|
this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
|
|
55
64
|
|
|
56
65
|
this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
|
|
66
|
+
|
|
67
|
+
this.silentlySkippedCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT);
|
|
68
|
+
|
|
69
|
+
this.silentlySkippedDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION);
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number) {
|
|
@@ -117,4 +130,9 @@ export class PublicProcessorMetrics {
|
|
|
117
130
|
recordTreeInsertions(durationUs: number) {
|
|
118
131
|
this.treeInsertionDuration.record(Math.ceil(durationUs));
|
|
119
132
|
}
|
|
133
|
+
|
|
134
|
+
recordSilentlySkipped(durationMs: number) {
|
|
135
|
+
this.silentlySkippedCount.add(1);
|
|
136
|
+
this.silentlySkippedDuration.record(Math.ceil(durationMs));
|
|
137
|
+
}
|
|
120
138
|
}
|