@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.0208eb9
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 +8 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -9
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -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 +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +65 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +10 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +32 -42
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +45 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +58 -55
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- 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 +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +37 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +33 -23
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +262 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +355 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
- package/dest/public/public_processor/public_processor.d.ts +28 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +576 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +132 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +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 +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +25 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +220 -207
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +56 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- 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 +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +21 -35
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
- package/src/private/acvm_wasm.ts +76 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +81 -48
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -10
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +22 -10
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/executor_metrics.ts +49 -23
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +228 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1721 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +141 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +257 -179
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +99 -322
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.js +0 -62
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- 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/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -1,25 +1,39 @@
|
|
|
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
|
-
import { Fr } from '@aztec/foundation/
|
|
4
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import {
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
6
|
+
import { DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer';
|
|
6
7
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
7
|
-
import {
|
|
8
|
+
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
8
9
|
import { computeFeePayerBalanceLeafSlot, computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
AvmCircuitInputs,
|
|
12
|
+
AvmCircuitPublicInputs,
|
|
13
|
+
AvmExecutionHints,
|
|
14
|
+
type AvmProvingRequest,
|
|
15
|
+
PublicDataWrite,
|
|
16
|
+
PublicSimulatorConfig,
|
|
17
|
+
} from '@aztec/stdlib/avm';
|
|
10
18
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
19
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
20
|
+
import { computeTransactionFee } from '@aztec/stdlib/fees';
|
|
12
21
|
import { Gas } from '@aztec/stdlib/gas';
|
|
13
|
-
import type {
|
|
22
|
+
import type {
|
|
23
|
+
MerkleTreeWriteOperations,
|
|
24
|
+
PublicProcessorLimits,
|
|
25
|
+
PublicProcessorValidator,
|
|
26
|
+
SequencerConfig,
|
|
27
|
+
} from '@aztec/stdlib/interfaces/server';
|
|
28
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
14
29
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
15
30
|
import {
|
|
16
31
|
type FailedTx,
|
|
17
32
|
GlobalVariables,
|
|
18
33
|
NestedProcessReturnValues,
|
|
19
34
|
type ProcessedTx,
|
|
35
|
+
StateReference,
|
|
20
36
|
Tx,
|
|
21
|
-
TxExecutionPhase,
|
|
22
|
-
type TxValidator,
|
|
23
37
|
makeProcessedTxFromPrivateOnlyTx,
|
|
24
38
|
makeProcessedTxFromTxWithPublicCalls,
|
|
25
39
|
} from '@aztec/stdlib/tx';
|
|
@@ -33,23 +47,33 @@ import {
|
|
|
33
47
|
} from '@aztec/telemetry-client';
|
|
34
48
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
35
49
|
|
|
36
|
-
import {
|
|
37
|
-
|
|
50
|
+
import { AssertionError } from 'assert';
|
|
51
|
+
|
|
52
|
+
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
53
|
+
import {
|
|
54
|
+
type PublicTxSimulatorConfig,
|
|
55
|
+
type PublicTxSimulatorInterface,
|
|
56
|
+
TelemetryCppPublicTxSimulator,
|
|
57
|
+
} from '../public_tx_simulator/index.js';
|
|
58
|
+
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
38
59
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
39
60
|
|
|
40
61
|
/**
|
|
41
62
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
42
63
|
*/
|
|
43
64
|
export class PublicProcessorFactory {
|
|
65
|
+
private log: Logger;
|
|
44
66
|
constructor(
|
|
45
67
|
private contractDataSource: ContractDataSource,
|
|
46
|
-
private dateProvider: DateProvider,
|
|
47
|
-
|
|
48
|
-
|
|
68
|
+
private dateProvider: DateProvider = new DateProvider(),
|
|
69
|
+
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
70
|
+
bindings?: LoggerBindings,
|
|
71
|
+
) {
|
|
72
|
+
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
73
|
+
}
|
|
49
74
|
|
|
50
75
|
/**
|
|
51
76
|
* Creates a new instance of a PublicProcessor.
|
|
52
|
-
* @param historicalHeader - The header of a block previous to the one in which the tx is included.
|
|
53
77
|
* @param globalVariables - The global variables for the block being processed.
|
|
54
78
|
* @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
|
|
55
79
|
* @returns A new instance of a PublicProcessor.
|
|
@@ -57,43 +81,38 @@ export class PublicProcessorFactory {
|
|
|
57
81
|
public create(
|
|
58
82
|
merkleTree: MerkleTreeWriteOperations,
|
|
59
83
|
globalVariables: GlobalVariables,
|
|
60
|
-
|
|
84
|
+
config: PublicSimulatorConfig,
|
|
61
85
|
): PublicProcessor {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/*doMerkleOperations=*/ true,
|
|
68
|
-
skipFeeEnforcement,
|
|
69
|
-
this.telemetryClient,
|
|
70
|
-
);
|
|
86
|
+
const bindings = this.log.getBindings();
|
|
87
|
+
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
88
|
+
|
|
89
|
+
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
90
|
+
const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
|
|
71
91
|
|
|
72
92
|
return new PublicProcessor(
|
|
73
|
-
merkleTree,
|
|
74
93
|
globalVariables,
|
|
75
|
-
|
|
94
|
+
guardedFork,
|
|
95
|
+
contractsDB,
|
|
76
96
|
publicTxSimulator,
|
|
77
97
|
this.dateProvider,
|
|
78
98
|
this.telemetryClient,
|
|
99
|
+
createLogger('simulator:public-processor', bindings),
|
|
79
100
|
);
|
|
80
101
|
}
|
|
81
102
|
|
|
82
103
|
protected createPublicTxSimulator(
|
|
83
|
-
|
|
84
|
-
|
|
104
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
105
|
+
contractsDB: PublicContractsDB,
|
|
85
106
|
globalVariables: GlobalVariables,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
db,
|
|
92
|
-
worldStateDB,
|
|
107
|
+
config?: Partial<PublicTxSimulatorConfig>,
|
|
108
|
+
): PublicTxSimulatorInterface {
|
|
109
|
+
return new TelemetryCppPublicTxSimulator(
|
|
110
|
+
merkleTree,
|
|
111
|
+
contractsDB,
|
|
93
112
|
globalVariables,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
113
|
+
this.telemetryClient,
|
|
114
|
+
config,
|
|
115
|
+
this.log.getBindings(),
|
|
97
116
|
);
|
|
98
117
|
}
|
|
99
118
|
}
|
|
@@ -111,14 +130,16 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
111
130
|
*/
|
|
112
131
|
export class PublicProcessor implements Traceable {
|
|
113
132
|
private metrics: PublicProcessorMetrics;
|
|
133
|
+
|
|
114
134
|
constructor(
|
|
115
|
-
protected db: MerkleTreeWriteOperations,
|
|
116
135
|
protected globalVariables: GlobalVariables,
|
|
117
|
-
|
|
118
|
-
protected
|
|
136
|
+
private guardedMerkleTree: GuardedMerkleTreeOperations,
|
|
137
|
+
protected contractsDB: PublicContractsDB,
|
|
138
|
+
protected publicTxSimulator: PublicTxSimulatorInterface,
|
|
119
139
|
private dateProvider: DateProvider,
|
|
120
140
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
121
|
-
private log
|
|
141
|
+
private log: Logger,
|
|
142
|
+
private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs' | 'fakeThrowAfterProcessingTxCount'> = {},
|
|
122
143
|
) {
|
|
123
144
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
124
145
|
}
|
|
@@ -130,26 +151,19 @@ export class PublicProcessor implements Traceable {
|
|
|
130
151
|
/**
|
|
131
152
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
132
153
|
* @param txs - Txs to process.
|
|
133
|
-
* @param
|
|
154
|
+
* @param limits - Limits for processing the txs.
|
|
155
|
+
* @param validator - Pre-process validator and nullifier cache to use for processing the txs.
|
|
134
156
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
135
157
|
*/
|
|
136
158
|
public async process(
|
|
137
159
|
txs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
138
|
-
limits: {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
} = {},
|
|
144
|
-
validators: {
|
|
145
|
-
preprocessValidator?: TxValidator<Tx>;
|
|
146
|
-
postprocessValidator?: TxValidator<ProcessedTx>;
|
|
147
|
-
nullifierCache?: { addNullifiers: (nullifiers: Buffer[]) => void };
|
|
148
|
-
} = {},
|
|
149
|
-
): Promise<[ProcessedTx[], FailedTx[], NestedProcessReturnValues[]]> {
|
|
150
|
-
const { maxTransactions, maxBlockSize, deadline, maxBlockGas } = limits;
|
|
151
|
-
const { preprocessValidator, postprocessValidator, nullifierCache } = validators;
|
|
160
|
+
limits: PublicProcessorLimits = {},
|
|
161
|
+
validator: PublicProcessorValidator = {},
|
|
162
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], number]> {
|
|
163
|
+
const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
|
|
164
|
+
const { preprocessValidator, nullifierCache } = validator;
|
|
152
165
|
const result: ProcessedTx[] = [];
|
|
166
|
+
const usedTxs: Tx[] = [];
|
|
153
167
|
const failed: FailedTx[] = [];
|
|
154
168
|
const timer = new Timer();
|
|
155
169
|
|
|
@@ -157,8 +171,9 @@ export class PublicProcessor implements Traceable {
|
|
|
157
171
|
let returns: NestedProcessReturnValues[] = [];
|
|
158
172
|
let totalPublicGas = new Gas(0, 0);
|
|
159
173
|
let totalBlockGas = new Gas(0, 0);
|
|
174
|
+
let totalBlobFields = 0;
|
|
160
175
|
|
|
161
|
-
for await (const
|
|
176
|
+
for await (const tx of txs) {
|
|
162
177
|
// Only process up to the max tx limit
|
|
163
178
|
if (maxTransactions !== undefined && result.length >= maxTransactions) {
|
|
164
179
|
this.log.debug(`Stopping tx processing due to reaching the max tx limit.`);
|
|
@@ -172,8 +187,8 @@ export class PublicProcessor implements Traceable {
|
|
|
172
187
|
}
|
|
173
188
|
|
|
174
189
|
// Skip this tx if it'd exceed max block size
|
|
175
|
-
const txHash =
|
|
176
|
-
const preTxSizeInBytes =
|
|
190
|
+
const txHash = tx.getTxHash().toString();
|
|
191
|
+
const preTxSizeInBytes = tx.getEstimatedPrivateTxEffectsSize();
|
|
177
192
|
if (maxBlockSize !== undefined && totalSizeInBytes + preTxSizeInBytes > maxBlockSize) {
|
|
178
193
|
this.log.warn(`Skipping processing of tx ${txHash} sized ${preTxSizeInBytes} bytes due to block size limit`, {
|
|
179
194
|
txHash,
|
|
@@ -185,7 +200,7 @@ export class PublicProcessor implements Traceable {
|
|
|
185
200
|
}
|
|
186
201
|
|
|
187
202
|
// Skip this tx if its gas limit would exceed the block gas limit
|
|
188
|
-
const txGasLimit =
|
|
203
|
+
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
189
204
|
if (maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
190
205
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
191
206
|
txHash,
|
|
@@ -196,22 +211,19 @@ export class PublicProcessor implements Traceable {
|
|
|
196
211
|
continue;
|
|
197
212
|
}
|
|
198
213
|
|
|
199
|
-
// The processor modifies the tx objects in place, so we need to clone them.
|
|
200
|
-
const tx = Tx.clone(origTx);
|
|
201
|
-
|
|
202
214
|
// We validate the tx before processing it, to avoid unnecessary work.
|
|
203
215
|
if (preprocessValidator) {
|
|
204
216
|
const result = await preprocessValidator.validateTx(tx);
|
|
205
|
-
const txHash =
|
|
217
|
+
const txHash = tx.getTxHash();
|
|
206
218
|
if (result.result === 'invalid') {
|
|
207
219
|
const reason = result.reason.join(', ');
|
|
208
|
-
this.log.
|
|
220
|
+
this.log.debug(`Rejecting tx ${txHash.toString()} due to pre-process validation fail: ${reason}`);
|
|
209
221
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
210
222
|
returns.push(new NestedProcessReturnValues([]));
|
|
211
223
|
continue;
|
|
212
224
|
} else if (result.result === 'skipped') {
|
|
213
225
|
const reason = result.reason.join(', ');
|
|
214
|
-
this.log.
|
|
226
|
+
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
215
227
|
returns.push(new NestedProcessReturnValues([]));
|
|
216
228
|
continue;
|
|
217
229
|
} else {
|
|
@@ -222,15 +234,27 @@ export class PublicProcessor implements Traceable {
|
|
|
222
234
|
// We checkpoint the transaction here, then within the try/catch we
|
|
223
235
|
// 1. Revert the checkpoint if the tx fails or needs to be discarded for any reason
|
|
224
236
|
// 2. Commit the transaction in the finally block. Note that by using the ForkCheckpoint lifecycle only the first commit/revert takes effect
|
|
225
|
-
|
|
237
|
+
// By doing this, every transaction starts on a fresh checkpoint and it's state updates only make it to the fork if this checkpoint is committed.
|
|
238
|
+
// Note: We use the underlying fork here not the guarded one, this ensures that it's not impacted by stopping the guarded version
|
|
239
|
+
const checkpoint = await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork());
|
|
240
|
+
const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
241
|
+
this.contractsDB.createCheckpoint();
|
|
226
242
|
|
|
227
243
|
try {
|
|
228
244
|
const [processedTx, returnValues] = await this.processTx(tx, deadline);
|
|
229
245
|
|
|
246
|
+
// Inject a fake processing failure after N txs if requested
|
|
247
|
+
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
248
|
+
if (fakeThrowAfter !== undefined && result.length + failed.length + 1 >= fakeThrowAfter) {
|
|
249
|
+
throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
253
|
+
|
|
230
254
|
// If the actual size of this tx would exceed block size, skip it
|
|
231
|
-
const txSize =
|
|
255
|
+
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
232
256
|
if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
|
|
233
|
-
this.log.
|
|
257
|
+
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
234
258
|
txHash,
|
|
235
259
|
sizeInBytes: txSize,
|
|
236
260
|
totalSizeInBytes,
|
|
@@ -238,63 +262,92 @@ export class PublicProcessor implements Traceable {
|
|
|
238
262
|
});
|
|
239
263
|
// Need to revert the checkpoint here and don't go any further
|
|
240
264
|
await checkpoint.revert();
|
|
265
|
+
this.contractsDB.revertCheckpoint();
|
|
241
266
|
continue;
|
|
242
267
|
}
|
|
243
268
|
|
|
244
|
-
//
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this.log.trace(`Tx ${txHash.toString()} is valid post processing.`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
if (!tx.hasPublicCalls()) {
|
|
265
|
-
// If there are no public calls, perform all tree insertions for side effects from private
|
|
266
|
-
// When there are public calls, the PublicTxSimulator & AVM handle tree insertions.
|
|
267
|
-
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
268
|
-
// Add any contracts registered/deployed in this private-only tx to the block-level cache
|
|
269
|
-
// (add to tx-level cache and then commit to block-level cache)
|
|
270
|
-
await this.worldStateDB.addNewContracts(tx);
|
|
271
|
-
this.worldStateDB.commitContractsForTx();
|
|
269
|
+
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
270
|
+
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
271
|
+
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
272
|
+
this.log.debug(
|
|
273
|
+
`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
|
|
274
|
+
{
|
|
275
|
+
txHash,
|
|
276
|
+
txBlobFields,
|
|
277
|
+
totalBlobFields,
|
|
278
|
+
maxBlobFields,
|
|
279
|
+
},
|
|
280
|
+
);
|
|
281
|
+
// Need to revert the checkpoint here and don't go any further
|
|
282
|
+
await checkpoint.revert();
|
|
283
|
+
this.contractsDB.revertCheckpoint();
|
|
284
|
+
continue;
|
|
272
285
|
}
|
|
273
286
|
|
|
287
|
+
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
288
|
+
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
274
289
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
275
290
|
result.push(processedTx);
|
|
291
|
+
usedTxs.push(tx);
|
|
276
292
|
returns = returns.concat(returnValues);
|
|
277
293
|
|
|
278
294
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
279
295
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
280
296
|
totalSizeInBytes += txSize;
|
|
297
|
+
totalBlobFields += txBlobFields;
|
|
281
298
|
} catch (err: any) {
|
|
282
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
283
|
-
await checkpoint.revert();
|
|
284
299
|
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
285
300
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
301
|
+
// We hit the transaction execution deadline.
|
|
302
|
+
// There may still be a transaction executing on a worker thread (C++ via NAPI).
|
|
303
|
+
// Signal cancellation AND WAIT for the simulation to actually stop.
|
|
304
|
+
// This is critical because C++ might be in the middle of a slow operation (e.g., pad_trees)
|
|
305
|
+
// and won't check the cancellation flag until that operation completes.
|
|
306
|
+
// Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
|
|
307
|
+
// Wait for C++ to stop gracefully.
|
|
308
|
+
await this.publicTxSimulator.cancel?.();
|
|
309
|
+
|
|
310
|
+
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
311
|
+
await this.guardedMerkleTree.stop();
|
|
312
|
+
|
|
313
|
+
// We now know there can't be any further access to world state. The fork is in a state where there is:
|
|
314
|
+
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
315
|
+
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
316
|
+
|
|
317
|
+
// First we revert a checkpoint as managed by the ForkCheckpoint. This will revert whatever is the current checkpoint
|
|
318
|
+
// which may not be the one originally created by this object. But that is ok, we do this to fulfil the ForkCheckpoint
|
|
319
|
+
// lifecycle expectations and ensure it doesn't attempt to commit later on.
|
|
320
|
+
await checkpoint.revert();
|
|
321
|
+
|
|
322
|
+
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
323
|
+
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
324
|
+
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
325
|
+
|
|
326
|
+
// Revert any contracts added to the DB for the tx.
|
|
327
|
+
this.contractsDB.revertCheckpoint();
|
|
328
|
+
|
|
329
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
330
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
331
|
+
|
|
332
|
+
// We should now be in a position where the fork is in a clean state and no further updates can be made to it.
|
|
286
333
|
break;
|
|
287
334
|
}
|
|
288
|
-
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
289
|
-
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
290
335
|
|
|
336
|
+
// Roll back state to start of TX before proceeding to next TX
|
|
337
|
+
await checkpoint.revert();
|
|
338
|
+
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
339
|
+
this.contractsDB.revertCheckpoint();
|
|
340
|
+
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
341
|
+
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
291
342
|
failed.push({ tx, error: err instanceof Error ? err : new Error(errorMessage) });
|
|
292
343
|
returns.push(new NestedProcessReturnValues([]));
|
|
344
|
+
|
|
345
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
346
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
293
347
|
} finally {
|
|
294
|
-
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was reverted
|
|
348
|
+
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
295
349
|
await checkpoint.commit();
|
|
296
|
-
|
|
297
|
-
this.worldStateDB.clearContractsForTx();
|
|
350
|
+
this.contractsDB.commitCheckpointOkIfNone();
|
|
298
351
|
}
|
|
299
352
|
}
|
|
300
353
|
|
|
@@ -310,17 +363,33 @@ export class PublicProcessor implements Traceable {
|
|
|
310
363
|
totalSizeInBytes,
|
|
311
364
|
});
|
|
312
365
|
|
|
313
|
-
return [result, failed, returns];
|
|
366
|
+
return [result, failed, usedTxs, returns, totalBlobFields];
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
private async checkWorldStateUnchanged(
|
|
370
|
+
startStateReference: StateReference,
|
|
371
|
+
txHash: `0x${string}`,
|
|
372
|
+
cause: Error,
|
|
373
|
+
): Promise<void> {
|
|
374
|
+
const endStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
375
|
+
if (!startStateReference.equals(endStateReference)) {
|
|
376
|
+
this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`, {
|
|
377
|
+
expected: startStateReference.toInspect(),
|
|
378
|
+
actual: endStateReference.toInspect(),
|
|
379
|
+
cause,
|
|
380
|
+
});
|
|
381
|
+
throw new Error(`Fork state reference changed by tx ${txHash} after error in public processor`, { cause });
|
|
382
|
+
}
|
|
314
383
|
}
|
|
315
384
|
|
|
316
|
-
@trackSpan('PublicProcessor.processTx',
|
|
317
|
-
private async processTx(tx: Tx, deadline
|
|
385
|
+
@trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
|
|
386
|
+
private async processTx(tx: Tx, deadline: Date | undefined): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
318
387
|
const [time, [processedTx, returnValues]] = await elapsed(() => this.processTxWithinDeadline(tx, deadline));
|
|
319
388
|
|
|
320
389
|
this.log.verbose(
|
|
321
390
|
!tx.hasPublicCalls()
|
|
322
391
|
? `Processed tx ${processedTx.hash} with no public calls in ${time}ms`
|
|
323
|
-
: `Processed tx ${processedTx.hash} with ${tx.
|
|
392
|
+
: `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`,
|
|
324
393
|
{
|
|
325
394
|
txHash: processedTx.hash,
|
|
326
395
|
txFee: processedTx.txEffect.transactionFee.toBigInt(),
|
|
@@ -341,10 +410,7 @@ export class PublicProcessor implements Traceable {
|
|
|
341
410
|
return [processedTx, returnValues ?? []];
|
|
342
411
|
}
|
|
343
412
|
|
|
344
|
-
private async doTreeInsertionsForPrivateOnlyTx(
|
|
345
|
-
processedTx: ProcessedTx,
|
|
346
|
-
txValidator?: TxValidator<ProcessedTx>,
|
|
347
|
-
): Promise<void> {
|
|
413
|
+
private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
|
|
348
414
|
const treeInsertionStart = process.hrtime.bigint();
|
|
349
415
|
|
|
350
416
|
// Update the state so that the next tx in the loop has the correct .startState
|
|
@@ -353,31 +419,20 @@ export class PublicProcessor implements Traceable {
|
|
|
353
419
|
// b) always had a txHandler with the same db passed to it as this.db, which updated the db in buildBaseRollupHints in this loop
|
|
354
420
|
// To see how this ^ happens, move back to one shared db in test_context and run orchestrator_multi_public_functions.test.ts
|
|
355
421
|
// The below is taken from buildBaseRollupHints:
|
|
356
|
-
await this.
|
|
422
|
+
await this.guardedMerkleTree.appendLeaves(
|
|
357
423
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
358
424
|
padArrayEnd(processedTx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
359
425
|
);
|
|
360
426
|
try {
|
|
361
|
-
await this.
|
|
427
|
+
await this.guardedMerkleTree.batchInsert(
|
|
362
428
|
MerkleTreeId.NULLIFIER_TREE,
|
|
363
429
|
padArrayEnd(processedTx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(n => n.toBuffer()),
|
|
364
430
|
NULLIFIER_SUBTREE_HEIGHT,
|
|
365
431
|
);
|
|
366
|
-
} catch (
|
|
367
|
-
|
|
368
|
-
// Ideally the validator has already caught this above, but just in case:
|
|
369
|
-
throw new Error(`Transaction ${processedTx.hash} invalid after processing public functions`);
|
|
370
|
-
} else {
|
|
371
|
-
// We have no validator and assume this call should blindly process txs with duplicates being caught later
|
|
372
|
-
this.log.warn(`Detected duplicate nullifier after public processing for: ${processedTx.hash}.`);
|
|
373
|
-
}
|
|
432
|
+
} catch (cause) {
|
|
433
|
+
throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`, { cause });
|
|
374
434
|
}
|
|
375
435
|
|
|
376
|
-
// The only public data write should be for fee payment
|
|
377
|
-
await this.db.sequentialInsert(
|
|
378
|
-
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
379
|
-
processedTx.txEffect.publicDataWrites.map(x => x.toBuffer()),
|
|
380
|
-
);
|
|
381
436
|
const treeInsertionEnd = process.hrtime.bigint();
|
|
382
437
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
383
438
|
}
|
|
@@ -385,17 +440,29 @@ export class PublicProcessor implements Traceable {
|
|
|
385
440
|
/** Processes the given tx within deadline. Returns timeout if deadline is hit. */
|
|
386
441
|
private async processTxWithinDeadline(
|
|
387
442
|
tx: Tx,
|
|
388
|
-
deadline
|
|
443
|
+
deadline: Date | undefined,
|
|
389
444
|
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
|
|
390
|
-
const
|
|
445
|
+
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
|
|
391
446
|
? () => this.processTxWithPublicCalls(tx)
|
|
392
447
|
: () => this.processPrivateOnlyTx(tx);
|
|
393
448
|
|
|
449
|
+
// Fake a delay per tx if instructed (used for tests)
|
|
450
|
+
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
451
|
+
const processFn =
|
|
452
|
+
fakeDelayPerTxMs && fakeDelayPerTxMs > 0
|
|
453
|
+
? async () => {
|
|
454
|
+
const result = await innerProcessFn();
|
|
455
|
+
this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`);
|
|
456
|
+
await sleep(fakeDelayPerTxMs);
|
|
457
|
+
return result;
|
|
458
|
+
}
|
|
459
|
+
: innerProcessFn;
|
|
460
|
+
|
|
394
461
|
if (!deadline) {
|
|
395
462
|
return await processFn();
|
|
396
463
|
}
|
|
397
464
|
|
|
398
|
-
const txHash =
|
|
465
|
+
const txHash = tx.getTxHash();
|
|
399
466
|
const timeout = +deadline - this.dateProvider.now();
|
|
400
467
|
if (timeout <= 0) {
|
|
401
468
|
throw new PublicProcessorTimeoutError();
|
|
@@ -419,14 +486,16 @@ export class PublicProcessor implements Traceable {
|
|
|
419
486
|
* This is used in private only txs, since for txs with public calls
|
|
420
487
|
* the avm handles the fee payment itself.
|
|
421
488
|
*/
|
|
422
|
-
private async
|
|
489
|
+
private async performFeePaymentPublicDataWrite(txFee: Fr, feePayer: AztecAddress): Promise<PublicDataWrite> {
|
|
423
490
|
const feeJuiceAddress = ProtocolContractAddress.FeeJuice;
|
|
424
491
|
const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
|
|
425
492
|
const leafSlot = await computeFeePayerBalanceLeafSlot(feePayer);
|
|
493
|
+
// This high-level db is used as a convenient helper. It could be done with the merkleTree directly.
|
|
494
|
+
const treesDB = new PublicTreesDB(this.guardedMerkleTree);
|
|
426
495
|
|
|
427
496
|
this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);
|
|
428
497
|
|
|
429
|
-
const balance = await
|
|
498
|
+
const balance = await treesDB.storageRead(feeJuiceAddress, balanceSlot);
|
|
430
499
|
|
|
431
500
|
if (balance.lt(txFee)) {
|
|
432
501
|
throw new Error(
|
|
@@ -435,87 +504,96 @@ export class PublicProcessor implements Traceable {
|
|
|
435
504
|
}
|
|
436
505
|
|
|
437
506
|
const updatedBalance = balance.sub(txFee);
|
|
438
|
-
await
|
|
507
|
+
await treesDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
|
|
439
508
|
|
|
440
509
|
return new PublicDataWrite(leafSlot, updatedBalance);
|
|
441
510
|
}
|
|
442
511
|
|
|
443
|
-
@trackSpan('PublicProcessor.processPrivateOnlyTx',
|
|
444
|
-
[Attributes.TX_HASH]:
|
|
512
|
+
@trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
|
|
513
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
445
514
|
}))
|
|
446
515
|
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
|
|
447
516
|
const gasFees = this.globalVariables.gasFees;
|
|
448
|
-
const transactionFee = tx.data.gasUsed
|
|
517
|
+
const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
|
|
449
518
|
|
|
450
|
-
const feePaymentPublicDataWrite = await this.
|
|
519
|
+
const feePaymentPublicDataWrite = await this.performFeePaymentPublicDataWrite(transactionFee, tx.data.feePayer);
|
|
451
520
|
|
|
452
|
-
const processedTx =
|
|
521
|
+
const processedTx = makeProcessedTxFromPrivateOnlyTx(
|
|
453
522
|
tx,
|
|
454
523
|
transactionFee,
|
|
455
524
|
feePaymentPublicDataWrite,
|
|
456
525
|
this.globalVariables,
|
|
457
526
|
);
|
|
458
527
|
|
|
459
|
-
|
|
460
|
-
tx
|
|
461
|
-
|
|
528
|
+
this.metrics.recordClassPublication(
|
|
529
|
+
...tx
|
|
530
|
+
.getContractClassLogs()
|
|
531
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
532
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
462
533
|
);
|
|
463
534
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
535
|
+
// Fee payment insertion has already been done. Do the rest.
|
|
536
|
+
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
537
|
+
|
|
538
|
+
await this.contractsDB.addNewContracts(tx);
|
|
539
|
+
|
|
469
540
|
return [processedTx, undefined];
|
|
470
541
|
}
|
|
471
542
|
|
|
472
|
-
@trackSpan('PublicProcessor.processTxWithPublicCalls',
|
|
473
|
-
[Attributes.TX_HASH]:
|
|
543
|
+
@trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
|
|
544
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
474
545
|
}))
|
|
475
546
|
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
476
547
|
const timer = new Timer();
|
|
477
548
|
|
|
478
|
-
const
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
} else {
|
|
490
|
-
this.metrics.recordPhaseDuration(phase.phase, phase.durationMs);
|
|
491
|
-
}
|
|
492
|
-
});
|
|
493
|
-
|
|
494
|
-
const siloedContractClassLogs = await tx.filterContractClassLogs(
|
|
495
|
-
tx.data.getNonEmptyContractClassLogsHashes(),
|
|
496
|
-
true,
|
|
497
|
-
);
|
|
498
|
-
|
|
499
|
-
this.metrics.recordClassRegistration(
|
|
500
|
-
...siloedContractClassLogs
|
|
501
|
-
.filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
|
|
502
|
-
.map(log => ContractClassRegisteredEvent.fromLog(log)),
|
|
549
|
+
const result = await this.publicTxSimulator.simulate(tx);
|
|
550
|
+
// TODO: use the callStackMetadata here to extract more data about public execution
|
|
551
|
+
const { hints, publicInputs, publicTxEffect, gasUsed, revertCode /*callStackMetadata*/ } = result;
|
|
552
|
+
|
|
553
|
+
const contractClassLogs = revertCode.isOK()
|
|
554
|
+
? tx.getContractClassLogs()
|
|
555
|
+
: tx.getSplitContractClassLogs(false /* revertible */);
|
|
556
|
+
this.metrics.recordClassPublication(
|
|
557
|
+
...contractClassLogs
|
|
558
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
559
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
503
560
|
);
|
|
504
561
|
|
|
505
|
-
|
|
562
|
+
// TODO(fcarreiro): remove phase count metric.
|
|
506
563
|
const durationMs = timer.ms();
|
|
507
|
-
this.metrics.recordTx(phaseCount, durationMs, gasUsed.publicGas);
|
|
564
|
+
this.metrics.recordTx(/*phaseCount=*/ 1, durationMs, gasUsed.publicGas);
|
|
565
|
+
|
|
566
|
+
// Extract the return values from the call stack metadata.
|
|
567
|
+
const appLogicReturnValues: NestedProcessReturnValues[] = result.getAppLogicReturnValues();
|
|
568
|
+
// Extract the revert reason from the call stack metadata.
|
|
569
|
+
const revertReason = result.findRevertReason();
|
|
570
|
+
// Create proving request if we have hints and public inputs.
|
|
571
|
+
const avmProvingRequest =
|
|
572
|
+
hints && publicInputs ? PublicProcessor.generateProvingRequest(publicInputs, hints) : undefined;
|
|
508
573
|
|
|
509
|
-
const processedTx =
|
|
574
|
+
const processedTx = makeProcessedTxFromTxWithPublicCalls(
|
|
510
575
|
tx,
|
|
576
|
+
this.globalVariables,
|
|
511
577
|
avmProvingRequest,
|
|
578
|
+
publicTxEffect,
|
|
512
579
|
gasUsed,
|
|
513
580
|
revertCode,
|
|
514
581
|
revertReason,
|
|
515
582
|
);
|
|
516
583
|
|
|
517
|
-
|
|
584
|
+
return [processedTx, appLogicReturnValues];
|
|
585
|
+
}
|
|
518
586
|
|
|
519
|
-
|
|
587
|
+
/**
|
|
588
|
+
* Generate the proving request for the AVM circuit.
|
|
589
|
+
*/
|
|
590
|
+
private static generateProvingRequest(
|
|
591
|
+
publicInputs: AvmCircuitPublicInputs,
|
|
592
|
+
hints: AvmExecutionHints = AvmExecutionHints.empty(),
|
|
593
|
+
): AvmProvingRequest {
|
|
594
|
+
return {
|
|
595
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
596
|
+
inputs: new AvmCircuitInputs(hints, publicInputs),
|
|
597
|
+
};
|
|
520
598
|
}
|
|
521
599
|
}
|