@aztec/simulator 0.0.1-commit.b655e406 → 0.0.1-commit.b8a057fa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dest/client.d.ts +1 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +0 -2
- package/dest/common/errors.d.ts +2 -2
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/index.d.ts +1 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- package/dest/private/acvm/acvm_types.d.ts +1 -1
- package/dest/private/acvm/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +1 -1
- package/dest/private/acvm/index.d.ts +1 -1
- package/dest/private/acvm/serialize.d.ts +2 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +1 -1
- package/dest/private/acvm_native.d.ts +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +7 -5
- package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.d.ts +39 -25
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +71 -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/circuit_simulator.d.ts +1 -1
- package/dest/private/factory.d.ts +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +3 -2
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +19 -4
- package/dest/public/avm/{fixtures → testing}/utils.d.ts +4 -10
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +7 -36
- 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 +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +14 -2
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/executor_metrics.d.ts +3 -2
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +13 -34
- package/dest/public/executor_metrics_interface.d.ts +3 -2
- package/dest/public/executor_metrics_interface.d.ts.map +1 -1
- package/dest/public/fixtures/amm_test.d.ts +1 -1
- package/dest/public/fixtures/amm_test.js +6 -6
- package/dest/public/fixtures/bulk_test.d.ts +3 -3
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +38 -75
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +29 -7
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
- package/dest/public/fixtures/index.d.ts +3 -3
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +2 -2
- 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 +32 -9
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +84 -26
- package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
- package/dest/public/fixtures/simple_contract_data_source.js +5 -5
- package/dest/public/fixtures/token_test.d.ts +6 -2
- package/dest/public/fixtures/token_test.d.ts.map +1 -1
- package/dest/public/fixtures/token_test.js +16 -15
- package/dest/public/fixtures/utils.d.ts +3 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +25 -23
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +67 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +185 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/index.d.ts +6 -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 +29 -66
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +83 -134
- package/dest/public/public_errors.d.ts +1 -1
- package/dest/public/public_errors.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -5
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +12 -4
- package/dest/public/public_processor/public_processor.d.ts +24 -22
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +559 -125
- package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +36 -45
- package/dest/public/public_tx_simulator/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_public_tx_simulator.js +39 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +6 -4
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +3 -2
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +43 -90
- 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 -331
- 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 +25 -2
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
- package/dest/public/side_effect_errors.d.ts +1 -1
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.d.ts +6 -4
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +7 -6
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +1 -1
- package/dest/server.d.ts +1 -1
- package/dest/testing.d.ts +1 -1
- package/package.json +26 -22
- package/src/client.ts +0 -2
- package/src/common/errors.ts +1 -1
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm/deserialize.ts +1 -1
- package/src/private/acvm/serialize.ts +1 -1
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +90 -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 +24 -4
- package/src/public/avm/{fixtures → testing}/utils.ts +7 -42
- 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 +41 -0
- package/src/public/db_interfaces.ts +16 -1
- package/src/public/executor_metrics.ts +11 -34
- package/src/public/executor_metrics_interface.ts +2 -1
- package/src/public/fixtures/amm_test.ts +6 -6
- package/src/public/fixtures/bulk_test.ts +40 -15
- package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
- package/src/public/fixtures/index.ts +6 -2
- package/src/public/fixtures/public_processor_test_env.ts +88 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +117 -26
- package/src/public/fixtures/simple_contract_data_source.ts +9 -10
- package/src/public/fixtures/token_test.ts +21 -13
- package/src/public/fixtures/utils.ts +25 -27
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +303 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +173 -0
- package/src/public/index.ts +8 -2
- package/src/public/public_db_sources.ts +112 -174
- package/src/public/public_processor/guarded_merkle_tree.ts +14 -6
- package/src/public/public_processor/public_processor.ts +234 -138
- package/src/public/public_processor/public_processor_metrics.ts +28 -44
- package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +67 -0
- package/src/public/public_tx_simulator/factories.ts +61 -0
- package/src/public/public_tx_simulator/index.ts +8 -3
- package/src/public/public_tx_simulator/public_tx_simulator.ts +142 -500
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +37 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
- package/src/public/test_executor_metrics.ts +10 -8
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -23
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -36
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -97
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -109
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -351
- package/dest/public/avm/avm_simulator.d.ts +0 -39
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -190
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/errors.d.ts +0 -98
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -129
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -74
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -43
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -42
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -255
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -47
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -87
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -84
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -209
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -114
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -24
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -68
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -38
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -333
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -5
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -109
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -10
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -29
- package/dest/public/hinting_db_sources.d.ts +0 -70
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -297
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -41
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -89
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -24
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -127
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -292
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -39
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -23
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -166
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -391
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -67
- package/src/public/avm/avm_execution_environment.ts +0 -48
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -169
- package/src/public/avm/avm_memory_types.ts +0 -436
- package/src/public/avm/avm_simulator.ts +0 -274
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -163
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -108
- package/src/public/avm/fixtures/initializers.ts +0 -104
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -288
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -117
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -75
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -96
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -260
- package/src/public/avm/opcodes/hashing.ts +0 -145
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -87
- package/src/public/avm/revert_reason.ts +0 -55
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -204
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -18
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -135
- package/src/public/fixtures/minimal_public_tx.ts +0 -36
- package/src/public/hinting_db_sources.ts +0 -505
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -128
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -109
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -471
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -290
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -560
- package/src/public/tx_contract_cache.ts +0 -69
|
@@ -1,23 +1,392 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
function applyDecs2203RFactory() {
|
|
2
|
+
function createAddInitializerMethod(initializers, decoratorFinishedRef) {
|
|
3
|
+
return function addInitializer(initializer) {
|
|
4
|
+
assertNotFinished(decoratorFinishedRef, "addInitializer");
|
|
5
|
+
assertCallable(initializer, "An initializer");
|
|
6
|
+
initializers.push(initializer);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
|
|
10
|
+
var kindStr;
|
|
11
|
+
switch(kind){
|
|
12
|
+
case 1:
|
|
13
|
+
kindStr = "accessor";
|
|
14
|
+
break;
|
|
15
|
+
case 2:
|
|
16
|
+
kindStr = "method";
|
|
17
|
+
break;
|
|
18
|
+
case 3:
|
|
19
|
+
kindStr = "getter";
|
|
20
|
+
break;
|
|
21
|
+
case 4:
|
|
22
|
+
kindStr = "setter";
|
|
23
|
+
break;
|
|
24
|
+
default:
|
|
25
|
+
kindStr = "field";
|
|
26
|
+
}
|
|
27
|
+
var ctx = {
|
|
28
|
+
kind: kindStr,
|
|
29
|
+
name: isPrivate ? "#" + name : name,
|
|
30
|
+
static: isStatic,
|
|
31
|
+
private: isPrivate,
|
|
32
|
+
metadata: metadata
|
|
33
|
+
};
|
|
34
|
+
var decoratorFinishedRef = {
|
|
35
|
+
v: false
|
|
36
|
+
};
|
|
37
|
+
ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
|
|
38
|
+
var get, set;
|
|
39
|
+
if (kind === 0) {
|
|
40
|
+
if (isPrivate) {
|
|
41
|
+
get = desc.get;
|
|
42
|
+
set = desc.set;
|
|
43
|
+
} else {
|
|
44
|
+
get = function() {
|
|
45
|
+
return this[name];
|
|
46
|
+
};
|
|
47
|
+
set = function(v) {
|
|
48
|
+
this[name] = v;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
} else if (kind === 2) {
|
|
52
|
+
get = function() {
|
|
53
|
+
return desc.value;
|
|
54
|
+
};
|
|
55
|
+
} else {
|
|
56
|
+
if (kind === 1 || kind === 3) {
|
|
57
|
+
get = function() {
|
|
58
|
+
return desc.get.call(this);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (kind === 1 || kind === 4) {
|
|
62
|
+
set = function(v) {
|
|
63
|
+
desc.set.call(this, v);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
ctx.access = get && set ? {
|
|
68
|
+
get: get,
|
|
69
|
+
set: set
|
|
70
|
+
} : get ? {
|
|
71
|
+
get: get
|
|
72
|
+
} : {
|
|
73
|
+
set: set
|
|
74
|
+
};
|
|
75
|
+
try {
|
|
76
|
+
return dec(value, ctx);
|
|
77
|
+
} finally{
|
|
78
|
+
decoratorFinishedRef.v = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function assertNotFinished(decoratorFinishedRef, fnName) {
|
|
82
|
+
if (decoratorFinishedRef.v) {
|
|
83
|
+
throw new Error("attempted to call " + fnName + " after decoration was finished");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function assertCallable(fn, hint) {
|
|
87
|
+
if (typeof fn !== "function") {
|
|
88
|
+
throw new TypeError(hint + " must be a function");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function assertValidReturnValue(kind, value) {
|
|
92
|
+
var type = typeof value;
|
|
93
|
+
if (kind === 1) {
|
|
94
|
+
if (type !== "object" || value === null) {
|
|
95
|
+
throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
|
|
96
|
+
}
|
|
97
|
+
if (value.get !== undefined) {
|
|
98
|
+
assertCallable(value.get, "accessor.get");
|
|
99
|
+
}
|
|
100
|
+
if (value.set !== undefined) {
|
|
101
|
+
assertCallable(value.set, "accessor.set");
|
|
102
|
+
}
|
|
103
|
+
if (value.init !== undefined) {
|
|
104
|
+
assertCallable(value.init, "accessor.init");
|
|
105
|
+
}
|
|
106
|
+
} else if (type !== "function") {
|
|
107
|
+
var hint;
|
|
108
|
+
if (kind === 0) {
|
|
109
|
+
hint = "field";
|
|
110
|
+
} else if (kind === 10) {
|
|
111
|
+
hint = "class";
|
|
112
|
+
} else {
|
|
113
|
+
hint = "method";
|
|
114
|
+
}
|
|
115
|
+
throw new TypeError(hint + " decorators must return a function or void 0");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
|
|
119
|
+
var decs = decInfo[0];
|
|
120
|
+
var desc, init, value;
|
|
121
|
+
if (isPrivate) {
|
|
122
|
+
if (kind === 0 || kind === 1) {
|
|
123
|
+
desc = {
|
|
124
|
+
get: decInfo[3],
|
|
125
|
+
set: decInfo[4]
|
|
126
|
+
};
|
|
127
|
+
} else if (kind === 3) {
|
|
128
|
+
desc = {
|
|
129
|
+
get: decInfo[3]
|
|
130
|
+
};
|
|
131
|
+
} else if (kind === 4) {
|
|
132
|
+
desc = {
|
|
133
|
+
set: decInfo[3]
|
|
134
|
+
};
|
|
135
|
+
} else {
|
|
136
|
+
desc = {
|
|
137
|
+
value: decInfo[3]
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
} else if (kind !== 0) {
|
|
141
|
+
desc = Object.getOwnPropertyDescriptor(base, name);
|
|
142
|
+
}
|
|
143
|
+
if (kind === 1) {
|
|
144
|
+
value = {
|
|
145
|
+
get: desc.get,
|
|
146
|
+
set: desc.set
|
|
147
|
+
};
|
|
148
|
+
} else if (kind === 2) {
|
|
149
|
+
value = desc.value;
|
|
150
|
+
} else if (kind === 3) {
|
|
151
|
+
value = desc.get;
|
|
152
|
+
} else if (kind === 4) {
|
|
153
|
+
value = desc.set;
|
|
154
|
+
}
|
|
155
|
+
var newValue, get, set;
|
|
156
|
+
if (typeof decs === "function") {
|
|
157
|
+
newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
|
|
158
|
+
if (newValue !== void 0) {
|
|
159
|
+
assertValidReturnValue(kind, newValue);
|
|
160
|
+
if (kind === 0) {
|
|
161
|
+
init = newValue;
|
|
162
|
+
} else if (kind === 1) {
|
|
163
|
+
init = newValue.init;
|
|
164
|
+
get = newValue.get || value.get;
|
|
165
|
+
set = newValue.set || value.set;
|
|
166
|
+
value = {
|
|
167
|
+
get: get,
|
|
168
|
+
set: set
|
|
169
|
+
};
|
|
170
|
+
} else {
|
|
171
|
+
value = newValue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
for(var i = decs.length - 1; i >= 0; i--){
|
|
176
|
+
var dec = decs[i];
|
|
177
|
+
newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
|
|
178
|
+
if (newValue !== void 0) {
|
|
179
|
+
assertValidReturnValue(kind, newValue);
|
|
180
|
+
var newInit;
|
|
181
|
+
if (kind === 0) {
|
|
182
|
+
newInit = newValue;
|
|
183
|
+
} else if (kind === 1) {
|
|
184
|
+
newInit = newValue.init;
|
|
185
|
+
get = newValue.get || value.get;
|
|
186
|
+
set = newValue.set || value.set;
|
|
187
|
+
value = {
|
|
188
|
+
get: get,
|
|
189
|
+
set: set
|
|
190
|
+
};
|
|
191
|
+
} else {
|
|
192
|
+
value = newValue;
|
|
193
|
+
}
|
|
194
|
+
if (newInit !== void 0) {
|
|
195
|
+
if (init === void 0) {
|
|
196
|
+
init = newInit;
|
|
197
|
+
} else if (typeof init === "function") {
|
|
198
|
+
init = [
|
|
199
|
+
init,
|
|
200
|
+
newInit
|
|
201
|
+
];
|
|
202
|
+
} else {
|
|
203
|
+
init.push(newInit);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (kind === 0 || kind === 1) {
|
|
210
|
+
if (init === void 0) {
|
|
211
|
+
init = function(instance, init) {
|
|
212
|
+
return init;
|
|
213
|
+
};
|
|
214
|
+
} else if (typeof init !== "function") {
|
|
215
|
+
var ownInitializers = init;
|
|
216
|
+
init = function(instance, init) {
|
|
217
|
+
var value = init;
|
|
218
|
+
for(var i = 0; i < ownInitializers.length; i++){
|
|
219
|
+
value = ownInitializers[i].call(instance, value);
|
|
220
|
+
}
|
|
221
|
+
return value;
|
|
222
|
+
};
|
|
223
|
+
} else {
|
|
224
|
+
var originalInitializer = init;
|
|
225
|
+
init = function(instance, init) {
|
|
226
|
+
return originalInitializer.call(instance, init);
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
ret.push(init);
|
|
230
|
+
}
|
|
231
|
+
if (kind !== 0) {
|
|
232
|
+
if (kind === 1) {
|
|
233
|
+
desc.get = value.get;
|
|
234
|
+
desc.set = value.set;
|
|
235
|
+
} else if (kind === 2) {
|
|
236
|
+
desc.value = value;
|
|
237
|
+
} else if (kind === 3) {
|
|
238
|
+
desc.get = value;
|
|
239
|
+
} else if (kind === 4) {
|
|
240
|
+
desc.set = value;
|
|
241
|
+
}
|
|
242
|
+
if (isPrivate) {
|
|
243
|
+
if (kind === 1) {
|
|
244
|
+
ret.push(function(instance, args) {
|
|
245
|
+
return value.get.call(instance, args);
|
|
246
|
+
});
|
|
247
|
+
ret.push(function(instance, args) {
|
|
248
|
+
return value.set.call(instance, args);
|
|
249
|
+
});
|
|
250
|
+
} else if (kind === 2) {
|
|
251
|
+
ret.push(value);
|
|
252
|
+
} else {
|
|
253
|
+
ret.push(function(instance, args) {
|
|
254
|
+
return value.call(instance, args);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
Object.defineProperty(base, name, desc);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function applyMemberDecs(Class, decInfos, metadata) {
|
|
263
|
+
var ret = [];
|
|
264
|
+
var protoInitializers;
|
|
265
|
+
var staticInitializers;
|
|
266
|
+
var existingProtoNonFields = new Map();
|
|
267
|
+
var existingStaticNonFields = new Map();
|
|
268
|
+
for(var i = 0; i < decInfos.length; i++){
|
|
269
|
+
var decInfo = decInfos[i];
|
|
270
|
+
if (!Array.isArray(decInfo)) continue;
|
|
271
|
+
var kind = decInfo[1];
|
|
272
|
+
var name = decInfo[2];
|
|
273
|
+
var isPrivate = decInfo.length > 3;
|
|
274
|
+
var isStatic = kind >= 5;
|
|
275
|
+
var base;
|
|
276
|
+
var initializers;
|
|
277
|
+
if (isStatic) {
|
|
278
|
+
base = Class;
|
|
279
|
+
kind = kind - 5;
|
|
280
|
+
staticInitializers = staticInitializers || [];
|
|
281
|
+
initializers = staticInitializers;
|
|
282
|
+
} else {
|
|
283
|
+
base = Class.prototype;
|
|
284
|
+
protoInitializers = protoInitializers || [];
|
|
285
|
+
initializers = protoInitializers;
|
|
286
|
+
}
|
|
287
|
+
if (kind !== 0 && !isPrivate) {
|
|
288
|
+
var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
|
|
289
|
+
var existingKind = existingNonFields.get(name) || 0;
|
|
290
|
+
if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) {
|
|
291
|
+
throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + name);
|
|
292
|
+
} else if (!existingKind && kind > 2) {
|
|
293
|
+
existingNonFields.set(name, kind);
|
|
294
|
+
} else {
|
|
295
|
+
existingNonFields.set(name, true);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
|
|
299
|
+
}
|
|
300
|
+
pushInitializers(ret, protoInitializers);
|
|
301
|
+
pushInitializers(ret, staticInitializers);
|
|
302
|
+
return ret;
|
|
303
|
+
}
|
|
304
|
+
function pushInitializers(ret, initializers) {
|
|
305
|
+
if (initializers) {
|
|
306
|
+
ret.push(function(instance) {
|
|
307
|
+
for(var i = 0; i < initializers.length; i++){
|
|
308
|
+
initializers[i].call(instance);
|
|
309
|
+
}
|
|
310
|
+
return instance;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
function applyClassDecs(targetClass, classDecs, metadata) {
|
|
315
|
+
if (classDecs.length > 0) {
|
|
316
|
+
var initializers = [];
|
|
317
|
+
var newClass = targetClass;
|
|
318
|
+
var name = targetClass.name;
|
|
319
|
+
for(var i = classDecs.length - 1; i >= 0; i--){
|
|
320
|
+
var decoratorFinishedRef = {
|
|
321
|
+
v: false
|
|
322
|
+
};
|
|
323
|
+
try {
|
|
324
|
+
var nextNewClass = classDecs[i](newClass, {
|
|
325
|
+
kind: "class",
|
|
326
|
+
name: name,
|
|
327
|
+
addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef),
|
|
328
|
+
metadata
|
|
329
|
+
});
|
|
330
|
+
} finally{
|
|
331
|
+
decoratorFinishedRef.v = true;
|
|
332
|
+
}
|
|
333
|
+
if (nextNewClass !== undefined) {
|
|
334
|
+
assertValidReturnValue(10, nextNewClass);
|
|
335
|
+
newClass = nextNewClass;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return [
|
|
339
|
+
defineMetadata(newClass, metadata),
|
|
340
|
+
function() {
|
|
341
|
+
for(var i = 0; i < initializers.length; i++){
|
|
342
|
+
initializers[i].call(newClass);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
];
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function defineMetadata(Class, metadata) {
|
|
349
|
+
return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), {
|
|
350
|
+
configurable: true,
|
|
351
|
+
enumerable: true,
|
|
352
|
+
value: metadata
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return function applyDecs2203R(targetClass, memberDecs, classDecs, parentClass) {
|
|
356
|
+
if (parentClass !== void 0) {
|
|
357
|
+
var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
|
|
358
|
+
}
|
|
359
|
+
var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
|
|
360
|
+
var e = applyMemberDecs(targetClass, memberDecs, metadata);
|
|
361
|
+
if (!classDecs.length) defineMetadata(targetClass, metadata);
|
|
362
|
+
return {
|
|
363
|
+
e: e,
|
|
364
|
+
get c () {
|
|
365
|
+
return applyClassDecs(targetClass, classDecs, metadata);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
};
|
|
6
369
|
}
|
|
370
|
+
function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
371
|
+
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
|
+
}
|
|
373
|
+
var _dec, _dec1, _dec2, _initProto;
|
|
7
374
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT } from '@aztec/constants';
|
|
8
375
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
9
|
-
import { Fr } from '@aztec/foundation/
|
|
376
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
377
|
import { createLogger } from '@aztec/foundation/log';
|
|
11
378
|
import { sleep } from '@aztec/foundation/sleep';
|
|
12
|
-
import { DateProvider, Timer, elapsed,
|
|
379
|
+
import { DateProvider, Timer, elapsed, execWithSignal } from '@aztec/foundation/timer';
|
|
13
380
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
14
381
|
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
15
382
|
import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
16
|
-
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
383
|
+
import { AvmCircuitInputs, AvmExecutionHints, PublicDataWrite } from '@aztec/stdlib/avm';
|
|
17
384
|
import { computeTransactionFee } from '@aztec/stdlib/fees';
|
|
18
385
|
import { Gas } from '@aztec/stdlib/gas';
|
|
386
|
+
import { NullDebugLogStore } from '@aztec/stdlib/logs';
|
|
387
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
19
388
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
20
|
-
import { NestedProcessReturnValues,
|
|
389
|
+
import { NestedProcessReturnValues, makeProcessedTxFromPrivateOnlyTx, makeProcessedTxFromTxWithPublicCalls } from '@aztec/stdlib/tx';
|
|
21
390
|
import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
22
391
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
23
392
|
import { AssertionError } from 'assert';
|
|
@@ -29,32 +398,32 @@ import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
|
29
398
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
30
399
|
*/ export class PublicProcessorFactory {
|
|
31
400
|
contractDataSource;
|
|
401
|
+
avmSimulator;
|
|
32
402
|
dateProvider;
|
|
33
403
|
telemetryClient;
|
|
34
|
-
|
|
404
|
+
log;
|
|
405
|
+
constructor(contractDataSource, avmSimulator, dateProvider = new DateProvider(), telemetryClient = getTelemetryClient(), bindings){
|
|
35
406
|
this.contractDataSource = contractDataSource;
|
|
407
|
+
this.avmSimulator = avmSimulator;
|
|
36
408
|
this.dateProvider = dateProvider;
|
|
37
409
|
this.telemetryClient = telemetryClient;
|
|
410
|
+
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
38
411
|
}
|
|
39
412
|
/**
|
|
40
|
-
* Creates a new instance of a PublicProcessor.
|
|
413
|
+
* Creates a new instance of a PublicProcessor. The simulator it drives reads contract data from the fork's
|
|
414
|
+
* contracts DB, scoped by the fork id so AVM requests route to the right state.
|
|
415
|
+
*
|
|
41
416
|
* @param globalVariables - The global variables for the block being processed.
|
|
42
|
-
* @param
|
|
417
|
+
* @param contractsDB - Optional pre-populated contracts DB; a fresh one is constructed if omitted.
|
|
43
418
|
* @returns A new instance of a PublicProcessor.
|
|
44
|
-
*/ create(merkleTree, globalVariables, config) {
|
|
45
|
-
const
|
|
419
|
+
*/ create(merkleTree, globalVariables, config, contractsDB = new PublicContractsDB(this.contractDataSource, this.log.getBindings())) {
|
|
420
|
+
const forkId = merkleTree.getRevision().forkId;
|
|
46
421
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
47
|
-
const publicTxSimulator = this.createPublicTxSimulator(
|
|
48
|
-
|
|
49
|
-
doMerkleOperations: true,
|
|
50
|
-
skipFeeEnforcement: config.skipFeeEnforcement,
|
|
51
|
-
clientInitiatedSimulation: config.clientInitiatedSimulation,
|
|
52
|
-
maxDebugLogMemoryReads: config.maxDebugLogMemoryReads
|
|
53
|
-
});
|
|
54
|
-
return new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient);
|
|
422
|
+
const publicTxSimulator = this.createPublicTxSimulator(forkId, globalVariables, contractsDB, config);
|
|
423
|
+
return new PublicProcessor(globalVariables, guardedFork, contractsDB, publicTxSimulator, this.dateProvider, this.telemetryClient, createLogger('simulator:public-processor', this.log.getBindings()));
|
|
55
424
|
}
|
|
56
|
-
createPublicTxSimulator(
|
|
57
|
-
return new TelemetryPublicTxSimulator(
|
|
425
|
+
createPublicTxSimulator(forkId, globalVariables, contractsDB, config) {
|
|
426
|
+
return new TelemetryPublicTxSimulator(this.avmSimulator, globalVariables, contractsDB, forkId, this.telemetryClient, config, this.log.getBindings());
|
|
58
427
|
}
|
|
59
428
|
}
|
|
60
429
|
class PublicProcessorTimeoutError extends Error {
|
|
@@ -63,6 +432,19 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
63
432
|
this.name = 'PublicProcessorTimeoutError';
|
|
64
433
|
}
|
|
65
434
|
}
|
|
435
|
+
class PublicProcessorAbortError extends Error {
|
|
436
|
+
constructor(message = 'Aborted while processing tx'){
|
|
437
|
+
super(message);
|
|
438
|
+
this.name = 'PublicProcessorAbortError';
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
_dec = trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
442
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
443
|
+
})), _dec1 = trackSpan('PublicProcessor.processPrivateOnlyTx', (tx)=>({
|
|
444
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
445
|
+
})), _dec2 = trackSpan('PublicProcessor.processTxWithPublicCalls', (tx)=>({
|
|
446
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
447
|
+
}));
|
|
66
448
|
/**
|
|
67
449
|
* Converts Txs lifted from the P2P module into ProcessedTx objects by executing
|
|
68
450
|
* any public function calls in them. Txs with private calls only are unaffected.
|
|
@@ -74,8 +456,28 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
74
456
|
dateProvider;
|
|
75
457
|
log;
|
|
76
458
|
opts;
|
|
459
|
+
debugLogStore;
|
|
460
|
+
static{
|
|
461
|
+
({ e: [_initProto] } = _apply_decs_2203_r(this, [
|
|
462
|
+
[
|
|
463
|
+
_dec,
|
|
464
|
+
2,
|
|
465
|
+
"processTx"
|
|
466
|
+
],
|
|
467
|
+
[
|
|
468
|
+
_dec1,
|
|
469
|
+
2,
|
|
470
|
+
"processPrivateOnlyTx"
|
|
471
|
+
],
|
|
472
|
+
[
|
|
473
|
+
_dec2,
|
|
474
|
+
2,
|
|
475
|
+
"processTxWithPublicCalls"
|
|
476
|
+
]
|
|
477
|
+
], []));
|
|
478
|
+
}
|
|
77
479
|
metrics;
|
|
78
|
-
constructor(globalVariables, guardedMerkleTree, contractsDB, publicTxSimulator, dateProvider, telemetryClient = getTelemetryClient(), log =
|
|
480
|
+
constructor(globalVariables, guardedMerkleTree, contractsDB, publicTxSimulator, dateProvider, telemetryClient = getTelemetryClient(), log, opts = {}, debugLogStore = new NullDebugLogStore()){
|
|
79
481
|
this.globalVariables = globalVariables;
|
|
80
482
|
this.guardedMerkleTree = guardedMerkleTree;
|
|
81
483
|
this.contractsDB = contractsDB;
|
|
@@ -83,6 +485,8 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
83
485
|
this.dateProvider = dateProvider;
|
|
84
486
|
this.log = log;
|
|
85
487
|
this.opts = opts;
|
|
488
|
+
this.debugLogStore = debugLogStore;
|
|
489
|
+
_initProto(this);
|
|
86
490
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
87
491
|
}
|
|
88
492
|
get tracer() {
|
|
@@ -95,43 +499,52 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
95
499
|
* @param validator - Pre-process validator and nullifier cache to use for processing the txs.
|
|
96
500
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
97
501
|
*/ async process(txs, limits = {}, validator = {}) {
|
|
98
|
-
const { maxTransactions,
|
|
502
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal, signal } = limits;
|
|
99
503
|
const { preprocessValidator, nullifierCache } = validator;
|
|
100
504
|
const result = [];
|
|
101
505
|
const usedTxs = [];
|
|
102
506
|
const failed = [];
|
|
507
|
+
const debugLogs = [];
|
|
103
508
|
const timer = new Timer();
|
|
104
509
|
let totalSizeInBytes = 0;
|
|
105
510
|
let returns = [];
|
|
106
511
|
let totalPublicGas = new Gas(0, 0);
|
|
107
512
|
let totalBlockGas = new Gas(0, 0);
|
|
108
513
|
let totalBlobFields = 0;
|
|
109
|
-
|
|
514
|
+
let silentlySkippedCount = 0;
|
|
515
|
+
let totalSilentlySkippedDurationMs = 0;
|
|
516
|
+
for await (const tx of txs){
|
|
110
517
|
// Only process up to the max tx limit
|
|
111
518
|
if (maxTransactions !== undefined && result.length >= maxTransactions) {
|
|
112
519
|
this.log.debug(`Stopping tx processing due to reaching the max tx limit.`);
|
|
113
520
|
break;
|
|
114
521
|
}
|
|
115
|
-
// Bail if we've hit the deadline
|
|
522
|
+
// Bail if we've hit the deadline or have been interrupted.
|
|
116
523
|
if (deadline && this.dateProvider.now() > +deadline) {
|
|
117
524
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
118
525
|
break;
|
|
119
526
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
527
|
+
if (signal?.aborted) {
|
|
528
|
+
this.log.warn(`Stopping tx processing due to abort signal.`);
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
const txHash = tx.getTxHash().toString();
|
|
532
|
+
// Skip this tx if its estimated blob fields would exceed the limit.
|
|
533
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
534
|
+
const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
|
|
535
|
+
if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
536
|
+
this.log.warn(`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`, {
|
|
125
537
|
txHash,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
538
|
+
txBlobFields,
|
|
539
|
+
totalBlobFields,
|
|
540
|
+
maxBlobFields
|
|
129
541
|
});
|
|
130
542
|
continue;
|
|
131
543
|
}
|
|
132
|
-
// Skip this tx if its gas limit would exceed the block gas limit
|
|
133
|
-
|
|
134
|
-
|
|
544
|
+
// Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
|
|
545
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
546
|
+
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
547
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
135
548
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
136
549
|
txHash,
|
|
137
550
|
txGasLimit,
|
|
@@ -140,8 +553,6 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
140
553
|
});
|
|
141
554
|
continue;
|
|
142
555
|
}
|
|
143
|
-
// The processor modifies the tx objects in place, so we need to clone them.
|
|
144
|
-
const tx = Tx.clone(origTx);
|
|
145
556
|
// We validate the tx before processing it, to avoid unnecessary work.
|
|
146
557
|
if (preprocessValidator) {
|
|
147
558
|
const result = await preprocessValidator.validateTx(tx);
|
|
@@ -155,11 +566,6 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
155
566
|
});
|
|
156
567
|
returns.push(new NestedProcessReturnValues([]));
|
|
157
568
|
continue;
|
|
158
|
-
} else if (result.result === 'skipped') {
|
|
159
|
-
const reason = result.reason.join(', ');
|
|
160
|
-
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
161
|
-
returns.push(new NestedProcessReturnValues([]));
|
|
162
|
-
continue;
|
|
163
569
|
} else {
|
|
164
570
|
this.log.trace(`Tx ${txHash.toString()} is valid before processing.`);
|
|
165
571
|
}
|
|
@@ -171,67 +577,90 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
171
577
|
// Note: We use the underlying fork here not the guarded one, this ensures that it's not impacted by stopping the guarded version
|
|
172
578
|
const checkpoint = await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork());
|
|
173
579
|
const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
580
|
+
this.contractsDB.createCheckpoint();
|
|
174
581
|
try {
|
|
175
|
-
const [processedTx, returnValues] = await this.processTx(tx, deadline);
|
|
176
|
-
//
|
|
177
|
-
const
|
|
178
|
-
if (
|
|
179
|
-
|
|
180
|
-
txHash,
|
|
181
|
-
sizeInBytes: txSize,
|
|
182
|
-
totalSizeInBytes,
|
|
183
|
-
maxBlockSize
|
|
184
|
-
});
|
|
185
|
-
// Need to revert the checkpoint here and don't go any further
|
|
186
|
-
await checkpoint.revert();
|
|
187
|
-
continue;
|
|
582
|
+
const [txProcessingTimeMs, [processedTx, returnValues, txDebugLogs]] = await elapsed(()=>this.processTx(tx, deadline, signal));
|
|
583
|
+
// Inject a fake processing failure after N txs if requested
|
|
584
|
+
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
585
|
+
if (fakeThrowAfter !== undefined && result.length + failed.length + 1 >= fakeThrowAfter) {
|
|
586
|
+
throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);
|
|
188
587
|
}
|
|
189
|
-
|
|
190
|
-
const
|
|
588
|
+
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
589
|
+
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
590
|
+
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
591
|
+
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
191
592
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
192
593
|
this.log.debug(`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`, {
|
|
193
594
|
txHash,
|
|
194
595
|
txBlobFields,
|
|
195
596
|
totalBlobFields,
|
|
196
|
-
maxBlobFields
|
|
597
|
+
maxBlobFields,
|
|
598
|
+
txProcessingTimeMs
|
|
197
599
|
});
|
|
600
|
+
silentlySkippedCount += 1;
|
|
601
|
+
totalSilentlySkippedDurationMs += txProcessingTimeMs;
|
|
602
|
+
this.metrics.recordSilentlySkipped(txProcessingTimeMs);
|
|
198
603
|
// Need to revert the checkpoint here and don't go any further
|
|
199
604
|
await checkpoint.revert();
|
|
605
|
+
this.contractsDB.revertCheckpoint();
|
|
200
606
|
continue;
|
|
201
607
|
}
|
|
608
|
+
// During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
|
|
609
|
+
// Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
|
|
610
|
+
// this uses actual gas and stops processing when the limit is exceeded.
|
|
611
|
+
if (!isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)) {
|
|
612
|
+
this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
|
|
613
|
+
txHash,
|
|
614
|
+
txGas: processedTx.gasUsed.totalGas,
|
|
615
|
+
totalBlockGas,
|
|
616
|
+
maxBlockGas
|
|
617
|
+
});
|
|
618
|
+
await checkpoint.revert();
|
|
619
|
+
this.contractsDB.revertCheckpoint();
|
|
620
|
+
break;
|
|
621
|
+
}
|
|
202
622
|
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
203
623
|
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
204
624
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map((n)=>n.toBuffer()));
|
|
205
625
|
result.push(processedTx);
|
|
206
626
|
usedTxs.push(tx);
|
|
207
627
|
returns = returns.concat(returnValues);
|
|
628
|
+
debugLogs.push(...txDebugLogs);
|
|
629
|
+
this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
|
|
208
630
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
209
631
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
210
632
|
totalSizeInBytes += txSize;
|
|
211
633
|
totalBlobFields += txBlobFields;
|
|
634
|
+
// Commit the tx-level contracts checkpoint on success
|
|
635
|
+
this.contractsDB.commitCheckpoint();
|
|
212
636
|
} catch (err) {
|
|
213
|
-
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
214
|
-
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
215
|
-
// We hit the transaction execution deadline.
|
|
216
|
-
// There may still be a
|
|
637
|
+
if (err?.name === 'PublicProcessorTimeoutError' || err?.name === 'PublicProcessorAbortError') {
|
|
638
|
+
this.log.warn(`Stopping tx processing due to ${err.name === 'PublicProcessorTimeoutError' ? 'timeout' : 'abort'}.`);
|
|
639
|
+
// We hit the transaction execution deadline or an external abort signal.
|
|
640
|
+
// There may still be a simulation in progress.
|
|
641
|
+
// Signal cancellation AND WAIT for the simulation to actually stop. Cancellation is
|
|
642
|
+
// cooperative: the simulator may be mid slow-operation and won't observe the flag until it
|
|
643
|
+
// completes, and without waiting we'd revert checkpoints while it's still writing to state.
|
|
644
|
+
await this.publicTxSimulator.cancel?.();
|
|
645
|
+
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
217
646
|
await this.guardedMerkleTree.stop();
|
|
218
647
|
// We now know there can't be any further access to world state. The fork is in a state where there is:
|
|
219
648
|
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
220
649
|
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
//
|
|
224
|
-
await checkpoint.
|
|
225
|
-
//
|
|
226
|
-
|
|
227
|
-
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
650
|
+
// Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
|
|
651
|
+
// updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
|
|
652
|
+
// created by callers below our depth.
|
|
653
|
+
await checkpoint.revertToCheckpoint();
|
|
654
|
+
// Revert any contracts added to the DB for the tx.
|
|
655
|
+
this.contractsDB.revertCheckpoint();
|
|
228
656
|
// Ensure we're at the same state as when we started processing this tx.
|
|
229
657
|
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
230
658
|
break;
|
|
231
659
|
}
|
|
232
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
233
|
-
|
|
234
|
-
await
|
|
660
|
+
// Roll back state to start of TX before proceeding to next TX.
|
|
661
|
+
// Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
|
|
662
|
+
await checkpoint.revertToCheckpoint();
|
|
663
|
+
this.contractsDB.revertCheckpoint();
|
|
235
664
|
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
236
665
|
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
237
666
|
failed.push({
|
|
@@ -244,25 +673,30 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
244
673
|
} finally{
|
|
245
674
|
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
246
675
|
await checkpoint.commit();
|
|
247
|
-
// The tx-level contracts cache should not live on to the next tx
|
|
248
|
-
this.contractsDB.clearContractsForTx();
|
|
249
676
|
}
|
|
250
677
|
}
|
|
251
678
|
const duration = timer.s();
|
|
252
679
|
const rate = duration > 0 ? totalPublicGas.l2Gas / duration : 0;
|
|
253
680
|
this.metrics.recordAllTxs(totalPublicGas, rate);
|
|
254
|
-
|
|
681
|
+
const silentlySkippedDurationMs = Math.round(totalSilentlySkippedDurationMs);
|
|
682
|
+
this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs ` + `(${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) ` + `in ${duration}s`, {
|
|
683
|
+
blockNumber: this.globalVariables.blockNumber,
|
|
684
|
+
successfulCount: result.length,
|
|
685
|
+
failedCount: failed.length,
|
|
255
686
|
duration,
|
|
256
687
|
rate,
|
|
257
688
|
totalPublicGas,
|
|
258
689
|
totalBlockGas,
|
|
259
|
-
totalSizeInBytes
|
|
690
|
+
totalSizeInBytes,
|
|
691
|
+
silentlySkippedCount,
|
|
692
|
+
silentlySkippedDurationMs
|
|
260
693
|
});
|
|
261
694
|
return [
|
|
262
695
|
result,
|
|
263
696
|
failed,
|
|
264
697
|
usedTxs,
|
|
265
|
-
returns
|
|
698
|
+
returns,
|
|
699
|
+
debugLogs
|
|
266
700
|
];
|
|
267
701
|
}
|
|
268
702
|
async checkWorldStateUnchanged(startStateReference, txHash, cause) {
|
|
@@ -278,8 +712,8 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
278
712
|
});
|
|
279
713
|
}
|
|
280
714
|
}
|
|
281
|
-
async processTx(tx, deadline) {
|
|
282
|
-
const [time, [processedTx, returnValues]] = await elapsed(()=>this.processTxWithinDeadline(tx, deadline));
|
|
715
|
+
async processTx(tx, deadline, signal) {
|
|
716
|
+
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(()=>this.processTxWithinDeadline(tx, deadline, signal));
|
|
283
717
|
this.log.verbose(!tx.hasPublicCalls() ? `Processed tx ${processedTx.hash} with no public calls in ${time}ms` : `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`, {
|
|
284
718
|
txHash: processedTx.hash,
|
|
285
719
|
txFee: processedTx.txEffect.transactionFee.toBigInt(),
|
|
@@ -297,7 +731,8 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
297
731
|
});
|
|
298
732
|
return [
|
|
299
733
|
processedTx,
|
|
300
|
-
returnValues ?? []
|
|
734
|
+
returnValues ?? [],
|
|
735
|
+
debugLogs
|
|
301
736
|
];
|
|
302
737
|
}
|
|
303
738
|
async doTreeInsertionsForPrivateOnlyTx(processedTx) {
|
|
@@ -319,7 +754,7 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
319
754
|
const treeInsertionEnd = process.hrtime.bigint();
|
|
320
755
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
321
756
|
}
|
|
322
|
-
/** Processes the given tx within deadline
|
|
757
|
+
/** Processes the given tx within deadline or until the signal is aborted. */ async processTxWithinDeadline(tx, deadline, signal) {
|
|
323
758
|
const innerProcessFn = tx.hasPublicCalls() ? ()=>this.processTxWithPublicCalls(tx) : ()=>this.processPrivateOnlyTx(tx);
|
|
324
759
|
// Fake a delay per tx if instructed (used for tests)
|
|
325
760
|
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
@@ -329,20 +764,31 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
329
764
|
await sleep(fakeDelayPerTxMs);
|
|
330
765
|
return result;
|
|
331
766
|
} : innerProcessFn;
|
|
332
|
-
|
|
767
|
+
const processingSignal = this.getProcessingSignal(tx, deadline, signal);
|
|
768
|
+
if (!processingSignal) {
|
|
333
769
|
return await processFn();
|
|
334
770
|
}
|
|
335
|
-
|
|
771
|
+
return await execWithSignal(()=>processFn(), processingSignal, (signal)=>signal.reason?.name === 'TimeoutError' ? new PublicProcessorTimeoutError() : new PublicProcessorAbortError());
|
|
772
|
+
}
|
|
773
|
+
getProcessingSignal(tx, deadline, signal) {
|
|
774
|
+
if (!deadline) {
|
|
775
|
+
return signal;
|
|
776
|
+
}
|
|
336
777
|
const timeout = +deadline - this.dateProvider.now();
|
|
337
778
|
if (timeout <= 0) {
|
|
338
779
|
throw new PublicProcessorTimeoutError();
|
|
339
780
|
}
|
|
781
|
+
const txHash = tx.getTxHash();
|
|
340
782
|
this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`, {
|
|
341
783
|
deadline: deadline.toISOString(),
|
|
342
784
|
now: new Date(this.dateProvider.now()).toISOString(),
|
|
343
785
|
txHash
|
|
344
786
|
});
|
|
345
|
-
|
|
787
|
+
const timeoutSignal = AbortSignal.timeout(timeout);
|
|
788
|
+
return signal ? AbortSignal.any([
|
|
789
|
+
signal,
|
|
790
|
+
timeoutSignal
|
|
791
|
+
]) : timeoutSignal;
|
|
346
792
|
}
|
|
347
793
|
/**
|
|
348
794
|
* Creates the public data write for paying the tx fee.
|
|
@@ -371,54 +817,42 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
371
817
|
this.metrics.recordClassPublication(...tx.getContractClassLogs().filter((log)=>ContractClassPublishedEvent.isContractClassPublishedEvent(log)).map((log)=>ContractClassPublishedEvent.fromLog(log)));
|
|
372
818
|
// Fee payment insertion has already been done. Do the rest.
|
|
373
819
|
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
374
|
-
|
|
375
|
-
// (add to tx-level cache and then commit to block-level cache)
|
|
376
|
-
await this.contractsDB.addNewContracts(tx);
|
|
377
|
-
this.contractsDB.commitContractsForTx();
|
|
820
|
+
this.contractsDB.addNewContracts(tx);
|
|
378
821
|
return [
|
|
379
822
|
processedTx,
|
|
380
|
-
undefined
|
|
823
|
+
undefined,
|
|
824
|
+
[]
|
|
381
825
|
];
|
|
382
826
|
}
|
|
383
827
|
async processTxWithPublicCalls(tx) {
|
|
384
828
|
const timer = new Timer();
|
|
385
|
-
const
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
throw new Error('Avm proving result was not generated.');
|
|
389
|
-
}
|
|
390
|
-
processedPhases.forEach((phase)=>{
|
|
391
|
-
if (phase.reverted) {
|
|
392
|
-
this.metrics.recordRevertedPhase(phase.phase);
|
|
393
|
-
} else {
|
|
394
|
-
this.metrics.recordPhaseDuration(phase.phase, phase.durationMs ?? 0);
|
|
395
|
-
}
|
|
396
|
-
});
|
|
829
|
+
const result = await this.publicTxSimulator.simulate(tx);
|
|
830
|
+
// TODO: use the callStackMetadata here to extract more data about public execution
|
|
831
|
+
const { hints, publicInputs, publicTxEffect, gasUsed, revertCode/*callStackMetadata*/ } = result;
|
|
397
832
|
const contractClassLogs = revertCode.isOK() ? tx.getContractClassLogs() : tx.getSplitContractClassLogs(false);
|
|
398
833
|
this.metrics.recordClassPublication(...contractClassLogs.filter((log)=>ContractClassPublishedEvent.isContractClassPublishedEvent(log)).map((log)=>ContractClassPublishedEvent.fromLog(log)));
|
|
399
|
-
|
|
834
|
+
// TODO(fcarreiro): remove phase count metric.
|
|
400
835
|
const durationMs = timer.ms();
|
|
401
|
-
this.metrics.recordTx(phaseCount, durationMs, gasUsed.publicGas);
|
|
402
|
-
|
|
403
|
-
const
|
|
836
|
+
this.metrics.recordTx(/*phaseCount=*/ 1, durationMs, gasUsed.publicGas);
|
|
837
|
+
// Extract the return values from the call stack metadata.
|
|
838
|
+
const appLogicReturnValues = result.getAppLogicReturnValues();
|
|
839
|
+
// Extract the revert reason from the call stack metadata.
|
|
840
|
+
const revertReason = result.findRevertReason();
|
|
841
|
+
// Create proving request if we have hints and public inputs.
|
|
842
|
+
const avmProvingRequest = hints && publicInputs ? PublicProcessor.generateProvingRequest(publicInputs, hints) : undefined;
|
|
843
|
+
const processedTx = makeProcessedTxFromTxWithPublicCalls(tx, this.globalVariables, avmProvingRequest, publicTxEffect, gasUsed, revertCode, revertReason);
|
|
404
844
|
return [
|
|
405
845
|
processedTx,
|
|
406
|
-
|
|
846
|
+
appLogicReturnValues,
|
|
847
|
+
result.logs ?? []
|
|
407
848
|
];
|
|
408
849
|
}
|
|
850
|
+
/**
|
|
851
|
+
* Generate the proving request for the AVM circuit.
|
|
852
|
+
*/ static generateProvingRequest(publicInputs, hints = AvmExecutionHints.empty()) {
|
|
853
|
+
return {
|
|
854
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
855
|
+
inputs: new AvmCircuitInputs(hints, publicInputs)
|
|
856
|
+
};
|
|
857
|
+
}
|
|
409
858
|
}
|
|
410
|
-
_ts_decorate([
|
|
411
|
-
trackSpan('PublicProcessor.processTx', (tx)=>({
|
|
412
|
-
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
413
|
-
}))
|
|
414
|
-
], PublicProcessor.prototype, "processTx", null);
|
|
415
|
-
_ts_decorate([
|
|
416
|
-
trackSpan('PublicProcessor.processPrivateOnlyTx', (tx)=>({
|
|
417
|
-
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
418
|
-
}))
|
|
419
|
-
], PublicProcessor.prototype, "processPrivateOnlyTx", null);
|
|
420
|
-
_ts_decorate([
|
|
421
|
-
trackSpan('PublicProcessor.processTxWithPublicCalls', (tx)=>({
|
|
422
|
-
[Attributes.TX_HASH]: tx.getTxHash().toString()
|
|
423
|
-
}))
|
|
424
|
-
], PublicProcessor.prototype, "processTxWithPublicCalls", null);
|