@aztec/simulator 0.0.1-commit.b655e406 → 0.0.1-commit.b9865e97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dest/client.d.ts +1 -1
- package/dest/common/errors.d.ts +2 -2
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/index.d.ts +1 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- package/dest/private/acvm/acvm_types.d.ts +1 -1
- package/dest/private/acvm/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +1 -1
- package/dest/private/acvm/index.d.ts +1 -1
- package/dest/private/acvm/serialize.d.ts +2 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +1 -1
- package/dest/private/acvm_native.d.ts +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +7 -5
- package/dest/private/acvm_wasm_with_blobs.d.ts +1 -1
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +23 -20
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +1 -1
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/circuit_simulator.d.ts +1 -1
- package/dest/private/factory.d.ts +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- package/dest/public/avm/testing/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/testing/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/testing/account_proof_fetcher.js +152 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.d.ts +3 -2
- package/dest/public/avm/testing/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/base_avm_simulation_tester.js +18 -3
- package/dest/public/avm/{fixtures → testing}/utils.d.ts +4 -10
- package/dest/public/avm/testing/utils.d.ts.map +1 -0
- package/dest/public/avm/{fixtures → testing}/utils.js +6 -35
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +14 -2
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/executor_metrics.d.ts +3 -2
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +13 -34
- package/dest/public/executor_metrics_interface.d.ts +3 -2
- package/dest/public/executor_metrics_interface.d.ts.map +1 -1
- package/dest/public/fixtures/amm_test.d.ts +1 -1
- package/dest/public/fixtures/amm_test.js +4 -4
- package/dest/public/fixtures/bulk_test.d.ts +3 -3
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +36 -73
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +29 -7
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
- package/dest/public/fixtures/index.d.ts +2 -3
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -2
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +30 -11
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +98 -31
- package/dest/public/fixtures/simple_contract_data_source.d.ts +5 -4
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -1
- package/dest/public/fixtures/simple_contract_data_source.js +5 -5
- package/dest/public/fixtures/token_test.d.ts +6 -2
- package/dest/public/fixtures/token_test.d.ts.map +1 -1
- package/dest/public/fixtures/token_test.js +13 -12
- package/dest/public/fixtures/utils.d.ts +3 -3
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +23 -23
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +62 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +176 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/index.d.ts +3 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +1 -1
- package/dest/public/public_db_sources.d.ts +29 -66
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +83 -134
- package/dest/public/public_errors.d.ts +1 -1
- package/dest/public/public_errors.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +8 -5
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +12 -4
- package/dest/public/public_processor/public_processor.d.ts +19 -21
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +553 -123
- package/dest/public/public_processor/public_processor_metrics.d.ts +5 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +36 -45
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +99 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +5 -3
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/index.js +3 -2
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +42 -89
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +101 -334
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts +22 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_base.js +28 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +25 -2
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
- package/dest/public/side_effect_errors.d.ts +1 -1
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.d.ts +11 -4
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +29 -6
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +1 -1
- package/dest/server.d.ts +1 -1
- package/dest/testing.d.ts +1 -1
- package/package.json +22 -22
- package/src/common/errors.ts +1 -1
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm/deserialize.ts +1 -1
- package/src/private/acvm/serialize.ts +1 -1
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +11 -4
- package/src/private/circuit_recording/circuit_recorder.ts +24 -21
- package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/factory.ts +7 -4
- package/src/public/avm/testing/account_proof.json +553 -0
- package/src/public/avm/testing/account_proof_fetcher.ts +166 -0
- package/src/public/avm/{fixtures → testing}/base_avm_simulation_tester.ts +23 -3
- package/src/public/avm/{fixtures → testing}/utils.ts +6 -41
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +16 -1
- package/src/public/executor_metrics.ts +11 -34
- package/src/public/executor_metrics_interface.ts +2 -1
- package/src/public/fixtures/amm_test.ts +4 -4
- package/src/public/fixtures/bulk_test.ts +38 -13
- package/src/public/fixtures/custom_bytecode_tester.ts +54 -20
- package/src/public/fixtures/index.ts +5 -2
- package/src/public/fixtures/public_tx_simulation_tester.ts +129 -27
- package/src/public/fixtures/simple_contract_data_source.ts +9 -10
- package/src/public/fixtures/token_test.ts +18 -10
- package/src/public/fixtures/utils.ts +28 -25
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +285 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +173 -0
- package/src/public/index.ts +4 -2
- package/src/public/public_db_sources.ts +112 -174
- package/src/public/public_processor/guarded_merkle_tree.ts +14 -6
- package/src/public/public_processor/public_processor.ts +225 -136
- package/src/public/public_processor/public_processor_metrics.ts +28 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +125 -0
- package/src/public/public_tx_simulator/dumping_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +44 -0
- package/src/public/public_tx_simulator/index.ts +4 -2
- package/src/public/public_tx_simulator/public_tx_simulator.ts +153 -500
- package/src/public/public_tx_simulator/public_tx_simulator_base.ts +35 -0
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +24 -2
- package/src/public/test_executor_metrics.ts +34 -8
- package/dest/public/avm/avm_context.d.ts +0 -41
- package/dest/public/avm/avm_context.d.ts.map +0 -1
- package/dest/public/avm/avm_context.js +0 -44
- package/dest/public/avm/avm_contract_call_result.d.ts +0 -32
- package/dest/public/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/public/avm/avm_contract_call_result.js +0 -54
- package/dest/public/avm/avm_execution_environment.d.ts +0 -23
- package/dest/public/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/public/avm/avm_execution_environment.js +0 -36
- package/dest/public/avm/avm_gas.d.ts +0 -44
- package/dest/public/avm/avm_gas.d.ts.map +0 -1
- package/dest/public/avm/avm_gas.js +0 -195
- package/dest/public/avm/avm_machine_state.d.ts +0 -97
- package/dest/public/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/public/avm/avm_machine_state.js +0 -109
- package/dest/public/avm/avm_memory_types.d.ts +0 -275
- package/dest/public/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/public/avm/avm_memory_types.js +0 -351
- package/dest/public/avm/avm_simulator.d.ts +0 -39
- package/dest/public/avm/avm_simulator.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator.js +0 -190
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -9
- package/dest/public/avm/avm_simulator_interface.d.ts.map +0 -1
- package/dest/public/avm/avm_simulator_interface.js +0 -3
- package/dest/public/avm/errors.d.ts +0 -98
- package/dest/public/avm/errors.d.ts.map +0 -1
- package/dest/public/avm/errors.js +0 -129
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +0 -22
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +0 -74
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.d.ts +0 -43
- package/dest/public/avm/fixtures/initializers.d.ts.map +0 -1
- package/dest/public/avm/fixtures/initializers.js +0 -42
- package/dest/public/avm/fixtures/utils.d.ts.map +0 -1
- package/dest/public/avm/index.d.ts +0 -2
- package/dest/public/avm/index.d.ts.map +0 -1
- package/dest/public/avm/index.js +0 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/public/avm/opcodes/accrued_substate.js +0 -255
- package/dest/public/avm/opcodes/addressing_mode.d.ts +0 -31
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/public/avm/opcodes/addressing_mode.js +0 -94
- package/dest/public/avm/opcodes/arithmetic.d.ts +0 -47
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/public/avm/opcodes/arithmetic.js +0 -87
- package/dest/public/avm/opcodes/bitwise.d.ts +0 -42
- package/dest/public/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/public/avm/opcodes/bitwise.js +0 -99
- package/dest/public/avm/opcodes/comparators.d.ts +0 -25
- package/dest/public/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/public/avm/opcodes/comparators.js +0 -43
- package/dest/public/avm/opcodes/contract.d.ts +0 -20
- package/dest/public/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/public/avm/opcodes/contract.js +0 -65
- package/dest/public/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/public/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/public/avm/opcodes/control_flow.js +0 -107
- package/dest/public/avm/opcodes/conversion.d.ts +0 -18
- package/dest/public/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/public/avm/opcodes/conversion.js +0 -333
- package/dest/public/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/public/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/public/avm/opcodes/ec_add.js +0 -84
- package/dest/public/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/public/avm/opcodes/environment_getters.js +0 -77
- package/dest/public/avm/opcodes/external_calls.d.ts +0 -59
- package/dest/public/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/public/avm/opcodes/external_calls.js +0 -209
- package/dest/public/avm/opcodes/hashing.d.ts +0 -36
- package/dest/public/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/public/avm/opcodes/hashing.js +0 -114
- package/dest/public/avm/opcodes/index.d.ts +0 -16
- package/dest/public/avm/opcodes/index.d.ts.map +0 -1
- package/dest/public/avm/opcodes/index.js +0 -15
- package/dest/public/avm/opcodes/instruction.d.ts +0 -74
- package/dest/public/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction.js +0 -95
- package/dest/public/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/public/avm/opcodes/instruction_impl.js +0 -30
- package/dest/public/avm/opcodes/memory.d.ts +0 -74
- package/dest/public/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/public/avm/opcodes/memory.js +0 -257
- package/dest/public/avm/opcodes/misc.d.ts +0 -18
- package/dest/public/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/public/avm/opcodes/misc.js +0 -73
- package/dest/public/avm/opcodes/storage.d.ts +0 -24
- package/dest/public/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/public/avm/opcodes/storage.js +0 -68
- package/dest/public/avm/revert_reason.d.ts +0 -18
- package/dest/public/avm/revert_reason.d.ts.map +0 -1
- package/dest/public/avm/revert_reason.js +0 -38
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -26
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/public/avm/serialization/buffer_cursor.js +0 -99
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -17
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +0 -333
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -114
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/public/avm/serialization/instruction_serialization.js +0 -261
- package/dest/public/avm/test_utils.d.ts +0 -15
- package/dest/public/avm/test_utils.d.ts.map +0 -1
- package/dest/public/avm/test_utils.js +0 -44
- package/dest/public/debug_fn_name.d.ts +0 -5
- package/dest/public/debug_fn_name.d.ts.map +0 -1
- package/dest/public/debug_fn_name.js +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +0 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +0 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +0 -109
- package/dest/public/fixtures/minimal_public_tx.d.ts +0 -10
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +0 -1
- package/dest/public/fixtures/minimal_public_tx.js +0 -29
- package/dest/public/hinting_db_sources.d.ts +0 -70
- package/dest/public/hinting_db_sources.d.ts.map +0 -1
- package/dest/public/hinting_db_sources.js +0 -297
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +0 -41
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +0 -89
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +0 -24
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +0 -51
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +0 -127
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +0 -292
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +0 -21
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +0 -39
- package/dest/public/side_effect_trace.d.ts +0 -87
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace.js +0 -199
- package/dest/public/side_effect_trace_interface.d.ts +0 -23
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.js +0 -1
- package/dest/public/state_manager/index.d.ts +0 -2
- package/dest/public/state_manager/index.d.ts.map +0 -1
- package/dest/public/state_manager/index.js +0 -1
- package/dest/public/state_manager/nullifiers.d.ts +0 -61
- package/dest/public/state_manager/nullifiers.d.ts.map +0 -1
- package/dest/public/state_manager/nullifiers.js +0 -92
- package/dest/public/state_manager/public_storage.d.ts +0 -66
- package/dest/public/state_manager/public_storage.d.ts.map +0 -1
- package/dest/public/state_manager/public_storage.js +0 -145
- package/dest/public/state_manager/state_manager.d.ts +0 -166
- package/dest/public/state_manager/state_manager.d.ts.map +0 -1
- package/dest/public/state_manager/state_manager.js +0 -391
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/src/public/avm/avm_context.ts +0 -61
- package/src/public/avm/avm_contract_call_result.ts +0 -67
- package/src/public/avm/avm_execution_environment.ts +0 -48
- package/src/public/avm/avm_gas.ts +0 -183
- package/src/public/avm/avm_machine_state.ts +0 -169
- package/src/public/avm/avm_memory_types.ts +0 -436
- package/src/public/avm/avm_simulator.ts +0 -274
- package/src/public/avm/avm_simulator_interface.ts +0 -8
- package/src/public/avm/errors.ts +0 -163
- package/src/public/avm/fixtures/avm_simulation_tester.ts +0 -108
- package/src/public/avm/fixtures/initializers.ts +0 -104
- package/src/public/avm/index.ts +0 -1
- package/src/public/avm/opcodes/accrued_substate.ts +0 -288
- package/src/public/avm/opcodes/addressing_mode.ts +0 -111
- package/src/public/avm/opcodes/arithmetic.ts +0 -117
- package/src/public/avm/opcodes/bitwise.ts +0 -113
- package/src/public/avm/opcodes/comparators.ts +0 -55
- package/src/public/avm/opcodes/contract.ts +0 -75
- package/src/public/avm/opcodes/control_flow.ts +0 -123
- package/src/public/avm/opcodes/conversion.ts +0 -104
- package/src/public/avm/opcodes/ec_add.ts +0 -96
- package/src/public/avm/opcodes/environment_getters.ts +0 -87
- package/src/public/avm/opcodes/external_calls.ts +0 -260
- package/src/public/avm/opcodes/hashing.ts +0 -145
- package/src/public/avm/opcodes/index.ts +0 -15
- package/src/public/avm/opcodes/instruction.ts +0 -136
- package/src/public/avm/opcodes/instruction_impl.ts +0 -36
- package/src/public/avm/opcodes/memory.ts +0 -293
- package/src/public/avm/opcodes/misc.ts +0 -102
- package/src/public/avm/opcodes/storage.ts +0 -87
- package/src/public/avm/revert_reason.ts +0 -55
- package/src/public/avm/serialization/buffer_cursor.ts +0 -118
- package/src/public/avm/serialization/bytecode_serialization.ts +0 -204
- package/src/public/avm/serialization/instruction_serialization.ts +0 -249
- package/src/public/avm/test_utils.ts +0 -64
- package/src/public/debug_fn_name.ts +0 -18
- package/src/public/fixtures/custom_bytecode_tests.ts +0 -135
- package/src/public/fixtures/minimal_public_tx.ts +0 -36
- package/src/public/hinting_db_sources.ts +0 -505
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +0 -128
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +0 -109
- package/src/public/public_tx_simulator/public_tx_context.ts +0 -471
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +0 -63
- package/src/public/side_effect_trace.ts +0 -290
- package/src/public/side_effect_trace_interface.ts +0 -28
- package/src/public/state_manager/index.ts +0 -1
- package/src/public/state_manager/nullifiers.ts +0 -103
- package/src/public/state_manager/public_storage.ts +0 -174
- package/src/public/state_manager/state_manager.ts +0 -560
- package/src/public/tx_contract_cache.ts +0 -69
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { AVM_MAX_OPERANDS } from '@aztec/constants';
|
|
2
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import type { Tuple } from '@aztec/foundation/serialize';
|
|
4
|
-
|
|
5
|
-
import { strict as assert } from 'assert';
|
|
6
|
-
|
|
7
|
-
import { MemoryValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
8
|
-
import { RelativeAddressOutOfRangeError, TagCheckError } from '../errors.js';
|
|
9
|
-
|
|
10
|
-
export enum AddressingMode {
|
|
11
|
-
DIRECT = 0,
|
|
12
|
-
INDIRECT = 1,
|
|
13
|
-
RELATIVE = 2,
|
|
14
|
-
INDIRECT_RELATIVE = 3,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** A class to represent the addressing mode of an instruction. */
|
|
18
|
-
export class Addressing {
|
|
19
|
-
public constructor(
|
|
20
|
-
/** The addressing mode for each possible operand. */
|
|
21
|
-
private readonly modePerOperand: Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>,
|
|
22
|
-
) {}
|
|
23
|
-
|
|
24
|
-
public static fromModes(modes: AddressingMode[]): Addressing {
|
|
25
|
-
assert(modes.length <= AVM_MAX_OPERANDS, 'Too many operands for addressing mode');
|
|
26
|
-
return new Addressing(padArrayEnd(modes, AddressingMode.DIRECT, AVM_MAX_OPERANDS));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public static fromWire(wireModes: number): Addressing {
|
|
30
|
-
// The modes are stored in the wire format as one or two bytes, with each two bits representing the modes for an operand.
|
|
31
|
-
// Even bits are indirect, odd bits are relative.
|
|
32
|
-
const modes = new Array<AddressingMode>(AVM_MAX_OPERANDS);
|
|
33
|
-
for (let i = 0; i < AVM_MAX_OPERANDS; i++) {
|
|
34
|
-
modes[i] =
|
|
35
|
-
(((wireModes >> (i * 2)) & 1) * AddressingMode.INDIRECT) |
|
|
36
|
-
(((wireModes >> (i * 2 + 1)) & 1) * AddressingMode.RELATIVE);
|
|
37
|
-
}
|
|
38
|
-
// Casting the array to tuple since it should be more performant than using makeTuple
|
|
39
|
-
return new Addressing(modes as Tuple<AddressingMode, typeof AVM_MAX_OPERANDS>);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
public toWire(): number {
|
|
43
|
-
// The modes are stored in the wire format as a byte, with each bit representing the mode for an operand.
|
|
44
|
-
// The least significant bit represents the zeroth operand, and the least significant bit represents the last operand.
|
|
45
|
-
let wire: number = 0;
|
|
46
|
-
for (let i = 0; i < this.modePerOperand.length; i++) {
|
|
47
|
-
if (this.modePerOperand[i] & AddressingMode.INDIRECT) {
|
|
48
|
-
wire |= 1 << (i * 2);
|
|
49
|
-
}
|
|
50
|
-
if (this.modePerOperand[i] & AddressingMode.RELATIVE) {
|
|
51
|
-
wire |= 1 << (i * 2 + 1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return wire;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public indirectOperandsCount(): number {
|
|
58
|
-
return this.modePerOperand.filter(mode => mode & AddressingMode.INDIRECT).length;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public relativeOperandsCount(): number {
|
|
62
|
-
return this.modePerOperand.filter(mode => mode & AddressingMode.RELATIVE).length;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Resolves the offsets using the addressing mode.
|
|
67
|
-
* @param offsets The offsets to resolve.
|
|
68
|
-
* @param mem The memory to use for resolution.
|
|
69
|
-
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array and the resolved offsets are guaranteed to be valid addresses.
|
|
70
|
-
* @throws An error if any step failed. Should be treated as a black box.
|
|
71
|
-
*/
|
|
72
|
-
public resolve(offsets: number[], mem: TaggedMemoryInterface): number[] {
|
|
73
|
-
const resolved: number[] = new Array(offsets.length);
|
|
74
|
-
// These will be read (once) if we have any relative operands.
|
|
75
|
-
let baseAddr: MemoryValue | undefined;
|
|
76
|
-
|
|
77
|
-
for (const [i, offset] of offsets.entries()) {
|
|
78
|
-
const mode = this.modePerOperand[i];
|
|
79
|
-
// The given offsets are assumed to be valid addresses.
|
|
80
|
-
resolved[i] = offset;
|
|
81
|
-
if (mode & AddressingMode.RELATIVE) {
|
|
82
|
-
if (!baseAddr) {
|
|
83
|
-
baseAddr = mem.get(0);
|
|
84
|
-
const baseAddrTag = baseAddr.getTag();
|
|
85
|
-
if (!TaggedMemory.isValidMemoryAddressTag(baseAddrTag!)) {
|
|
86
|
-
throw TagCheckError.forOffset(0, TypeTag[baseAddrTag!], TypeTag[TypeTag.UINT32]);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Here we know that resolved[i] is at most 32 bits and baseAddr is at most 32 bits.
|
|
90
|
-
// Therefore, the addition is safe since the `number` type fits more than 33 bits.
|
|
91
|
-
resolved[i] += Number(baseAddr.toBigInt());
|
|
92
|
-
if (resolved[i] >= TaggedMemory.MAX_MEMORY_SIZE) {
|
|
93
|
-
throw new RelativeAddressOutOfRangeError(Number(baseAddr.toBigInt()), offset);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (mode & AddressingMode.INDIRECT) {
|
|
97
|
-
// At this point we know that resolved[i] is a valid memory address.
|
|
98
|
-
const resolvedValue = mem.get(resolved[i]);
|
|
99
|
-
const resolvedTag = resolvedValue.getTag();
|
|
100
|
-
|
|
101
|
-
// Final check.
|
|
102
|
-
if (!TaggedMemory.isValidMemoryAddressTag(resolvedTag)) {
|
|
103
|
-
throw TagCheckError.forOffset(resolved[i], TypeTag[resolvedTag], TypeTag[TypeTag.UINT32]);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
resolved[i] = Number(resolvedValue.toBigInt());
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return resolved;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import {
|
|
3
|
-
type Field,
|
|
4
|
-
type IntegralValue,
|
|
5
|
-
type MemoryValue,
|
|
6
|
-
TaggedMemory,
|
|
7
|
-
type TaggedMemoryInterface,
|
|
8
|
-
TypeTag,
|
|
9
|
-
} from '../avm_memory_types.js';
|
|
10
|
-
import { ArithmeticError } from '../errors.js';
|
|
11
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
12
|
-
import { Addressing } from './addressing_mode.js';
|
|
13
|
-
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
14
|
-
|
|
15
|
-
export abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
16
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
17
|
-
const memory = context.machineState.memory;
|
|
18
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
19
|
-
|
|
20
|
-
context.machineState.consumeGas(
|
|
21
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
25
|
-
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
26
|
-
this.checkTags(memory, aOffset, bOffset);
|
|
27
|
-
|
|
28
|
-
const a = memory.get(aOffset);
|
|
29
|
-
const b = memory.get(bOffset);
|
|
30
|
-
|
|
31
|
-
const dest = this.compute(a, b);
|
|
32
|
-
memory.set(dstOffset, dest);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
protected abstract compute(a: MemoryValue, b: MemoryValue): MemoryValue;
|
|
36
|
-
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
37
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class Add extends ThreeOperandArithmeticInstruction {
|
|
42
|
-
static readonly type: string = 'ADD';
|
|
43
|
-
static readonly opcode = Opcode.ADD_8; // FIXME: needed for gas.
|
|
44
|
-
|
|
45
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
46
|
-
return a.add(b);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export class Sub extends ThreeOperandArithmeticInstruction {
|
|
51
|
-
static readonly type: string = 'SUB';
|
|
52
|
-
static readonly opcode = Opcode.SUB_8; // FIXME: needed for gas.
|
|
53
|
-
|
|
54
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
55
|
-
return a.sub(b);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export class Mul extends ThreeOperandArithmeticInstruction {
|
|
60
|
-
static type: string = 'MUL';
|
|
61
|
-
static readonly opcode = Opcode.MUL_8; // FIXME: needed for gas.
|
|
62
|
-
|
|
63
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
64
|
-
return a.mul(b);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export class Div extends ThreeOperandArithmeticInstruction {
|
|
69
|
-
static type: string = 'DIV';
|
|
70
|
-
static readonly opcode = Opcode.DIV_8; // FIXME: needed for gas.
|
|
71
|
-
|
|
72
|
-
protected compute(a: MemoryValue, b: MemoryValue): MemoryValue {
|
|
73
|
-
if (b.toBigInt() === 0n) {
|
|
74
|
-
throw new ArithmeticError('Division by zero');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return a.div(b);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
81
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
82
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset)); // Follows that bOffset tag is also of integral type
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export class FieldDiv extends ThreeOperandArithmeticInstruction {
|
|
87
|
-
static type: string = 'FDIV';
|
|
88
|
-
static readonly opcode = Opcode.FDIV_8; // FIXME: needed for gas.
|
|
89
|
-
|
|
90
|
-
protected compute(a: Field, b: Field): Field {
|
|
91
|
-
// return (a as Field).fdiv(b as Field);
|
|
92
|
-
return a.fdiv(b);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
protected override checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
96
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
97
|
-
memory.checkTag(TypeTag.FIELD, aOffset); // Follows that bOffset has also tag of type Field
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export class Shl extends ThreeOperandArithmeticInstruction {
|
|
102
|
-
static readonly type: string = 'SHL';
|
|
103
|
-
static readonly opcode = Opcode.SHL_8; // FIXME: needed for gas.
|
|
104
|
-
|
|
105
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
106
|
-
return a.shl(b);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export class Shr extends ThreeOperandArithmeticInstruction {
|
|
111
|
-
static readonly type: string = 'SHR';
|
|
112
|
-
static readonly opcode = Opcode.SHR_8; // FIXME: needed for gas.
|
|
113
|
-
|
|
114
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
115
|
-
return a.shr(b);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { getBitwiseDynamicGasMultiplier } from '../avm_gas.js';
|
|
3
|
-
import { type IntegralValue, TaggedMemory, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
4
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
|
-
import { Addressing } from './addressing_mode.js';
|
|
6
|
-
import { Instruction } from './instruction.js';
|
|
7
|
-
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
8
|
-
|
|
9
|
-
abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
10
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
11
|
-
const memory = context.machineState.memory;
|
|
12
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
13
|
-
|
|
14
|
-
context.machineState.consumeGas(
|
|
15
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
19
|
-
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
20
|
-
this.checkTags(memory, aOffset, bOffset);
|
|
21
|
-
|
|
22
|
-
const multiplier = this.getDynamicMultiplier(memory.getTag(aOffset));
|
|
23
|
-
context.machineState.consumeGas(this.dynamicGasCost(multiplier));
|
|
24
|
-
|
|
25
|
-
const a = memory.getAs<IntegralValue>(aOffset);
|
|
26
|
-
const b = memory.getAs<IntegralValue>(bOffset);
|
|
27
|
-
|
|
28
|
-
const res = this.compute(a, b);
|
|
29
|
-
memory.set(dstOffset, res);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
33
|
-
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number) {
|
|
34
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
35
|
-
memory.checkTagsAreSame(aOffset, bOffset);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
protected getDynamicMultiplier(_lhsTag: TypeTag): number {
|
|
39
|
-
return 0;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class And extends ThreeOperandBitwiseInstruction {
|
|
44
|
-
static readonly type: string = 'AND';
|
|
45
|
-
static readonly opcode = Opcode.AND_8; // FIXME: needed for gas.
|
|
46
|
-
|
|
47
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
48
|
-
return a.and(b);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
52
|
-
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export class Or extends ThreeOperandBitwiseInstruction {
|
|
57
|
-
static readonly type: string = 'OR';
|
|
58
|
-
static readonly opcode = Opcode.OR_8; // FIXME: needed for gas.
|
|
59
|
-
|
|
60
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
61
|
-
return a.or(b);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
65
|
-
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export class Xor extends ThreeOperandBitwiseInstruction {
|
|
70
|
-
static readonly type: string = 'XOR';
|
|
71
|
-
static readonly opcode = Opcode.XOR_8; // FIXME: needed for gas.
|
|
72
|
-
|
|
73
|
-
protected override compute(a: IntegralValue, b: IntegralValue): IntegralValue {
|
|
74
|
-
return a.xor(b);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
protected override getDynamicMultiplier(lhsTag: TypeTag): number {
|
|
78
|
-
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export class Not extends Instruction {
|
|
83
|
-
static readonly type: string = 'NOT';
|
|
84
|
-
static readonly opcode = Opcode.NOT_8;
|
|
85
|
-
|
|
86
|
-
static readonly wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8];
|
|
87
|
-
static readonly wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
88
|
-
|
|
89
|
-
constructor(
|
|
90
|
-
private indirect: number,
|
|
91
|
-
private srcOffset: number,
|
|
92
|
-
private dstOffset: number,
|
|
93
|
-
) {
|
|
94
|
-
super();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
98
|
-
const memory = context.machineState.memory;
|
|
99
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
100
|
-
|
|
101
|
-
context.machineState.consumeGas(
|
|
102
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
const operands = [this.srcOffset, this.dstOffset];
|
|
106
|
-
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
107
|
-
TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
|
|
108
|
-
const value = memory.getAs<IntegralValue>(srcOffset);
|
|
109
|
-
|
|
110
|
-
const res = value.not();
|
|
111
|
-
memory.set(dstOffset, res);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { type MemoryValue, Uint1 } from '../avm_memory_types.js';
|
|
3
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
-
import { Addressing } from './addressing_mode.js';
|
|
5
|
-
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
6
|
-
|
|
7
|
-
abstract class ComparatorInstruction extends ThreeOperandInstruction {
|
|
8
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
9
|
-
const memory = context.machineState.memory;
|
|
10
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
11
|
-
|
|
12
|
-
context.machineState.consumeGas(
|
|
13
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
17
|
-
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
18
|
-
memory.checkTagsAreSame(aOffset, bOffset); // Brillig semantic enforces that tags match.
|
|
19
|
-
|
|
20
|
-
const a = memory.get(aOffset);
|
|
21
|
-
const b = memory.get(bOffset);
|
|
22
|
-
|
|
23
|
-
const dest = new Uint1(this.compare(a, b) ? 1 : 0);
|
|
24
|
-
memory.set(dstOffset, dest);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
protected abstract compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class Eq extends ComparatorInstruction {
|
|
31
|
-
static readonly type: string = 'EQ';
|
|
32
|
-
static readonly opcode = Opcode.EQ_8; // FIXME: needed for gas.
|
|
33
|
-
|
|
34
|
-
protected compare(a: MemoryValue, b: MemoryValue): boolean {
|
|
35
|
-
return a.equals(b);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export class Lt extends ComparatorInstruction {
|
|
40
|
-
static readonly type: string = 'LT';
|
|
41
|
-
static readonly opcode = Opcode.LT_8; // FIXME: needed for gas.
|
|
42
|
-
|
|
43
|
-
protected compare(a: MemoryValue, b: MemoryValue): boolean {
|
|
44
|
-
return a.lt(b);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export class Lte extends ComparatorInstruction {
|
|
49
|
-
static readonly type: string = 'LTE';
|
|
50
|
-
static readonly opcode = Opcode.LTE_8; // FIXME: needed for gas.
|
|
51
|
-
|
|
52
|
-
protected compare(a: MemoryValue, b: MemoryValue): boolean {
|
|
53
|
-
return a.lt(b) || a.equals(b);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { Field, TypeTag, Uint1 } from '../avm_memory_types.js';
|
|
3
|
-
import { InstructionExecutionError } from '../errors.js';
|
|
4
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
|
-
import { Addressing } from './addressing_mode.js';
|
|
6
|
-
import { Instruction } from './instruction.js';
|
|
7
|
-
|
|
8
|
-
export enum ContractInstanceMember {
|
|
9
|
-
DEPLOYER,
|
|
10
|
-
CLASS_ID,
|
|
11
|
-
INIT_HASH,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class GetContractInstance extends Instruction {
|
|
15
|
-
static readonly type: string = 'GETCONTRACTINSTANCE';
|
|
16
|
-
static readonly opcode: Opcode = Opcode.GETCONTRACTINSTANCE;
|
|
17
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
18
|
-
static readonly wireFormat: OperandType[] = [
|
|
19
|
-
OperandType.UINT8, // opcode
|
|
20
|
-
OperandType.UINT8, // indirect bits
|
|
21
|
-
OperandType.UINT16, // addressOffset
|
|
22
|
-
OperandType.UINT16, // dstOffset
|
|
23
|
-
OperandType.UINT8, // member enum (immediate)
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
constructor(
|
|
27
|
-
private indirect: number,
|
|
28
|
-
private addressOffset: number,
|
|
29
|
-
private dstOffset: number,
|
|
30
|
-
private memberEnum: number,
|
|
31
|
-
) {
|
|
32
|
-
super();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async execute(context: AvmContext): Promise<void> {
|
|
36
|
-
const memory = context.machineState.memory;
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
38
|
-
|
|
39
|
-
context.machineState.consumeGas(
|
|
40
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
if (!(this.memberEnum in ContractInstanceMember)) {
|
|
44
|
-
throw new InstructionExecutionError(`Invalid GETCONSTRACTINSTANCE member enum ${this.memberEnum}`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const operands = [this.addressOffset, this.dstOffset];
|
|
48
|
-
const [addressOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
49
|
-
memory.checkTag(TypeTag.FIELD, addressOffset);
|
|
50
|
-
|
|
51
|
-
const address = memory.get(addressOffset).toAztecAddress();
|
|
52
|
-
const instance = await context.persistableState.getContractInstance(address);
|
|
53
|
-
const exists = instance !== undefined;
|
|
54
|
-
|
|
55
|
-
let memberValue = new Field(0);
|
|
56
|
-
if (exists) {
|
|
57
|
-
switch (this.memberEnum as ContractInstanceMember) {
|
|
58
|
-
case ContractInstanceMember.DEPLOYER:
|
|
59
|
-
memberValue = new Field(instance.deployer.toField());
|
|
60
|
-
break;
|
|
61
|
-
case ContractInstanceMember.CLASS_ID:
|
|
62
|
-
memberValue = new Field(instance.currentContractClassId.toField());
|
|
63
|
-
break;
|
|
64
|
-
case ContractInstanceMember.INIT_HASH:
|
|
65
|
-
memberValue = new Field(instance.initializationHash);
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const existsOffset = dstOffset;
|
|
71
|
-
const memberValueOffset = dstOffset + 1;
|
|
72
|
-
memory.set(existsOffset, new Uint1(exists ? 1 : 0));
|
|
73
|
-
memory.set(memberValueOffset, memberValue);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { TypeTag, type Uint1 } from '../avm_memory_types.js';
|
|
3
|
-
import { InstructionExecutionError } from '../errors.js';
|
|
4
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
5
|
-
import { Addressing } from './addressing_mode.js';
|
|
6
|
-
import { Instruction } from './instruction.js';
|
|
7
|
-
|
|
8
|
-
export class Jump extends Instruction {
|
|
9
|
-
static type: string = 'JUMP';
|
|
10
|
-
static readonly opcode: Opcode = Opcode.JUMP_32;
|
|
11
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
12
|
-
static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT32];
|
|
13
|
-
|
|
14
|
-
constructor(private jumpOffset: number) {
|
|
15
|
-
super();
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
19
|
-
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
20
|
-
|
|
21
|
-
context.machineState.pc = this.jumpOffset;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
public override handlesPC(): boolean {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export class JumpI extends Instruction {
|
|
30
|
-
static type: string = 'JUMPI';
|
|
31
|
-
static readonly opcode: Opcode = Opcode.JUMPI_32;
|
|
32
|
-
|
|
33
|
-
// Instruction wire format with opcode.
|
|
34
|
-
static readonly wireFormat: OperandType[] = [
|
|
35
|
-
OperandType.UINT8,
|
|
36
|
-
OperandType.UINT8,
|
|
37
|
-
OperandType.UINT16,
|
|
38
|
-
OperandType.UINT32,
|
|
39
|
-
];
|
|
40
|
-
|
|
41
|
-
constructor(
|
|
42
|
-
private indirect: number,
|
|
43
|
-
private condOffset: number,
|
|
44
|
-
private loc: number,
|
|
45
|
-
) {
|
|
46
|
-
super();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
50
|
-
const memory = context.machineState.memory;
|
|
51
|
-
const addressing = Addressing.fromWire(this.indirect);
|
|
52
|
-
|
|
53
|
-
context.machineState.consumeGas(
|
|
54
|
-
this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()),
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
const operands = [this.condOffset];
|
|
58
|
-
const [resolvedCondOffset] = addressing.resolve(operands, memory);
|
|
59
|
-
|
|
60
|
-
memory.checkTag(TypeTag.UINT1, resolvedCondOffset);
|
|
61
|
-
const condition = memory.getAs<Uint1>(resolvedCondOffset);
|
|
62
|
-
|
|
63
|
-
if (condition.toNumber() == 0) {
|
|
64
|
-
context.machineState.pc = context.machineState.nextPc;
|
|
65
|
-
} else {
|
|
66
|
-
context.machineState.pc = this.loc;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
public override handlesPC(): boolean {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export class InternalCall extends Instruction {
|
|
76
|
-
static readonly type: string = 'INTERNALCALL';
|
|
77
|
-
static readonly opcode: Opcode = Opcode.INTERNALCALL;
|
|
78
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
79
|
-
static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT32];
|
|
80
|
-
|
|
81
|
-
constructor(private loc: number) {
|
|
82
|
-
super();
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
86
|
-
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
87
|
-
|
|
88
|
-
context.machineState.internalCallStack.push({
|
|
89
|
-
callPc: context.machineState.pc,
|
|
90
|
-
returnPc: context.machineState.nextPc,
|
|
91
|
-
});
|
|
92
|
-
context.machineState.pc = this.loc;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public override handlesPC(): boolean {
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export class InternalReturn extends Instruction {
|
|
101
|
-
static readonly type: string = 'INTERNALRETURN';
|
|
102
|
-
static readonly opcode: Opcode = Opcode.INTERNALRETURN;
|
|
103
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
104
|
-
static readonly wireFormat: OperandType[] = [OperandType.UINT8];
|
|
105
|
-
|
|
106
|
-
constructor() {
|
|
107
|
-
super();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
111
|
-
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
112
|
-
|
|
113
|
-
const stackEntry = context.machineState.internalCallStack.pop();
|
|
114
|
-
if (stackEntry === undefined) {
|
|
115
|
-
throw new InstructionExecutionError('Internal call stack empty!');
|
|
116
|
-
}
|
|
117
|
-
context.machineState.pc = stackEntry.returnPc;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
public override handlesPC(): boolean {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
}
|