@aztec/simulator 0.0.0-test.1 → 0.0.1-commit.24de95ac
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dest/client.d.ts +5 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +4 -7
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +0 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/private/acvm/acvm.d.ts +11 -5
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +10 -16
- package/dest/private/acvm/acvm_types.d.ts +1 -1
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +17 -18
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +31 -23
- package/dest/private/acvm/index.d.ts +0 -1
- 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 +19 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +53 -0
- package/dest/private/{providers/acvm_native.d.ts → acvm_native.d.ts} +9 -10
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +26 -20
- package/dest/private/acvm_wasm.d.ts +15 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/{providers/acvm_wasm.js → acvm_wasm.js} +22 -19
- 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 +108 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +209 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +31 -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 +5 -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} +2 -2
- package/dest/public/avm/avm_context.d.ts +5 -5
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +4 -2
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +11 -7
- package/dest/public/avm/avm_execution_environment.d.ts +3 -1
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +7 -2
- package/dest/public/avm/avm_gas.d.ts +4 -20
- 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 +2 -0
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +2 -0
- package/dest/public/avm/avm_memory_types.d.ts +98 -87
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +17 -6
- package/dest/public/avm/avm_simulator.d.ts +4 -5
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +23 -35
- 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/errors.d.ts +6 -30
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +7 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +5 -4
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +12 -14
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +6 -4
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +37 -14
- package/dest/public/avm/fixtures/initializers.d.ts +43 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +42 -0
- package/dest/public/avm/fixtures/utils.d.ts +38 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +95 -0
- package/dest/public/avm/index.d.ts +0 -2
- 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 +2 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +28 -25
- package/dest/public/avm/opcodes/addressing_mode.d.ts +11 -7
- 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 +11 -1
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +16 -2
- package/dest/public/avm/opcodes/bitwise.d.ts +5 -13
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +19 -26
- 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 +1 -2
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +9 -10
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +10 -8
- package/dest/public/avm/opcodes/conversion.d.ts +1 -0
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +267 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +6 -6
- package/dest/public/avm/opcodes/environment_getters.d.ts +2 -2
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +17 -19
- package/dest/public/avm/opcodes/external_calls.d.ts +8 -7
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +39 -34
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +6 -6
- package/dest/public/avm/opcodes/instruction.d.ts +14 -10
- 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/memory.d.ts +4 -4
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +37 -33
- package/dest/public/avm/opcodes/misc.d.ts +2 -1
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +41 -16
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +7 -5
- 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 +38 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +2 -6
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +70 -69
- package/dest/public/avm/serialization/instruction_serialization.d.ts +13 -4
- 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 +10 -13
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +16 -24
- package/dest/public/db_interfaces.d.ts +56 -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 +5 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +9 -0
- package/dest/public/executor_metrics.d.ts +10 -3
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +37 -6
- package/dest/public/executor_metrics_interface.d.ts +9 -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 +326 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +29 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +9 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +109 -0
- package/dest/public/fixtures/index.d.ts +7 -0
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +7 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +10 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +29 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +35 -13
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +96 -71
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.d.ts +6 -6
- 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 +8 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +95 -0
- package/dest/public/fixtures/utils.d.ts +16 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +100 -58
- package/dest/public/hinting_db_sources.d.ts +70 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +297 -0
- package/dest/public/index.d.ts +4 -8
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +30 -39
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +151 -67
- 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 +49 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +108 -0
- package/dest/public/public_processor/public_processor.d.ts +25 -30
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +141 -96
- package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +41 -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 +89 -0
- package/dest/public/public_tx_simulator/index.d.ts +4 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +2 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +24 -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 +19 -29
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +63 -91
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +45 -47
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +209 -184
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +9 -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 +39 -0
- package/dest/public/side_effect_errors.d.ts +41 -1
- 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 +20 -65
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +71 -121
- package/dest/public/side_effect_trace_interface.d.ts +11 -22
- 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 +2 -5
- 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 +2 -2
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal/journal.d.ts → state_manager/state_manager.d.ts} +42 -85
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +391 -0
- package/dest/public/test_executor_metrics.d.ts +54 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +306 -0
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +2 -4
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +6 -3
- 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 +36 -31
- package/src/client.ts +5 -3
- package/src/common/errors.ts +79 -44
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +17 -32
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +35 -29
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +63 -0
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +47 -24
- package/src/private/acvm_wasm.ts +72 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +260 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +158 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +11 -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} +6 -6
- package/src/public/avm/avm_context.ts +4 -4
- package/src/public/avm/avm_contract_call_result.ts +17 -5
- package/src/public/avm/avm_execution_environment.ts +10 -1
- package/src/public/avm/avm_gas.ts +23 -35
- package/src/public/avm/avm_machine_state.ts +5 -0
- package/src/public/avm/avm_memory_types.ts +19 -6
- package/src/public/avm/avm_simulator.ts +44 -54
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/errors.ts +8 -77
- package/src/public/avm/fixtures/avm_simulation_tester.ts +23 -20
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +45 -12
- package/src/public/avm/fixtures/initializers.ts +104 -0
- package/src/public/avm/fixtures/utils.ts +150 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +64 -29
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +24 -2
- 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 -7
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +27 -3
- package/src/public/avm/opcodes/ec_add.ts +9 -6
- package/src/public/avm/opcodes/environment_getters.ts +27 -22
- package/src/public/avm/opcodes/external_calls.ts +61 -29
- package/src/public/avm/opcodes/hashing.ts +28 -8
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/memory.ts +71 -32
- package/src/public/avm/opcodes/misc.ts +60 -18
- package/src/public/avm/opcodes/storage.ts +22 -6
- package/src/public/avm/revert_reason.ts +55 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +72 -74
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +24 -41
- package/src/public/db_interfaces.ts +61 -0
- package/src/{common → public}/debug_fn_name.ts +7 -7
- package/src/public/executor_metrics.ts +55 -6
- package/src/public/executor_metrics_interface.ts +14 -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 +49 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +135 -0
- package/src/public/fixtures/index.ts +7 -0
- package/src/public/fixtures/minimal_public_tx.ts +36 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +158 -113
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +36 -18
- package/src/public/fixtures/token_test.ts +140 -0
- package/src/public/fixtures/utils.ts +141 -68
- package/src/public/hinting_db_sources.ts +505 -0
- package/src/public/index.ts +9 -8
- package/src/public/public_db_sources.ts +196 -97
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +153 -0
- package/src/public/public_processor/public_processor.ts +191 -153
- package/src/public/public_processor/public_processor_metrics.ts +2 -2
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +128 -0
- package/src/public/public_tx_simulator/index.ts +3 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +109 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +160 -193
- package/src/public/public_tx_simulator/public_tx_simulator.ts +294 -220
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +11 -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 +94 -320
- package/src/public/side_effect_trace_interface.ts +10 -58
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +5 -11
- package/src/public/{avm/journal → state_manager}/public_storage.ts +2 -2
- package/src/public/state_manager/state_manager.ts +560 -0
- package/src/public/test_executor_metrics.ts +395 -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.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_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.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.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/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/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/test/utils.ts +0 -36
- /package/dest/public/{avm/journal → state_manager}/public_storage.js +0 -0
|
@@ -2,24 +2,31 @@ import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT
|
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { Fr } from '@aztec/foundation/fields';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
-
import {
|
|
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
10
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
10
11
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
12
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
13
|
+
import { computeTransactionFee } from '@aztec/stdlib/fees';
|
|
12
14
|
import { Gas } from '@aztec/stdlib/gas';
|
|
13
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
MerkleTreeWriteOperations,
|
|
17
|
+
PublicProcessorLimits,
|
|
18
|
+
PublicProcessorValidator,
|
|
19
|
+
SequencerConfig,
|
|
20
|
+
} from '@aztec/stdlib/interfaces/server';
|
|
14
21
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
15
22
|
import {
|
|
16
23
|
type FailedTx,
|
|
17
24
|
GlobalVariables,
|
|
18
25
|
NestedProcessReturnValues,
|
|
19
26
|
type ProcessedTx,
|
|
27
|
+
StateReference,
|
|
20
28
|
Tx,
|
|
21
29
|
TxExecutionPhase,
|
|
22
|
-
type TxValidator,
|
|
23
30
|
makeProcessedTxFromPrivateOnlyTx,
|
|
24
31
|
makeProcessedTxFromTxWithPublicCalls,
|
|
25
32
|
} from '@aztec/stdlib/tx';
|
|
@@ -33,8 +40,15 @@ import {
|
|
|
33
40
|
} from '@aztec/telemetry-client';
|
|
34
41
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
35
42
|
|
|
36
|
-
import {
|
|
37
|
-
|
|
43
|
+
import { AssertionError } from 'assert';
|
|
44
|
+
|
|
45
|
+
import { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js';
|
|
46
|
+
import {
|
|
47
|
+
type PublicTxSimulator,
|
|
48
|
+
type PublicTxSimulatorConfig,
|
|
49
|
+
TelemetryPublicTxSimulator,
|
|
50
|
+
} from '../public_tx_simulator/index.js';
|
|
51
|
+
import { GuardedMerkleTreeOperations } from './guarded_merkle_tree.js';
|
|
38
52
|
import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
39
53
|
|
|
40
54
|
/**
|
|
@@ -43,13 +57,12 @@ import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
|
43
57
|
export class PublicProcessorFactory {
|
|
44
58
|
constructor(
|
|
45
59
|
private contractDataSource: ContractDataSource,
|
|
46
|
-
private dateProvider: DateProvider,
|
|
47
|
-
|
|
60
|
+
private dateProvider: DateProvider = new DateProvider(),
|
|
61
|
+
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
48
62
|
) {}
|
|
49
63
|
|
|
50
64
|
/**
|
|
51
65
|
* 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
66
|
* @param globalVariables - The global variables for the block being processed.
|
|
54
67
|
* @param skipFeeEnforcement - Allows disabling balance checks for fee estimations.
|
|
55
68
|
* @returns A new instance of a PublicProcessor.
|
|
@@ -57,22 +70,28 @@ export class PublicProcessorFactory {
|
|
|
57
70
|
public create(
|
|
58
71
|
merkleTree: MerkleTreeWriteOperations,
|
|
59
72
|
globalVariables: GlobalVariables,
|
|
60
|
-
|
|
73
|
+
config: {
|
|
74
|
+
skipFeeEnforcement: boolean;
|
|
75
|
+
clientInitiatedSimulation: boolean;
|
|
76
|
+
proverId?: Fr;
|
|
77
|
+
maxDebugLogMemoryReads?: number;
|
|
78
|
+
},
|
|
61
79
|
): PublicProcessor {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
skipFeeEnforcement,
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
const contractsDB = new PublicContractsDB(this.contractDataSource);
|
|
81
|
+
|
|
82
|
+
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
83
|
+
const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, {
|
|
84
|
+
proverId: config.proverId,
|
|
85
|
+
doMerkleOperations: true,
|
|
86
|
+
skipFeeEnforcement: config.skipFeeEnforcement,
|
|
87
|
+
clientInitiatedSimulation: config.clientInitiatedSimulation,
|
|
88
|
+
maxDebugLogMemoryReads: config.maxDebugLogMemoryReads,
|
|
89
|
+
});
|
|
71
90
|
|
|
72
91
|
return new PublicProcessor(
|
|
73
|
-
merkleTree,
|
|
74
92
|
globalVariables,
|
|
75
|
-
|
|
93
|
+
guardedFork,
|
|
94
|
+
contractsDB,
|
|
76
95
|
publicTxSimulator,
|
|
77
96
|
this.dateProvider,
|
|
78
97
|
this.telemetryClient,
|
|
@@ -80,21 +99,12 @@ export class PublicProcessorFactory {
|
|
|
80
99
|
}
|
|
81
100
|
|
|
82
101
|
protected createPublicTxSimulator(
|
|
83
|
-
|
|
84
|
-
|
|
102
|
+
merkleTree: MerkleTreeWriteOperations,
|
|
103
|
+
contractsDB: PublicContractsDB,
|
|
85
104
|
globalVariables: GlobalVariables,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
telemetryClient
|
|
89
|
-
) {
|
|
90
|
-
return new PublicTxSimulator(
|
|
91
|
-
db,
|
|
92
|
-
worldStateDB,
|
|
93
|
-
globalVariables,
|
|
94
|
-
doMerkleOperations,
|
|
95
|
-
skipFeeEnforcement,
|
|
96
|
-
telemetryClient,
|
|
97
|
-
);
|
|
105
|
+
config?: Partial<PublicTxSimulatorConfig>,
|
|
106
|
+
): PublicTxSimulator {
|
|
107
|
+
return new TelemetryPublicTxSimulator(merkleTree, contractsDB, globalVariables, this.telemetryClient, config);
|
|
98
108
|
}
|
|
99
109
|
}
|
|
100
110
|
|
|
@@ -111,14 +121,16 @@ class PublicProcessorTimeoutError extends Error {
|
|
|
111
121
|
*/
|
|
112
122
|
export class PublicProcessor implements Traceable {
|
|
113
123
|
private metrics: PublicProcessorMetrics;
|
|
124
|
+
|
|
114
125
|
constructor(
|
|
115
|
-
protected db: MerkleTreeWriteOperations,
|
|
116
126
|
protected globalVariables: GlobalVariables,
|
|
117
|
-
|
|
127
|
+
private guardedMerkleTree: GuardedMerkleTreeOperations,
|
|
128
|
+
protected contractsDB: PublicContractsDB,
|
|
118
129
|
protected publicTxSimulator: PublicTxSimulator,
|
|
119
130
|
private dateProvider: DateProvider,
|
|
120
131
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
121
132
|
private log = createLogger('simulator:public-processor'),
|
|
133
|
+
private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs'> = {},
|
|
122
134
|
) {
|
|
123
135
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
124
136
|
}
|
|
@@ -130,26 +142,19 @@ export class PublicProcessor implements Traceable {
|
|
|
130
142
|
/**
|
|
131
143
|
* Run each tx through the public circuit and the public kernel circuit if needed.
|
|
132
144
|
* @param txs - Txs to process.
|
|
133
|
-
* @param
|
|
145
|
+
* @param limits - Limits for processing the txs.
|
|
146
|
+
* @param validator - Pre-process validator and nullifier cache to use for processing the txs.
|
|
134
147
|
* @returns The list of processed txs with their circuit simulation outputs.
|
|
135
148
|
*/
|
|
136
149
|
public async process(
|
|
137
150
|
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;
|
|
151
|
+
limits: PublicProcessorLimits = {},
|
|
152
|
+
validator: PublicProcessorValidator = {},
|
|
153
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[]]> {
|
|
154
|
+
const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
|
|
155
|
+
const { preprocessValidator, nullifierCache } = validator;
|
|
152
156
|
const result: ProcessedTx[] = [];
|
|
157
|
+
const usedTxs: Tx[] = [];
|
|
153
158
|
const failed: FailedTx[] = [];
|
|
154
159
|
const timer = new Timer();
|
|
155
160
|
|
|
@@ -157,6 +162,7 @@ export class PublicProcessor implements Traceable {
|
|
|
157
162
|
let returns: NestedProcessReturnValues[] = [];
|
|
158
163
|
let totalPublicGas = new Gas(0, 0);
|
|
159
164
|
let totalBlockGas = new Gas(0, 0);
|
|
165
|
+
let totalBlobFields = 0;
|
|
160
166
|
|
|
161
167
|
for await (const origTx of txs) {
|
|
162
168
|
// Only process up to the max tx limit
|
|
@@ -172,7 +178,7 @@ export class PublicProcessor implements Traceable {
|
|
|
172
178
|
}
|
|
173
179
|
|
|
174
180
|
// Skip this tx if it'd exceed max block size
|
|
175
|
-
const txHash =
|
|
181
|
+
const txHash = origTx.getTxHash().toString();
|
|
176
182
|
const preTxSizeInBytes = origTx.getEstimatedPrivateTxEffectsSize();
|
|
177
183
|
if (maxBlockSize !== undefined && totalSizeInBytes + preTxSizeInBytes > maxBlockSize) {
|
|
178
184
|
this.log.warn(`Skipping processing of tx ${txHash} sized ${preTxSizeInBytes} bytes due to block size limit`, {
|
|
@@ -202,16 +208,16 @@ export class PublicProcessor implements Traceable {
|
|
|
202
208
|
// We validate the tx before processing it, to avoid unnecessary work.
|
|
203
209
|
if (preprocessValidator) {
|
|
204
210
|
const result = await preprocessValidator.validateTx(tx);
|
|
205
|
-
const txHash =
|
|
211
|
+
const txHash = tx.getTxHash();
|
|
206
212
|
if (result.result === 'invalid') {
|
|
207
213
|
const reason = result.reason.join(', ');
|
|
208
|
-
this.log.
|
|
214
|
+
this.log.debug(`Rejecting tx ${txHash.toString()} due to pre-process validation fail: ${reason}`);
|
|
209
215
|
failed.push({ tx, error: new Error(`Tx failed preprocess validation: ${reason}`) });
|
|
210
216
|
returns.push(new NestedProcessReturnValues([]));
|
|
211
217
|
continue;
|
|
212
218
|
} else if (result.result === 'skipped') {
|
|
213
219
|
const reason = result.reason.join(', ');
|
|
214
|
-
this.log.
|
|
220
|
+
this.log.debug(`Skipping tx ${txHash.toString()} due to pre-process validation: ${reason}`);
|
|
215
221
|
returns.push(new NestedProcessReturnValues([]));
|
|
216
222
|
continue;
|
|
217
223
|
} else {
|
|
@@ -222,7 +228,10 @@ export class PublicProcessor implements Traceable {
|
|
|
222
228
|
// We checkpoint the transaction here, then within the try/catch we
|
|
223
229
|
// 1. Revert the checkpoint if the tx fails or needs to be discarded for any reason
|
|
224
230
|
// 2. Commit the transaction in the finally block. Note that by using the ForkCheckpoint lifecycle only the first commit/revert takes effect
|
|
225
|
-
|
|
231
|
+
// 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.
|
|
232
|
+
// Note: We use the underlying fork here not the guarded one, this ensures that it's not impacted by stopping the guarded version
|
|
233
|
+
const checkpoint = await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork());
|
|
234
|
+
const startStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
226
235
|
|
|
227
236
|
try {
|
|
228
237
|
const [processedTx, returnValues] = await this.processTx(tx, deadline);
|
|
@@ -230,7 +239,7 @@ export class PublicProcessor implements Traceable {
|
|
|
230
239
|
// If the actual size of this tx would exceed block size, skip it
|
|
231
240
|
const txSize = processedTx.txEffect.getDASize();
|
|
232
241
|
if (maxBlockSize !== undefined && totalSizeInBytes + txSize > maxBlockSize) {
|
|
233
|
-
this.log.
|
|
242
|
+
this.log.debug(`Skipping processed tx ${txHash} sized ${txSize} due to max block size.`, {
|
|
234
243
|
txHash,
|
|
235
244
|
sizeInBytes: txSize,
|
|
236
245
|
totalSizeInBytes,
|
|
@@ -241,60 +250,76 @@ export class PublicProcessor implements Traceable {
|
|
|
241
250
|
continue;
|
|
242
251
|
}
|
|
243
252
|
|
|
244
|
-
//
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
} else {
|
|
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();
|
|
253
|
+
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
254
|
+
const txBlobFields = processedTx.txEffect.toBlobFields().length;
|
|
255
|
+
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
256
|
+
this.log.debug(
|
|
257
|
+
`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
|
|
258
|
+
{
|
|
259
|
+
txHash,
|
|
260
|
+
txBlobFields,
|
|
261
|
+
totalBlobFields,
|
|
262
|
+
maxBlobFields,
|
|
263
|
+
},
|
|
264
|
+
);
|
|
265
|
+
// Need to revert the checkpoint here and don't go any further
|
|
266
|
+
await checkpoint.revert();
|
|
267
|
+
continue;
|
|
272
268
|
}
|
|
273
269
|
|
|
270
|
+
// FIXME(fcarreiro): it's ugly to have to notify the validator of nullifiers.
|
|
271
|
+
// I'd rather pass the validators the processedTx as well and let them deal with it.
|
|
274
272
|
nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n => n.toBuffer()));
|
|
275
273
|
result.push(processedTx);
|
|
274
|
+
usedTxs.push(tx);
|
|
276
275
|
returns = returns.concat(returnValues);
|
|
277
276
|
|
|
278
277
|
totalPublicGas = totalPublicGas.add(processedTx.gasUsed.publicGas);
|
|
279
278
|
totalBlockGas = totalBlockGas.add(processedTx.gasUsed.totalGas);
|
|
280
279
|
totalSizeInBytes += txSize;
|
|
280
|
+
totalBlobFields += txBlobFields;
|
|
281
281
|
} catch (err: any) {
|
|
282
|
-
// Roll back state to start of TX before proceeding to next TX
|
|
283
|
-
await checkpoint.revert();
|
|
284
282
|
if (err?.name === 'PublicProcessorTimeoutError') {
|
|
285
283
|
this.log.warn(`Stopping tx processing due to timeout.`);
|
|
284
|
+
// We hit the transaction execution deadline.
|
|
285
|
+
// There may still be a transaction executing. We stop the guarded fork to prevent any further access to the world state.
|
|
286
|
+
await this.guardedMerkleTree.stop();
|
|
287
|
+
|
|
288
|
+
// We now know there can't be any further access to world state. The fork is in a state where there is:
|
|
289
|
+
// 1. At least one outstanding checkpoint that has not been committed (the one created before we processed the tx).
|
|
290
|
+
// 2. Possible state updates on that checkpoint or any others created during execution.
|
|
291
|
+
|
|
292
|
+
// First we revert a checkpoint as managed by the ForkCheckpoint. This will revert whatever is the current checkpoint
|
|
293
|
+
// which may not be the one originally created by this object. But that is ok, we do this to fulfil the ForkCheckpoint
|
|
294
|
+
// lifecycle expectations and ensure it doesn't attempt to commit later on.
|
|
295
|
+
await checkpoint.revert();
|
|
296
|
+
|
|
297
|
+
// Now we want to revert any/all remaining checkpoints, destroying any outstanding state updates.
|
|
298
|
+
// This needs to be done directly on the underlying fork as the guarded fork has been stopped.
|
|
299
|
+
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
300
|
+
|
|
301
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
302
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
303
|
+
|
|
304
|
+
// 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
305
|
break;
|
|
287
306
|
}
|
|
288
|
-
const errorMessage = err instanceof Error ? err.message : 'Unknown error';
|
|
289
|
-
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
290
307
|
|
|
308
|
+
// Roll back state to start of TX before proceeding to next TX
|
|
309
|
+
await checkpoint.revert();
|
|
310
|
+
await this.guardedMerkleTree.getUnderlyingFork().revertAllCheckpoints();
|
|
311
|
+
const errorMessage = err instanceof Error || err instanceof AssertionError ? err.message : 'Unknown error';
|
|
312
|
+
this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`);
|
|
291
313
|
failed.push({ tx, error: err instanceof Error ? err : new Error(errorMessage) });
|
|
292
314
|
returns.push(new NestedProcessReturnValues([]));
|
|
315
|
+
|
|
316
|
+
// Ensure we're at the same state as when we started processing this tx.
|
|
317
|
+
await this.checkWorldStateUnchanged(startStateReference, txHash, err);
|
|
293
318
|
} finally {
|
|
294
|
-
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was reverted
|
|
319
|
+
// Base case is we always commit the checkpoint. Using the ForkCheckpoint means this has no effect if the tx was previously reverted
|
|
295
320
|
await checkpoint.commit();
|
|
296
321
|
// The tx-level contracts cache should not live on to the next tx
|
|
297
|
-
this.
|
|
322
|
+
this.contractsDB.clearContractsForTx();
|
|
298
323
|
}
|
|
299
324
|
}
|
|
300
325
|
|
|
@@ -310,17 +335,33 @@ export class PublicProcessor implements Traceable {
|
|
|
310
335
|
totalSizeInBytes,
|
|
311
336
|
});
|
|
312
337
|
|
|
313
|
-
return [result, failed, returns];
|
|
338
|
+
return [result, failed, usedTxs, returns];
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
private async checkWorldStateUnchanged(
|
|
342
|
+
startStateReference: StateReference,
|
|
343
|
+
txHash: `0x${string}`,
|
|
344
|
+
cause: Error,
|
|
345
|
+
): Promise<void> {
|
|
346
|
+
const endStateReference = await this.guardedMerkleTree.getUnderlyingFork().getStateReference();
|
|
347
|
+
if (!startStateReference.equals(endStateReference)) {
|
|
348
|
+
this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`, {
|
|
349
|
+
expected: startStateReference.toInspect(),
|
|
350
|
+
actual: endStateReference.toInspect(),
|
|
351
|
+
cause,
|
|
352
|
+
});
|
|
353
|
+
throw new Error(`Fork state reference changed by tx ${txHash} after error in public processor`, { cause });
|
|
354
|
+
}
|
|
314
355
|
}
|
|
315
356
|
|
|
316
|
-
@trackSpan('PublicProcessor.processTx',
|
|
317
|
-
private async processTx(tx: Tx, deadline
|
|
357
|
+
@trackSpan('PublicProcessor.processTx', tx => ({ [Attributes.TX_HASH]: tx.getTxHash().toString() }))
|
|
358
|
+
private async processTx(tx: Tx, deadline: Date | undefined): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
318
359
|
const [time, [processedTx, returnValues]] = await elapsed(() => this.processTxWithinDeadline(tx, deadline));
|
|
319
360
|
|
|
320
361
|
this.log.verbose(
|
|
321
362
|
!tx.hasPublicCalls()
|
|
322
363
|
? `Processed tx ${processedTx.hash} with no public calls in ${time}ms`
|
|
323
|
-
: `Processed tx ${processedTx.hash} with ${tx.
|
|
364
|
+
: `Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time}ms`,
|
|
324
365
|
{
|
|
325
366
|
txHash: processedTx.hash,
|
|
326
367
|
txFee: processedTx.txEffect.transactionFee.toBigInt(),
|
|
@@ -341,10 +382,7 @@ export class PublicProcessor implements Traceable {
|
|
|
341
382
|
return [processedTx, returnValues ?? []];
|
|
342
383
|
}
|
|
343
384
|
|
|
344
|
-
private async doTreeInsertionsForPrivateOnlyTx(
|
|
345
|
-
processedTx: ProcessedTx,
|
|
346
|
-
txValidator?: TxValidator<ProcessedTx>,
|
|
347
|
-
): Promise<void> {
|
|
385
|
+
private async doTreeInsertionsForPrivateOnlyTx(processedTx: ProcessedTx): Promise<void> {
|
|
348
386
|
const treeInsertionStart = process.hrtime.bigint();
|
|
349
387
|
|
|
350
388
|
// Update the state so that the next tx in the loop has the correct .startState
|
|
@@ -353,31 +391,20 @@ export class PublicProcessor implements Traceable {
|
|
|
353
391
|
// 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
392
|
// To see how this ^ happens, move back to one shared db in test_context and run orchestrator_multi_public_functions.test.ts
|
|
355
393
|
// The below is taken from buildBaseRollupHints:
|
|
356
|
-
await this.
|
|
394
|
+
await this.guardedMerkleTree.appendLeaves(
|
|
357
395
|
MerkleTreeId.NOTE_HASH_TREE,
|
|
358
396
|
padArrayEnd(processedTx.txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
|
|
359
397
|
);
|
|
360
398
|
try {
|
|
361
|
-
await this.
|
|
399
|
+
await this.guardedMerkleTree.batchInsert(
|
|
362
400
|
MerkleTreeId.NULLIFIER_TREE,
|
|
363
401
|
padArrayEnd(processedTx.txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map(n => n.toBuffer()),
|
|
364
402
|
NULLIFIER_SUBTREE_HEIGHT,
|
|
365
403
|
);
|
|
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
|
-
}
|
|
404
|
+
} catch (cause) {
|
|
405
|
+
throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`, { cause });
|
|
374
406
|
}
|
|
375
407
|
|
|
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
408
|
const treeInsertionEnd = process.hrtime.bigint();
|
|
382
409
|
this.metrics.recordTreeInsertions(Number(treeInsertionEnd - treeInsertionStart) / 1_000);
|
|
383
410
|
}
|
|
@@ -385,17 +412,29 @@ export class PublicProcessor implements Traceable {
|
|
|
385
412
|
/** Processes the given tx within deadline. Returns timeout if deadline is hit. */
|
|
386
413
|
private async processTxWithinDeadline(
|
|
387
414
|
tx: Tx,
|
|
388
|
-
deadline
|
|
415
|
+
deadline: Date | undefined,
|
|
389
416
|
): Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> {
|
|
390
|
-
const
|
|
417
|
+
const innerProcessFn: () => Promise<[ProcessedTx, NestedProcessReturnValues[] | undefined]> = tx.hasPublicCalls()
|
|
391
418
|
? () => this.processTxWithPublicCalls(tx)
|
|
392
419
|
: () => this.processPrivateOnlyTx(tx);
|
|
393
420
|
|
|
421
|
+
// Fake a delay per tx if instructed (used for tests)
|
|
422
|
+
const fakeDelayPerTxMs = this.opts.fakeProcessingDelayPerTxMs;
|
|
423
|
+
const processFn =
|
|
424
|
+
fakeDelayPerTxMs && fakeDelayPerTxMs > 0
|
|
425
|
+
? async () => {
|
|
426
|
+
const result = await innerProcessFn();
|
|
427
|
+
this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`);
|
|
428
|
+
await sleep(fakeDelayPerTxMs);
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
431
|
+
: innerProcessFn;
|
|
432
|
+
|
|
394
433
|
if (!deadline) {
|
|
395
434
|
return await processFn();
|
|
396
435
|
}
|
|
397
436
|
|
|
398
|
-
const txHash =
|
|
437
|
+
const txHash = tx.getTxHash();
|
|
399
438
|
const timeout = +deadline - this.dateProvider.now();
|
|
400
439
|
if (timeout <= 0) {
|
|
401
440
|
throw new PublicProcessorTimeoutError();
|
|
@@ -419,14 +458,16 @@ export class PublicProcessor implements Traceable {
|
|
|
419
458
|
* This is used in private only txs, since for txs with public calls
|
|
420
459
|
* the avm handles the fee payment itself.
|
|
421
460
|
*/
|
|
422
|
-
private async
|
|
461
|
+
private async performFeePaymentPublicDataWrite(txFee: Fr, feePayer: AztecAddress): Promise<PublicDataWrite> {
|
|
423
462
|
const feeJuiceAddress = ProtocolContractAddress.FeeJuice;
|
|
424
463
|
const balanceSlot = await computeFeePayerBalanceStorageSlot(feePayer);
|
|
425
464
|
const leafSlot = await computeFeePayerBalanceLeafSlot(feePayer);
|
|
465
|
+
// This high-level db is used as a convenient helper. It could be done with the merkleTree directly.
|
|
466
|
+
const treesDB = new PublicTreesDB(this.guardedMerkleTree);
|
|
426
467
|
|
|
427
468
|
this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);
|
|
428
469
|
|
|
429
|
-
const balance = await
|
|
470
|
+
const balance = await treesDB.storageRead(feeJuiceAddress, balanceSlot);
|
|
430
471
|
|
|
431
472
|
if (balance.lt(txFee)) {
|
|
432
473
|
throw new Error(
|
|
@@ -435,42 +476,47 @@ export class PublicProcessor implements Traceable {
|
|
|
435
476
|
}
|
|
436
477
|
|
|
437
478
|
const updatedBalance = balance.sub(txFee);
|
|
438
|
-
await
|
|
479
|
+
await treesDB.storageWrite(feeJuiceAddress, balanceSlot, updatedBalance);
|
|
439
480
|
|
|
440
481
|
return new PublicDataWrite(leafSlot, updatedBalance);
|
|
441
482
|
}
|
|
442
483
|
|
|
443
|
-
@trackSpan('PublicProcessor.processPrivateOnlyTx',
|
|
444
|
-
[Attributes.TX_HASH]:
|
|
484
|
+
@trackSpan('PublicProcessor.processPrivateOnlyTx', (tx: Tx) => ({
|
|
485
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
445
486
|
}))
|
|
446
487
|
private async processPrivateOnlyTx(tx: Tx): Promise<[ProcessedTx, undefined]> {
|
|
447
488
|
const gasFees = this.globalVariables.gasFees;
|
|
448
|
-
const transactionFee = tx.data.gasUsed
|
|
489
|
+
const transactionFee = computeTransactionFee(gasFees, tx.data.constants.txContext.gasSettings, tx.data.gasUsed);
|
|
449
490
|
|
|
450
|
-
const feePaymentPublicDataWrite = await this.
|
|
491
|
+
const feePaymentPublicDataWrite = await this.performFeePaymentPublicDataWrite(transactionFee, tx.data.feePayer);
|
|
451
492
|
|
|
452
|
-
const processedTx =
|
|
493
|
+
const processedTx = makeProcessedTxFromPrivateOnlyTx(
|
|
453
494
|
tx,
|
|
454
495
|
transactionFee,
|
|
455
496
|
feePaymentPublicDataWrite,
|
|
456
497
|
this.globalVariables,
|
|
457
498
|
);
|
|
458
499
|
|
|
459
|
-
|
|
460
|
-
tx
|
|
461
|
-
|
|
500
|
+
this.metrics.recordClassPublication(
|
|
501
|
+
...tx
|
|
502
|
+
.getContractClassLogs()
|
|
503
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
504
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
462
505
|
);
|
|
463
506
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
)
|
|
507
|
+
// Fee payment insertion has already been done. Do the rest.
|
|
508
|
+
await this.doTreeInsertionsForPrivateOnlyTx(processedTx);
|
|
509
|
+
|
|
510
|
+
// Add any contracts registered/deployed in this private-only tx to the block-level cache
|
|
511
|
+
// (add to tx-level cache and then commit to block-level cache)
|
|
512
|
+
await this.contractsDB.addNewContracts(tx);
|
|
513
|
+
this.contractsDB.commitContractsForTx();
|
|
514
|
+
|
|
469
515
|
return [processedTx, undefined];
|
|
470
516
|
}
|
|
471
517
|
|
|
472
|
-
@trackSpan('PublicProcessor.processTxWithPublicCalls',
|
|
473
|
-
[Attributes.TX_HASH]:
|
|
518
|
+
@trackSpan('PublicProcessor.processTxWithPublicCalls', tx => ({
|
|
519
|
+
[Attributes.TX_HASH]: tx.getTxHash().toString(),
|
|
474
520
|
}))
|
|
475
521
|
private async processTxWithPublicCalls(tx: Tx): Promise<[ProcessedTx, NestedProcessReturnValues[]]> {
|
|
476
522
|
const timer = new Timer();
|
|
@@ -487,32 +533,24 @@ export class PublicProcessor implements Traceable {
|
|
|
487
533
|
if (phase.reverted) {
|
|
488
534
|
this.metrics.recordRevertedPhase(phase.phase);
|
|
489
535
|
} else {
|
|
490
|
-
this.metrics.recordPhaseDuration(phase.phase, phase.durationMs);
|
|
536
|
+
this.metrics.recordPhaseDuration(phase.phase, phase.durationMs ?? 0);
|
|
491
537
|
}
|
|
492
538
|
});
|
|
493
539
|
|
|
494
|
-
const
|
|
495
|
-
tx.
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
.filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
|
|
502
|
-
.map(log => ContractClassRegisteredEvent.fromLog(log)),
|
|
540
|
+
const contractClassLogs = revertCode.isOK()
|
|
541
|
+
? tx.getContractClassLogs()
|
|
542
|
+
: tx.getSplitContractClassLogs(false /* revertible */);
|
|
543
|
+
this.metrics.recordClassPublication(
|
|
544
|
+
...contractClassLogs
|
|
545
|
+
.filter(log => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
546
|
+
.map(log => ContractClassPublishedEvent.fromLog(log)),
|
|
503
547
|
);
|
|
504
548
|
|
|
505
549
|
const phaseCount = processedPhases.length;
|
|
506
550
|
const durationMs = timer.ms();
|
|
507
551
|
this.metrics.recordTx(phaseCount, durationMs, gasUsed.publicGas);
|
|
508
552
|
|
|
509
|
-
const processedTx =
|
|
510
|
-
tx,
|
|
511
|
-
avmProvingRequest,
|
|
512
|
-
gasUsed,
|
|
513
|
-
revertCode,
|
|
514
|
-
revertReason,
|
|
515
|
-
);
|
|
553
|
+
const processedTx = makeProcessedTxFromTxWithPublicCalls(tx, avmProvingRequest, gasUsed, revertCode, revertReason);
|
|
516
554
|
|
|
517
555
|
const returnValues = processedPhases.find(({ phase }) => phase === TxExecutionPhase.APP_LOGIC)?.returnValues ?? [];
|
|
518
556
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
2
2
|
import type { Gas } from '@aztec/stdlib/gas';
|
|
3
3
|
import type { TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
4
|
import {
|
|
@@ -137,7 +137,7 @@ export class PublicProcessorMetrics {
|
|
|
137
137
|
this.phaseCount.add(1, { [Attributes.TX_PHASE_NAME]: phaseName, [Attributes.OK]: false });
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
recordClassPublication(...events: ContractClassPublishedEvent[]) {
|
|
141
141
|
let totalBytecode = 0;
|
|
142
142
|
for (const event of events) {
|
|
143
143
|
totalBytecode += event.packedPublicBytecode.length;
|