@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,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 {
|
|
23
|
+
import { getPublicFunctionDebugName } from '../../common/debug_fn_name.js';
|
|
24
|
+
import type { AvmFinalizedCallResult } from '../avm/avm_contract_call_result.js';
|
|
21
25
|
import { type AvmPersistableStateManager, AvmSimulator } from '../avm/index.js';
|
|
22
26
|
import { NullifierCollisionError } from '../avm/journal/nullifiers.js';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import { computeFeePayerBalanceStorageSlot } from './fee_payment.js';
|
|
26
|
-
import { type WorldStateDB } from './public_db_sources.js';
|
|
27
|
+
import { ExecutorMetrics } from '../executor_metrics.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,79 +72,89 @@ 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> {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
try {
|
|
76
|
+
const startTime = process.hrtime.bigint();
|
|
77
|
+
|
|
78
|
+
const txHash = await tx.getTxHash();
|
|
79
|
+
this.log.debug(`Simulating ${tx.enqueuedPublicFunctionCalls.length} public calls for tx ${txHash}`, { txHash });
|
|
80
|
+
|
|
81
|
+
const context = await PublicTxContext.create(
|
|
82
|
+
this.db,
|
|
83
|
+
this.worldStateDB,
|
|
84
|
+
tx,
|
|
85
|
+
this.globalVariables,
|
|
86
|
+
this.doMerkleOperations,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
const nonRevertStart = process.hrtime.bigint();
|
|
90
|
+
await this.insertNonRevertiblesFromPrivate(context);
|
|
91
|
+
// add new contracts to the contracts db so that their functions may be found and called
|
|
92
|
+
// TODO(#6464): Should we allow emitting contracts in the private setup phase?
|
|
93
|
+
await this.worldStateDB.addNewNonRevertibleContracts(tx);
|
|
94
|
+
const nonRevertEnd = process.hrtime.bigint();
|
|
95
|
+
this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
|
|
96
|
+
|
|
97
|
+
const processedPhases: ProcessedPhase[] = [];
|
|
98
|
+
if (context.hasPhase(TxExecutionPhase.SETUP)) {
|
|
99
|
+
const setupResult: ProcessedPhase = await this.simulateSetupPhase(context);
|
|
100
|
+
processedPhases.push(setupResult);
|
|
101
|
+
}
|
|
83
102
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.metrics.recordPrivateEffectsInsertion(Number(nonRevertEnd - nonRevertStart) / 1_000, 'non-revertible');
|
|
97
|
-
const processedPhases: ProcessedPhase[] = [];
|
|
98
|
-
if (context.hasPhase(TxExecutionPhase.SETUP)) {
|
|
99
|
-
const setupResult: ProcessedPhase = await this.simulateSetupPhase(context);
|
|
100
|
-
processedPhases.push(setupResult);
|
|
101
|
-
}
|
|
103
|
+
const revertStart = process.hrtime.bigint();
|
|
104
|
+
// FIXME(#12375): TX shouldn't die if revertible insertions fail. Should just revert to snapshot.
|
|
105
|
+
await this.insertRevertiblesFromPrivate(context);
|
|
106
|
+
// add new contracts to the contracts db so that their functions may be found and called
|
|
107
|
+
await this.worldStateDB.addNewRevertibleContracts(tx);
|
|
108
|
+
const revertEnd = process.hrtime.bigint();
|
|
109
|
+
this.metrics.recordPrivateEffectsInsertion(Number(revertEnd - revertStart) / 1_000, 'revertible');
|
|
110
|
+
|
|
111
|
+
if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
|
|
112
|
+
const appLogicResult: ProcessedPhase = await this.simulateAppLogicPhase(context);
|
|
113
|
+
processedPhases.push(appLogicResult);
|
|
114
|
+
}
|
|
102
115
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (context.hasPhase(TxExecutionPhase.APP_LOGIC)) {
|
|
108
|
-
const appLogicResult: ProcessedPhase = await this.simulateAppLogicPhase(context);
|
|
109
|
-
processedPhases.push(appLogicResult);
|
|
110
|
-
}
|
|
116
|
+
if (context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
117
|
+
const teardownResult: ProcessedPhase = await this.simulateTeardownPhase(context);
|
|
118
|
+
processedPhases.push(teardownResult);
|
|
119
|
+
}
|
|
111
120
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
processedPhases.push(teardownResult);
|
|
115
|
-
}
|
|
121
|
+
await context.halt();
|
|
122
|
+
await this.payFee(context);
|
|
116
123
|
|
|
117
|
-
|
|
118
|
-
await this.payFee(context);
|
|
124
|
+
const endStateReference = await this.db.getStateReference();
|
|
119
125
|
|
|
120
|
-
|
|
126
|
+
const avmProvingRequest = await context.generateProvingRequest(endStateReference);
|
|
121
127
|
|
|
122
|
-
|
|
128
|
+
const revertCode = context.getFinalRevertCode();
|
|
123
129
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
if (!revertCode.isOK()) {
|
|
131
|
+
await tx.filterRevertedLogs();
|
|
132
|
+
}
|
|
133
|
+
// Commit contracts from this TX to the block-level cache and clear tx cache
|
|
134
|
+
// If the tx reverted, only commit non-revertible contracts
|
|
135
|
+
// NOTE: You can't create contracts in public, so this is only relevant for private-created contracts
|
|
136
|
+
this.worldStateDB.commitContractsForTx(/*onlyNonRevertibles=*/ !revertCode.isOK());
|
|
137
|
+
|
|
138
|
+
const endTime = process.hrtime.bigint();
|
|
139
|
+
this.log.debug(`Public TX simulator took ${Number(endTime - startTime) / 1_000_000} ms\n`);
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
avmProvingRequest,
|
|
143
|
+
gasUsed: {
|
|
144
|
+
totalGas: context.getActualGasUsed(),
|
|
145
|
+
teardownGas: context.teardownGasUsed,
|
|
146
|
+
publicGas: context.getActualPublicGasUsed(),
|
|
147
|
+
billedGas: context.getTotalGasUsed(),
|
|
148
|
+
},
|
|
149
|
+
revertCode,
|
|
150
|
+
revertReason: context.revertReason,
|
|
151
|
+
processedPhases: processedPhases,
|
|
152
|
+
};
|
|
153
|
+
} finally {
|
|
154
|
+
// Make sure there are no new contracts in the tx-level cache.
|
|
155
|
+
// They should either be committed to block-level cache or cleared.
|
|
156
|
+
this.worldStateDB.clearContractsForTx();
|
|
133
157
|
}
|
|
134
|
-
|
|
135
|
-
return {
|
|
136
|
-
avmProvingRequest,
|
|
137
|
-
gasUsed: {
|
|
138
|
-
totalGas: context.getActualGasUsed(),
|
|
139
|
-
teardownGas: context.teardownGasUsed,
|
|
140
|
-
publicGas: context.getActualPublicGasUsed(),
|
|
141
|
-
},
|
|
142
|
-
revertCode,
|
|
143
|
-
revertReason: context.revertReason,
|
|
144
|
-
processedPhases: processedPhases,
|
|
145
|
-
};
|
|
146
158
|
}
|
|
147
159
|
|
|
148
160
|
/**
|
|
@@ -166,11 +178,11 @@ export class PublicTxSimulator {
|
|
|
166
178
|
|
|
167
179
|
if (result.reverted) {
|
|
168
180
|
// Drop the currently active forked state manager and rollback to end of setup.
|
|
169
|
-
context.state.discardForkedState();
|
|
181
|
+
await context.state.discardForkedState();
|
|
170
182
|
} else {
|
|
171
183
|
if (!context.hasPhase(TxExecutionPhase.TEARDOWN)) {
|
|
172
184
|
// Nothing to do after this (no teardown), so merge state updates now instead of letting teardown handle it.
|
|
173
|
-
context.state.mergeForkedState();
|
|
185
|
+
await context.state.mergeForkedState();
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
|
|
@@ -186,17 +198,17 @@ export class PublicTxSimulator {
|
|
|
186
198
|
if (!context.state.isForked()) {
|
|
187
199
|
// If state isn't forked (app logic reverted), fork now
|
|
188
200
|
// so we can rollback to the end of setup if teardown reverts.
|
|
189
|
-
context.state.fork();
|
|
201
|
+
await context.state.fork();
|
|
190
202
|
}
|
|
191
203
|
|
|
192
204
|
const result = await this.simulatePhase(TxExecutionPhase.TEARDOWN, context);
|
|
193
205
|
|
|
194
206
|
if (result.reverted) {
|
|
195
207
|
// Drop the currently active forked state manager and rollback to end of setup.
|
|
196
|
-
context.state.discardForkedState();
|
|
208
|
+
await context.state.discardForkedState();
|
|
197
209
|
} else {
|
|
198
210
|
// Merge state updates from teardown,
|
|
199
|
-
context.state.mergeForkedState();
|
|
211
|
+
await context.state.mergeForkedState();
|
|
200
212
|
}
|
|
201
213
|
|
|
202
214
|
return result;
|
|
@@ -302,7 +314,7 @@ export class PublicTxSimulator {
|
|
|
302
314
|
|
|
303
315
|
/**
|
|
304
316
|
* Simulate an enqueued public call, without modifying the context (PublicTxContext).
|
|
305
|
-
* Resulting
|
|
317
|
+
* Resulting modifications to the context can be applied by the caller.
|
|
306
318
|
*
|
|
307
319
|
* This function can be mocked for testing to skip actual AVM simulation
|
|
308
320
|
* while still simulating phases and generating a proving request.
|
|
@@ -395,12 +407,13 @@ export class PublicTxSimulator {
|
|
|
395
407
|
*/
|
|
396
408
|
public async insertRevertiblesFromPrivate(context: PublicTxContext) {
|
|
397
409
|
// Fork the state manager so we can rollback to end of setup if app logic reverts.
|
|
398
|
-
context.state.fork();
|
|
410
|
+
await context.state.fork();
|
|
399
411
|
const stateManager = context.state.getActiveStateManager();
|
|
400
412
|
try {
|
|
401
413
|
await stateManager.writeSiloedNullifiersFromPrivate(context.revertibleAccumulatedDataFromPrivate.nullifiers);
|
|
402
414
|
} catch (e) {
|
|
403
415
|
if (e instanceof NullifierCollisionError) {
|
|
416
|
+
// FIXME(#12375): simulator should be able to recover from this and just revert to snapshot.
|
|
404
417
|
throw new NullifierCollisionError(
|
|
405
418
|
`Nullifier collision encountered when inserting revertible nullifiers from private. Details:\n${e.message}\n.Stack:${e.stack}`,
|
|
406
419
|
);
|
|
@@ -433,7 +446,7 @@ export class PublicTxSimulator {
|
|
|
433
446
|
// When mocking the balance of the fee payer, the circuit should not be able to prove the simulation
|
|
434
447
|
|
|
435
448
|
if (currentBalance.lt(txFee)) {
|
|
436
|
-
if (this.
|
|
449
|
+
if (!this.skipFeeEnforcement) {
|
|
437
450
|
throw new Error(
|
|
438
451
|
`Not enough balance for fee payer to pay for transaction (got ${currentBalance.toBigInt()} needs ${txFee.toBigInt()})`,
|
|
439
452
|
);
|
|
@@ -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,29 +166,17 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
168
166
|
}
|
|
169
167
|
|
|
170
168
|
private mergeHints(forkedTrace: this) {
|
|
171
|
-
this.
|
|
172
|
-
|
|
173
|
-
this.avmCircuitHints.
|
|
174
|
-
|
|
175
|
-
this.avmCircuitHints.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
'Bug preventing duplication of contract bytecode hints',
|
|
183
|
-
);
|
|
184
|
-
this.avmCircuitHints.contractBytecodeHints.set(contractClassId, bytecodeHint);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this.avmCircuitHints.publicDataReads.items.push(...forkedTrace.avmCircuitHints.publicDataReads.items);
|
|
188
|
-
this.avmCircuitHints.publicDataWrites.items.push(...forkedTrace.avmCircuitHints.publicDataWrites.items);
|
|
189
|
-
this.avmCircuitHints.nullifierReads.items.push(...forkedTrace.avmCircuitHints.nullifierReads.items);
|
|
190
|
-
this.avmCircuitHints.nullifierWrites.items.push(...forkedTrace.avmCircuitHints.nullifierWrites.items);
|
|
191
|
-
this.avmCircuitHints.noteHashReads.items.push(...forkedTrace.avmCircuitHints.noteHashReads.items);
|
|
192
|
-
this.avmCircuitHints.noteHashWrites.items.push(...forkedTrace.avmCircuitHints.noteHashWrites.items);
|
|
193
|
-
this.avmCircuitHints.l1ToL2MessageReads.items.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads.items);
|
|
169
|
+
this.uniqueClassIds.acceptAndMerge(forkedTrace.uniqueClassIds);
|
|
170
|
+
this.avmCircuitHints.enqueuedCalls.push(...forkedTrace.avmCircuitHints.enqueuedCalls);
|
|
171
|
+
this.avmCircuitHints.contractInstances.push(...forkedTrace.avmCircuitHints.contractInstances);
|
|
172
|
+
this.avmCircuitHints.contractClasses.push(...forkedTrace.avmCircuitHints.contractClasses);
|
|
173
|
+
this.avmCircuitHints.publicDataReads.push(...forkedTrace.avmCircuitHints.publicDataReads);
|
|
174
|
+
this.avmCircuitHints.publicDataWrites.push(...forkedTrace.avmCircuitHints.publicDataWrites);
|
|
175
|
+
this.avmCircuitHints.nullifierReads.push(...forkedTrace.avmCircuitHints.nullifierReads);
|
|
176
|
+
this.avmCircuitHints.nullifierWrites.push(...forkedTrace.avmCircuitHints.nullifierWrites);
|
|
177
|
+
this.avmCircuitHints.noteHashReads.push(...forkedTrace.avmCircuitHints.noteHashReads);
|
|
178
|
+
this.avmCircuitHints.noteHashWrites.push(...forkedTrace.avmCircuitHints.noteHashWrites);
|
|
179
|
+
this.avmCircuitHints.l1ToL2MessageReads.push(...forkedTrace.avmCircuitHints.l1ToL2MessageReads);
|
|
194
180
|
}
|
|
195
181
|
|
|
196
182
|
public getCounter() {
|
|
@@ -213,7 +199,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
213
199
|
leafIndex: Fr = Fr.zero(),
|
|
214
200
|
path: Fr[] = emptyPublicDataPath(),
|
|
215
201
|
) {
|
|
216
|
-
this.avmCircuitHints.publicDataReads.
|
|
202
|
+
this.avmCircuitHints.publicDataReads.push(new AvmPublicDataReadTreeHint(leafPreimage, leafIndex, path));
|
|
217
203
|
this.log.trace(
|
|
218
204
|
`Tracing storage read (address=${contractAddress}, slot=${slot}): value=${value} (counter=${this.sideEffectCounter})`,
|
|
219
205
|
);
|
|
@@ -260,7 +246,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
260
246
|
|
|
261
247
|
// New hinting
|
|
262
248
|
const readHint = new AvmPublicDataReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
263
|
-
this.avmCircuitHints.publicDataWrites.
|
|
249
|
+
this.avmCircuitHints.publicDataWrites.push(
|
|
264
250
|
new AvmPublicDataWriteTreeHint(readHint, newLeafPreimage, insertionPath),
|
|
265
251
|
);
|
|
266
252
|
|
|
@@ -279,7 +265,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
279
265
|
path: Fr[] = emptyNoteHashPath(),
|
|
280
266
|
) {
|
|
281
267
|
// New Hinting
|
|
282
|
-
this.avmCircuitHints.noteHashReads.
|
|
268
|
+
this.avmCircuitHints.noteHashReads.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
|
|
283
269
|
// NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
|
|
284
270
|
this.log.trace(`Tracing note hash check (counter=${this.sideEffectCounter})`);
|
|
285
271
|
}
|
|
@@ -290,7 +276,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
290
276
|
}
|
|
291
277
|
|
|
292
278
|
this.noteHashes.push(new NoteHash(noteHash, this.sideEffectCounter));
|
|
293
|
-
this.avmCircuitHints.noteHashWrites.
|
|
279
|
+
this.avmCircuitHints.noteHashWrites.push(new AvmAppendTreeHint(leafIndex, noteHash, path));
|
|
294
280
|
this.log.trace(`Tracing new note hash (counter=${this.sideEffectCounter})`);
|
|
295
281
|
this.incrementSideEffectCounter();
|
|
296
282
|
}
|
|
@@ -302,9 +288,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
302
288
|
lowLeafIndex: Fr = Fr.zero(),
|
|
303
289
|
lowLeafPath: Fr[] = emptyNullifierPath(),
|
|
304
290
|
) {
|
|
305
|
-
this.avmCircuitHints.nullifierReads.
|
|
306
|
-
new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath),
|
|
307
|
-
);
|
|
291
|
+
this.avmCircuitHints.nullifierReads.push(new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath));
|
|
308
292
|
this.log.trace(`Tracing nullifier check (counter=${this.sideEffectCounter})`);
|
|
309
293
|
this.incrementSideEffectCounter();
|
|
310
294
|
}
|
|
@@ -323,7 +307,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
323
307
|
this.nullifiers.push(new Nullifier(siloedNullifier, this.sideEffectCounter, /*noteHash=*/ Fr.ZERO));
|
|
324
308
|
|
|
325
309
|
const lowLeafReadHint = new AvmNullifierReadTreeHint(lowLeafPreimage, lowLeafIndex, lowLeafPath);
|
|
326
|
-
this.avmCircuitHints.nullifierWrites.
|
|
310
|
+
this.avmCircuitHints.nullifierWrites.push(new AvmNullifierWriteTreeHint(lowLeafReadHint, insertionPath));
|
|
327
311
|
this.log.trace(`Tracing new nullifier (counter=${this.sideEffectCounter})`);
|
|
328
312
|
this.incrementSideEffectCounter();
|
|
329
313
|
}
|
|
@@ -336,7 +320,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
336
320
|
_exists: boolean,
|
|
337
321
|
path: Fr[] = emptyL1ToL2MessagePath(),
|
|
338
322
|
) {
|
|
339
|
-
this.avmCircuitHints.l1ToL2MessageReads.
|
|
323
|
+
this.avmCircuitHints.l1ToL2MessageReads.push(new AvmAppendTreeHint(msgLeafIndex, msgHash, path));
|
|
340
324
|
this.log.trace(`Tracing l1 to l2 message check (counter=${this.sideEffectCounter})`);
|
|
341
325
|
}
|
|
342
326
|
|
|
@@ -371,114 +355,55 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
371
355
|
contractAddress: AztecAddress,
|
|
372
356
|
exists: boolean,
|
|
373
357
|
instance: SerializableContractInstance = SerializableContractInstance.default(),
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
lowLeafPath: Fr[] = emptyNullifierPath(),
|
|
358
|
+
updateMembershipHint: AvmPublicDataReadTreeHint = AvmPublicDataReadTreeHint.empty(),
|
|
359
|
+
updatePreimage: Fr[] = [],
|
|
377
360
|
) {
|
|
378
|
-
|
|
379
|
-
this.avmCircuitHints.contractInstances.items.push(
|
|
361
|
+
this.avmCircuitHints.contractInstances.push(
|
|
380
362
|
new AvmContractInstanceHint(
|
|
381
363
|
contractAddress,
|
|
382
364
|
exists,
|
|
383
365
|
instance.salt,
|
|
384
366
|
instance.deployer,
|
|
385
|
-
instance.
|
|
367
|
+
instance.currentContractClassId,
|
|
368
|
+
instance.originalContractClassId,
|
|
386
369
|
instance.initializationHash,
|
|
387
370
|
instance.publicKeys,
|
|
388
|
-
|
|
371
|
+
updateMembershipHint,
|
|
372
|
+
updatePreimage,
|
|
389
373
|
),
|
|
390
374
|
);
|
|
391
375
|
this.log.trace(`Tracing contract instance retrieval (counter=${this.sideEffectCounter})`);
|
|
392
376
|
this.incrementSideEffectCounter();
|
|
393
377
|
}
|
|
394
378
|
|
|
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
|
-
|
|
379
|
+
public traceGetContractClass(contractClassId: Fr, exists: boolean, contractClass?: ContractClassWithCommitment) {
|
|
440
380
|
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`,
|
|
381
|
+
this.avmCircuitHints.contractClasses.push(
|
|
382
|
+
new AvmContractClassHint(contractClassId, exists, Fr.zero(), Fr.zero(), Fr.zero(), Buffer.alloc(0)),
|
|
453
383
|
);
|
|
454
|
-
|
|
455
|
-
|
|
384
|
+
} else if (!this.uniqueClassIds.has(contractClassId.toString())) {
|
|
385
|
+
if (this.uniqueClassIds.size() >= MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS) {
|
|
386
|
+
this.log.debug(`Bytecode retrieval failure for contract class ID ${contractClassId} (limit reached)`);
|
|
387
|
+
throw new SideEffectLimitReachedError(
|
|
388
|
+
'contract calls to unique class IDs',
|
|
389
|
+
MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
|
|
390
|
+
);
|
|
391
|
+
}
|
|
456
392
|
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
393
|
+
this.uniqueClassIds.add(contractClassId.toString());
|
|
394
|
+
this.avmCircuitHints.contractClasses.push(
|
|
395
|
+
new AvmContractClassHint(
|
|
396
|
+
contractClassId,
|
|
397
|
+
exists,
|
|
398
|
+
contractClass!.artifactHash,
|
|
399
|
+
contractClass!.privateFunctionsRoot,
|
|
400
|
+
contractClass!.publicBytecodeCommitment,
|
|
401
|
+
contractClass!.packedBytecode,
|
|
402
|
+
),
|
|
467
403
|
);
|
|
468
|
-
throw new SideEffectLimitReachedError(
|
|
469
|
-
'contract calls to unique class IDs',
|
|
470
|
-
MAX_PUBLIC_CALLS_TO_UNIQUE_CONTRACT_CLASS_IDS,
|
|
471
|
-
);
|
|
472
|
-
}
|
|
473
404
|
|
|
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());
|
|
405
|
+
this.incrementSideEffectCounter();
|
|
406
|
+
}
|
|
482
407
|
}
|
|
483
408
|
|
|
484
409
|
/**
|
|
@@ -495,7 +420,7 @@ export class SideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
495
420
|
) {
|
|
496
421
|
// TODO(4805): check if some threshold is reached for max enqueued or nested calls (to unique contracts?)
|
|
497
422
|
this.enqueuedCalls.push(publicCallRequest);
|
|
498
|
-
this.avmCircuitHints.enqueuedCalls.
|
|
423
|
+
this.avmCircuitHints.enqueuedCalls.push(new AvmEnqueuedCallHint(publicCallRequest.contractAddress, calldata));
|
|
499
424
|
}
|
|
500
425
|
|
|
501
426
|
public getSideEffects(): SideEffects {
|