@aztec/simulator 0.76.4 → 0.77.0-testnet-ignition.21
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 +3 -3
- package/dest/client.d.ts +5 -0
- package/dest/client.d.ts.map +1 -0
- package/dest/client.js +3 -0
- package/dest/{public → common}/db_interfaces.d.ts +8 -33
- package/dest/common/db_interfaces.d.ts.map +1 -0
- package/dest/common/db_interfaces.js +1 -0
- package/dest/common/debug_fn_name.d.ts +3 -2
- package/dest/common/debug_fn_name.d.ts.map +1 -1
- package/dest/common/debug_fn_name.js +2 -5
- package/dest/common/errors.d.ts +4 -4
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +30 -39
- package/dest/common/index.d.ts +2 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +2 -2
- package/dest/common/message_load_oracle_inputs.d.ts +2 -2
- package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/common/message_load_oracle_inputs.js +8 -8
- package/dest/common/stats/index.d.ts.map +1 -0
- package/dest/{stats → common/stats}/stats.d.ts +2 -2
- package/dest/common/stats/stats.d.ts.map +1 -0
- package/dest/common/stats/stats.js +10 -0
- package/dest/{acvm → private/acvm}/acvm.d.ts +4 -4
- package/dest/private/acvm/acvm.d.ts.map +1 -0
- package/dest/private/acvm/acvm.js +70 -0
- package/dest/{acvm → private/acvm}/acvm_types.d.ts +1 -1
- package/dest/private/acvm/acvm_types.d.ts.map +1 -0
- package/dest/private/acvm/acvm_types.js +3 -0
- package/dest/{acvm → private/acvm}/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -0
- package/dest/private/acvm/deserialize.js +42 -0
- package/dest/private/acvm/index.d.ts.map +1 -0
- package/dest/private/acvm/index.js +5 -0
- package/dest/{acvm → private/acvm}/oracle/index.d.ts +1 -1
- package/dest/private/acvm/oracle/index.d.ts.map +1 -0
- package/dest/private/acvm/oracle/index.js +2 -0
- package/dest/{acvm → private/acvm}/oracle/oracle.d.ts +4 -3
- package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
- package/dest/private/acvm/oracle/oracle.js +263 -0
- package/dest/{acvm → private/acvm}/oracle/typed_oracle.d.ts +12 -6
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
- package/dest/private/acvm/oracle/typed_oracle.js +132 -0
- package/dest/{acvm → private/acvm}/serialize.d.ts +7 -3
- package/dest/private/acvm/serialize.d.ts.map +1 -0
- package/dest/private/acvm/serialize.js +46 -0
- package/dest/{client → private}/client_execution_context.d.ts +20 -17
- package/dest/private/client_execution_context.d.ts.map +1 -0
- package/dest/private/client_execution_context.js +378 -0
- package/dest/{client → private}/db_oracle.d.ts +19 -7
- package/dest/private/db_oracle.d.ts.map +1 -0
- package/dest/private/db_oracle.js +14 -0
- package/dest/{client → private}/execution_note_cache.d.ts +2 -2
- package/dest/private/execution_note_cache.d.ts.map +1 -0
- package/dest/private/execution_note_cache.js +180 -0
- package/dest/{common → private}/hashed_values_cache.d.ts +2 -2
- package/dest/private/hashed_values_cache.d.ts.map +1 -0
- package/dest/private/hashed_values_cache.js +46 -0
- package/dest/private/index.d.ts +13 -0
- package/dest/private/index.d.ts.map +1 -0
- package/dest/private/index.js +12 -0
- package/dest/{client → private}/pick_notes.d.ts +1 -1
- package/dest/private/pick_notes.d.ts.map +1 -0
- package/dest/private/pick_notes.js +51 -0
- package/dest/private/private_execution.d.ts +24 -0
- package/dest/private/private_execution.d.ts.map +1 -0
- package/dest/private/private_execution.js +90 -0
- package/dest/{providers → private/providers}/acvm_native.d.ts +5 -5
- package/dest/private/providers/acvm_native.d.ts.map +1 -0
- package/dest/private/providers/acvm_native.js +139 -0
- package/dest/{providers → private/providers}/acvm_wasm.d.ts +4 -4
- package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
- package/dest/private/providers/acvm_wasm.js +62 -0
- package/dest/{providers → private/providers}/acvm_wasm_with_blobs.d.ts +5 -5
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/{providers → private/providers}/acvm_wasm_with_blobs.js +3 -6
- package/dest/{providers → private/providers}/factory.d.ts +1 -1
- package/dest/private/providers/factory.d.ts.map +1 -0
- package/dest/private/providers/factory.js +27 -0
- package/dest/{common → private/providers}/simulation_provider.d.ts +5 -5
- package/dest/private/providers/simulation_provider.d.ts.map +1 -0
- package/dest/private/providers/simulation_provider.js +24 -0
- package/dest/private/simulator.d.ts +36 -0
- package/dest/private/simulator.d.ts.map +1 -0
- package/dest/private/simulator.js +78 -0
- package/dest/{client → private}/unconstrained_execution.d.ts +5 -5
- package/dest/private/unconstrained_execution.d.ts.map +1 -0
- package/dest/private/unconstrained_execution.js +27 -0
- package/dest/{client → private}/view_data_oracle.d.ts +15 -7
- package/dest/private/view_data_oracle.d.ts.map +1 -0
- package/dest/private/view_data_oracle.js +260 -0
- package/dest/{avm → public/avm}/avm_context.d.ts +7 -5
- package/dest/public/avm/avm_context.d.ts.map +1 -0
- package/dest/public/avm/avm_context.js +44 -0
- package/dest/{avm → public/avm}/avm_contract_call_result.d.ts +5 -5
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
- package/dest/public/avm/avm_contract_call_result.js +50 -0
- package/dest/{avm → public/avm}/avm_execution_environment.d.ts +2 -2
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
- package/dest/public/avm/avm_execution_environment.js +31 -0
- package/dest/public/avm/avm_gas.d.ts.map +1 -0
- package/dest/public/avm/avm_gas.js +202 -0
- package/dest/{avm → public/avm}/avm_machine_state.d.ts +2 -2
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
- package/dest/public/avm/avm_machine_state.js +106 -0
- package/dest/{avm → public/avm}/avm_memory_types.d.ts +2 -2
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
- package/dest/public/avm/avm_memory_types.js +340 -0
- package/dest/{avm → public/avm}/avm_simulator.d.ts +5 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator.js +202 -0
- package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
- package/dest/public/avm/bytecode_utils.js +17 -0
- package/dest/{avm → public/avm}/errors.d.ts +5 -4
- package/dest/public/avm/errors.d.ts.map +1 -0
- package/dest/public/avm/errors.js +179 -0
- package/dest/{avm → public/avm}/fixtures/avm_simulation_tester.d.ts +6 -6
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
- package/dest/{avm → public/avm}/fixtures/base_avm_simulation_tester.d.ts +13 -12
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +83 -0
- package/dest/{avm → public/avm}/fixtures/index.d.ts +24 -7
- package/dest/public/avm/fixtures/index.d.ts.map +1 -0
- package/dest/public/avm/fixtures/index.js +175 -0
- package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -6
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/avm/fixtures/simple_contract_data_source.js +74 -0
- package/dest/public/avm/index.d.ts +4 -0
- package/dest/public/avm/index.d.ts.map +1 -0
- package/dest/{avm/index.d.ts → public/avm/index.js} +1 -2
- package/dest/public/avm/journal/index.d.ts.map +1 -0
- package/dest/{avm → public/avm}/journal/journal.d.ts +51 -18
- package/dest/public/avm/journal/journal.d.ts.map +1 -0
- package/dest/public/avm/journal/journal.js +486 -0
- package/dest/{avm → public/avm}/journal/nullifiers.d.ts +8 -6
- package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
- package/dest/public/avm/journal/nullifiers.js +97 -0
- package/dest/{avm → public/avm}/journal/public_storage.d.ts +2 -2
- package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
- package/dest/public/avm/journal/public_storage.js +145 -0
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
- package/dest/public/avm/opcodes/accrued_substate.js +252 -0
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
- package/dest/public/avm/opcodes/addressing_mode.js +74 -0
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
- package/dest/public/avm/opcodes/arithmetic.js +73 -0
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
- package/dest/public/avm/opcodes/bitwise.js +106 -0
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
- package/dest/public/avm/opcodes/comparators.js +43 -0
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
- package/dest/public/avm/opcodes/contract.js +66 -0
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
- package/dest/public/avm/opcodes/control_flow.js +105 -0
- package/dest/{avm → public/avm}/opcodes/conversion.d.ts +1 -1
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
- package/dest/public/avm/opcodes/conversion.js +69 -0
- package/dest/{avm → public/avm}/opcodes/ec_add.d.ts +1 -1
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
- package/dest/public/avm/opcodes/ec_add.js +84 -0
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
- package/dest/public/avm/opcodes/environment_getters.js +79 -0
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
- package/dest/public/avm/opcodes/external_calls.js +180 -0
- package/dest/{avm → public/avm}/opcodes/hashing.d.ts +1 -1
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
- package/dest/public/avm/opcodes/hashing.js +114 -0
- package/dest/public/avm/opcodes/index.d.ts.map +1 -0
- package/dest/{avm → public/avm}/opcodes/instruction.d.ts +2 -2
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction.js +91 -0
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction_impl.js +30 -0
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
- package/dest/public/avm/opcodes/memory.js +253 -0
- package/dest/{avm → public/avm}/opcodes/misc.d.ts +1 -1
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
- package/dest/public/avm/opcodes/misc.js +48 -0
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
- package/dest/public/avm/opcodes/storage.js +66 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
- package/dest/public/avm/serialization/buffer_cursor.js +99 -0
- package/dest/{avm → public/avm}/serialization/bytecode_serialization.d.ts +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/bytecode_serialization.js +328 -0
- package/dest/{avm → public/avm}/serialization/instruction_serialization.d.ts +1 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/instruction_serialization.js +225 -0
- package/dest/{avm → public/avm}/test_utils.d.ts +6 -4
- package/dest/public/avm/test_utils.d.ts.map +1 -0
- package/dest/public/avm/test_utils.js +52 -0
- package/dest/public/bytecode_errors.js +1 -2
- package/dest/public/execution.d.ts +8 -2
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +4 -5
- package/dest/public/executor_metrics.js +16 -12
- package/dest/public/fixtures/index.js +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +15 -9
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +54 -53
- package/dest/public/fixtures/utils.d.ts +7 -11
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +92 -32
- package/dest/public/index.d.ts +5 -4
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +5 -5
- package/dest/public/public_db_sources.d.ts +82 -34
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +171 -196
- package/dest/public/{public_processor.d.ts → public_processor/public_processor.d.ts} +10 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -0
- package/dest/public/public_processor/public_processor.js +379 -0
- package/dest/public/{public_processor_metrics.d.ts → public_processor/public_processor_metrics.d.ts} +3 -3
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
- package/dest/public/public_processor/public_processor_metrics.js +125 -0
- package/dest/public/{public_tx_context.d.ts → public_tx_simulator/public_tx_context.d.ts} +14 -8
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_context.js +320 -0
- package/dest/public/{public_tx_simulator.d.ts → public_tx_simulator/public_tx_simulator.d.ts} +10 -7
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator.js +325 -0
- package/dest/public/side_effect_errors.js +1 -2
- package/dest/public/side_effect_trace.d.ts +16 -10
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +82 -149
- package/dest/public/side_effect_trace_interface.d.ts +9 -7
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/side_effect_trace_interface.js +1 -2
- package/dest/public/tx_contract_cache.d.ts +41 -0
- package/dest/public/tx_contract_cache.d.ts.map +1 -0
- package/dest/public/tx_contract_cache.js +49 -0
- package/dest/public/unique_class_ids.js +23 -28
- package/dest/public/utils.d.ts +2 -2
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +17 -12
- package/dest/server.d.ts +4 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +3 -5
- package/dest/test/utils.d.ts +3 -2
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +9 -7
- package/package.json +19 -21
- package/src/client.ts +4 -0
- package/src/{public → common}/db_interfaces.ts +8 -40
- package/src/common/debug_fn_name.ts +4 -2
- package/src/common/errors.ts +5 -5
- package/src/common/index.ts +2 -1
- package/src/common/message_load_oracle_inputs.ts +2 -2
- package/src/common/stats/index.ts +1 -0
- package/src/{stats → common/stats}/stats.ts +2 -2
- package/src/{acvm → private/acvm}/acvm.ts +5 -5
- package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
- package/src/{acvm → private/acvm}/deserialize.ts +2 -2
- package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
- package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
- package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
- package/src/{acvm → private/acvm}/serialize.ts +10 -3
- package/src/{client → private}/client_execution_context.ts +54 -37
- package/src/{client → private}/db_oracle.ts +20 -20
- package/src/{client → private}/execution_note_cache.ts +3 -3
- package/src/{common → private}/hashed_values_cache.ts +2 -2
- package/src/private/index.ts +12 -0
- package/src/{client → private}/pick_notes.ts +1 -1
- package/src/{client → private}/private_execution.ts +46 -14
- package/src/{providers → private/providers}/acvm_native.ts +6 -6
- package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
- package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
- package/src/{providers → private/providers}/factory.ts +1 -1
- package/src/{common → private/providers}/simulation_provider.ts +5 -5
- package/src/{client → private}/simulator.ts +31 -123
- package/src/{client → private}/unconstrained_execution.ts +7 -7
- package/src/{client → private}/view_data_oracle.ts +25 -28
- package/src/{avm → public/avm}/avm_context.ts +12 -7
- package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
- package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
- package/src/{avm → public/avm}/avm_gas.ts +1 -3
- package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
- package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
- package/src/{avm → public/avm}/avm_simulator.ts +12 -6
- package/src/{avm → public/avm}/errors.ts +5 -4
- package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
- package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +45 -40
- package/src/{avm → public/avm}/fixtures/index.ts +77 -12
- package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +26 -19
- package/src/{avm → public/avm}/index.ts +1 -1
- package/src/public/avm/journal/index.ts +1 -0
- package/src/{avm → public/avm}/journal/journal.ts +330 -305
- package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
- package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
- package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
- package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
- package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
- package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
- package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
- package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
- package/src/public/avm/opcodes/index.ts +15 -0
- package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
- package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
- package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
- package/src/{avm → public/avm}/test_utils.ts +10 -7
- package/src/public/execution.ts +9 -12
- package/src/public/fixtures/public_tx_simulation_tester.ts +66 -72
- package/src/public/fixtures/utils.ts +122 -33
- package/src/public/index.ts +5 -4
- package/src/public/public_db_sources.ts +216 -222
- package/src/public/{public_processor.ts → public_processor/public_processor.ts} +78 -53
- package/src/public/{public_processor_metrics.ts → public_processor/public_processor_metrics.ts} +3 -3
- package/src/public/{public_tx_context.ts → public_tx_simulator/public_tx_context.ts} +70 -75
- package/src/public/{public_tx_simulator.ts → public_tx_simulator/public_tx_simulator.ts} +104 -91
- package/src/public/side_effect_trace.ts +85 -160
- package/src/public/side_effect_trace_interface.ts +10 -23
- package/src/public/tx_contract_cache.ts +69 -0
- package/src/public/unique_class_ids.ts +1 -1
- package/src/public/utils.ts +2 -2
- package/src/server.ts +4 -4
- package/src/test/utils.ts +5 -3
- package/dest/acvm/acvm.d.ts.map +0 -1
- package/dest/acvm/acvm.js +0 -73
- package/dest/acvm/acvm_types.d.ts.map +0 -1
- package/dest/acvm/acvm_types.js +0 -2
- package/dest/acvm/deserialize.d.ts.map +0 -1
- package/dest/acvm/deserialize.js +0 -46
- package/dest/acvm/index.d.ts.map +0 -1
- package/dest/acvm/index.js +0 -6
- package/dest/acvm/oracle/index.d.ts.map +0 -1
- package/dest/acvm/oracle/index.js +0 -3
- package/dest/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/oracle.js +0 -230
- package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/typed_oracle.js +0 -131
- package/dest/acvm/serialize.d.ts.map +0 -1
- package/dest/acvm/serialize.js +0 -48
- package/dest/avm/avm_context.d.ts.map +0 -1
- package/dest/avm/avm_context.js +0 -44
- package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/avm/avm_contract_call_result.js +0 -45
- package/dest/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/avm/avm_execution_environment.js +0 -28
- package/dest/avm/avm_gas.d.ts.map +0 -1
- package/dest/avm/avm_gas.js +0 -170
- package/dest/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/avm/avm_machine_state.js +0 -112
- package/dest/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/avm/avm_memory_types.js +0 -327
- package/dest/avm/avm_simulator.d.ts.map +0 -1
- package/dest/avm/avm_simulator.js +0 -193
- package/dest/avm/avm_tree.d.ts +0 -282
- package/dest/avm/avm_tree.d.ts.map +0 -1
- package/dest/avm/avm_tree.js +0 -684
- package/dest/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/avm/bytecode_utils.js +0 -15
- package/dest/avm/errors.d.ts.map +0 -1
- package/dest/avm/errors.js +0 -196
- package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
- package/dest/avm/fixtures/index.d.ts.map +0 -1
- package/dest/avm/fixtures/index.js +0 -134
- package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
- package/dest/avm/index.d.ts.map +0 -1
- package/dest/avm/index.js +0 -4
- package/dest/avm/journal/index.d.ts.map +0 -1
- package/dest/avm/journal/index.js +0 -2
- package/dest/avm/journal/journal.d.ts.map +0 -1
- package/dest/avm/journal/journal.js +0 -499
- package/dest/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/avm/journal/nullifiers.js +0 -99
- package/dest/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/avm/journal/public_storage.js +0 -159
- package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/avm/opcodes/accrued_substate.js +0 -215
- package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/avm/opcodes/addressing_mode.js +0 -81
- package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/avm/opcodes/arithmetic.js +0 -70
- package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/avm/opcodes/bitwise.js +0 -90
- package/dest/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/avm/opcodes/comparators.js +0 -40
- package/dest/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/avm/opcodes/contract.js +0 -63
- package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/avm/opcodes/control_flow.js +0 -97
- package/dest/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/avm/opcodes/conversion.js +0 -64
- package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/avm/opcodes/ec_add.js +0 -82
- package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/environment_getters.js +0 -78
- package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/avm/opcodes/external_calls.js +0 -169
- package/dest/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/avm/opcodes/hashing.js +0 -103
- package/dest/avm/opcodes/index.d.ts.map +0 -1
- package/dest/avm/opcodes/index.js +0 -16
- package/dest/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction.js +0 -100
- package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction_impl.js +0 -33
- package/dest/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/avm/opcodes/memory.js +0 -226
- package/dest/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/avm/opcodes/misc.js +0 -45
- package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
- package/dest/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/avm/opcodes/storage.js +0 -61
- package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/avm/serialization/buffer_cursor.js +0 -99
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/bytecode_serialization.js +0 -132
- package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/instruction_serialization.js +0 -187
- package/dest/avm/test_utils.d.ts.map +0 -1
- package/dest/avm/test_utils.js +0 -52
- package/dest/client/client_execution_context.d.ts.map +0 -1
- package/dest/client/client_execution_context.js +0 -392
- package/dest/client/db_oracle.d.ts.map +0 -1
- package/dest/client/db_oracle.js +0 -17
- package/dest/client/execution_note_cache.d.ts.map +0 -1
- package/dest/client/execution_note_cache.js +0 -181
- package/dest/client/index.d.ts +0 -16
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/index.js +0 -15
- package/dest/client/pick_notes.d.ts.map +0 -1
- package/dest/client/pick_notes.js +0 -54
- package/dest/client/private_execution.d.ts +0 -19
- package/dest/client/private_execution.d.ts.map +0 -1
- package/dest/client/private_execution.js +0 -72
- package/dest/client/simulator.d.ts +0 -60
- package/dest/client/simulator.d.ts.map +0 -1
- package/dest/client/simulator.js +0 -136
- package/dest/client/unconstrained_execution.d.ts.map +0 -1
- package/dest/client/unconstrained_execution.js +0 -30
- package/dest/client/view_data_oracle.d.ts.map +0 -1
- package/dest/client/view_data_oracle.js +0 -268
- package/dest/common/hashed_values_cache.d.ts.map +0 -1
- package/dest/common/hashed_values_cache.js +0 -50
- package/dest/common/simulation_provider.d.ts.map +0 -1
- package/dest/common/simulation_provider.js +0 -27
- package/dest/common.d.ts +0 -2
- package/dest/common.d.ts.map +0 -1
- package/dest/common.js +0 -2
- package/dest/providers/acvm_native.d.ts.map +0 -1
- package/dest/providers/acvm_native.js +0 -125
- package/dest/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/providers/acvm_wasm.js +0 -54
- package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/providers/factory.d.ts.map +0 -1
- package/dest/providers/factory.js +0 -27
- package/dest/providers/index.d.ts +0 -5
- package/dest/providers/index.d.ts.map +0 -1
- package/dest/providers/index.js +0 -5
- package/dest/public/db_interfaces.d.ts.map +0 -1
- package/dest/public/db_interfaces.js +0 -2
- package/dest/public/fee_payment.d.ts +0 -11
- package/dest/public/fee_payment.d.ts.map +0 -1
- package/dest/public/fee_payment.js +0 -21
- package/dest/public/public_processor.d.ts.map +0 -1
- package/dest/public/public_processor.js +0 -352
- package/dest/public/public_processor_metrics.d.ts.map +0 -1
- package/dest/public/public_processor_metrics.js +0 -106
- package/dest/public/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_context.js +0 -341
- package/dest/public/public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator.js +0 -333
- package/dest/stats/index.d.ts.map +0 -1
- package/dest/stats/index.js +0 -2
- package/dest/stats/stats.d.ts.map +0 -1
- package/dest/stats/stats.js +0 -11
- package/src/avm/avm_tree.ts +0 -887
- package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
- package/src/avm/serialization/bytecode_serialization.ts +0 -212
- package/src/client/index.ts +0 -15
- package/src/common.ts +0 -1
- package/src/providers/index.ts +0 -4
- package/src/public/fee_payment.ts +0 -23
- /package/dest/{stats → common/stats}/index.d.ts +0 -0
- /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
- /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
- /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
- /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
- /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
- /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
- /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
- /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
- /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
- /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
- /package/src/{acvm → private/acvm}/index.ts +0 -0
- /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
- /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
- /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
|
@@ -1,118 +1,233 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import { ContractClassRegisteredEvent } from '@aztec/protocol-contracts/class-registerer';
|
|
5
|
+
import { ContractInstanceDeployedEvent } from '@aztec/protocol-contracts/instance-deployer';
|
|
6
|
+
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
7
|
+
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
8
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
1
9
|
import {
|
|
2
|
-
ContractClassTxL2Logs,
|
|
3
|
-
MerkleTreeId,
|
|
4
|
-
type MerkleTreeReadOperations,
|
|
5
|
-
type MerkleTreeWriteOperations,
|
|
6
|
-
NullifierMembershipWitness,
|
|
7
|
-
type Tx,
|
|
8
|
-
} from '@aztec/circuit-types';
|
|
9
|
-
import { type PublicDBAccessStats } from '@aztec/circuit-types/stats';
|
|
10
|
-
import {
|
|
11
|
-
type AztecAddress,
|
|
12
10
|
type ContractClassPublic,
|
|
13
11
|
type ContractDataSource,
|
|
14
12
|
type ContractInstanceWithAddress,
|
|
15
|
-
Fr,
|
|
16
|
-
type FunctionSelector,
|
|
17
|
-
type L1_TO_L2_MSG_TREE_HEIGHT,
|
|
18
|
-
type NULLIFIER_TREE_HEIGHT,
|
|
19
|
-
type NullifierLeafPreimage,
|
|
20
|
-
type PublicDataTreeLeafPreimage,
|
|
21
13
|
computePublicBytecodeCommitment,
|
|
22
|
-
} from '@aztec/
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
import {
|
|
30
|
-
import
|
|
14
|
+
} from '@aztec/stdlib/contract';
|
|
15
|
+
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';
|
|
22
|
+
import type { PublicDBAccessStats } from '@aztec/stdlib/stats';
|
|
23
|
+
import { MerkleTreeId, type PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
|
|
24
|
+
import type { Tx } from '@aztec/stdlib/tx';
|
|
25
|
+
|
|
26
|
+
import type { PublicContractsDB, PublicStateDB } from '../common/db_interfaces.js';
|
|
27
|
+
import { TxContractCache } from './tx_contract_cache.js';
|
|
31
28
|
|
|
32
29
|
/**
|
|
33
30
|
* Implements the PublicContractsDB using a ContractDataSource.
|
|
34
31
|
* Progressively records contracts in transaction as they are processed in a block.
|
|
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).
|
|
35
34
|
*/
|
|
36
35
|
export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
// Two caching layers for contract classes and instances.
|
|
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.
|
|
39
47
|
private bytecodeCommitmentCache = new Map<string, Fr>();
|
|
40
48
|
|
|
41
49
|
private log = createLogger('simulator:contracts-data-source');
|
|
42
50
|
|
|
43
51
|
constructor(private dataSource: ContractDataSource) {}
|
|
52
|
+
|
|
44
53
|
/**
|
|
45
54
|
* Add new contracts from a transaction
|
|
46
55
|
* @param tx - The transaction to add contracts from.
|
|
47
56
|
*/
|
|
48
57
|
public async addNewContracts(tx: Tx): Promise<void> {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
await this.addNonRevertibleContractClasses(tx);
|
|
59
|
+
await this.addRevertibleContractClasses(tx);
|
|
60
|
+
this.addNonRevertibleContractInstances(tx);
|
|
61
|
+
this.addRevertibleContractInstances(tx);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Add non revertible contracts from a transaction
|
|
66
|
+
* @param tx - The transaction to add non revertible contracts from.
|
|
67
|
+
*/
|
|
68
|
+
public async addNewNonRevertibleContracts(tx: Tx) {
|
|
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');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Add revertible contract classes from a transaction
|
|
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
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Add non-revertible contract instances from a transaction
|
|
116
|
+
* For private-only txs, this will be all contract instances (found in tx.data.forRollup)
|
|
117
|
+
* @param tx - The transaction to add non-revertible contract instances from.
|
|
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());
|
|
123
|
+
|
|
124
|
+
this.addContractInstancesFromLogs(contractInstanceLogs, this.currentTxNonRevertibleCache, 'non-revertible');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Add revertible contract instances from a transaction
|
|
129
|
+
* None for private-only txs.
|
|
130
|
+
* @param tx - The transaction to add revertible contract instances from.
|
|
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');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Given a tx's siloed contract class logs, add the contract classes to the cache
|
|
142
|
+
* @param siloedContractClassLogs - Contract class logs to process
|
|
143
|
+
* @param cache - The cache to store the contract classes in
|
|
144
|
+
* @param cacheType - Type of cache (for logging)
|
|
145
|
+
*/
|
|
146
|
+
private async addContractClassesFromLogs(
|
|
147
|
+
siloedContractClassLogs: ContractClassLog[],
|
|
148
|
+
cache: TxContractCache,
|
|
149
|
+
cacheType: string,
|
|
150
|
+
) {
|
|
151
|
+
const contractClassEvents = siloedContractClassLogs
|
|
152
|
+
.filter((log: ContractClassLog) => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log))
|
|
153
|
+
.map((log: ContractClassLog) => ContractClassRegisteredEvent.fromLog(log));
|
|
154
|
+
|
|
155
|
+
// Cache contract classes
|
|
54
156
|
await Promise.all(
|
|
55
|
-
|
|
56
|
-
this.log.debug(`Adding class ${event.contractClassId.toString()} to
|
|
57
|
-
|
|
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);
|
|
58
162
|
}),
|
|
59
163
|
);
|
|
164
|
+
}
|
|
60
165
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
166
|
+
/**
|
|
167
|
+
* Given a tx's contract instance logs, add the contract instances to the cache
|
|
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)
|
|
171
|
+
*/
|
|
172
|
+
private addContractInstancesFromLogs(contractInstanceLogs: PrivateLog[], cache: TxContractCache, cacheType: string) {
|
|
173
|
+
const contractInstanceEvents = contractInstanceLogs
|
|
64
174
|
.filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
|
|
65
|
-
.map(ContractInstanceDeployedEvent.fromLog);
|
|
175
|
+
.map(log => ContractInstanceDeployedEvent.fromLog(log));
|
|
176
|
+
|
|
177
|
+
// Cache contract instances
|
|
66
178
|
contractInstanceEvents.forEach(e => {
|
|
67
179
|
this.log.debug(
|
|
68
|
-
`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to
|
|
180
|
+
`Adding instance ${e.address.toString()} with class ${e.contractClassId.toString()} to ${cacheType} tx contract cache`,
|
|
69
181
|
);
|
|
70
|
-
|
|
182
|
+
cache.addInstance(e.address, e.toContractInstance());
|
|
71
183
|
});
|
|
72
184
|
}
|
|
73
185
|
|
|
74
186
|
/**
|
|
75
|
-
*
|
|
76
|
-
* @param tx - The tx's contracts to be removed
|
|
77
|
-
* @param onlyRevertible - Whether to only remove contracts added from revertible contract class logs
|
|
187
|
+
* Clear new contracts from the current tx's cache
|
|
78
188
|
*/
|
|
79
|
-
public
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
? tx.contractClassLogs
|
|
85
|
-
.filterScoped(
|
|
86
|
-
tx.data.forPublic!.revertibleAccumulatedData.contractClassLogsHashes,
|
|
87
|
-
ContractClassTxL2Logs.empty(),
|
|
88
|
-
)
|
|
89
|
-
.unrollLogs()
|
|
90
|
-
: tx.contractClassLogs.unrollLogs();
|
|
91
|
-
contractClassLogs
|
|
92
|
-
.filter(log => ContractClassRegisteredEvent.isContractClassRegisteredEvent(log.data))
|
|
93
|
-
.forEach(log => {
|
|
94
|
-
const event = ContractClassRegisteredEvent.fromLog(log.data);
|
|
95
|
-
this.classCache.delete(event.contractClassId.toString());
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// We store the contract instance deployed event log in private logs, contract_instance_deployer_contract/src/main.nr
|
|
99
|
-
const privateLogs = onlyRevertible
|
|
100
|
-
? tx.data.forPublic!.revertibleAccumulatedData.privateLogs.filter(l => !l.isEmpty())
|
|
101
|
-
: tx.data.getNonEmptyPrivateLogs();
|
|
102
|
-
const contractInstanceEvents = privateLogs
|
|
103
|
-
.filter(log => ContractInstanceDeployedEvent.isContractInstanceDeployedEvent(log))
|
|
104
|
-
.map(ContractInstanceDeployedEvent.fromLog);
|
|
105
|
-
contractInstanceEvents.forEach(e => this.instanceCache.delete(e.address.toString()));
|
|
189
|
+
public clearContractsForTx() {
|
|
190
|
+
this.currentTxRevertibleCache.clear();
|
|
191
|
+
this.currentTxRevertibleCache.clear();
|
|
192
|
+
this.currentTxNonRevertibleCache.clear();
|
|
193
|
+
}
|
|
106
194
|
|
|
107
|
-
|
|
195
|
+
/**
|
|
196
|
+
* Commits the current transaction's cached contracts to the block-level cache.
|
|
197
|
+
* Then, clears the tx cache.
|
|
198
|
+
*/
|
|
199
|
+
public commitContractsForTx(onlyNonRevertibles: boolean = false) {
|
|
200
|
+
// Merge non-revertible tx cache into block cache
|
|
201
|
+
this.blockCache.mergeFrom(this.currentTxNonRevertibleCache);
|
|
202
|
+
|
|
203
|
+
if (!onlyNonRevertibles) {
|
|
204
|
+
// Merge revertible tx cache into block cache
|
|
205
|
+
this.blockCache.mergeFrom(this.currentTxRevertibleCache);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Clear the tx's caches
|
|
209
|
+
this.currentTxNonRevertibleCache.clear();
|
|
210
|
+
this.currentTxRevertibleCache.clear();
|
|
108
211
|
}
|
|
109
212
|
|
|
110
213
|
public async getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
111
|
-
|
|
214
|
+
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
215
|
+
return (
|
|
216
|
+
this.currentTxRevertibleCache.getInstance(address) ??
|
|
217
|
+
this.currentTxNonRevertibleCache.getInstance(address) ??
|
|
218
|
+
this.blockCache.getInstance(address) ??
|
|
219
|
+
(await this.dataSource.getContract(address))
|
|
220
|
+
);
|
|
112
221
|
}
|
|
113
222
|
|
|
114
223
|
public async getContractClass(contractClassId: Fr): Promise<ContractClassPublic | undefined> {
|
|
115
|
-
|
|
224
|
+
// Check caches in order: tx revertible -> tx non-revertible -> block -> data source
|
|
225
|
+
return (
|
|
226
|
+
this.currentTxRevertibleCache.getClass(contractClassId) ??
|
|
227
|
+
this.currentTxNonRevertibleCache.getClass(contractClassId) ??
|
|
228
|
+
this.blockCache.getClass(contractClassId) ??
|
|
229
|
+
(await this.dataSource.getContractClass(contractClassId))
|
|
230
|
+
);
|
|
116
231
|
}
|
|
117
232
|
|
|
118
233
|
public async getBytecodeCommitment(contractClassId: Fr): Promise<Fr | undefined> {
|
|
@@ -140,18 +255,6 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
140
255
|
return value;
|
|
141
256
|
}
|
|
142
257
|
|
|
143
|
-
async getBytecode(address: AztecAddress, selector: FunctionSelector): Promise<Buffer | undefined> {
|
|
144
|
-
const instance = await this.getContractInstance(address);
|
|
145
|
-
if (!instance) {
|
|
146
|
-
throw new Error(`Contract ${address.toString()} not found`);
|
|
147
|
-
}
|
|
148
|
-
const contractClass = await this.getContractClass(instance.contractClassId);
|
|
149
|
-
if (!contractClass) {
|
|
150
|
-
throw new Error(`Contract class ${instance.contractClassId.toString()} for ${address.toString()} not found`);
|
|
151
|
-
}
|
|
152
|
-
return contractClass.publicFunctions.find(f => f.selector.equals(selector))?.bytecode;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
258
|
public async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
156
259
|
return await this.dataSource.getContractFunctionName(address, selector);
|
|
157
260
|
}
|
|
@@ -160,17 +263,34 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB {
|
|
|
160
263
|
/**
|
|
161
264
|
* A public state DB that reads and writes to the world state.
|
|
162
265
|
*/
|
|
163
|
-
export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB,
|
|
266
|
+
export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicStateDB, MerkleTreeCheckpointOperations {
|
|
164
267
|
private logger = createLogger('simulator:world-state-db');
|
|
165
268
|
|
|
166
|
-
|
|
167
|
-
private publicCheckpointedWriteCache: Map<bigint, Fr> = new Map();
|
|
168
|
-
private publicUncommittedWriteCache: Map<bigint, Fr> = new Map();
|
|
169
|
-
|
|
170
|
-
constructor(private db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
|
|
269
|
+
constructor(public db: MerkleTreeWriteOperations, dataSource: ContractDataSource) {
|
|
171
270
|
super(dataSource);
|
|
172
271
|
}
|
|
173
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Checkpoints the current fork state
|
|
275
|
+
*/
|
|
276
|
+
public async createCheckpoint() {
|
|
277
|
+
await this.db.createCheckpoint();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Commits the current checkpoint
|
|
282
|
+
*/
|
|
283
|
+
public async commitCheckpoint() {
|
|
284
|
+
await this.db.commitCheckpoint();
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Reverts the current checkpoint
|
|
289
|
+
*/
|
|
290
|
+
public async revertCheckpoint() {
|
|
291
|
+
await this.db.revertCheckpoint();
|
|
292
|
+
}
|
|
293
|
+
|
|
174
294
|
public getMerkleInterface(): MerkleTreeWriteOperations {
|
|
175
295
|
return this.db;
|
|
176
296
|
}
|
|
@@ -182,20 +302,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
182
302
|
* @returns The current value in the storage slot.
|
|
183
303
|
*/
|
|
184
304
|
public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
185
|
-
const leafSlot = (await computePublicDataTreeLeafSlot(contract, slot)).toBigInt();
|
|
186
|
-
const uncommitted = this.publicUncommittedWriteCache.get(leafSlot);
|
|
187
|
-
if (uncommitted !== undefined) {
|
|
188
|
-
return uncommitted;
|
|
189
|
-
}
|
|
190
|
-
const checkpointed = this.publicCheckpointedWriteCache.get(leafSlot);
|
|
191
|
-
if (checkpointed !== undefined) {
|
|
192
|
-
return checkpointed;
|
|
193
|
-
}
|
|
194
|
-
const committed = this.publicCommittedWriteCache.get(leafSlot);
|
|
195
|
-
if (committed !== undefined) {
|
|
196
|
-
return committed;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
305
|
return await readPublicState(this.db, contract, slot);
|
|
200
306
|
}
|
|
201
307
|
|
|
@@ -206,73 +312,10 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
206
312
|
* @param newValue - The new value to store.
|
|
207
313
|
* @returns The slot of the written leaf in the public data tree.
|
|
208
314
|
*/
|
|
209
|
-
public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
public async getNullifierMembershipWitnessAtLatestBlock(
|
|
216
|
-
nullifier: Fr,
|
|
217
|
-
): Promise<NullifierMembershipWitness | undefined> {
|
|
218
|
-
const timer = new Timer();
|
|
219
|
-
const index = (await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [nullifier.toBuffer()]))[0];
|
|
220
|
-
if (!index) {
|
|
221
|
-
return undefined;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
const leafPreimagePromise = this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE, index);
|
|
225
|
-
const siblingPathPromise = this.db.getSiblingPath<typeof NULLIFIER_TREE_HEIGHT>(
|
|
226
|
-
MerkleTreeId.NULLIFIER_TREE,
|
|
227
|
-
BigInt(index),
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
const [leafPreimage, siblingPath] = await Promise.all([leafPreimagePromise, siblingPathPromise]);
|
|
231
|
-
|
|
232
|
-
if (!leafPreimage) {
|
|
233
|
-
return undefined;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
this.logger.debug(`[DB] Fetched nullifier membership`, {
|
|
237
|
-
eventName: 'public-db-access',
|
|
238
|
-
duration: timer.ms(),
|
|
239
|
-
operation: 'get-nullifier-membership-witness-at-latest-block',
|
|
240
|
-
} satisfies PublicDBAccessStats);
|
|
241
|
-
|
|
242
|
-
return new NullifierMembershipWitness(BigInt(index), leafPreimage as NullifierLeafPreimage, siblingPath);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
public async getL1ToL2MembershipWitness(
|
|
246
|
-
contractAddress: AztecAddress,
|
|
247
|
-
messageHash: Fr,
|
|
248
|
-
secret: Fr,
|
|
249
|
-
): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>> {
|
|
250
|
-
const timer = new Timer();
|
|
251
|
-
|
|
252
|
-
const messageIndex = (await this.db.findLeafIndices(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, [messageHash]))[0];
|
|
253
|
-
if (messageIndex === undefined) {
|
|
254
|
-
throw new Error(`No L1 to L2 message found for message hash ${messageHash.toString()}`);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
const messageNullifier = await computeL1ToL2MessageNullifier(contractAddress, messageHash, secret);
|
|
258
|
-
const nullifierIndex = await this.getNullifierIndex(messageNullifier);
|
|
259
|
-
|
|
260
|
-
if (nullifierIndex !== undefined) {
|
|
261
|
-
throw new Error(`No non-nullified L1 to L2 message found for message hash ${messageHash.toString()}`);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const siblingPath = await this.db.getSiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>(
|
|
265
|
-
MerkleTreeId.L1_TO_L2_MESSAGE_TREE,
|
|
266
|
-
messageIndex,
|
|
267
|
-
);
|
|
268
|
-
|
|
269
|
-
this.logger.debug(`[DB] Fetched L1 to L2 message membership`, {
|
|
270
|
-
eventName: 'public-db-access',
|
|
271
|
-
duration: timer.ms(),
|
|
272
|
-
operation: 'get-l1-to-l2-message-membership-witness',
|
|
273
|
-
} satisfies PublicDBAccessStats);
|
|
274
|
-
|
|
275
|
-
return new MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>(messageIndex, siblingPath);
|
|
315
|
+
public async storageWrite(contract: AztecAddress, slot: Fr, newValue: Fr): Promise<void> {
|
|
316
|
+
const leafSlot = await computePublicDataTreeLeafSlot(contract, slot);
|
|
317
|
+
const publicDataWrite = new PublicDataWrite(leafSlot, newValue);
|
|
318
|
+
await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
|
|
276
319
|
}
|
|
277
320
|
|
|
278
321
|
public async getL1ToL2LeafValue(leafIndex: bigint): Promise<Fr | undefined> {
|
|
@@ -286,17 +329,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
286
329
|
return leafValue;
|
|
287
330
|
}
|
|
288
331
|
|
|
289
|
-
public async getCommitmentIndex(commitment: Fr): Promise<bigint | undefined> {
|
|
290
|
-
const timer = new Timer();
|
|
291
|
-
const index = (await this.db.findLeafIndices(MerkleTreeId.NOTE_HASH_TREE, [commitment]))[0];
|
|
292
|
-
this.logger.debug(`[DB] Fetched commitment index`, {
|
|
293
|
-
eventName: 'public-db-access',
|
|
294
|
-
duration: timer.ms(),
|
|
295
|
-
operation: 'get-commitment-index',
|
|
296
|
-
} satisfies PublicDBAccessStats);
|
|
297
|
-
return index;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
332
|
public async getCommitmentValue(leafIndex: bigint): Promise<Fr | undefined> {
|
|
301
333
|
const timer = new Timer();
|
|
302
334
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
@@ -318,44 +350,6 @@ export class WorldStateDB extends ContractsDataSourcePublicDB implements PublicS
|
|
|
318
350
|
} satisfies PublicDBAccessStats);
|
|
319
351
|
return index;
|
|
320
352
|
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Commit the pending public changes to the DB.
|
|
324
|
-
* @returns Nothing.
|
|
325
|
-
*/
|
|
326
|
-
commit(): Promise<void> {
|
|
327
|
-
for (const [k, v] of this.publicCheckpointedWriteCache) {
|
|
328
|
-
this.publicCommittedWriteCache.set(k, v);
|
|
329
|
-
}
|
|
330
|
-
// uncommitted writes take precedence over checkpointed writes
|
|
331
|
-
// since they are the most recent
|
|
332
|
-
for (const [k, v] of this.publicUncommittedWriteCache) {
|
|
333
|
-
this.publicCommittedWriteCache.set(k, v);
|
|
334
|
-
}
|
|
335
|
-
return this.rollbackToCommit();
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* Rollback the pending public changes.
|
|
340
|
-
* @returns Nothing.
|
|
341
|
-
*/
|
|
342
|
-
async rollbackToCommit(): Promise<void> {
|
|
343
|
-
await this.rollbackToCheckpoint();
|
|
344
|
-
this.publicCheckpointedWriteCache = new Map<bigint, Fr>();
|
|
345
|
-
return Promise.resolve();
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
checkpoint(): Promise<void> {
|
|
349
|
-
for (const [k, v] of this.publicUncommittedWriteCache) {
|
|
350
|
-
this.publicCheckpointedWriteCache.set(k, v);
|
|
351
|
-
}
|
|
352
|
-
return this.rollbackToCheckpoint();
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
rollbackToCheckpoint(): Promise<void> {
|
|
356
|
-
this.publicUncommittedWriteCache = new Map<bigint, Fr>();
|
|
357
|
-
return Promise.resolve();
|
|
358
|
-
}
|
|
359
353
|
}
|
|
360
354
|
|
|
361
355
|
export async function readPublicState(db: MerkleTreeReadOperations, contract: AztecAddress, slot: Fr): Promise<Fr> {
|