@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.001888fc
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 +12 -4
- 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 +29 -37
- 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/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
- 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 +18 -19
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +61 -59
- 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 +81 -77
- package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +71 -36
- 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 +56 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
- 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 +356 -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 +30 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +602 -153
- 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 +131 -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 +61 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +329 -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 +38 -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 +27 -39
- 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/account_proof.json +553 -0
- package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
- 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 +84 -52
- 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 +90 -81
- package/src/public/avm/serialization/instruction_serialization.ts +76 -35
- 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 +1717 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +269 -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 +142 -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 +609 -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 +294 -205
- 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 +210 -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 +44 -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 +421 -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,40 @@
|
|
|
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 { type DebugLog, type DebugLogStore, NullDebugLogStore } from '@aztec/stdlib/logs';
|
|
29
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
14
30
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
15
31
|
import {
|
|
16
32
|
type FailedTx,
|
|
17
33
|
GlobalVariables,
|
|
18
34
|
NestedProcessReturnValues,
|
|
19
35
|
type ProcessedTx,
|
|
36
|
+
StateReference,
|
|
20
37
|
Tx,
|
|
21
|
-
TxExecutionPhase,
|
|
22
|
-
type TxValidator,
|
|
23
38
|
makeProcessedTxFromPrivateOnlyTx,
|
|
24
39
|
makeProcessedTxFromTxWithPublicCalls,
|
|
25
40
|
} from '@aztec/stdlib/tx';
|
|
@@ -33,23 +48,33 @@ import {
|
|
|
33
48
|
} from '@aztec/telemetry-client';
|
|
34
49
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
35
50
|
|
|
36
|
-
import {
|
|
37
|
-
|
|
51
|
+
import { AssertionError } from 'assert';
|
|
52
|
+
|
|
53
|
+
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
54
|
+
import {
|
|
55
|
+
type PublicTxSimulatorConfig,
|
|
56
|
+
type PublicTxSimulatorInterface,
|
|
57
|
+
TelemetryCppPublicTxSimulator,
|
|
58
|
+
} from '../public_tx_simulator/index.js';
|
|
59
|
+
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
38
60
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
39
61
|
|
|
40
62
|
/**
|
|
41
63
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
42
64
|
*/
|
|
43
65
|
export class PublicProcessorFactory {
|
|
66
|
+
private log: Logger;
|
|
44
67
|
constructor(
|
|
45
68
|
private contractDataSource: ContractDataSource,
|
|
46
|
-
private dateProvider: DateProvider,
|
|
47
|
-
|
|
48
|
-
|
|
69
|
+
private dateProvider: DateProvider = new DateProvider(),
|
|
70
|
+
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
71
|
+
bindings?: LoggerBindings,
|
|
72
|
+
) {
|
|
73
|
+
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
74
|
+
}
|
|
49
75
|
|
|
50
76
|
/**
|
|
51
77
|
* 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
78
|
* @param globalVariables - The global variables for the block being processed.
|
|
54
79
|
* @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
|
|
55
80
|
* @returns A new instance of a PublicProcessor.
|
|
@@ -57,43 +82,38 @@ export class PublicProcessorFactory {
|
|
|
57
82
|
public create(
|
|
58
83
|
merkleTree: MerkleTreeWriteOperations,
|
|
59
84
|
globalVariables: GlobalVariables,
|
|
60
|
-
|
|
85
|
+
config: PublicSimulatorConfig,
|
|
61
86
|
): PublicProcessor {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/*doMerkleOperations=*/ true,
|
|
68
|
-
skipFeeEnforcement,
|
|
69
|
-
this.telemetryClient,
|
|
70
|
-
);
|
|
87
|
+
const bindings = this.log.getBindings();
|
|
88
|
+
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
89
|
+
|
|
90
|
+
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
91
|
+
const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
|
|
71
92
|
|
|
72
93
|
return new PublicProcessor(
|
|
73
|
-
merkleTree,
|
|
74
94
|
globalVariables,
|
|
75
|
-
|
|
95
|
+
guardedFork,
|
|
96
|
+
contractsDB,
|
|
76
97
|
publicTxSimulator,
|
|
77
98
|
this.dateProvider,
|
|
78
99
|
this.telemetryClient,
|
|
100
|
+
createLogger('simulator:public-processor', bindings),
|
|
79
101
|
);
|
|
80
102
|
}
|
|
81
103
|
|
|
82
104
|
protected createPublicTxSimulator(
|
|
83
|
-
|
|
84
|
-
|
|
105
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
106
|
+
contractsDB: PublicContractsDB,
|
|
85
107
|
globalVariables: GlobalVariables,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
db,
|
|
92
|
-
worldStateDB,
|
|
108
|
+
config?: Partial<PublicTxSimulatorConfig>,
|
|
109
|
+
): PublicTxSimulatorInterface {
|
|
110
|
+
return new TelemetryCppPublicTxSimulator(
|
|
111
|
+
merkleTree,
|
|
112
|
+
contractsDB,
|
|
93
113
|
globalVariables,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
114
|
+
this.telemetryClient,
|
|
115
|
+
config,
|
|
116
|
+
this.log.getBindings(),
|
|
97
117
|
);
|
|
98
118
|
}
|
|
99
119
|
}
|
|
@@ -112,13 +132,15 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
112
132
|
export class PublicProcessor implements Traceable {
|
|
113
133
|
private metrics: PublicProcessorMetrics;
|
|
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'> = {},
|
|
143
|
+
private debugLogStore: DebugLogStore = new NullDebugLogStore(),
|
|
122
144
|
) {
|
|
123
145
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
124
146
|
}
|
|
@@ -130,35 +152,30 @@ export class PublicProcessor implements Traceable {
|
|
|
130
152
|
/**
|
|
131
153
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
132
154
|
* @param txs - Txs to process.
|
|
133
|
-
* @param
|
|
155
|
+
* @param limits - Limits for processing the txs.
|
|
156
|
+
* @param validator - Pre-process validator and nullifier cache to use for processing the txs.
|
|
134
157
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
135
158
|
*/
|
|
136
159
|
public async process(
|
|
137
160
|
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;
|
|
161
|
+
limits: PublicProcessorLimits = {},
|
|
162
|
+
validator: PublicProcessorValidator = {},
|
|
163
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], DebugLog[]]> {
|
|
164
|
+
const { maxTransactions, deadline, maxBlockGas, maxBlobFields, isBuildingProposal } = limits;
|
|
165
|
+
const { preprocessValidator, nullifierCache } = validator;
|
|
152
166
|
const result: ProcessedTx[] = [];
|
|
167
|
+
const usedTxs: Tx[] = [];
|
|
153
168
|
const failed: FailedTx[] = [];
|
|
169
|
+
const debugLogs: DebugLog[] = [];
|
|
154
170
|
const timer = new Timer();
|
|
155
171
|
|
|
156
172
|
let totalSizeInBytes = 0;
|
|
157
173
|
let returns: NestedProcessReturnValues[] = [];
|
|
158
174
|
let totalPublicGas = new Gas(0, 0);
|
|
159
175
|
let totalBlockGas = new Gas(0, 0);
|
|
176
|
+
let totalBlobFields = 0;
|
|
160
177
|
|
|
161
|
-
for await (const
|
|
178
|
+
for await (const tx of txs) {
|
|
162
179
|
// Only process up to the max tx limit
|
|
163
180
|
if (maxTransactions !== undefined && result.length >= maxTransactions) {
|
|
164
181
|
this.log.debug(`Stopping tx processing due to reaching the max tx limit.`);
|
|
@@ -171,22 +188,23 @@ export class PublicProcessor implements Traceable {
|
|
|
171
188
|
break;
|
|
172
189
|
}
|
|
173
190
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
191
|
+
const txHash = tx.getTxHash().toString();
|
|
192
|
+
|
|
193
|
+
// Skip this tx if its estimated blob fields would exceed the limit.
|
|
194
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
195
|
+
const txBlobFields = tx.getPrivateTxEffectsSizeInFields();
|
|
196
|
+
if (isBuildingProposal && maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
197
|
+
this.log.warn(
|
|
198
|
+
`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,
|
|
199
|
+
{ txHash, txBlobFields, totalBlobFields, maxBlobFields },
|
|
200
|
+
);
|
|
184
201
|
continue;
|
|
185
202
|
}
|
|
186
203
|
|
|
187
|
-
// Skip this tx if its gas limit would exceed the block gas limit
|
|
188
|
-
|
|
189
|
-
|
|
204
|
+
// Skip this tx if its gas limit would exceed the block gas limit (either da or l2).
|
|
205
|
+
// Only done during proposal building: during re-execution we must process the exact txs from the proposal.
|
|
206
|
+
const txGasLimit = tx.data.constants.txContext.gasSettings.gasLimits;
|
|
207
|
+
if (isBuildingProposal && maxBlockGas !== undefined && totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)) {
|
|
190
208
|
this.log.warn(`Skipping processing of tx ${txHash} due to block gas limit`, {
|
|
191
209
|
txHash,
|
|
192
210
|
txGasLimit,
|
|
@@ -196,22 +214,19 @@ export class PublicProcessor implements Traceable {
|
|
|
196
214
|
continue;
|
|
197
215
|
}
|
|
198
216
|
|
|
199
|
-
// The processor modifies the tx objects in place, so we need to clone them.
|
|
200
|
-
const tx = Tx.clone(origTx);
|
|
201
|
-
|
|
202
217
|
// We validate the tx before processing it, to avoid unnecessary work.
|
|
203
218
|
if (preprocessValidator) {
|
|
204
219
|
const result = await preprocessValidator.validateTx(tx);
|
|
205
|
-
const txHash =
|
|
220
|
+
const txHash = tx.getTxHash();
|
|
206
221
|
if (result.result === 'invalid') {
|
|
207
222
|
const reason = result.reason.join(', ');
|
|
208
|
-
this.log.
|
|
223
|
+
this.log.debug(`Rejecting tx ${txHash.toString()} due to pre-process validation fail: ${reason}`);
|
|
209
224
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
210
225
|
returns.push(new NestedProcessReturnValues([]));
|
|
211
226
|
continue;
|
|
212
227
|
} else if (result.result === 'skipped') {
|
|
213
228
|
const reason = result.reason.join(', ');
|
|
214
|
-
this.log.
|
|
229
|
+
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
215
230
|
returns.push(new NestedProcessReturnValues([]));
|
|
216
231
|
continue;
|
|
217
232
|
} else {
|
|
@@ -222,79 +237,124 @@ export class PublicProcessor implements Traceable {
|
|
|
222
237
|
// We checkpoint the transaction here, then within the try/catch we
|
|
223
238
|
// 1. Revert the checkpoint if the tx fails or needs to be discarded for any reason
|
|
224
239
|
// 2. Commit the transaction in the finally block. Note that by using the ForkCheckpoint lifecycle only the first commit/revert takes effect
|
|
225
|
-
|
|
240
|
+
// 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.
|
|
241
|
+
// Note: We use the underlying fork here not the guarded one, this ensures that it's not impacted by stopping the guarded version
|
|
242
|
+
const checkpoint = await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork());
|
|
243
|
+
const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
244
|
+
this.contractsDB.createCheckpoint();
|
|
226
245
|
|
|
227
246
|
try {
|
|
228
|
-
const [processedTx, returnValues] = await this.processTx(tx, deadline);
|
|
247
|
+
const [processedTx, returnValues, txDebugLogs] = await this.processTx(tx, deadline);
|
|
229
248
|
|
|
230
|
-
//
|
|
231
|
-
const
|
|
232
|
-
if (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
249
|
+
// Inject a fake processing failure after N txs if requested
|
|
250
|
+
const fakeThrowAfter = this.opts.fakeThrowAfterProcessingTxCount;
|
|
251
|
+
if (fakeThrowAfter !== undefined && result.length + failed.length + 1 >= fakeThrowAfter) {
|
|
252
|
+
throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const txBlobFields = processedTx.txEffect.getNumBlobFields();
|
|
256
|
+
const txSize = txBlobFields * Fr.SIZE_IN_BYTES;
|
|
257
|
+
|
|
258
|
+
// If the actual blob fields of this tx would exceed the limit, skip it.
|
|
259
|
+
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
260
|
+
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
261
|
+
this.log.debug(
|
|
262
|
+
`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
|
|
263
|
+
{
|
|
264
|
+
txHash,
|
|
265
|
+
txBlobFields,
|
|
266
|
+
totalBlobFields,
|
|
267
|
+
maxBlobFields,
|
|
268
|
+
},
|
|
269
|
+
);
|
|
239
270
|
// Need to revert the checkpoint here and don't go any further
|
|
240
271
|
await checkpoint.revert();
|
|
272
|
+
this.contractsDB.revertCheckpoint();
|
|
241
273
|
continue;
|
|
242
274
|
}
|
|
243
275
|
|
|
244
|
-
//
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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();
|
|
276
|
+
// During re-execution, check if the actual gas used by this tx would push the block over the gas limit.
|
|
277
|
+
// Unlike the proposal-building check (which uses declared gas limits pessimistically before processing),
|
|
278
|
+
// this uses actual gas and stops processing when the limit is exceeded.
|
|
279
|
+
if (
|
|
280
|
+
!isBuildingProposal &&
|
|
281
|
+
maxBlockGas !== undefined &&
|
|
282
|
+
totalBlockGas.add(processedTx.gasUsed.totalGas).gtAny(maxBlockGas)
|
|
283
|
+
) {
|
|
284
|
+
this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`, {
|
|
285
|
+
txHash,
|
|
286
|
+
txGas: processedTx.gasUsed.totalGas,
|
|
287
|
+
totalBlockGas,
|
|
288
|
+
maxBlockGas,
|
|
289
|
+
});
|
|
290
|
+
await checkpoint.revert();
|
|
291
|
+
this.contractsDB.revertCheckpoint();
|
|
292
|
+
break;
|
|
272
293
|
}
|
|
273
294
|
|
|
295
|
+
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
296
|
+
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
274
297
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
275
298
|
result.push(processedTx);
|
|
299
|
+
usedTxs.push(tx);
|
|
276
300
|
returns = returns.concat(returnValues);
|
|
301
|
+
debugLogs.push(...txDebugLogs);
|
|
302
|
+
|
|
303
|
+
this.debugLogStore.storeLogs(processedTx.hash.toString(), txDebugLogs);
|
|
277
304
|
|
|
278
305
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
279
306
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
280
307
|
totalSizeInBytes += txSize;
|
|
308
|
+
totalBlobFields += txBlobFields;
|
|
281
309
|
} catch (err: any) {
|
|
282
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
283
|
-
await checkpoint.revert();
|
|
284
310
|
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
285
311
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
312
|
+
// We hit the transaction execution deadline.
|
|
313
|
+
// There may still be a transaction executing on a worker thread (C++ via NAPI).
|
|
314
|
+
// Signal cancellation AND WAIT for the simulation to actually stop.
|
|
315
|
+
// This is critical because C++ might be in the middle of a slow operation (e.g., pad_trees)
|
|
316
|
+
// and won't check the cancellation flag until that operation completes.
|
|
317
|
+
// Without waiting, we'd proceed to revert checkpoints while C++ is still writing to state.
|
|
318
|
+
// Wait for C++ to stop gracefully.
|
|
319
|
+
await this.publicTxSimulator.cancel?.();
|
|
320
|
+
|
|
321
|
+
// Now stop the guarded fork to prevent any further TS-side access to the world state.
|
|
322
|
+
await this.guardedMerkleTree.stop();
|
|
323
|
+
|
|
324
|
+
// We now know there can't be any further access to world state. The fork is in a state where there is:
|
|
325
|
+
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
326
|
+
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
327
|
+
|
|
328
|
+
// Revert all checkpoints at or above this checkpoint's depth (inclusive), destroying any outstanding state
|
|
329
|
+
// updates from this tx and any nested checkpoints created during execution. This preserves any checkpoints
|
|
330
|
+
// created by callers below our depth.
|
|
331
|
+
await checkpoint.revertToCheckpoint();
|
|
332
|
+
|
|
333
|
+
// Revert any contracts added to the DB for the tx.
|
|
334
|
+
this.contractsDB.revertCheckpoint();
|
|
335
|
+
|
|
336
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
337
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
338
|
+
|
|
339
|
+
// 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
340
|
break;
|
|
287
341
|
}
|
|
288
|
-
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
289
|
-
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
290
342
|
|
|
343
|
+
// Roll back state to start of TX before proceeding to next TX.
|
|
344
|
+
// Reverts all checkpoints at or above this checkpoint's depth, preserving any caller checkpoints below.
|
|
345
|
+
await checkpoint.revertToCheckpoint();
|
|
346
|
+
this.contractsDB.revertCheckpoint();
|
|
347
|
+
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
348
|
+
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
291
349
|
failed.push({ tx, error: err instanceof Error ? err : new Error(errorMessage) });
|
|
292
350
|
returns.push(new NestedProcessReturnValues([]));
|
|
351
|
+
|
|
352
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
353
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
293
354
|
} finally {
|
|
294
|
-
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was reverted
|
|
355
|
+
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
295
356
|
await checkpoint.commit();
|
|
296
|
-
|
|
297
|
-
this.worldStateDB.clearContractsForTx();
|
|
357
|
+
this.contractsDB.commitCheckpointOkIfNone();
|
|
298
358
|
}
|
|
299
359
|
}
|
|
300
360
|
|
|
@@ -310,17 +370,38 @@ export class PublicProcessor implements Traceable {
|
|
|
310
370
|
totalSizeInBytes,
|
|
311
371
|
});
|
|
312
372
|
|
|
313
|
-
return [result, failed, returns];
|
|
373
|
+
return [result, failed, usedTxs, returns, debugLogs];
|
|
314
374
|
}
|
|
315
375
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
376
|
+
private async checkWorldStateUnchanged(
|
|
377
|
+
startStateReference: StateReference,
|
|
378
|
+
txHash: `0x${string}`,
|
|
379
|
+
cause: Error,
|
|
380
|
+
): Promise<void> {
|
|
381
|
+
const endStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
382
|
+
if (!startStateReference.equals(endStateReference)) {
|
|
383
|
+
this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`, {
|
|
384
|
+
expected: startStateReference.toInspect(),
|
|
385
|
+
actual: endStateReference.toInspect(),
|
|
386
|
+
cause,
|
|
387
|
+
});
|
|
388
|
+
throw new Error(`Fork state reference changed by tx ${txHash} after error in public processor`, { cause });
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
|
|
393
|
+
private async processTx(
|
|
394
|
+
tx: Tx,
|
|
395
|
+
deadline: Date | undefined,
|
|
396
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
397
|
+
const [time, [processedTx, returnValues, debugLogs]] = await elapsed(() =>
|
|
398
|
+
this.processTxWithinDeadline(tx, deadline),
|
|
399
|
+
);
|
|
319
400
|
|
|
320
401
|
this.log.verbose(
|
|
321
402
|
!tx.hasPublicCalls()
|
|
322
403
|
? `Processed tx ${processedTx.hash} with no public calls in ${time}ms`
|
|
323
|
-
: `Processed tx ${processedTx.hash} with ${tx.
|
|
404
|
+
: `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`,
|
|
324
405
|
{
|
|
325
406
|
txHash: processedTx.hash,
|
|
326
407
|
txFee: processedTx.txEffect.transactionFee.toBigInt(),
|
|
@@ -338,13 +419,10 @@ export class PublicProcessor implements Traceable {
|
|
|
338
419
|
},
|
|
339
420
|
);
|
|
340
421
|
|
|
341
|
-
return [processedTx, returnValues ?? []];
|
|
422
|
+
return [processedTx, returnValues ?? [], debugLogs];
|
|
342
423
|
}
|
|
343
424
|
|
|
344
|
-
private async doTreeInsertionsForPrivateOnlyTx(
|
|
345
|
-
processedTx: ProcessedTx,
|
|
346
|
-
txValidator?: TxValidator<ProcessedTx>,
|
|
347
|
-
): Promise<void> {
|
|
425
|
+
private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
|
|
348
426
|
const treeInsertionStart = process.hrtime.bigint();
|
|
349
427
|
|
|
350
428
|
// Update the state so that the next tx in the loop has the correct .startState
|
|
@@ -353,31 +431,20 @@ export class PublicProcessor implements Traceable {
|
|
|
353
431
|
// 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
432
|
// To see how this ^ happens, move back to one shared db in test_context and run orchestrator_multi_public_functions.test.ts
|
|
355
433
|
// The below is taken from buildBaseRollupHints:
|
|
356
|
-
await this.
|
|
434
|
+
await this.guardedMerkleTree.appendLeaves(
|
|
357
435
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
358
436
|
padArrayEnd(processedTx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
359
437
|
);
|
|
360
438
|
try {
|
|
361
|
-
await this.
|
|
439
|
+
await this.guardedMerkleTree.batchInsert(
|
|
362
440
|
MerkleTreeId.NULLIFIER_TREE,
|
|
363
441
|
padArrayEnd(processedTx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(n => n.toBuffer()),
|
|
364
442
|
NULLIFIER_SUBTREE_HEIGHT,
|
|
365
443
|
);
|
|
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
|
-
}
|
|
444
|
+
} catch (cause) {
|
|
445
|
+
throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`, { cause });
|
|
374
446
|
}
|
|
375
447
|
|
|
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
448
|
const treeInsertionEnd = process.hrtime.bigint();
|
|
382
449
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
383
450
|
}
|
|
@@ -385,17 +452,28 @@ export class PublicProcessor implements Traceable {
|
|
|
385
452
|
/** Processes the given tx within deadline. Returns timeout if deadline is hit. */
|
|
386
453
|
private async processTxWithinDeadline(
|
|
387
454
|
tx: Tx,
|
|
388
|
-
deadline
|
|
389
|
-
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
|
|
390
|
-
const
|
|
391
|
-
? () => this.processTxWithPublicCalls(tx)
|
|
392
|
-
|
|
455
|
+
deadline: Date | undefined,
|
|
456
|
+
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> {
|
|
457
|
+
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined, DebugLog[]]> =
|
|
458
|
+
tx.hasPublicCalls() ? () => this.processTxWithPublicCalls(tx) : () => this.processPrivateOnlyTx(tx);
|
|
459
|
+
|
|
460
|
+
// Fake a delay per tx if instructed (used for tests)
|
|
461
|
+
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
462
|
+
const processFn =
|
|
463
|
+
fakeDelayPerTxMs && fakeDelayPerTxMs > 0
|
|
464
|
+
? async () => {
|
|
465
|
+
const result = await innerProcessFn();
|
|
466
|
+
this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`);
|
|
467
|
+
await sleep(fakeDelayPerTxMs);
|
|
468
|
+
return result;
|
|
469
|
+
}
|
|
470
|
+
: innerProcessFn;
|
|
393
471
|
|
|
394
472
|
if (!deadline) {
|
|
395
473
|
return await processFn();
|
|
396
474
|
}
|
|
397
475
|
|
|
398
|
-
const txHash =
|
|
476
|
+
const txHash = tx.getTxHash();
|
|
399
477
|
const timeout = +deadline - this.dateProvider.now();
|
|
400
478
|
if (timeout <= 0) {
|
|
401
479
|
throw new PublicProcessorTimeoutError();
|
|
@@ -419,14 +497,16 @@ export class PublicProcessor implements Traceable {
|
|
|
419
497
|
* This is used in private only txs, since for txs with public calls
|
|
420
498
|
* the avm handles the fee payment itself.
|
|
421
499
|
*/
|
|
422
|
-
private async
|
|
500
|
+
private async performFeePaymentPublicDataWrite(txFee: Fr, feePayer: AztecAddress): Promise<PublicDataWrite> {
|
|
423
501
|
const feeJuiceAddress = ProtocolContractAddress.FeeJuice;
|
|
424
502
|
const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
|
|
425
503
|
const leafSlot = await computeFeePayerBalanceLeafSlot(feePayer);
|
|
504
|
+
// This high-level db is used as a convenient helper. It could be done with the merkleTree directly.
|
|
505
|
+
const treesDB = new PublicTreesDB(this.guardedMerkleTree);
|
|
426
506
|
|
|
427
507
|
this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);
|
|
428
508
|
|
|
429
|
-
const balance = await
|
|
509
|
+
const balance = await treesDB.storageRead(feeJuiceAddress, balanceSlot);
|
|
430
510
|
|
|
431
511
|
if (balance.lt(txFee)) {
|
|
432
512
|
throw new Error(
|
|
@@ -435,87 +515,96 @@ export class PublicProcessor implements Traceable {
|
|
|
435
515
|
}
|
|
436
516
|
|
|
437
517
|
const updatedBalance = balance.sub(txFee);
|
|
438
|
-
await
|
|
518
|
+
await treesDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
|
|
439
519
|
|
|
440
520
|
return new PublicDataWrite(leafSlot, updatedBalance);
|
|
441
521
|
}
|
|
442
522
|
|
|
443
|
-
@trackSpan('PublicProcessor.processPrivateOnlyTx',
|
|
444
|
-
[Attributes.TX_HASH]:
|
|
523
|
+
@trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
|
|
524
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
445
525
|
}))
|
|
446
|
-
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
|
|
526
|
+
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined, DebugLog[]]> {
|
|
447
527
|
const gasFees = this.globalVariables.gasFees;
|
|
448
|
-
const transactionFee = tx.data.gasUsed
|
|
528
|
+
const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
|
|
449
529
|
|
|
450
|
-
const feePaymentPublicDataWrite = await this.
|
|
530
|
+
const feePaymentPublicDataWrite = await this.performFeePaymentPublicDataWrite(transactionFee, tx.data.feePayer);
|
|
451
531
|
|
|
452
|
-
const processedTx =
|
|
532
|
+
const processedTx = makeProcessedTxFromPrivateOnlyTx(
|
|
453
533
|
tx,
|
|
454
534
|
transactionFee,
|
|
455
535
|
feePaymentPublicDataWrite,
|
|
456
536
|
this.globalVariables,
|
|
457
537
|
);
|
|
458
538
|
|
|
459
|
-
|
|
460
|
-
tx
|
|
461
|
-
|
|
539
|
+
this.metrics.recordClassPublication(
|
|
540
|
+
...tx
|
|
541
|
+
.getContractClassLogs()
|
|
542
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
543
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
462
544
|
);
|
|
463
545
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
return [processedTx, undefined];
|
|
546
|
+
// Fee payment insertion has already been done. Do the rest.
|
|
547
|
+
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
548
|
+
|
|
549
|
+
await this.contractsDB.addNewContracts(tx);
|
|
550
|
+
|
|
551
|
+
return [processedTx, undefined, []];
|
|
470
552
|
}
|
|
471
553
|
|
|
472
|
-
@trackSpan('PublicProcessor.processTxWithPublicCalls',
|
|
473
|
-
[Attributes.TX_HASH]:
|
|
554
|
+
@trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
|
|
555
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
474
556
|
}))
|
|
475
|
-
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
557
|
+
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[], DebugLog[]]> {
|
|
476
558
|
const timer = new Timer();
|
|
477
559
|
|
|
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,
|
|
560
|
+
const result = await this.publicTxSimulator.simulate(tx);
|
|
561
|
+
// TODO: use the callStackMetadata here to extract more data about public execution
|
|
562
|
+
const { hints, publicInputs, publicTxEffect, gasUsed, revertCode /*callStackMetadata*/ } = result;
|
|
563
|
+
|
|
564
|
+
const contractClassLogs = revertCode.isOK()
|
|
565
|
+
? tx.getContractClassLogs()
|
|
566
|
+
: tx.getSplitContractClassLogs(false /* revertible */);
|
|
567
|
+
this.metrics.recordClassPublication(
|
|
568
|
+
...contractClassLogs
|
|
569
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
570
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
497
571
|
);
|
|
498
572
|
|
|
499
|
-
|
|
500
|
-
...siloedContractClassLogs
|
|
501
|
-
.filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
|
|
502
|
-
.map(log => ContractClassRegisteredEvent.fromLog(log)),
|
|
503
|
-
);
|
|
504
|
-
|
|
505
|
-
const phaseCount = processedPhases.length;
|
|
573
|
+
// TODO(fcarreiro): remove phase count metric.
|
|
506
574
|
const durationMs = timer.ms();
|
|
507
|
-
this.metrics.recordTx(phaseCount, durationMs, gasUsed.publicGas);
|
|
575
|
+
this.metrics.recordTx(/*phaseCount=*/ 1, durationMs, gasUsed.publicGas);
|
|
508
576
|
|
|
509
|
-
|
|
577
|
+
// Extract the return values from the call stack metadata.
|
|
578
|
+
const appLogicReturnValues: NestedProcessReturnValues[] = result.getAppLogicReturnValues();
|
|
579
|
+
// Extract the revert reason from the call stack metadata.
|
|
580
|
+
const revertReason = result.findRevertReason();
|
|
581
|
+
// Create proving request if we have hints and public inputs.
|
|
582
|
+
const avmProvingRequest =
|
|
583
|
+
hints && publicInputs ? PublicProcessor.generateProvingRequest(publicInputs, hints) : undefined;
|
|
584
|
+
|
|
585
|
+
const processedTx = makeProcessedTxFromTxWithPublicCalls(
|
|
510
586
|
tx,
|
|
587
|
+
this.globalVariables,
|
|
511
588
|
avmProvingRequest,
|
|
589
|
+
publicTxEffect,
|
|
512
590
|
gasUsed,
|
|
513
591
|
revertCode,
|
|
514
592
|
revertReason,
|
|
515
593
|
);
|
|
516
594
|
|
|
517
|
-
|
|
595
|
+
return [processedTx, appLogicReturnValues, result.logs ?? []];
|
|
596
|
+
}
|
|
518
597
|
|
|
519
|
-
|
|
598
|
+
/**
|
|
599
|
+
* Generate the proving request for the AVM circuit.
|
|
600
|
+
*/
|
|
601
|
+
private static generateProvingRequest(
|
|
602
|
+
publicInputs: AvmCircuitPublicInputs,
|
|
603
|
+
hints: AvmExecutionHints = AvmExecutionHints.empty(),
|
|
604
|
+
): AvmProvingRequest {
|
|
605
|
+
return {
|
|
606
|
+
type: ProvingRequestType.PUBLIC_VM,
|
|
607
|
+
inputs: new AvmCircuitInputs(hints, publicInputs),
|
|
608
|
+
};
|
|
520
609
|
}
|
|
521
610
|
}
|