@aztec/simulator 0.76.4 → 0.77.0-testnet-ignition.17
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 -11
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +77 -0
- package/dest/{avm → public/avm}/fixtures/index.d.ts +7 -7
- package/dest/public/avm/fixtures/index.d.ts.map +1 -0
- package/dest/public/avm/fixtures/index.js +140 -0
- package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -4
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/avm/fixtures/simple_contract_data_source.js +112 -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 +488 -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 +12 -8
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +37 -44
- package/dest/public/fixtures/utils.d.ts +3 -11
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +15 -35
- package/dest/public/index.d.ts +3 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +3 -3
- package/dest/public/public_db_sources.d.ts +22 -28
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +75 -181
- package/dest/public/public_processor.d.ts +8 -6
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +329 -308
- package/dest/public/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor_metrics.js +46 -27
- package/dest/public/public_tx_context.d.ts +14 -8
- package/dest/public/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_context.js +122 -143
- package/dest/public/public_tx_simulator.d.ts +8 -5
- package/dest/public/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator.js +306 -317
- 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 +65 -132
- 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/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 +16 -18
- 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 +38 -40
- package/src/{avm → public/avm}/fixtures/index.ts +17 -12
- package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +64 -9
- 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 +332 -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 +45 -63
- package/src/public/fixtures/utils.ts +8 -43
- package/src/public/index.ts +3 -2
- package/src/public/public_db_sources.ts +55 -188
- package/src/public/public_processor.ts +66 -47
- package/src/public/public_processor_metrics.ts +3 -3
- package/src/public/public_tx_context.ts +69 -74
- package/src/public/public_tx_simulator.ts +35 -27
- package/src/public/side_effect_trace.ts +67 -140
- package/src/public/side_effect_trace_interface.ts +10 -23
- 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/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,48 +1,52 @@
|
|
|
1
1
|
import {
|
|
2
|
-
type AvmProvingRequest,
|
|
3
|
-
MerkleTreeId,
|
|
4
|
-
type MerkleTreeReadOperations,
|
|
5
|
-
ProvingRequestType,
|
|
6
|
-
type PublicExecutionRequest,
|
|
7
|
-
type SimulationError,
|
|
8
|
-
type Tx,
|
|
9
|
-
TxExecutionPhase,
|
|
10
|
-
type TxHash,
|
|
11
|
-
} from '@aztec/circuit-types';
|
|
12
|
-
import {
|
|
13
|
-
AvmCircuitInputs,
|
|
14
|
-
type AvmCircuitPublicInputs,
|
|
15
|
-
type AztecAddress,
|
|
16
|
-
Fr,
|
|
17
|
-
Gas,
|
|
18
|
-
type GasSettings,
|
|
19
|
-
type GlobalVariables,
|
|
20
2
|
MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
|
|
21
3
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
22
4
|
MAX_NOTE_HASHES_PER_TX,
|
|
23
5
|
MAX_NULLIFIERS_PER_TX,
|
|
24
6
|
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
7
|
+
NULLIFIER_SUBTREE_HEIGHT,
|
|
8
|
+
} from '@aztec/constants';
|
|
9
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
10
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
11
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
12
|
+
import { assertLength } from '@aztec/foundation/serialize';
|
|
13
|
+
import {
|
|
14
|
+
AvmCircuitInputs,
|
|
15
|
+
type AvmCircuitPublicInputs,
|
|
16
|
+
type AvmProvingRequest,
|
|
17
|
+
PublicDataWrite,
|
|
18
|
+
RevertCode,
|
|
19
|
+
} from '@aztec/stdlib/avm';
|
|
20
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
21
|
+
import type { SimulationError } from '@aztec/stdlib/errors';
|
|
22
|
+
import { computeTransactionFee } from '@aztec/stdlib/fees';
|
|
23
|
+
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
24
|
+
import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
|
|
25
|
+
import {
|
|
25
26
|
PrivateToAvmAccumulatedData,
|
|
26
27
|
PrivateToAvmAccumulatedDataArrayLengths,
|
|
27
28
|
type PrivateToPublicAccumulatedData,
|
|
28
29
|
PublicCallRequest,
|
|
29
|
-
PublicDataWrite,
|
|
30
|
-
RevertCode,
|
|
31
|
-
type StateReference,
|
|
32
|
-
TreeSnapshots,
|
|
33
|
-
computeTransactionFee,
|
|
34
30
|
countAccumulatedItems,
|
|
35
31
|
mergeAccumulatedData,
|
|
36
|
-
} from '@aztec/
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
32
|
+
} from '@aztec/stdlib/kernel';
|
|
33
|
+
import { ProvingRequestType } from '@aztec/stdlib/proofs';
|
|
34
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
35
|
+
import {
|
|
36
|
+
type GlobalVariables,
|
|
37
|
+
type PublicExecutionRequest,
|
|
38
|
+
type StateReference,
|
|
39
|
+
TreeSnapshots,
|
|
40
|
+
type Tx,
|
|
41
|
+
TxExecutionPhase,
|
|
42
|
+
type TxHash,
|
|
43
|
+
} from '@aztec/stdlib/tx';
|
|
40
44
|
|
|
41
45
|
import { strict as assert } from 'assert';
|
|
42
46
|
import { inspect } from 'util';
|
|
43
47
|
|
|
44
|
-
import { AvmPersistableStateManager } from '
|
|
45
|
-
import {
|
|
48
|
+
import { AvmPersistableStateManager } from './avm/index.js';
|
|
49
|
+
import type { WorldStateDB } from './public_db_sources.js';
|
|
46
50
|
import { SideEffectArrayLengths, SideEffectTrace } from './side_effect_trace.js';
|
|
47
51
|
import { getCallRequestsByPhase, getExecutionRequestsByPhase } from './utils.js';
|
|
48
52
|
|
|
@@ -111,12 +115,7 @@ export class PublicTxContext {
|
|
|
111
115
|
const firstNullifier = nonRevertibleAccumulatedDataFromPrivate.nullifiers[0];
|
|
112
116
|
|
|
113
117
|
// Transaction level state manager that will be forked for revertible phases.
|
|
114
|
-
const txStateManager =
|
|
115
|
-
worldStateDB,
|
|
116
|
-
trace,
|
|
117
|
-
doMerkleOperations,
|
|
118
|
-
firstNullifier,
|
|
119
|
-
);
|
|
118
|
+
const txStateManager = AvmPersistableStateManager.create(worldStateDB, trace, doMerkleOperations, firstNullifier);
|
|
120
119
|
|
|
121
120
|
const gasSettings = tx.data.constants.txContext.gasSettings;
|
|
122
121
|
const gasUsedByPrivate = tx.data.gasUsed;
|
|
@@ -149,9 +148,9 @@ export class PublicTxContext {
|
|
|
149
148
|
* All phases have been processed.
|
|
150
149
|
* Actual transaction fee and actual total consumed gas can now be queried.
|
|
151
150
|
*/
|
|
152
|
-
halt() {
|
|
151
|
+
async halt() {
|
|
153
152
|
if (this.state.isForked()) {
|
|
154
|
-
this.state.mergeForkedState();
|
|
153
|
+
await this.state.mergeForkedState();
|
|
155
154
|
}
|
|
156
155
|
this.halted = true;
|
|
157
156
|
}
|
|
@@ -325,37 +324,7 @@ export class PublicTxContext {
|
|
|
325
324
|
*/
|
|
326
325
|
private async generateAvmCircuitPublicInputs(endStateReference: StateReference): Promise<AvmCircuitPublicInputs> {
|
|
327
326
|
assert(this.halted, 'Can only get AvmCircuitPublicInputs after tx execution ends');
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
const noteHashTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.NOTE_HASH_TREE);
|
|
331
|
-
const nullifierTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE);
|
|
332
|
-
const publicDataTree = await ephemeralTrees.getTreeSnapshot(MerkleTreeId.PUBLIC_DATA_TREE);
|
|
333
|
-
|
|
334
|
-
// Pad the note hash and nullifier trees
|
|
335
|
-
const paddedNoteHashTreeSize =
|
|
336
|
-
this.startStateReference.partial.noteHashTree.nextAvailableLeafIndex + MAX_NOTE_HASHES_PER_TX;
|
|
337
|
-
if (noteHashTree.nextAvailableLeafIndex > paddedNoteHashTreeSize) {
|
|
338
|
-
throw new Error(
|
|
339
|
-
`Inserted too many leaves in note hash tree: ${noteHashTree.nextAvailableLeafIndex} > ${paddedNoteHashTreeSize}`,
|
|
340
|
-
);
|
|
341
|
-
}
|
|
342
|
-
noteHashTree.nextAvailableLeafIndex = paddedNoteHashTreeSize;
|
|
343
|
-
|
|
344
|
-
const paddedNullifierTreeSize =
|
|
345
|
-
this.startStateReference.partial.nullifierTree.nextAvailableLeafIndex + MAX_NULLIFIERS_PER_TX;
|
|
346
|
-
if (nullifierTree.nextAvailableLeafIndex > paddedNullifierTreeSize) {
|
|
347
|
-
throw new Error(
|
|
348
|
-
`Inserted too many leaves in nullifier tree: ${nullifierTree.nextAvailableLeafIndex} > ${paddedNullifierTreeSize}`,
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
nullifierTree.nextAvailableLeafIndex = paddedNullifierTreeSize;
|
|
352
|
-
|
|
353
|
-
const endTreeSnapshots = new TreeSnapshots(
|
|
354
|
-
endStateReference.l1ToL2MessageTree,
|
|
355
|
-
noteHashTree,
|
|
356
|
-
nullifierTree,
|
|
357
|
-
publicDataTree,
|
|
358
|
-
);
|
|
327
|
+
const stateManager = this.state.getActiveStateManager();
|
|
359
328
|
|
|
360
329
|
const startTreeSnapshots = new TreeSnapshots(
|
|
361
330
|
this.startStateReference.l1ToL2MessageTree,
|
|
@@ -364,6 +333,14 @@ export class PublicTxContext {
|
|
|
364
333
|
this.startStateReference.partial.publicDataTree,
|
|
365
334
|
);
|
|
366
335
|
|
|
336
|
+
// Will be patched/padded at the end of this fn
|
|
337
|
+
const endTreeSnapshots = new TreeSnapshots(
|
|
338
|
+
endStateReference.l1ToL2MessageTree,
|
|
339
|
+
endStateReference.partial.noteHashTree,
|
|
340
|
+
endStateReference.partial.nullifierTree,
|
|
341
|
+
endStateReference.partial.publicDataTree,
|
|
342
|
+
);
|
|
343
|
+
|
|
367
344
|
const avmCircuitPublicInputs = this.trace.toAvmCircuitPublicInputs(
|
|
368
345
|
this.globalVariables,
|
|
369
346
|
startTreeSnapshots,
|
|
@@ -427,6 +404,24 @@ export class PublicTxContext {
|
|
|
427
404
|
PublicDataWrite.empty(),
|
|
428
405
|
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
429
406
|
);
|
|
407
|
+
const numNoteHashesToPad =
|
|
408
|
+
MAX_NOTE_HASHES_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.noteHashes);
|
|
409
|
+
await stateManager.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, padArrayEnd([], Fr.ZERO, numNoteHashesToPad));
|
|
410
|
+
const numNullifiersToPad =
|
|
411
|
+
MAX_NULLIFIERS_PER_TX - countAccumulatedItems(avmCircuitPublicInputs.accumulatedData.nullifiers);
|
|
412
|
+
await stateManager.db.batchInsert(
|
|
413
|
+
MerkleTreeId.NULLIFIER_TREE,
|
|
414
|
+
padArrayEnd([], Fr.ZERO, numNullifiersToPad).map(nullifier => nullifier.toBuffer()),
|
|
415
|
+
NULLIFIER_SUBTREE_HEIGHT,
|
|
416
|
+
);
|
|
417
|
+
|
|
418
|
+
const paddedState = await stateManager.db.getStateReference();
|
|
419
|
+
avmCircuitPublicInputs.endTreeSnapshots = new TreeSnapshots(
|
|
420
|
+
paddedState.l1ToL2MessageTree,
|
|
421
|
+
paddedState.partial.noteHashTree,
|
|
422
|
+
paddedState.partial.nullifierTree,
|
|
423
|
+
paddedState.partial.publicDataTree,
|
|
424
|
+
);
|
|
430
425
|
|
|
431
426
|
return avmCircuitPublicInputs;
|
|
432
427
|
}
|
|
@@ -467,10 +462,10 @@ class PhaseStateManager {
|
|
|
467
462
|
this.log = createLogger(`simulator:public_phase_state_manager`);
|
|
468
463
|
}
|
|
469
464
|
|
|
470
|
-
fork() {
|
|
465
|
+
async fork() {
|
|
471
466
|
assert(!this.currentlyActiveStateManager, 'Cannot fork when already forked');
|
|
472
467
|
this.log.debug(`Forking phase state manager`);
|
|
473
|
-
this.currentlyActiveStateManager = this.txStateManager.fork();
|
|
468
|
+
this.currentlyActiveStateManager = await this.txStateManager.fork();
|
|
474
469
|
}
|
|
475
470
|
|
|
476
471
|
getActiveStateManager() {
|
|
@@ -481,18 +476,18 @@ class PhaseStateManager {
|
|
|
481
476
|
return !!this.currentlyActiveStateManager;
|
|
482
477
|
}
|
|
483
478
|
|
|
484
|
-
mergeForkedState() {
|
|
479
|
+
async mergeForkedState() {
|
|
485
480
|
assert(this.currentlyActiveStateManager, 'No forked state to merge');
|
|
486
481
|
this.log.debug(`Merging in forked state`);
|
|
487
|
-
this.txStateManager.merge(this.currentlyActiveStateManager!);
|
|
482
|
+
await this.txStateManager.merge(this.currentlyActiveStateManager!);
|
|
488
483
|
// Drop the forked state manager now that it is merged
|
|
489
484
|
this.currentlyActiveStateManager = undefined;
|
|
490
485
|
}
|
|
491
486
|
|
|
492
|
-
discardForkedState() {
|
|
487
|
+
async discardForkedState() {
|
|
493
488
|
this.log.debug(`Discarding forked state`);
|
|
494
489
|
assert(this.currentlyActiveStateManager, 'No forked state to discard');
|
|
495
|
-
this.txStateManager.reject(this.currentlyActiveStateManager!);
|
|
490
|
+
await this.txStateManager.reject(this.currentlyActiveStateManager!);
|
|
496
491
|
// Drop the forked state manager. We don't want it!
|
|
497
492
|
this.currentlyActiveStateManager = undefined;
|
|
498
493
|
}
|
|
@@ -1,29 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type AvmProvingRequest,
|
|
3
|
-
type GasUsed,
|
|
4
|
-
type MerkleTreeReadOperations,
|
|
5
|
-
NestedProcessReturnValues,
|
|
6
|
-
type PublicExecutionRequest,
|
|
7
|
-
type SimulationError,
|
|
8
|
-
type Tx,
|
|
9
|
-
TxExecutionPhase,
|
|
10
|
-
} from '@aztec/circuit-types';
|
|
11
|
-
import { type AvmSimulationStats } from '@aztec/circuit-types/stats';
|
|
12
|
-
import { type Fr, type Gas, type GlobalVariables, type PublicCallRequest, type RevertCode } from '@aztec/circuits.js';
|
|
1
|
+
import type { Fr } from '@aztec/foundation/fields';
|
|
13
2
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
14
3
|
import { Timer } from '@aztec/foundation/timer';
|
|
15
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
|
+
import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
|
|
6
|
+
import type { AvmProvingRequest, RevertCode } from '@aztec/stdlib/avm';
|
|
7
|
+
import type { SimulationError } from '@aztec/stdlib/errors';
|
|
8
|
+
import type { Gas, GasUsed } from '@aztec/stdlib/gas';
|
|
9
|
+
import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
|
|
10
|
+
import type { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
11
|
+
import type { AvmSimulationStats } from '@aztec/stdlib/stats';
|
|
12
|
+
import {
|
|
13
|
+
type GlobalVariables,
|
|
14
|
+
NestedProcessReturnValues,
|
|
15
|
+
PublicExecutionRequest,
|
|
16
|
+
Tx,
|
|
17
|
+
TxExecutionPhase,
|
|
18
|
+
} from '@aztec/stdlib/tx';
|
|
16
19
|
import { Attributes, type TelemetryClient, type Tracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
17
20
|
|
|
18
21
|
import { strict as assert } from 'assert';
|
|
19
22
|
|
|
20
|
-
import { type AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
|
|
21
|
-
import { type AvmPersistableStateManager, AvmSimulator } from '../avm/index.js';
|
|
22
|
-
import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
|
|
23
23
|
import { getPublicFunctionDebugName } from '../common/debug_fn_name.js';
|
|
24
|
+
import type { AvmFinalizedCallResult } from './avm/avm_contract_call_result.js';
|
|
25
|
+
import { type AvmPersistableStateManager, AvmSimulator } from './avm/index.js';
|
|
26
|
+
import { NullifierCollisionError } from './avm/journal/nullifiers.js';
|
|
24
27
|
import { ExecutorMetrics } from './executor_metrics.js';
|
|
25
|
-
import {
|
|
26
|
-
import { type WorldStateDB } from './public_db_sources.js';
|
|
28
|
+
import type { WorldStateDB } from './public_db_sources.js';
|
|
27
29
|
import { PublicTxContext } from './public_tx_context.js';
|
|
28
30
|
|
|
29
31
|
export type ProcessedPhase = {
|
|
@@ -54,7 +56,7 @@ export class PublicTxSimulator {
|
|
|
54
56
|
private worldStateDB: WorldStateDB,
|
|
55
57
|
private globalVariables: GlobalVariables,
|
|
56
58
|
private doMerkleOperations: boolean = false,
|
|
57
|
-
private
|
|
59
|
+
private skipFeeEnforcement: boolean = false,
|
|
58
60
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
59
61
|
) {
|
|
60
62
|
this.log = createLogger(`simulator:public_tx_simulator`);
|
|
@@ -70,6 +72,8 @@ export class PublicTxSimulator {
|
|
|
70
72
|
* @returns The result of the transaction's public execution.
|
|
71
73
|
*/
|
|
72
74
|
public async simulate(tx: Tx): Promise<PublicTxResult> {
|
|
75
|
+
const startTime = process.hrtime.bigint();
|
|
76
|
+
|
|
73
77
|
const txHash = await tx.getTxHash();
|
|
74
78
|
this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
|
|
75
79
|
|
|
@@ -114,7 +118,7 @@ export class PublicTxSimulator {
|
|
|
114
118
|
processedPhases.push(teardownResult);
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
context.halt();
|
|
121
|
+
await context.halt();
|
|
118
122
|
await this.payFee(context);
|
|
119
123
|
|
|
120
124
|
const endStateReference = await this.db.getStateReference();
|
|
@@ -129,15 +133,19 @@ export class PublicTxSimulator {
|
|
|
129
133
|
// FIXME: we shouldn't need to directly modify worldStateDb here!
|
|
130
134
|
await this.worldStateDB.removeNewContracts(tx, true);
|
|
131
135
|
// FIXME(dbanks12): should not be changing immutable tx
|
|
132
|
-
tx.filterRevertedLogs(
|
|
136
|
+
await tx.filterRevertedLogs();
|
|
133
137
|
}
|
|
134
138
|
|
|
139
|
+
const endTime = process.hrtime.bigint();
|
|
140
|
+
this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
|
|
141
|
+
|
|
135
142
|
return {
|
|
136
143
|
avmProvingRequest,
|
|
137
144
|
gasUsed: {
|
|
138
145
|
totalGas: context.getActualGasUsed(),
|
|
139
146
|
teardownGas: context.teardownGasUsed,
|
|
140
147
|
publicGas: context.getActualPublicGasUsed(),
|
|
148
|
+
billedGas: context.getTotalGasUsed(),
|
|
141
149
|
},
|
|
142
150
|
revertCode,
|
|
143
151
|
revertReason: context.revertReason,
|
|
@@ -166,11 +174,11 @@ export class PublicTxSimulator {
|
|
|
166
174
|
|
|
167
175
|
if (result.reverted) {
|
|
168
176
|
// Drop the currently active forked state manager and rollback to end of setup.
|
|
169
|
-
context.state.discardForkedState();
|
|
177
|
+
await context.state.discardForkedState();
|
|
170
178
|
} else {
|
|
171
179
|
if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
172
180
|
// Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
|
|
173
|
-
context.state.mergeForkedState();
|
|
181
|
+
await context.state.mergeForkedState();
|
|
174
182
|
}
|
|
175
183
|
}
|
|
176
184
|
|
|
@@ -186,17 +194,17 @@ export class PublicTxSimulator {
|
|
|
186
194
|
if (!context.state.isForked()) {
|
|
187
195
|
// If state isn't forked (app logic reverted), fork now
|
|
188
196
|
// so we can rollback to the end of setup if teardown reverts.
|
|
189
|
-
context.state.fork();
|
|
197
|
+
await context.state.fork();
|
|
190
198
|
}
|
|
191
199
|
|
|
192
200
|
const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
|
|
193
201
|
|
|
194
202
|
if (result.reverted) {
|
|
195
203
|
// Drop the currently active forked state manager and rollback to end of setup.
|
|
196
|
-
context.state.discardForkedState();
|
|
204
|
+
await context.state.discardForkedState();
|
|
197
205
|
} else {
|
|
198
206
|
// Merge state updates from teardown,
|
|
199
|
-
context.state.mergeForkedState();
|
|
207
|
+
await context.state.mergeForkedState();
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
return result;
|
|
@@ -395,7 +403,7 @@ export class PublicTxSimulator {
|
|
|
395
403
|
*/
|
|
396
404
|
public async insertRevertiblesFromPrivate(context: PublicTxContext) {
|
|
397
405
|
// Fork the state manager so we can rollback to end of setup if app logic reverts.
|
|
398
|
-
context.state.fork();
|
|
406
|
+
await context.state.fork();
|
|
399
407
|
const stateManager = context.state.getActiveStateManager();
|
|
400
408
|
try {
|
|
401
409
|
await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
|
|
@@ -433,7 +441,7 @@ export class PublicTxSimulator {
|
|
|
433
441
|
// When mocking the balance of the fee payer, the circuit should not be able to prove the simulation
|
|
434
442
|
|
|
435
443
|
if (currentBalance.lt(txFee)) {
|
|
436
|
-
if (this.
|
|
444
|
+
if (!this.skipFeeEnforcement) {
|
|
437
445
|
throw new Error(
|
|
438
446
|
`Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
|
|
439
447
|
);
|
|
@@ -1,23 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
AvmAccumulatedData,
|
|
3
|
-
AvmAppendTreeHint,
|
|
4
|
-
AvmCircuitPublicInputs,
|
|
5
|
-
AvmContractBytecodeHints,
|
|
6
|
-
AvmContractInstanceHint,
|
|
7
|
-
AvmEnqueuedCallHint,
|
|
8
|
-
AvmExecutionHints,
|
|
9
|
-
AvmNullifierReadTreeHint,
|
|
10
|
-
AvmNullifierWriteTreeHint,
|
|
11
|
-
AvmPublicDataReadTreeHint,
|
|
12
|
-
AvmPublicDataWriteTreeHint,
|
|
13
|
-
type AztecAddress,
|
|
14
|
-
type ContractClassIdPreimage,
|
|
15
|
-
EthAddress,
|
|
16
|
-
type Gas,
|
|
17
|
-
type GasSettings,
|
|
18
|
-
type GlobalVariables,
|
|
19
2
|
L1_TO_L2_MSG_TREE_HEIGHT,
|
|
20
|
-
L2ToL1Message,
|
|
21
3
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
22
4
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
23
5
|
MAX_NOTE_HASHES_PER_TX,
|
|
@@ -28,33 +10,49 @@ import {
|
|
|
28
10
|
MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
29
11
|
NOTE_HASH_TREE_HEIGHT,
|
|
30
12
|
NULLIFIER_TREE_HEIGHT,
|
|
31
|
-
NoteHash,
|
|
32
|
-
Nullifier,
|
|
33
|
-
NullifierLeafPreimage,
|
|
34
13
|
PROTOCOL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX,
|
|
35
14
|
PUBLIC_DATA_TREE_HEIGHT,
|
|
36
15
|
PUBLIC_LOG_DATA_SIZE_IN_FIELDS,
|
|
37
|
-
|
|
38
|
-
PrivateToAvmAccumulatedDataArrayLengths,
|
|
39
|
-
PublicCallRequest,
|
|
40
|
-
PublicDataTreeLeafPreimage,
|
|
41
|
-
PublicDataUpdateRequest,
|
|
42
|
-
PublicDataWrite,
|
|
43
|
-
PublicLog,
|
|
44
|
-
ScopedL2ToL1Message,
|
|
45
|
-
SerializableContractInstance,
|
|
46
|
-
type TreeSnapshots,
|
|
47
|
-
} from '@aztec/circuits.js';
|
|
48
|
-
import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash';
|
|
16
|
+
} from '@aztec/constants';
|
|
49
17
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
18
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
50
19
|
import { Fr } from '@aztec/foundation/fields';
|
|
51
|
-
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
52
20
|
import { createLogger } from '@aztec/foundation/log';
|
|
21
|
+
import {
|
|
22
|
+
AvmAccumulatedData,
|
|
23
|
+
AvmAppendTreeHint,
|
|
24
|
+
AvmCircuitPublicInputs,
|
|
25
|
+
AvmContractClassHint,
|
|
26
|
+
AvmContractInstanceHint,
|
|
27
|
+
AvmEnqueuedCallHint,
|
|
28
|
+
AvmExecutionHints,
|
|
29
|
+
AvmNullifierReadTreeHint,
|
|
30
|
+
AvmNullifierWriteTreeHint,
|
|
31
|
+
AvmPublicDataReadTreeHint,
|
|
32
|
+
AvmPublicDataWriteTreeHint,
|
|
33
|
+
PublicDataUpdateRequest,
|
|
34
|
+
PublicDataWrite,
|
|
35
|
+
} from '@aztec/stdlib/avm';
|
|
36
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
37
|
+
import { type ContractClassWithCommitment, SerializableContractInstance } from '@aztec/stdlib/contract';
|
|
38
|
+
import type { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
39
|
+
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
40
|
+
import {
|
|
41
|
+
NoteHash,
|
|
42
|
+
Nullifier,
|
|
43
|
+
PrivateToAvmAccumulatedData,
|
|
44
|
+
PrivateToAvmAccumulatedDataArrayLengths,
|
|
45
|
+
PublicCallRequest,
|
|
46
|
+
} from '@aztec/stdlib/kernel';
|
|
47
|
+
import { PublicLog } from '@aztec/stdlib/logs';
|
|
48
|
+
import { L2ToL1Message, ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
49
|
+
import { NullifierLeafPreimage, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
|
|
50
|
+
import type { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
|
|
53
51
|
|
|
54
52
|
import { strict as assert } from 'assert';
|
|
55
53
|
|
|
56
54
|
import { SideEffectLimitReachedError } from './side_effect_errors.js';
|
|
57
|
-
import {
|
|
55
|
+
import type { PublicSideEffectTraceInterface } from './side_effect_trace_interface.js';
|
|
58
56
|
import { UniqueClassIds } from './unique_class_ids.js';
|
|
59
57
|
|
|
60
58
|
const emptyPublicDataPath = () => new Array(PUBLIC_DATA_TREE_HEIGHT).fill(Fr.zero());
|
|
@@ -124,8 +122,8 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
124
122
|
* otherwise the public kernel can fail to prove because TX limits are breached.
|
|
125
123
|
*/
|
|
126
124
|
private readonly previousSideEffectArrayLengths: SideEffectArrayLengths = SideEffectArrayLengths.empty(),
|
|
127
|
-
/** We need to track the set of class IDs used
|
|
128
|
-
private
|
|
125
|
+
/** We need to track the set of class IDs used, to enforce limits. */
|
|
126
|
+
private uniqueClassIds: UniqueClassIds = new UniqueClassIds(),
|
|
129
127
|
) {
|
|
130
128
|
this.sideEffectCounter = startSideEffectCounter;
|
|
131
129
|
this.avmCircuitHints = AvmExecutionHints.empty();
|
|
@@ -142,7 +140,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
142
140
|
this.previousSideEffectArrayLengths.l2ToL1Msgs + this.l2ToL1Messages.length,
|
|
143
141
|
this.previousSideEffectArrayLengths.publicLogs + this.publicLogs.length,
|
|
144
142
|
),
|
|
145
|
-
this.
|
|
143
|
+
this.uniqueClassIds.fork(),
|
|
146
144
|
);
|
|
147
145
|
}
|
|
148
146
|
|
|
@@ -168,22 +166,10 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
168
166
|
}
|
|
169
167
|
|
|
170
168
|
private mergeHints(forkedTrace: this) {
|
|
171
|
-
this.
|
|
172
|
-
|
|
169
|
+
this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
|
|
173
170
|
this.avmCircuitHints.enqueuedCalls.items.push(...forkedTrace.avmCircuitHints.enqueuedCalls.items);
|
|
174
|
-
|
|
175
171
|
this.avmCircuitHints.contractInstances.items.push(...forkedTrace.avmCircuitHints.contractInstances.items);
|
|
176
|
-
|
|
177
|
-
// merge in contract bytecode hints
|
|
178
|
-
// UniqueClassIds should prevent duplication
|
|
179
|
-
for (const [contractClassId, bytecodeHint] of forkedTrace.avmCircuitHints.contractBytecodeHints) {
|
|
180
|
-
assert(
|
|
181
|
-
!this.avmCircuitHints.contractBytecodeHints.has(contractClassId),
|
|
182
|
-
'Bug preventing duplication of contract bytecode hints',
|
|
183
|
-
);
|
|
184
|
-
this.avmCircuitHints.contractBytecodeHints.set(contractClassId, bytecodeHint);
|
|
185
|
-
}
|
|
186
|
-
|
|
172
|
+
this.avmCircuitHints.contractClasses.items.push(...forkedTrace.avmCircuitHints.contractClasses.items);
|
|
187
173
|
this.avmCircuitHints.publicDataReads.items.push(...forkedTrace.avmCircuitHints.publicDataReads.items);
|
|
188
174
|
this.avmCircuitHints.publicDataWrites.items.push(...forkedTrace.avmCircuitHints.publicDataWrites.items);
|
|
189
175
|
this.avmCircuitHints.nullifierReads.items.push(...forkedTrace.avmCircuitHints.nullifierReads.items);
|
|
@@ -371,114 +357,55 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
371
357
|
contractAddress: AztecAddress,
|
|
372
358
|
exists: boolean,
|
|
373
359
|
instance: SerializableContractInstance = SerializableContractInstance.default(),
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
lowLeafPath: Fr[] = emptyNullifierPath(),
|
|
360
|
+
updateMembershipHint: AvmPublicDataReadTreeHint = AvmPublicDataReadTreeHint.empty(),
|
|
361
|
+
updatePreimage: Fr[] = [],
|
|
377
362
|
) {
|
|
378
|
-
const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
379
363
|
this.avmCircuitHints.contractInstances.items.push(
|
|
380
364
|
new AvmContractInstanceHint(
|
|
381
365
|
contractAddress,
|
|
382
366
|
exists,
|
|
383
367
|
instance.salt,
|
|
384
368
|
instance.deployer,
|
|
385
|
-
instance.
|
|
369
|
+
instance.currentContractClassId,
|
|
370
|
+
instance.originalContractClassId,
|
|
386
371
|
instance.initializationHash,
|
|
387
372
|
instance.publicKeys,
|
|
388
|
-
|
|
373
|
+
updateMembershipHint,
|
|
374
|
+
updatePreimage,
|
|
389
375
|
),
|
|
390
376
|
);
|
|
391
377
|
this.log.trace(`Tracing contract instance retrieval (counter=${this.sideEffectCounter})`);
|
|
392
378
|
this.incrementSideEffectCounter();
|
|
393
379
|
}
|
|
394
380
|
|
|
395
|
-
|
|
396
|
-
// This happens both when starting a new top-level trace and the start of every forked trace
|
|
397
|
-
// We use this to collect the AvmContractBytecodeHints
|
|
398
|
-
public traceGetBytecode(
|
|
399
|
-
contractAddress: AztecAddress,
|
|
400
|
-
exists: boolean,
|
|
401
|
-
bytecode: Buffer = Buffer.alloc(0),
|
|
402
|
-
contractInstance: SerializableContractInstance = SerializableContractInstance.default(),
|
|
403
|
-
contractClass: ContractClassIdPreimage = {
|
|
404
|
-
artifactHash: Fr.zero(),
|
|
405
|
-
privateFunctionsRoot: Fr.zero(),
|
|
406
|
-
publicBytecodeCommitment: Fr.zero(),
|
|
407
|
-
},
|
|
408
|
-
lowLeafPreimage: NullifierLeafPreimage = NullifierLeafPreimage.empty(),
|
|
409
|
-
lowLeafIndex: Fr = Fr.zero(),
|
|
410
|
-
lowLeafPath: Fr[] = emptyNullifierPath(),
|
|
411
|
-
) {
|
|
412
|
-
// FIXME: The way we are hinting contract bytecodes is fundamentally broken.
|
|
413
|
-
// We are mapping contract class ID to a bytecode hint
|
|
414
|
-
// But a bytecode hint is tied to a contract INSTANCE.
|
|
415
|
-
// What if you encounter another contract instance with the same class ID?
|
|
416
|
-
// We can't hint that instance too since there is already an entry in the hints set that class ID.
|
|
417
|
-
// But without that instance hinted, the circuit can't prove that the called contract address
|
|
418
|
-
// actually corresponds to any class ID.
|
|
419
|
-
|
|
420
|
-
const membershipHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
421
|
-
const instance = new AvmContractInstanceHint(
|
|
422
|
-
contractAddress,
|
|
423
|
-
exists,
|
|
424
|
-
contractInstance.salt,
|
|
425
|
-
contractInstance.deployer,
|
|
426
|
-
contractInstance.contractClassId,
|
|
427
|
-
contractInstance.initializationHash,
|
|
428
|
-
contractInstance.publicKeys,
|
|
429
|
-
membershipHint,
|
|
430
|
-
);
|
|
431
|
-
|
|
432
|
-
// Always hint the contract instance separately from the bytecode hint.
|
|
433
|
-
// Since the bytecode hints are keyed by class ID, we need to hint the instance separately
|
|
434
|
-
// since there might be multiple instances hinted for the same class ID.
|
|
435
|
-
this.avmCircuitHints.contractInstances.items.push(instance);
|
|
436
|
-
this.log.trace(
|
|
437
|
-
`Tracing contract instance for bytecode retrieval: exists=${exists}, instance=${jsonStringify(contractInstance)}`,
|
|
438
|
-
);
|
|
439
|
-
|
|
381
|
+
public traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment) {
|
|
440
382
|
if (!exists) {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
// We already hinted this bytecode. No need to
|
|
446
|
-
// Don't we still need to hint if the class ID already exists?
|
|
447
|
-
// Because the circuit needs to prove that the called contract address corresponds to the class ID.
|
|
448
|
-
// To do so, the circuit needs to know the class ID in the
|
|
449
|
-
if (this.gotBytecodeFromClassIds.has(contractInstance.contractClassId.toString())) {
|
|
450
|
-
// this ensures there are no duplicates
|
|
451
|
-
this.log.trace(
|
|
452
|
-
`Contract class id ${contractInstance.contractClassId.toString()} already exists in previous hints`,
|
|
383
|
+
this.avmCircuitHints.contractClasses.items.push(
|
|
384
|
+
new AvmContractClassHint(contractClassId, exists, Fr.zero(), Fr.zero(), Fr.zero(), Buffer.alloc(0)),
|
|
453
385
|
);
|
|
454
|
-
|
|
455
|
-
|
|
386
|
+
} else if (!this.uniqueClassIds.has(contractClassId.toString())) {
|
|
387
|
+
if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
|
|
388
|
+
this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
|
|
389
|
+
throw new SideEffectLimitReachedError(
|
|
390
|
+
'contract calls to unique class IDs',
|
|
391
|
+
MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
|
|
392
|
+
);
|
|
393
|
+
}
|
|
456
394
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
395
|
+
this.uniqueClassIds.add(contractClassId.toString());
|
|
396
|
+
this.avmCircuitHints.contractClasses.items.push(
|
|
397
|
+
new AvmContractClassHint(
|
|
398
|
+
contractClassId,
|
|
399
|
+
exists,
|
|
400
|
+
contractClass!.artifactHash,
|
|
401
|
+
contractClass!.privateFunctionsRoot,
|
|
402
|
+
contractClass!.publicBytecodeCommitment,
|
|
403
|
+
contractClass!.packedBytecode,
|
|
404
|
+
),
|
|
467
405
|
);
|
|
468
|
-
throw new SideEffectLimitReachedError(
|
|
469
|
-
'contract calls to unique class IDs',
|
|
470
|
-
MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
|
|
471
|
-
);
|
|
472
|
-
}
|
|
473
406
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
contractInstance.contractClassId.toString(),
|
|
477
|
-
new AvmContractBytecodeHints(bytecode, instance, contractClass),
|
|
478
|
-
);
|
|
479
|
-
// After adding the bytecode hint, mark the classId as retrieved to avoid duplication.
|
|
480
|
-
// The above map alone isn't sufficient because we need to check the parent trace's (and its parent) as well.
|
|
481
|
-
this.gotBytecodeFromClassIds.add(contractInstance.contractClassId.toString());
|
|
407
|
+
this.incrementSideEffectCounter();
|
|
408
|
+
}
|
|
482
409
|
}
|
|
483
410
|
|
|
484
411
|
/**
|