@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
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
L1_TO_L2_MSG_TREE_LEAF_COUNT,
|
|
3
|
+
NOTE_HASH_TREE_LEAF_COUNT,
|
|
4
|
+
NULLIFIER_SUBTREE_HEIGHT,
|
|
5
|
+
PUBLIC_DATA_SUBTREE_HEIGHT,
|
|
6
|
+
} from '@aztec/constants';
|
|
1
7
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
8
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
9
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
10
|
+
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
11
|
+
import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
|
|
6
12
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
7
13
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
8
14
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -13,26 +19,32 @@ import {
|
|
|
13
19
|
computePublicBytecodeCommitment,
|
|
14
20
|
} from '@aztec/stdlib/contract';
|
|
15
21
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
16
|
-
import type {
|
|
17
|
-
MerkleTreeCheckpointOperations,
|
|
18
|
-
MerkleTreeReadOperations,
|
|
19
|
-
MerkleTreeWriteOperations,
|
|
20
|
-
} from '@aztec/stdlib/interfaces/server';
|
|
22
|
+
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
21
23
|
import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
|
|
22
24
|
import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
import {
|
|
26
|
+
MerkleTreeId,
|
|
27
|
+
NullifierLeaf,
|
|
28
|
+
PublicDataTreeLeaf,
|
|
29
|
+
type PublicDataTreeLeafPreimage,
|
|
30
|
+
getTreeName,
|
|
31
|
+
} from '@aztec/stdlib/trees';
|
|
32
|
+
import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
|
|
33
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
34
|
+
|
|
35
|
+
import { strict as assert } from 'assert';
|
|
36
|
+
|
|
37
|
+
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
38
|
+
import { L1ToL2MessageIndexOutOfRangeError, NoteHashIndexOutOfRangeError } from './side_effect_errors.js';
|
|
27
39
|
import { TxContractCache } from './tx_contract_cache.js';
|
|
28
40
|
|
|
29
41
|
/**
|
|
30
|
-
* Implements the
|
|
42
|
+
* Implements the PublicContractsDBInterface using a ContractDataSource.
|
|
31
43
|
* Progressively records contracts in transaction as they are processed in a block.
|
|
32
44
|
* Separates block-level contract information (from processed/included txs) from the
|
|
33
45
|
* current tx's contract information (which may be cleared on tx revert/death).
|
|
34
46
|
*/
|
|
35
|
-
export class
|
|
47
|
+
export class PublicContractsDB implements PublicContractsDBInterface {
|
|
36
48
|
// Two caching layers for contract classes and instances.
|
|
37
49
|
// Tx-level cache:
|
|
38
50
|
// - The current tx's new contract information is cached
|
|
@@ -86,12 +98,8 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
86
98
|
*/
|
|
87
99
|
private async addNonRevertibleContractClasses(tx: Tx) {
|
|
88
100
|
const siloedContractClassLogs = tx.data.forPublic
|
|
89
|
-
?
|
|
90
|
-
|
|
91
|
-
/*siloed=*/ true,
|
|
92
|
-
)
|
|
93
|
-
: await tx.filterContractClassLogs(tx.data.forRollup!.end.contractClassLogsHashes, /*siloed=*/ true);
|
|
94
|
-
|
|
101
|
+
? tx.getSplitContractClassLogs(false /* revertible */)
|
|
102
|
+
: tx.getContractClassLogs();
|
|
95
103
|
await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxNonRevertibleCache, 'non-revertible');
|
|
96
104
|
}
|
|
97
105
|
|
|
@@ -101,13 +109,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
101
109
|
* @param tx - The transaction to add revertible contract classes from.
|
|
102
110
|
*/
|
|
103
111
|
private async addRevertibleContractClasses(tx: Tx) {
|
|
104
|
-
const siloedContractClassLogs = tx.data.forPublic
|
|
105
|
-
? await tx.filterContractClassLogs(
|
|
106
|
-
tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes,
|
|
107
|
-
/*siloed=*/ true,
|
|
108
|
-
)
|
|
109
|
-
: [];
|
|
110
|
-
|
|
112
|
+
const siloedContractClassLogs = tx.data.forPublic ? tx.getSplitContractClassLogs(true /* revertible */) : [];
|
|
111
113
|
await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxRevertibleCache, 'revertible');
|
|
112
114
|
}
|
|
113
115
|
|
|
@@ -149,12 +151,12 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
149
151
|
cacheType: string,
|
|
150
152
|
) {
|
|
151
153
|
const contractClassEvents = siloedContractClassLogs
|
|
152
|
-
.filter((log: ContractClassLog) =>
|
|
153
|
-
.map((log: ContractClassLog) =>
|
|
154
|
+
.filter((log: ContractClassLog) => ContractClassPublishedEvent.isContractClassPublishedEvent(log))
|
|
155
|
+
.map((log: ContractClassLog) => ContractClassPublishedEvent.fromLog(log));
|
|
154
156
|
|
|
155
157
|
// Cache contract classes
|
|
156
158
|
await Promise.all(
|
|
157
|
-
contractClassEvents.map(async (event:
|
|
159
|
+
contractClassEvents.map(async (event: ContractClassPublishedEvent) => {
|
|
158
160
|
this.log.debug(`Adding class ${event.contractClassId.toString()} to contract's ${cacheType} tx cache`);
|
|
159
161
|
const contractClass = await event.toContractClassPublic();
|
|
160
162
|
|
|
@@ -171,8 +173,8 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
171
173
|
*/
|
|
172
174
|
private addContractInstancesFromLogs(contractInstanceLogs: PrivateLog[], cache: TxContractCache, cacheType: string) {
|
|
173
175
|
const contractInstanceEvents = contractInstanceLogs
|
|
174
|
-
.filter(log =>
|
|
175
|
-
.map(log =>
|
|
176
|
+
.filter(log => ContractInstancePublishedEvent.isContractInstancePublishedEvent(log))
|
|
177
|
+
.map(log => ContractInstancePublishedEvent.fromLog(log));
|
|
176
178
|
|
|
177
179
|
// Cache contract instances
|
|
178
180
|
contractInstanceEvents.forEach(e => {
|
|
@@ -210,13 +212,25 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
210
212
|
this.currentTxRevertibleCache.clear();
|
|
211
213
|
}
|
|
212
214
|
|
|
213
|
-
|
|
215
|
+
// TODO(fcarreiro/alvaro): This method currently needs a blockNumber. Since this class
|
|
216
|
+
// is only ever used for a given block, it should be possible to construct it with the
|
|
217
|
+
// block number and then forget about it. However, since this class (and interface) is
|
|
218
|
+
// currently more externally exposed than we'd want to, Facundo preferred to not add it
|
|
219
|
+
// to the constructor right now. If we can make this class more private, we should
|
|
220
|
+
// reconsider this. A litmus test is in how many places we need to initialize with a
|
|
221
|
+
// dummy block number (tests or not) and pass block numbers to `super`.
|
|
222
|
+
// Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
|
|
223
|
+
// the comment as is as I am not part of the AVM cabal.
|
|
224
|
+
public async getContractInstance(
|
|
225
|
+
address: AztecAddress,
|
|
226
|
+
timestamp: UInt64,
|
|
227
|
+
): Promise<ContractInstanceWithAddress | undefined> {
|
|
214
228
|
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
215
229
|
return (
|
|
216
230
|
this.currentTxRevertibleCache.getInstance(address) ??
|
|
217
231
|
this.currentTxNonRevertibleCache.getInstance(address) ??
|
|
218
232
|
this.blockCache.getInstance(address) ??
|
|
219
|
-
(await this.dataSource.getContract(address))
|
|
233
|
+
(await this.dataSource.getContract(address, timestamp))
|
|
220
234
|
);
|
|
221
235
|
}
|
|
222
236
|
|
|
@@ -256,72 +270,78 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
256
270
|
}
|
|
257
271
|
|
|
258
272
|
public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
259
|
-
return await this.dataSource.
|
|
273
|
+
return await this.dataSource.getDebugFunctionName(address, selector);
|
|
260
274
|
}
|
|
261
275
|
}
|
|
262
276
|
|
|
263
277
|
/**
|
|
264
|
-
* A
|
|
278
|
+
* A high-level class that provides access to the merkle trees.
|
|
279
|
+
*
|
|
280
|
+
* This class is just a helper wrapper around a merkle db. Anything that you can do with it
|
|
281
|
+
* can also be done directly with the merkle db. This class should NOT be exposed or used
|
|
282
|
+
* outside of `simulator/src/public`.
|
|
283
|
+
*
|
|
284
|
+
* NOTE: This class is currently written in such a way that it would generate the
|
|
285
|
+
* necessary hints if used with a hinting merkle db. This is a bit of a leak of concepts.
|
|
286
|
+
* Eventually we can have everything depend on a config/factory at the TxSimulator level
|
|
287
|
+
* to decide whether to use hints or not (same with tracing, etc).
|
|
265
288
|
*/
|
|
266
|
-
export class
|
|
267
|
-
private logger = createLogger('simulator:
|
|
289
|
+
export class PublicTreesDB implements PublicStateDBInterface {
|
|
290
|
+
private logger = createLogger('simulator:public-trees-db');
|
|
268
291
|
|
|
269
|
-
constructor(
|
|
270
|
-
super(dataSource);
|
|
271
|
-
}
|
|
292
|
+
constructor(private readonly db: MerkleTreeWriteOperations) {}
|
|
272
293
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
public async createCheckpoint() {
|
|
277
|
-
await this.db.createCheckpoint();
|
|
278
|
-
}
|
|
294
|
+
public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
295
|
+
const timer = new Timer();
|
|
296
|
+
const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
|
|
279
297
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
await this.db.commitCheckpoint();
|
|
285
|
-
}
|
|
298
|
+
const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
|
|
299
|
+
if (!lowLeafResult) {
|
|
300
|
+
throw new Error('Low leaf not found');
|
|
301
|
+
}
|
|
286
302
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
303
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
304
|
+
await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
|
|
305
|
+
// Unconditionally fetching the preimage for the hints. Move it to the hinting layer?
|
|
306
|
+
const preimage = (await this.db.getLeafPreimage(
|
|
307
|
+
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
308
|
+
lowLeafResult.index,
|
|
309
|
+
)) as PublicDataTreeLeafPreimage;
|
|
293
310
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
311
|
+
const result = lowLeafResult.alreadyPresent ? preimage.leaf.value : Fr.ZERO;
|
|
312
|
+
this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`, {
|
|
313
|
+
eventName: 'public-db-access',
|
|
314
|
+
duration: timer.ms(),
|
|
315
|
+
operation: 'storage-read',
|
|
316
|
+
} satisfies PublicDBAccessStats);
|
|
297
317
|
|
|
298
|
-
|
|
299
|
-
* Reads a value from public storage, returning zero if none.
|
|
300
|
-
* @param contract - Owner of the storage.
|
|
301
|
-
* @param slot - Slot to read in the contract storage.
|
|
302
|
-
* @returns The current value in the storage slot.
|
|
303
|
-
*/
|
|
304
|
-
public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
305
|
-
return await readPublicState(this.db, contract, slot);
|
|
318
|
+
return result;
|
|
306
319
|
}
|
|
307
320
|
|
|
308
|
-
/**
|
|
309
|
-
* Records a write to public storage.
|
|
310
|
-
* @param contract - Owner of the storage.
|
|
311
|
-
* @param slot - Slot to read in the contract storage.
|
|
312
|
-
* @param newValue - The new value to store.
|
|
313
|
-
* @returns The slot of the written leaf in the public data tree.
|
|
314
|
-
*/
|
|
315
321
|
public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
|
|
322
|
+
const timer = new Timer();
|
|
316
323
|
const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
|
|
317
324
|
const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
|
|
318
325
|
await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
|
|
326
|
+
|
|
327
|
+
this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`, {
|
|
328
|
+
eventName: 'public-db-access',
|
|
329
|
+
duration: timer.ms(),
|
|
330
|
+
operation: 'storage-write',
|
|
331
|
+
} satisfies PublicDBAccessStats);
|
|
319
332
|
}
|
|
320
333
|
|
|
321
|
-
public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr
|
|
334
|
+
public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr> {
|
|
322
335
|
const timer = new Timer();
|
|
336
|
+
if (leafIndex > L1_TO_L2_MSG_TREE_LEAF_COUNT) {
|
|
337
|
+
throw new L1ToL2MessageIndexOutOfRangeError(Number(leafIndex));
|
|
338
|
+
}
|
|
323
339
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
|
|
324
|
-
|
|
340
|
+
assert(leafValue !== undefined, 'Unexpected null response from l1 to l2 message tree');
|
|
341
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
342
|
+
await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
|
|
343
|
+
|
|
344
|
+
this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
|
|
325
345
|
eventName: 'public-db-access',
|
|
326
346
|
duration: timer.ms(),
|
|
327
347
|
operation: 'get-l1-to-l2-message-leaf-value',
|
|
@@ -329,41 +349,120 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
329
349
|
return leafValue;
|
|
330
350
|
}
|
|
331
351
|
|
|
332
|
-
public async
|
|
352
|
+
public async getNoteHash(leafIndex: bigint): Promise<Fr> {
|
|
333
353
|
const timer = new Timer();
|
|
354
|
+
if (leafIndex > NOTE_HASH_TREE_LEAF_COUNT) {
|
|
355
|
+
throw new NoteHashIndexOutOfRangeError(Number(leafIndex));
|
|
356
|
+
}
|
|
334
357
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
335
|
-
|
|
358
|
+
assert(leafValue !== undefined, 'Unexpected null response from note hash tree');
|
|
359
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
360
|
+
await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
361
|
+
|
|
362
|
+
this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
|
|
336
363
|
eventName: 'public-db-access',
|
|
337
364
|
duration: timer.ms(),
|
|
338
|
-
operation: 'get-
|
|
365
|
+
operation: 'get-note-hash',
|
|
339
366
|
} satisfies PublicDBAccessStats);
|
|
340
367
|
return leafValue;
|
|
341
368
|
}
|
|
342
369
|
|
|
343
|
-
public async
|
|
370
|
+
public async writeNoteHash(noteHash: Fr): Promise<void> {
|
|
344
371
|
const timer = new Timer();
|
|
345
|
-
|
|
346
|
-
|
|
372
|
+
await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, [noteHash]);
|
|
373
|
+
|
|
374
|
+
this.logger.debug(`Wrote note hash (noteHash=${noteHash})`, {
|
|
347
375
|
eventName: 'public-db-access',
|
|
348
376
|
duration: timer.ms(),
|
|
349
|
-
operation: '
|
|
377
|
+
operation: 'write-note-hash',
|
|
350
378
|
} satisfies PublicDBAccessStats);
|
|
351
|
-
return index;
|
|
352
379
|
}
|
|
353
|
-
}
|
|
354
380
|
|
|
355
|
-
|
|
356
|
-
|
|
381
|
+
public async checkNullifierExists(nullifier: Fr): Promise<boolean> {
|
|
382
|
+
const timer = new Timer();
|
|
383
|
+
const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
|
|
384
|
+
if (!lowLeafResult) {
|
|
385
|
+
throw new Error('Low leaf not found');
|
|
386
|
+
}
|
|
387
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
388
|
+
await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
|
|
389
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
390
|
+
await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
|
|
391
|
+
const exists = lowLeafResult.alreadyPresent;
|
|
357
392
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
393
|
+
this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`, {
|
|
394
|
+
eventName: 'public-db-access',
|
|
395
|
+
duration: timer.ms(),
|
|
396
|
+
operation: 'check-nullifier-exists',
|
|
397
|
+
} satisfies PublicDBAccessStats);
|
|
398
|
+
return exists;
|
|
361
399
|
}
|
|
362
400
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
401
|
+
public async writeNullifier(siloedNullifier: Fr): Promise<void> {
|
|
402
|
+
const timer = new Timer();
|
|
403
|
+
await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
|
|
404
|
+
|
|
405
|
+
this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`, {
|
|
406
|
+
eventName: 'public-db-access',
|
|
407
|
+
duration: timer.ms(),
|
|
408
|
+
operation: 'write-nullifier',
|
|
409
|
+
} satisfies PublicDBAccessStats);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
|
|
413
|
+
const timer = new Timer();
|
|
367
414
|
|
|
368
|
-
|
|
415
|
+
switch (treeId) {
|
|
416
|
+
// Indexed trees.
|
|
417
|
+
case MerkleTreeId.NULLIFIER_TREE:
|
|
418
|
+
await this.db.batchInsert(
|
|
419
|
+
treeId,
|
|
420
|
+
Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),
|
|
421
|
+
NULLIFIER_SUBTREE_HEIGHT,
|
|
422
|
+
);
|
|
423
|
+
break;
|
|
424
|
+
case MerkleTreeId.PUBLIC_DATA_TREE:
|
|
425
|
+
await this.db.batchInsert(
|
|
426
|
+
treeId,
|
|
427
|
+
Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),
|
|
428
|
+
PUBLIC_DATA_SUBTREE_HEIGHT,
|
|
429
|
+
);
|
|
430
|
+
break;
|
|
431
|
+
// Append-only trees.
|
|
432
|
+
case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:
|
|
433
|
+
case MerkleTreeId.NOTE_HASH_TREE:
|
|
434
|
+
await this.db.appendLeaves(treeId, Array(leavesToInsert).fill(Fr.ZERO));
|
|
435
|
+
break;
|
|
436
|
+
default:
|
|
437
|
+
throw new Error(`Padding not supported for tree ${treeId}`);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`, {
|
|
441
|
+
eventName: 'public-db-access',
|
|
442
|
+
duration: timer.ms(),
|
|
443
|
+
operation: 'pad-tree',
|
|
444
|
+
} satisfies PublicDBAccessStats);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
public async createCheckpoint(): Promise<void> {
|
|
448
|
+
await this.db.createCheckpoint();
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
public async commitCheckpoint(): Promise<void> {
|
|
452
|
+
await this.db.commitCheckpoint();
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
public async revertCheckpoint(): Promise<void> {
|
|
456
|
+
await this.db.revertCheckpoint();
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
public async getTreeSnapshots(): Promise<TreeSnapshots> {
|
|
460
|
+
const stateReference = await this.db.getStateReference();
|
|
461
|
+
return new TreeSnapshots(
|
|
462
|
+
stateReference.l1ToL2MessageTree,
|
|
463
|
+
stateReference.partial.noteHashTree,
|
|
464
|
+
stateReference.partial.nullifierTree,
|
|
465
|
+
stateReference.partial.publicDataTree,
|
|
466
|
+
);
|
|
467
|
+
}
|
|
369
468
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Any known (and checked) error that can be thrown during public execution.
|
|
3
|
+
* Includes AvmExecutionErrors and SideEffectErrors.
|
|
4
|
+
*
|
|
5
|
+
* AvmSimulator catches any checked errors before returning a boolean "reverted".
|
|
6
|
+
* Unchecked errors are generally the result of a bug. They are propagated and
|
|
7
|
+
* ultimately will be the resonsibility of PublicProcessor to handle.
|
|
8
|
+
*/
|
|
9
|
+
export abstract class CheckedPublicExecutionError extends Error {
|
|
10
|
+
constructor(message: string) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'CheckedPublicExecutionError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { SerialQueue } from '@aztec/foundation/queue';
|
|
2
|
+
import type { IndexedTreeLeafPreimage, SiblingPath } from '@aztec/foundation/trees';
|
|
3
|
+
import type {
|
|
4
|
+
BatchInsertionResult,
|
|
5
|
+
IndexedTreeId,
|
|
6
|
+
MerkleTreeId,
|
|
7
|
+
MerkleTreeLeafType,
|
|
8
|
+
MerkleTreeWriteOperations,
|
|
9
|
+
SequentialInsertionResult,
|
|
10
|
+
TreeHeights,
|
|
11
|
+
TreeInfo,
|
|
12
|
+
} from '@aztec/stdlib/trees';
|
|
13
|
+
import type { BlockHeader, StateReference } from '@aztec/stdlib/tx';
|
|
14
|
+
import type { WorldStateRevision } from '@aztec/stdlib/world-state';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Wraps an instance of `MerkleTreeWriteOperations` to allow the sequencer to gate access.
|
|
18
|
+
* If transactions execution goes past the deadline, the simulator will continue to execute and update the world state
|
|
19
|
+
* The public processor however requires that the world state remain constant after the deadline in order to finalize the block
|
|
20
|
+
* The public processor provides this implementation of MerkleTreeWriteOperations to the simulator
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
|
|
24
|
+
private isStopped = false;
|
|
25
|
+
private serialQueue = new SerialQueue();
|
|
26
|
+
|
|
27
|
+
constructor(private target: MerkleTreeWriteOperations) {
|
|
28
|
+
this.serialQueue.start();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private guard() {
|
|
32
|
+
if (this.isStopped) {
|
|
33
|
+
throw new Error('Merkle tree access has been stopped');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Executes the provided function only if the guard is not stopped.
|
|
38
|
+
private guardAndPush<T>(fn: () => Promise<T>): Promise<T> {
|
|
39
|
+
this.guard();
|
|
40
|
+
return this.serialQueue.put(() => {
|
|
41
|
+
this.guard();
|
|
42
|
+
return fn();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public getUnderlyingFork(): MerkleTreeWriteOperations {
|
|
47
|
+
return this.target;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Stops all further access to the merkle trees via this object
|
|
51
|
+
async stop(): Promise<void> {
|
|
52
|
+
await this.serialQueue.put(() => {
|
|
53
|
+
this.isStopped = true;
|
|
54
|
+
return Promise.resolve();
|
|
55
|
+
});
|
|
56
|
+
return this.serialQueue.end();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Proxy all methods to the target
|
|
60
|
+
appendLeaves<ID extends MerkleTreeId>(treeId: ID, leaves: MerkleTreeLeafType<ID>[]): Promise<void> {
|
|
61
|
+
return this.guardAndPush(() => this.target.appendLeaves(treeId, leaves));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
updateArchive(header: BlockHeader): Promise<void> {
|
|
65
|
+
return this.guardAndPush(() => this.target.updateArchive(header));
|
|
66
|
+
}
|
|
67
|
+
batchInsert<TreeHeight extends number, SubtreeSiblingPathHeight extends number, ID extends IndexedTreeId>(
|
|
68
|
+
treeId: ID,
|
|
69
|
+
leaves: Buffer[],
|
|
70
|
+
subtreeHeight: number,
|
|
71
|
+
): Promise<BatchInsertionResult<TreeHeight, SubtreeSiblingPathHeight>> {
|
|
72
|
+
return this.guardAndPush(() => this.target.batchInsert(treeId, leaves, subtreeHeight));
|
|
73
|
+
}
|
|
74
|
+
sequentialInsert<TreeHeight extends number, ID extends IndexedTreeId>(
|
|
75
|
+
treeId: ID,
|
|
76
|
+
leaves: Buffer[],
|
|
77
|
+
): Promise<SequentialInsertionResult<TreeHeight>> {
|
|
78
|
+
return this.guardAndPush(() => this.target.sequentialInsert(treeId, leaves));
|
|
79
|
+
}
|
|
80
|
+
close(): Promise<void> {
|
|
81
|
+
return this.guardAndPush(() => this.target.close());
|
|
82
|
+
}
|
|
83
|
+
getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo> {
|
|
84
|
+
return this.guardAndPush(() => this.target.getTreeInfo(treeId));
|
|
85
|
+
}
|
|
86
|
+
getStateReference(): Promise<StateReference> {
|
|
87
|
+
return this.guardAndPush(() => this.target.getStateReference());
|
|
88
|
+
}
|
|
89
|
+
getInitialHeader(): BlockHeader {
|
|
90
|
+
return this.target.getInitialHeader();
|
|
91
|
+
}
|
|
92
|
+
public getRevision(): WorldStateRevision {
|
|
93
|
+
return this.target.getRevision();
|
|
94
|
+
}
|
|
95
|
+
getSiblingPath<ID extends MerkleTreeId>(treeId: ID, index: bigint): Promise<SiblingPath<TreeHeights[ID]>> {
|
|
96
|
+
return this.guardAndPush(() => this.target.getSiblingPath(treeId, index));
|
|
97
|
+
}
|
|
98
|
+
getPreviousValueIndex<ID extends IndexedTreeId>(
|
|
99
|
+
treeId: ID,
|
|
100
|
+
value: bigint,
|
|
101
|
+
): Promise<{ index: bigint; alreadyPresent: boolean } | undefined> {
|
|
102
|
+
return this.guardAndPush(() => this.target.getPreviousValueIndex(treeId, value));
|
|
103
|
+
}
|
|
104
|
+
getLeafPreimage<ID extends IndexedTreeId>(treeId: ID, index: bigint): Promise<IndexedTreeLeafPreimage | undefined> {
|
|
105
|
+
return this.guardAndPush(() => this.target.getLeafPreimage(treeId, index));
|
|
106
|
+
}
|
|
107
|
+
findLeafIndices<ID extends MerkleTreeId>(
|
|
108
|
+
treeId: ID,
|
|
109
|
+
values: MerkleTreeLeafType<ID>[],
|
|
110
|
+
): Promise<(bigint | undefined)[]> {
|
|
111
|
+
return this.guardAndPush(() => this.target.findLeafIndices(treeId, values));
|
|
112
|
+
}
|
|
113
|
+
findLeafIndicesAfter<ID extends MerkleTreeId>(
|
|
114
|
+
treeId: ID,
|
|
115
|
+
values: MerkleTreeLeafType<ID>[],
|
|
116
|
+
startIndex: bigint,
|
|
117
|
+
): Promise<(bigint | undefined)[]> {
|
|
118
|
+
return this.guardAndPush(() => this.target.findLeafIndicesAfter(treeId, values, startIndex));
|
|
119
|
+
}
|
|
120
|
+
getLeafValue<ID extends MerkleTreeId>(
|
|
121
|
+
treeId: ID,
|
|
122
|
+
index: bigint,
|
|
123
|
+
): Promise<MerkleTreeLeafType<typeof treeId> | undefined> {
|
|
124
|
+
return this.guardAndPush(() => this.target.getLeafValue(treeId, index));
|
|
125
|
+
}
|
|
126
|
+
getBlockNumbersForLeafIndices<ID extends MerkleTreeId>(
|
|
127
|
+
treeId: ID,
|
|
128
|
+
leafIndices: bigint[],
|
|
129
|
+
): Promise<(bigint | undefined)[]> {
|
|
130
|
+
return this.guardAndPush(() => this.target.getBlockNumbersForLeafIndices(treeId, leafIndices));
|
|
131
|
+
}
|
|
132
|
+
createCheckpoint(): Promise<void> {
|
|
133
|
+
return this.guardAndPush(() => this.target.createCheckpoint());
|
|
134
|
+
}
|
|
135
|
+
commitCheckpoint(): Promise<void> {
|
|
136
|
+
return this.guardAndPush(() => this.target.commitCheckpoint());
|
|
137
|
+
}
|
|
138
|
+
revertCheckpoint(): Promise<void> {
|
|
139
|
+
return this.guardAndPush(() => this.target.revertCheckpoint());
|
|
140
|
+
}
|
|
141
|
+
commitAllCheckpoints(): Promise<void> {
|
|
142
|
+
return this.guardAndPush(() => this.target.commitAllCheckpoints());
|
|
143
|
+
}
|
|
144
|
+
revertAllCheckpoints(): Promise<void> {
|
|
145
|
+
return this.guardAndPush(() => this.target.revertAllCheckpoints());
|
|
146
|
+
}
|
|
147
|
+
findSiblingPaths<ID extends MerkleTreeId>(
|
|
148
|
+
treeId: ID,
|
|
149
|
+
values: MerkleTreeLeafType<ID>[],
|
|
150
|
+
): Promise<({ path: SiblingPath<TreeHeights[ID]>; index: bigint } | undefined)[]> {
|
|
151
|
+
return this.guardAndPush(() => this.target.findSiblingPaths(treeId, values));
|
|
152
|
+
}
|
|
153
|
+
}
|