@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.0208eb9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -9
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +65 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +10 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +27 -35
- package/dest/public/avm/avm_machine_state.d.ts +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +32 -42
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +45 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +58 -55
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +79 -75
- package/dest/public/avm/serialization/instruction_serialization.d.ts +14 -5
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +70 -35
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +37 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +33 -23
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +262 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +55 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +138 -72
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +355 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
- package/dest/public/public_processor/public_processor.d.ts +28 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +576 -136
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +132 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +25 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +220 -207
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +56 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +307 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +39 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +21 -35
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
- package/src/private/acvm_wasm.ts +76 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +26 -38
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +81 -48
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -10
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +22 -10
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +89 -80
- package/src/public/avm/serialization/instruction_serialization.ts +75 -34
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/executor_metrics.ts +49 -23
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +228 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1721 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +223 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +141 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +607 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +257 -179
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +211 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +43 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +99 -322
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +397 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.js +0 -62
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -1,327 +1,278 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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';
|
|
7
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
|
+
import { type Logger, type LoggerBindings, 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';
|
|
9
15
|
import {
|
|
16
|
+
AllContractDeploymentData,
|
|
10
17
|
type ContractClassPublic,
|
|
11
18
|
type ContractDataSource,
|
|
19
|
+
type ContractDeploymentData,
|
|
12
20
|
type ContractInstanceWithAddress,
|
|
13
21
|
computePublicBytecodeCommitment,
|
|
14
22
|
} from '@aztec/stdlib/contract';
|
|
15
23
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
16
|
-
import type {
|
|
17
|
-
MerkleTreeCheckpointOperations,
|
|
18
|
-
MerkleTreeReadOperations,
|
|
19
|
-
MerkleTreeWriteOperations,
|
|
20
|
-
} from '@aztec/stdlib/interfaces/server';
|
|
21
|
-
import { ContractClassLog, PrivateLog } from '@aztec/stdlib/logs';
|
|
24
|
+
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
22
25
|
import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
|
|
23
|
-
import {
|
|
24
|
-
|
|
26
|
+
import {
|
|
27
|
+
MerkleTreeId,
|
|
28
|
+
NullifierLeaf,
|
|
29
|
+
PublicDataTreeLeaf,
|
|
30
|
+
type PublicDataTreeLeafPreimage,
|
|
31
|
+
getTreeName,
|
|
32
|
+
} from '@aztec/stdlib/trees';
|
|
33
|
+
import { TreeSnapshots, type Tx } from '@aztec/stdlib/tx';
|
|
34
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
35
|
+
|
|
36
|
+
import { strict as assert } from 'assert';
|
|
25
37
|
|
|
26
|
-
import
|
|
27
|
-
import {
|
|
38
|
+
import { ContractsDbCheckpoint } from './contracts_db_checkpoint.js';
|
|
39
|
+
import type { PublicContractsDBInterface, PublicStateDBInterface } from './db_interfaces.js';
|
|
40
|
+
import { L1ToL2MessageIndexOutOfRangeError, NoteHashIndexOutOfRangeError } from './side_effect_errors.js';
|
|
28
41
|
|
|
29
42
|
/**
|
|
30
|
-
* Implements the
|
|
31
|
-
*
|
|
32
|
-
* Separates block-level contract information (from processed/included txs) from the
|
|
33
|
-
* current tx's contract information (which may be cleared on tx revert/death).
|
|
43
|
+
* Implements the PublicContractsDBInterface using a ContractDataSource.
|
|
44
|
+
* Uses a stack-based checkpoint model for managing contract state.
|
|
34
45
|
*/
|
|
35
|
-
export class
|
|
36
|
-
|
|
37
|
-
// Tx-level cache:
|
|
38
|
-
// - The current tx's new contract information is cached
|
|
39
|
-
// in currentTxNonRevertibleCache and currentTxRevertibleCache.
|
|
40
|
-
// Block-level cache:
|
|
41
|
-
// - Contract information from earlier in the block, usable by later txs.
|
|
42
|
-
// When a tx succeeds, that tx's caches are merged into the block cache and cleared.
|
|
43
|
-
private currentTxNonRevertibleCache = new TxContractCache();
|
|
44
|
-
private currentTxRevertibleCache = new TxContractCache();
|
|
45
|
-
private blockCache = new TxContractCache();
|
|
46
|
-
// Separate flat cache for bytecode commitments.
|
|
47
|
-
private bytecodeCommitmentCache = new Map<string, Fr>();
|
|
48
|
-
|
|
49
|
-
private log = createLogger('simulator:contracts-data-source');
|
|
50
|
-
|
|
51
|
-
constructor(private dataSource: ContractDataSource) {}
|
|
46
|
+
export class PublicContractsDB implements PublicContractsDBInterface {
|
|
47
|
+
private contractStateStack: ContractsDbCheckpoint[] = [new ContractsDbCheckpoint()];
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
* Add new contracts from a transaction
|
|
55
|
-
* @param tx - The transaction to add contracts from.
|
|
56
|
-
*/
|
|
57
|
-
public async addNewContracts(tx: Tx): Promise<void> {
|
|
58
|
-
await this.addNonRevertibleContractClasses(tx);
|
|
59
|
-
await this.addRevertibleContractClasses(tx);
|
|
60
|
-
this.addNonRevertibleContractInstances(tx);
|
|
61
|
-
this.addRevertibleContractInstances(tx);
|
|
62
|
-
}
|
|
49
|
+
private log: Logger;
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
await this.addNonRevertibleContractClasses(tx);
|
|
70
|
-
this.addNonRevertibleContractInstances(tx);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Add revertible contracts from a transaction
|
|
75
|
-
* @param tx - The transaction to add revertible contracts from.
|
|
76
|
-
*/
|
|
77
|
-
public async addNewRevertibleContracts(tx: Tx) {
|
|
78
|
-
await this.addRevertibleContractClasses(tx);
|
|
79
|
-
this.addRevertibleContractInstances(tx);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Add non-revertible contract classes from a transaction
|
|
84
|
-
* For private-only txs, this will be all contract classes (found in tx.data.forPublic)
|
|
85
|
-
* @param tx - The transaction to add non-revertible contract classes from.
|
|
86
|
-
*/
|
|
87
|
-
private async addNonRevertibleContractClasses(tx: Tx) {
|
|
88
|
-
const siloedContractClassLogs = tx.data.forPublic
|
|
89
|
-
? await tx.filterContractClassLogs(
|
|
90
|
-
tx.data.forPublic!.nonRevertibleAccumulatedData.contractClassLogsHashes,
|
|
91
|
-
/*siloed=*/ true,
|
|
92
|
-
)
|
|
93
|
-
: await tx.filterContractClassLogs(tx.data.forRollup!.end.contractClassLogsHashes, /*siloed=*/ true);
|
|
94
|
-
|
|
95
|
-
await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxNonRevertibleCache, 'non-revertible');
|
|
51
|
+
constructor(
|
|
52
|
+
private dataSource: ContractDataSource,
|
|
53
|
+
bindings?: LoggerBindings,
|
|
54
|
+
) {
|
|
55
|
+
this.log = createLogger('simulator:contracts-data-source', bindings);
|
|
96
56
|
}
|
|
97
57
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* None for private-only txs.
|
|
101
|
-
* @param tx - The transaction to add revertible contract classes from.
|
|
102
|
-
*/
|
|
103
|
-
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
|
-
|
|
111
|
-
await this.addContractClassesFromLogs(siloedContractClassLogs, this.currentTxRevertibleCache, 'revertible');
|
|
112
|
-
}
|
|
58
|
+
public async addContracts(contractDeploymentData: ContractDeploymentData): Promise<void> {
|
|
59
|
+
const currentState = this.getCurrentState();
|
|
113
60
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
*/
|
|
119
|
-
private addNonRevertibleContractInstances(tx: Tx) {
|
|
120
|
-
const contractInstanceLogs = tx.data.forPublic
|
|
121
|
-
? tx.data.forPublic!.nonRevertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
|
|
122
|
-
: tx.data.forRollup!.end.privateLogs.filter(l => !l.isEmpty());
|
|
61
|
+
await this.addContractClassesFromEvents(
|
|
62
|
+
ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),
|
|
63
|
+
currentState,
|
|
64
|
+
);
|
|
123
65
|
|
|
124
|
-
this.
|
|
66
|
+
this.addContractInstancesFromEvents(
|
|
67
|
+
ContractInstancePublishedEvent.extractContractInstanceEvents(contractDeploymentData.getPrivateLogs()),
|
|
68
|
+
currentState,
|
|
69
|
+
);
|
|
125
70
|
}
|
|
126
71
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
*/
|
|
132
|
-
private addRevertibleContractInstances(tx: Tx) {
|
|
133
|
-
const contractInstanceLogs = tx.data.forPublic
|
|
134
|
-
? tx.data.forPublic!.revertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
|
|
135
|
-
: [];
|
|
136
|
-
|
|
137
|
-
this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxRevertibleCache, 'revertible');
|
|
72
|
+
public async addNewContracts(tx: Tx): Promise<void> {
|
|
73
|
+
const contractDeploymentData = AllContractDeploymentData.fromTx(tx);
|
|
74
|
+
await this.addContracts(contractDeploymentData.getNonRevertibleContractDeploymentData());
|
|
75
|
+
await this.addContracts(contractDeploymentData.getRevertibleContractDeploymentData());
|
|
138
76
|
}
|
|
139
77
|
|
|
140
78
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
* @param cache - The cache to store the contract classes in
|
|
144
|
-
* @param cacheType - Type of cache (for logging)
|
|
79
|
+
* Creates a new checkpoint, copying the current state for upcoming modifications,
|
|
80
|
+
* and enabling rollbacks to current state in case of a revert.
|
|
145
81
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
) {
|
|
151
|
-
const contractClassEvents = siloedContractClassLogs
|
|
152
|
-
.filter((log: ContractClassLog) => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
|
|
153
|
-
.map((log: ContractClassLog) => ContractClassRegisteredEvent.fromLog(log));
|
|
154
|
-
|
|
155
|
-
// Cache contract classes
|
|
156
|
-
await Promise.all(
|
|
157
|
-
contractClassEvents.map(async (event: ContractClassRegisteredEvent) => {
|
|
158
|
-
this.log.debug(`Adding class ${event.contractClassId.toString()} to contract's ${cacheType} tx cache`);
|
|
159
|
-
const contractClass = await event.toContractClassPublic();
|
|
160
|
-
|
|
161
|
-
cache.addClass(event.contractClassId, contractClass);
|
|
162
|
-
}),
|
|
163
|
-
);
|
|
82
|
+
public createCheckpoint(): void {
|
|
83
|
+
const currentState = this.getCurrentState();
|
|
84
|
+
const newState = currentState.deepCopy();
|
|
85
|
+
this.contractStateStack.push(newState);
|
|
164
86
|
}
|
|
165
87
|
|
|
166
88
|
/**
|
|
167
|
-
*
|
|
168
|
-
* @param contractInstanceLogs - Contract instance logs to process
|
|
169
|
-
* @param cache - The cache to store the contract instances in
|
|
170
|
-
* @param cacheType - Type of cache (for logging)
|
|
89
|
+
* Commits the current checkpoint, accepting its state latest.
|
|
171
90
|
*/
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
contractInstanceEvents.forEach(e => {
|
|
179
|
-
this.log.debug(
|
|
180
|
-
`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to ${cacheType} tx contract cache`,
|
|
181
|
-
);
|
|
182
|
-
cache.addInstance(e.address, e.toContractInstance());
|
|
183
|
-
});
|
|
91
|
+
public commitCheckpoint(): void {
|
|
92
|
+
if (this.contractStateStack.length <= 1) {
|
|
93
|
+
throw new Error('No checkpoint to commit');
|
|
94
|
+
}
|
|
95
|
+
const topState = this.contractStateStack.pop()!;
|
|
96
|
+
this.contractStateStack[this.contractStateStack.length - 1] = topState;
|
|
184
97
|
}
|
|
185
98
|
|
|
186
99
|
/**
|
|
187
|
-
*
|
|
100
|
+
* Commits the current checkpoint, not erroring if there is no checkpoint
|
|
101
|
+
* to commit. This is useful to do a sanity commit at the end of tx execution,
|
|
102
|
+
* doing nothing if the checkpoint was already reverted, but truly committing
|
|
103
|
+
* otherwise.
|
|
188
104
|
*/
|
|
189
|
-
public
|
|
190
|
-
this.
|
|
191
|
-
|
|
192
|
-
|
|
105
|
+
public commitCheckpointOkIfNone(): void {
|
|
106
|
+
if (this.contractStateStack.length <= 1) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const topState = this.contractStateStack.pop()!;
|
|
110
|
+
this.contractStateStack[this.contractStateStack.length - 1] = topState;
|
|
193
111
|
}
|
|
194
112
|
|
|
195
113
|
/**
|
|
196
|
-
*
|
|
197
|
-
*
|
|
114
|
+
* Reverts the current checkpoint, discarding its state and rolling back
|
|
115
|
+
* to the state as of the latest checkpoint.
|
|
198
116
|
*/
|
|
199
|
-
public
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (!onlyNonRevertibles) {
|
|
204
|
-
// Merge revertible tx cache into block cache
|
|
205
|
-
this.blockCache.mergeFrom(this.currentTxRevertibleCache);
|
|
117
|
+
public revertCheckpoint(): void {
|
|
118
|
+
if (this.contractStateStack.length <= 1) {
|
|
119
|
+
throw new Error('No checkpoint to revert');
|
|
206
120
|
}
|
|
121
|
+
this.contractStateStack.pop();
|
|
122
|
+
}
|
|
207
123
|
|
|
208
|
-
|
|
209
|
-
this.
|
|
210
|
-
this.currentTxRevertibleCache.clear();
|
|
124
|
+
private getCurrentState(): ContractsDbCheckpoint {
|
|
125
|
+
return this.contractStateStack[this.contractStateStack.length - 1];
|
|
211
126
|
}
|
|
212
127
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
128
|
+
// TODO(fcarreiro/alvaro): This method currently needs a blockNumber. Since this class
|
|
129
|
+
// is only ever used for a given block, it should be possible to construct it with the
|
|
130
|
+
// block number and then forget about it. However, since this class (and interface) is
|
|
131
|
+
// currently more externally exposed than we'd want to, Facundo preferred to not add it
|
|
132
|
+
// to the constructor right now. If we can make this class more private, we should
|
|
133
|
+
// reconsider this. A litmus test is in how many places we need to initialize with a
|
|
134
|
+
// dummy block number (tests or not) and pass block numbers to `super`.
|
|
135
|
+
// Note: Block number got changed to timestamp so this comment ^ is outdated. Keeping
|
|
136
|
+
// the comment as is as I am not part of the AVM cabal.
|
|
137
|
+
public async getContractInstance(
|
|
138
|
+
address: AztecAddress,
|
|
139
|
+
timestamp: UInt64,
|
|
140
|
+
): Promise<ContractInstanceWithAddress | undefined> {
|
|
141
|
+
const currentState = this.getCurrentState();
|
|
142
|
+
return currentState.getInstance(address) ?? (await this.dataSource.getContract(address, timestamp));
|
|
221
143
|
}
|
|
222
144
|
|
|
223
145
|
public async getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined> {
|
|
224
|
-
|
|
225
|
-
return (
|
|
226
|
-
this.currentTxRevertibleCache.getClass(contractClassId) ??
|
|
227
|
-
this.currentTxNonRevertibleCache.getClass(contractClassId) ??
|
|
228
|
-
this.blockCache.getClass(contractClassId) ??
|
|
229
|
-
(await this.dataSource.getContractClass(contractClassId))
|
|
230
|
-
);
|
|
146
|
+
const currentState = this.getCurrentState();
|
|
147
|
+
return currentState.getClass(contractClassId) ?? (await this.dataSource.getContractClass(contractClassId));
|
|
231
148
|
}
|
|
232
149
|
|
|
233
150
|
public async getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined> {
|
|
234
|
-
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
// Now try from the store
|
|
241
|
-
const fromStore = await this.dataSource.getBytecodeCommitment(contractClassId);
|
|
242
|
-
if (fromStore !== undefined) {
|
|
243
|
-
this.bytecodeCommitmentCache.set(key, fromStore);
|
|
244
|
-
return fromStore;
|
|
151
|
+
const currentState = this.getCurrentState();
|
|
152
|
+
const commitment =
|
|
153
|
+
currentState.getBytecodeCommitment(contractClassId) ??
|
|
154
|
+
(await this.dataSource.getBytecodeCommitment(contractClassId));
|
|
155
|
+
if (commitment !== undefined) {
|
|
156
|
+
return commitment;
|
|
245
157
|
}
|
|
246
|
-
|
|
247
|
-
//
|
|
158
|
+
// Not in the current state or the store, compute it here
|
|
159
|
+
// Get the contract class
|
|
248
160
|
const contractClass = await this.getContractClass(contractClassId);
|
|
161
|
+
|
|
249
162
|
if (contractClass === undefined) {
|
|
163
|
+
// cannot compute bytecode commitment if contract class is not found
|
|
250
164
|
return undefined;
|
|
251
165
|
}
|
|
252
166
|
|
|
253
167
|
const value = await computePublicBytecodeCommitment(contractClass.packedBytecode);
|
|
254
|
-
|
|
168
|
+
// Add to cache (current checkpoint state) so we don't compute again
|
|
169
|
+
currentState.addBytecodeCommitment(contractClassId, value);
|
|
255
170
|
return value;
|
|
256
171
|
}
|
|
257
172
|
|
|
258
173
|
public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
259
|
-
return await this.dataSource.
|
|
174
|
+
return await this.dataSource.getDebugFunctionName(address, selector);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private async addContractClassesFromEvents(
|
|
178
|
+
contractClassEvents: ContractClassPublishedEvent[],
|
|
179
|
+
state: ContractsDbCheckpoint,
|
|
180
|
+
) {
|
|
181
|
+
await Promise.all(
|
|
182
|
+
contractClassEvents.map(async (event: ContractClassPublishedEvent) => {
|
|
183
|
+
this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);
|
|
184
|
+
const contractClass = await event.toContractClassPublic();
|
|
185
|
+
state.addClass(event.contractClassId, contractClass);
|
|
186
|
+
}),
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private addContractInstancesFromEvents(
|
|
191
|
+
contractInstanceEvents: ContractInstancePublishedEvent[],
|
|
192
|
+
state: ContractsDbCheckpoint,
|
|
193
|
+
) {
|
|
194
|
+
contractInstanceEvents.forEach(e => {
|
|
195
|
+
this.log.debug(
|
|
196
|
+
`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to contract state`,
|
|
197
|
+
);
|
|
198
|
+
state.addInstance(e.address, e.toContractInstance());
|
|
199
|
+
});
|
|
260
200
|
}
|
|
261
201
|
}
|
|
262
202
|
|
|
263
203
|
/**
|
|
264
|
-
* A
|
|
204
|
+
* A high-level class that provides access to the merkle trees.
|
|
205
|
+
*
|
|
206
|
+
* This class is just a helper wrapper around a merkle db. Anything that you can do with it
|
|
207
|
+
* can also be done directly with the merkle db. This class should NOT be exposed or used
|
|
208
|
+
* outside of `simulator/src/public`.
|
|
209
|
+
*
|
|
210
|
+
* NOTE: This class is currently written in such a way that it would generate the
|
|
211
|
+
* necessary hints if used with a hinting merkle db. This is a bit of a leak of concepts.
|
|
212
|
+
* Eventually we can have everything depend on a config/factory at the TxSimulator level
|
|
213
|
+
* to decide whether to use hints or not (same with tracing, etc).
|
|
265
214
|
*/
|
|
266
|
-
export class
|
|
267
|
-
private logger
|
|
215
|
+
export class PublicTreesDB implements PublicStateDBInterface {
|
|
216
|
+
private logger: Logger;
|
|
268
217
|
|
|
269
|
-
constructor(
|
|
270
|
-
|
|
218
|
+
constructor(
|
|
219
|
+
private readonly db: MerkleTreeWriteOperations,
|
|
220
|
+
bindings?: LoggerBindings,
|
|
221
|
+
) {
|
|
222
|
+
this.logger = createLogger('simulator:public-trees-db', bindings);
|
|
271
223
|
}
|
|
272
224
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
public async createCheckpoint() {
|
|
277
|
-
await this.db.createCheckpoint();
|
|
278
|
-
}
|
|
225
|
+
public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
226
|
+
const timer = new Timer();
|
|
227
|
+
const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
|
|
279
228
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
await this.db.commitCheckpoint();
|
|
285
|
-
}
|
|
229
|
+
const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot);
|
|
230
|
+
if (!lowLeafResult) {
|
|
231
|
+
throw new Error('Low leaf not found');
|
|
232
|
+
}
|
|
286
233
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
234
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
235
|
+
await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
|
|
236
|
+
// Unconditionally fetching the preimage for the hints. Move it to the hinting layer?
|
|
237
|
+
const preimage = (await this.db.getLeafPreimage(
|
|
238
|
+
MerkleTreeId.PUBLIC_DATA_TREE,
|
|
239
|
+
lowLeafResult.index,
|
|
240
|
+
)) as PublicDataTreeLeafPreimage;
|
|
293
241
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
242
|
+
const result = lowLeafResult.alreadyPresent ? preimage.leaf.value : Fr.ZERO;
|
|
243
|
+
this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`, {
|
|
244
|
+
eventName: 'public-db-access',
|
|
245
|
+
duration: timer.ms(),
|
|
246
|
+
operation: 'storage-read',
|
|
247
|
+
} satisfies PublicDBAccessStats);
|
|
297
248
|
|
|
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);
|
|
249
|
+
return result;
|
|
306
250
|
}
|
|
307
251
|
|
|
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
252
|
public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
|
|
253
|
+
const timer = new Timer();
|
|
316
254
|
const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
|
|
317
255
|
const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
|
|
318
256
|
await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
|
|
257
|
+
|
|
258
|
+
this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`, {
|
|
259
|
+
eventName: 'public-db-access',
|
|
260
|
+
duration: timer.ms(),
|
|
261
|
+
operation: 'storage-write',
|
|
262
|
+
} satisfies PublicDBAccessStats);
|
|
319
263
|
}
|
|
320
264
|
|
|
321
|
-
public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr
|
|
265
|
+
public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr> {
|
|
322
266
|
const timer = new Timer();
|
|
267
|
+
if (leafIndex > L1_TO_L2_MSG_TREE_LEAF_COUNT) {
|
|
268
|
+
throw new L1ToL2MessageIndexOutOfRangeError(Number(leafIndex));
|
|
269
|
+
}
|
|
323
270
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
|
|
324
|
-
|
|
271
|
+
assert(leafValue !== undefined, 'Unexpected null response from l1 to l2 message tree');
|
|
272
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
273
|
+
await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, leafIndex);
|
|
274
|
+
|
|
275
|
+
this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
|
|
325
276
|
eventName: 'public-db-access',
|
|
326
277
|
duration: timer.ms(),
|
|
327
278
|
operation: 'get-l1-to-l2-message-leaf-value',
|
|
@@ -329,41 +280,120 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
329
280
|
return leafValue;
|
|
330
281
|
}
|
|
331
282
|
|
|
332
|
-
public async
|
|
283
|
+
public async getNoteHash(leafIndex: bigint): Promise<Fr> {
|
|
333
284
|
const timer = new Timer();
|
|
285
|
+
if (leafIndex > NOTE_HASH_TREE_LEAF_COUNT) {
|
|
286
|
+
throw new NoteHashIndexOutOfRangeError(Number(leafIndex));
|
|
287
|
+
}
|
|
334
288
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
335
|
-
|
|
289
|
+
assert(leafValue !== undefined, 'Unexpected null response from note hash tree');
|
|
290
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
291
|
+
await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
292
|
+
|
|
293
|
+
this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`, {
|
|
336
294
|
eventName: 'public-db-access',
|
|
337
295
|
duration: timer.ms(),
|
|
338
|
-
operation: 'get-
|
|
296
|
+
operation: 'get-note-hash',
|
|
339
297
|
} satisfies PublicDBAccessStats);
|
|
340
298
|
return leafValue;
|
|
341
299
|
}
|
|
342
300
|
|
|
343
|
-
public async
|
|
301
|
+
public async writeNoteHash(noteHash: Fr): Promise<void> {
|
|
344
302
|
const timer = new Timer();
|
|
345
|
-
|
|
346
|
-
|
|
303
|
+
await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, [noteHash]);
|
|
304
|
+
|
|
305
|
+
this.logger.debug(`Wrote note hash (noteHash=${noteHash})`, {
|
|
347
306
|
eventName: 'public-db-access',
|
|
348
307
|
duration: timer.ms(),
|
|
349
|
-
operation: '
|
|
308
|
+
operation: 'write-note-hash',
|
|
309
|
+
} satisfies PublicDBAccessStats);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
public async checkNullifierExists(nullifier: Fr): Promise<boolean> {
|
|
313
|
+
const timer = new Timer();
|
|
314
|
+
const lowLeafResult = await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE, nullifier.toBigInt());
|
|
315
|
+
if (!lowLeafResult) {
|
|
316
|
+
throw new Error('Low leaf not found');
|
|
317
|
+
}
|
|
318
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
319
|
+
await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
|
|
320
|
+
// TODO: We need this for the hints. See class comment for more details.
|
|
321
|
+
await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, lowLeafResult.index);
|
|
322
|
+
const exists = lowLeafResult.alreadyPresent;
|
|
323
|
+
|
|
324
|
+
this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`, {
|
|
325
|
+
eventName: 'public-db-access',
|
|
326
|
+
duration: timer.ms(),
|
|
327
|
+
operation: 'check-nullifier-exists',
|
|
328
|
+
} satisfies PublicDBAccessStats);
|
|
329
|
+
return exists;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
public async writeNullifier(siloedNullifier: Fr): Promise<void> {
|
|
333
|
+
const timer = new Timer();
|
|
334
|
+
await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
|
|
335
|
+
|
|
336
|
+
this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`, {
|
|
337
|
+
eventName: 'public-db-access',
|
|
338
|
+
duration: timer.ms(),
|
|
339
|
+
operation: 'write-nullifier',
|
|
350
340
|
} satisfies PublicDBAccessStats);
|
|
351
|
-
return index;
|
|
352
341
|
}
|
|
353
|
-
}
|
|
354
342
|
|
|
355
|
-
|
|
356
|
-
|
|
343
|
+
public async padTree(treeId: MerkleTreeId, leavesToInsert: number): Promise<void> {
|
|
344
|
+
const timer = new Timer();
|
|
345
|
+
|
|
346
|
+
switch (treeId) {
|
|
347
|
+
// Indexed trees.
|
|
348
|
+
case MerkleTreeId.NULLIFIER_TREE:
|
|
349
|
+
await this.db.batchInsert(
|
|
350
|
+
treeId,
|
|
351
|
+
Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),
|
|
352
|
+
NULLIFIER_SUBTREE_HEIGHT,
|
|
353
|
+
);
|
|
354
|
+
break;
|
|
355
|
+
case MerkleTreeId.PUBLIC_DATA_TREE:
|
|
356
|
+
await this.db.batchInsert(
|
|
357
|
+
treeId,
|
|
358
|
+
Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),
|
|
359
|
+
PUBLIC_DATA_SUBTREE_HEIGHT,
|
|
360
|
+
);
|
|
361
|
+
break;
|
|
362
|
+
// Append-only trees.
|
|
363
|
+
case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:
|
|
364
|
+
case MerkleTreeId.NOTE_HASH_TREE:
|
|
365
|
+
await this.db.appendLeaves(treeId, Array(leavesToInsert).fill(Fr.ZERO));
|
|
366
|
+
break;
|
|
367
|
+
default:
|
|
368
|
+
throw new Error(`Padding not supported for tree ${treeId}`);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`, {
|
|
372
|
+
eventName: 'public-db-access',
|
|
373
|
+
duration: timer.ms(),
|
|
374
|
+
operation: 'pad-tree',
|
|
375
|
+
} satisfies PublicDBAccessStats);
|
|
376
|
+
}
|
|
357
377
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
378
|
+
public async createCheckpoint(): Promise<void> {
|
|
379
|
+
await this.db.createCheckpoint();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
public async commitCheckpoint(): Promise<void> {
|
|
383
|
+
await this.db.commitCheckpoint();
|
|
361
384
|
}
|
|
362
385
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
)) as PublicDataTreeLeafPreimage;
|
|
386
|
+
public async revertCheckpoint(): Promise<void> {
|
|
387
|
+
await this.db.revertCheckpoint();
|
|
388
|
+
}
|
|
367
389
|
|
|
368
|
-
|
|
390
|
+
public async getTreeSnapshots(): Promise<TreeSnapshots> {
|
|
391
|
+
const stateReference = await this.db.getStateReference();
|
|
392
|
+
return new TreeSnapshots(
|
|
393
|
+
stateReference.l1ToL2MessageTree,
|
|
394
|
+
stateReference.partial.noteHashTree,
|
|
395
|
+
stateReference.partial.nullifierTree,
|
|
396
|
+
stateReference.partial.publicDataTree,
|
|
397
|
+
);
|
|
398
|
+
}
|
|
369
399
|
}
|