@aztec/simulator 0.0.0-test.0 → 0.0.1-commit.001888fc
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 +12 -4
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +4 -2
- package/dest/common/errors.d.ts +6 -9
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +51 -32
- package/dest/common/index.d.ts +1 -2
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +0 -1
- package/dest/common/stats/index.d.ts +1 -1
- package/dest/common/stats/stats.d.ts +1 -1
- package/dest/private/acvm/acvm.d.ts +15 -7
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +14 -19
- package/dest/private/acvm/acvm_types.d.ts +2 -2
- package/dest/private/acvm/acvm_types.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.d.ts +19 -20
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +32 -24
- package/dest/private/acvm/index.d.ts +1 -2
- package/dest/private/acvm/index.d.ts.map +1 -1
- package/dest/private/acvm/index.js +0 -1
- package/dest/private/acvm/serialize.d.ts +21 -4
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +54 -1
- package/dest/private/acvm_native.d.ts +41 -0
- package/dest/private/acvm_native.d.ts.map +1 -0
- package/dest/private/{providers/acvm_native.js → acvm_native.js} +34 -26
- package/dest/private/acvm_wasm.d.ts +16 -0
- package/dest/private/acvm_wasm.d.ts.map +1 -0
- package/dest/private/acvm_wasm.js +65 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts +20 -0
- package/dest/private/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/private/acvm_wasm_with_blobs.js +35 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts +109 -0
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/circuit_recorder.js +212 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +32 -0
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +10 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts +21 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/circuit_recording/simulator_recorder_wrapper.js +44 -0
- package/dest/private/circuit_simulator.d.ts +35 -0
- package/dest/private/circuit_simulator.d.ts.map +1 -0
- package/dest/private/circuit_simulator.js +43 -0
- package/dest/private/factory.d.ts +12 -0
- package/dest/private/factory.d.ts.map +1 -0
- package/dest/private/{providers/factory.js → factory.js} +8 -5
- package/dest/public/avm/avm_context.d.ts +8 -8
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +8 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +12 -8
- package/dest/public/avm/avm_execution_environment.d.ts +9 -6
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +5 -3
- package/dest/public/avm/avm_gas.d.ts +5 -21
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +29 -37
- package/dest/public/avm/avm_machine_state.d.ts +9 -6
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +5 -2
- package/dest/public/avm/avm_memory_types.d.ts +100 -89
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +21 -7
- package/dest/public/avm/avm_simulator.d.ts +8 -7
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +32 -42
- package/dest/public/avm/avm_simulator_interface.d.ts +9 -0
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator_interface.js +3 -0
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/errors.d.ts +11 -29
- package/dest/public/avm/errors.d.ts.map +1 -1
- package/dest/public/avm/errors.js +19 -57
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +6 -5
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +26 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +8 -6
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +38 -15
- package/dest/public/avm/fixtures/initializers.d.ts +42 -0
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -0
- package/dest/public/avm/fixtures/initializers.js +45 -0
- package/dest/public/avm/fixtures/utils.d.ts +39 -0
- package/dest/public/avm/fixtures/utils.d.ts.map +1 -0
- package/dest/public/avm/fixtures/utils.js +96 -0
- package/dest/public/avm/index.d.ts +1 -3
- package/dest/public/avm/index.d.ts.map +1 -1
- package/dest/public/avm/index.js +0 -2
- package/dest/public/avm/opcodes/accrued_substate.d.ts +18 -19
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +61 -59
- package/dest/public/avm/opcodes/addressing_mode.d.ts +12 -8
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +46 -26
- package/dest/public/avm/opcodes/arithmetic.d.ts +14 -2
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +27 -3
- package/dest/public/avm/opcodes/bitwise.d.ts +8 -16
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +22 -29
- package/dest/public/avm/opcodes/comparators.d.ts +1 -1
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +3 -3
- package/dest/public/avm/opcodes/contract.d.ts +3 -4
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +11 -12
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +13 -11
- package/dest/public/avm/opcodes/conversion.d.ts +4 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +270 -6
- package/dest/public/avm/opcodes/ec_add.d.ts +3 -3
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +21 -12
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +20 -22
- package/dest/public/avm/opcodes/external_calls.d.ts +14 -13
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +52 -46
- package/dest/public/avm/opcodes/hashing.d.ts +7 -7
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +24 -19
- package/dest/public/avm/opcodes/index.d.ts +1 -1
- package/dest/public/avm/opcodes/instruction.d.ts +15 -11
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +23 -19
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +15 -15
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +52 -48
- package/dest/public/avm/opcodes/misc.d.ts +4 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +42 -17
- package/dest/public/avm/opcodes/storage.d.ts +14 -13
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +39 -27
- package/dest/public/avm/revert_reason.d.ts +18 -0
- package/dest/public/avm/revert_reason.d.ts.map +1 -0
- package/dest/public/avm/revert_reason.js +39 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts +1 -3
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +3 -7
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.js +81 -77
- package/dest/public/avm/serialization/instruction_serialization.d.ts +15 -6
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +71 -36
- package/dest/public/avm/test_utils.d.ts +12 -15
- package/dest/public/avm/test_utils.d.ts.map +1 -1
- package/dest/public/avm/test_utils.js +17 -25
- package/dest/public/contracts_db_checkpoint.d.ts +16 -0
- package/dest/public/contracts_db_checkpoint.d.ts.map +1 -0
- package/dest/public/contracts_db_checkpoint.js +30 -0
- package/dest/public/db_interfaces.d.ts +68 -0
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +3 -0
- package/dest/public/debug_fn_name.d.ts +18 -0
- package/dest/public/debug_fn_name.d.ts.map +1 -0
- package/dest/public/debug_fn_name.js +37 -0
- package/dest/public/executor_metrics.d.ts +12 -4
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +33 -23
- package/dest/public/executor_metrics_interface.d.ts +10 -0
- package/dest/public/executor_metrics_interface.d.ts.map +1 -0
- package/dest/public/executor_metrics_interface.js +1 -0
- package/dest/public/fixtures/amm_test.d.ts +10 -0
- package/dest/public/fixtures/amm_test.d.ts.map +1 -0
- package/dest/public/fixtures/amm_test.js +213 -0
- package/dest/public/fixtures/bulk_test.d.ts +6 -0
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -0
- package/dest/public/fixtures/bulk_test.js +262 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +34 -0
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tester.js +53 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +12 -0
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -0
- package/dest/public/fixtures/custom_bytecode_tests.js +174 -0
- package/dest/public/fixtures/index.d.ts +10 -1
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +4 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +19 -0
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +56 -15
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +164 -71
- package/dest/public/fixtures/simple_contract_data_source.d.ts +36 -0
- package/dest/public/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/{avm/fixtures → fixtures}/simple_contract_data_source.js +31 -10
- package/dest/public/fixtures/token_test.d.ts +12 -0
- package/dest/public/fixtures/token_test.d.ts.map +1 -0
- package/dest/public/fixtures/token_test.js +96 -0
- package/dest/public/fixtures/utils.d.ts +18 -5
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +102 -59
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +60 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +171 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts +2 -0
- package/dest/public/fuzzing/avm_simulator_bin.d.ts.map +1 -0
- package/dest/public/fuzzing/avm_simulator_bin.js +118 -0
- package/dest/public/hinting_db_sources.d.ts +80 -0
- package/dest/public/hinting_db_sources.d.ts.map +1 -0
- package/dest/public/hinting_db_sources.js +356 -0
- package/dest/public/index.d.ts +6 -9
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +4 -7
- package/dest/public/public_db_sources.d.ts +54 -103
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +222 -195
- package/dest/public/public_errors.d.ts +12 -0
- package/dest/public/public_errors.d.ts.map +1 -0
- package/dest/public/public_errors.js +13 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts +51 -0
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -0
- package/dest/public/public_processor/guarded_merkle_tree.js +113 -0
- package/dest/public/public_processor/public_processor.d.ts +30 -38
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +602 -153
- package/dest/public/public_processor/public_processor_metrics.d.ts +4 -4
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +29 -46
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +19 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +98 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +53 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +131 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +42 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +86 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +30 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +171 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +23 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +52 -0
- package/dest/public/public_tx_simulator/factories.d.ts +14 -0
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/factories.js +28 -0
- package/dest/public/public_tx_simulator/index.d.ts +8 -0
- package/dest/public/public_tx_simulator/index.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/index.js +5 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +31 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +51 -0
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +25 -31
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +75 -95
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +38 -58
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +220 -207
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +32 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.js +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +21 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +415 -0
- package/dest/public/side_effect_errors.d.ts +42 -2
- package/dest/public/side_effect_errors.d.ts.map +1 -1
- package/dest/public/side_effect_errors.js +70 -1
- package/dest/public/side_effect_trace.d.ts +24 -69
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +74 -124
- package/dest/public/side_effect_trace_interface.d.ts +13 -25
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/index.d.ts +2 -0
- package/dest/public/state_manager/index.d.ts.map +1 -0
- package/dest/public/state_manager/index.js +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.d.ts +4 -7
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/nullifiers.js +3 -8
- package/dest/public/{avm/journal → state_manager}/public_storage.d.ts +4 -4
- package/dest/public/state_manager/public_storage.d.ts.map +1 -0
- package/dest/public/{avm/journal → state_manager}/public_storage.js +1 -1
- package/dest/public/state_manager/state_manager.d.ts +170 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -0
- package/dest/public/state_manager/state_manager.js +402 -0
- package/dest/public/test_executor_metrics.d.ts +61 -0
- package/dest/public/test_executor_metrics.d.ts.map +1 -0
- package/dest/public/test_executor_metrics.js +329 -0
- package/dest/public/unique_class_ids.d.ts +1 -1
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/public/utils.d.ts +3 -5
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +4 -21
- package/dest/server.d.ts +7 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +5 -2
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +38 -33
- package/src/client.ts +5 -3
- package/src/common/errors.ts +80 -45
- package/src/common/index.ts +0 -1
- package/src/private/acvm/acvm.ts +21 -35
- package/src/private/acvm/acvm_types.ts +1 -1
- package/src/private/acvm/deserialize.ts +36 -30
- package/src/private/acvm/index.ts +0 -1
- package/src/private/acvm/serialize.ts +64 -1
- package/src/private/{providers/acvm_native.ts → acvm_native.ts} +57 -28
- package/src/private/acvm_wasm.ts +76 -0
- package/src/private/acvm_wasm_with_blobs.ts +54 -0
- package/src/private/circuit_recording/circuit_recorder.ts +263 -0
- package/src/private/circuit_recording/file_circuit_recorder.ts +163 -0
- package/src/private/circuit_recording/memory_circuit_recorder.ts +13 -0
- package/src/private/circuit_recording/simulator_recorder_wrapper.ts +91 -0
- package/src/private/circuit_simulator.ts +90 -0
- package/src/private/{providers/factory.ts → factory.ts} +13 -10
- package/src/public/avm/avm_context.ts +6 -6
- package/src/public/avm/avm_contract_call_result.ts +23 -9
- package/src/public/avm/avm_execution_environment.ts +17 -5
- package/src/public/avm/avm_gas.ts +27 -39
- package/src/public/avm/avm_machine_state.ts +12 -6
- package/src/public/avm/avm_memory_types.ts +24 -7
- package/src/public/avm/avm_simulator.ts +57 -62
- package/src/public/avm/avm_simulator_interface.ts +8 -0
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/errors.ts +20 -75
- package/src/public/avm/fixtures/account_proof.json +553 -0
- package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -0
- package/src/public/avm/fixtures/avm_simulation_tester.ts +41 -24
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +46 -13
- package/src/public/avm/fixtures/initializers.ts +103 -0
- package/src/public/avm/fixtures/utils.ts +151 -0
- package/src/public/avm/index.ts +0 -2
- package/src/public/avm/opcodes/accrued_substate.ts +84 -52
- package/src/public/avm/opcodes/addressing_mode.ts +56 -32
- package/src/public/avm/opcodes/arithmetic.ts +37 -3
- package/src/public/avm/opcodes/bitwise.ts +33 -29
- package/src/public/avm/opcodes/comparators.ts +6 -3
- package/src/public/avm/opcodes/contract.ts +10 -10
- package/src/public/avm/opcodes/control_flow.ts +19 -10
- package/src/public/avm/opcodes/conversion.ts +29 -5
- package/src/public/avm/opcodes/ec_add.ts +22 -10
- package/src/public/avm/opcodes/environment_getters.ts +28 -23
- package/src/public/avm/opcodes/external_calls.ts +70 -36
- package/src/public/avm/opcodes/hashing.ts +39 -13
- package/src/public/avm/opcodes/instruction.ts +31 -21
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +81 -42
- package/src/public/avm/opcodes/misc.ts +61 -19
- package/src/public/avm/opcodes/storage.ts +47 -23
- package/src/public/avm/revert_reason.ts +58 -0
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +90 -81
- package/src/public/avm/serialization/instruction_serialization.ts +76 -35
- package/src/public/avm/test_utils.ts +25 -42
- package/src/public/contracts_db_checkpoint.ts +41 -0
- package/src/public/db_interfaces.ts +76 -0
- package/src/public/debug_fn_name.ts +52 -0
- package/src/public/executor_metrics.ts +49 -23
- package/src/public/executor_metrics_interface.ts +15 -0
- package/src/public/fixtures/amm_test.ts +331 -0
- package/src/public/fixtures/bulk_test.ts +169 -0
- package/src/public/fixtures/custom_bytecode_tester.ts +83 -0
- package/src/public/fixtures/custom_bytecode_tests.ts +228 -0
- package/src/public/fixtures/index.ts +13 -0
- package/src/public/fixtures/minimal_public_tx.ts +26 -0
- package/src/public/fixtures/opcode_spammer.ts +1717 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +269 -114
- package/src/public/{avm/fixtures → fixtures}/simple_contract_data_source.ts +37 -20
- package/src/public/fixtures/token_test.ts +148 -0
- package/src/public/fixtures/utils.ts +142 -69
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +288 -0
- package/src/public/fuzzing/avm_simulator_bin.ts +175 -0
- package/src/public/hinting_db_sources.ts +609 -0
- package/src/public/index.ts +11 -8
- package/src/public/public_db_sources.ts +290 -260
- package/src/public/public_errors.ts +14 -0
- package/src/public/public_processor/guarded_merkle_tree.ts +158 -0
- package/src/public/public_processor/public_processor.ts +294 -205
- package/src/public/public_processor/public_processor_metrics.ts +18 -46
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +124 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +210 -0
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +134 -0
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +239 -0
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +83 -0
- package/src/public/public_tx_simulator/factories.ts +44 -0
- package/src/public/public_tx_simulator/index.ts +7 -0
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +105 -0
- package/src/public/public_tx_simulator/public_tx_context.ts +179 -199
- package/src/public/public_tx_simulator/public_tx_simulator.ts +316 -263
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +33 -0
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +63 -0
- package/src/public/side_effect_errors.ts +91 -1
- package/src/public/side_effect_trace.ts +99 -322
- package/src/public/side_effect_trace_interface.ts +11 -59
- package/src/public/state_manager/index.ts +1 -0
- package/src/public/{avm/journal → state_manager}/nullifiers.ts +6 -12
- package/src/public/{avm/journal → state_manager}/public_storage.ts +3 -3
- package/src/public/state_manager/state_manager.ts +569 -0
- package/src/public/test_executor_metrics.ts +421 -0
- package/src/public/utils.ts +5 -21
- package/src/server.ts +6 -3
- package/src/testing.ts +1 -0
- package/dest/common/db_interfaces.d.ts +0 -80
- package/dest/common/db_interfaces.d.ts.map +0 -1
- package/dest/common/db_interfaces.js +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -5
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/debug_fn_name.js +0 -6
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.js +0 -15
- package/dest/private/acvm/oracle/index.d.ts +0 -14
- package/dest/private/acvm/oracle/index.d.ts.map +0 -1
- package/dest/private/acvm/oracle/index.js +0 -2
- package/dest/private/acvm/oracle/oracle.d.ts +0 -49
- package/dest/private/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/oracle.js +0 -263
- package/dest/private/acvm/oracle/typed_oracle.d.ts +0 -83
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/private/acvm/oracle/typed_oracle.js +0 -132
- package/dest/private/execution_data_provider.d.ts +0 -261
- package/dest/private/execution_data_provider.d.ts.map +0 -1
- package/dest/private/execution_data_provider.js +0 -14
- package/dest/private/execution_note_cache.d.ts +0 -93
- package/dest/private/execution_note_cache.d.ts.map +0 -1
- package/dest/private/execution_note_cache.js +0 -180
- package/dest/private/hashed_values_cache.d.ts +0 -28
- package/dest/private/hashed_values_cache.d.ts.map +0 -1
- package/dest/private/hashed_values_cache.js +0 -46
- package/dest/private/index.d.ts +0 -13
- package/dest/private/index.d.ts.map +0 -1
- package/dest/private/index.js +0 -12
- package/dest/private/pick_notes.d.ts +0 -85
- package/dest/private/pick_notes.d.ts.map +0 -1
- package/dest/private/pick_notes.js +0 -51
- package/dest/private/private_execution.d.ts +0 -25
- package/dest/private/private_execution.d.ts.map +0 -1
- package/dest/private/private_execution.js +0 -92
- package/dest/private/private_execution_oracle.d.ts +0 -215
- package/dest/private/private_execution_oracle.d.ts.map +0 -1
- package/dest/private/private_execution_oracle.js +0 -382
- package/dest/private/providers/acvm_native.d.ts +0 -40
- package/dest/private/providers/acvm_native.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.d.ts +0 -15
- package/dest/private/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm.js +0 -62
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +0 -32
- package/dest/private/providers/factory.d.ts +0 -12
- package/dest/private/providers/factory.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.d.ts +0 -19
- package/dest/private/providers/simulation_provider.d.ts.map +0 -1
- package/dest/private/providers/simulation_provider.js +0 -24
- package/dest/private/simulator.d.ts +0 -34
- package/dest/private/simulator.d.ts.map +0 -1
- package/dest/private/simulator.js +0 -76
- package/dest/private/unconstrained_execution.d.ts +0 -10
- package/dest/private/unconstrained_execution.d.ts.map +0 -1
- package/dest/private/unconstrained_execution.js +0 -27
- package/dest/private/unconstrained_execution_oracle.d.ts +0 -161
- package/dest/private/unconstrained_execution_oracle.d.ts.map +0 -1
- package/dest/private/unconstrained_execution_oracle.js +0 -258
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/dest/public/avm/fixtures/index.d.ts +0 -84
- package/dest/public/avm/fixtures/index.d.ts.map +0 -1
- package/dest/public/avm/fixtures/index.js +0 -175
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts +0 -35
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/public/avm/journal/index.d.ts +0 -2
- package/dest/public/avm/journal/index.d.ts.map +0 -1
- package/dest/public/avm/journal/index.js +0 -1
- package/dest/public/avm/journal/journal.d.ts +0 -209
- package/dest/public/avm/journal/journal.d.ts.map +0 -1
- package/dest/public/avm/journal/journal.js +0 -486
- package/dest/public/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/public/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/bytecode_errors.js +0 -6
- package/dest/public/execution.d.ts +0 -108
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/execution.js +0 -9
- package/dest/public/tx_contract_cache.d.ts +0 -41
- package/dest/public/tx_contract_cache.d.ts.map +0 -1
- package/dest/public/tx_contract_cache.js +0 -49
- package/dest/test/utils.d.ts +0 -13
- package/dest/test/utils.d.ts.map +0 -1
- package/dest/test/utils.js +0 -22
- package/src/common/db_interfaces.ts +0 -94
- package/src/common/debug_fn_name.ts +0 -18
- package/src/common/message_load_oracle_inputs.ts +0 -15
- package/src/private/acvm/oracle/index.ts +0 -16
- package/src/private/acvm/oracle/oracle.ts +0 -455
- package/src/private/acvm/oracle/typed_oracle.ts +0 -259
- package/src/private/execution_data_provider.ts +0 -323
- package/src/private/execution_note_cache.ts +0 -217
- package/src/private/hashed_values_cache.ts +0 -55
- package/src/private/index.ts +0 -16
- package/src/private/pick_notes.ts +0 -141
- package/src/private/private_execution.ts +0 -151
- package/src/private/private_execution_oracle.ts +0 -614
- package/src/private/providers/acvm_wasm.ts +0 -63
- package/src/private/providers/acvm_wasm_with_blobs.ts +0 -50
- package/src/private/providers/simulation_provider.ts +0 -45
- package/src/private/simulator.ts +0 -147
- package/src/private/unconstrained_execution.ts +0 -50
- package/src/private/unconstrained_execution_oracle.ts +0 -373
- package/src/public/avm/bytecode_utils.ts +0 -17
- package/src/public/avm/fixtures/index.ts +0 -296
- package/src/public/avm/journal/index.ts +0 -1
- package/src/public/avm/journal/journal.ts +0 -742
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
- package/src/public/bytecode_errors.ts +0 -6
- package/src/public/execution.ts +0 -140
- package/src/public/tx_contract_cache.ts +0 -69
- package/src/test/utils.ts +0 -36
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches an account proof from the Ethereum mainnet and saves it as account_proof.json.
|
|
3
|
+
* This script is not using any Aztec library code, so it's easily portable.
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { createPublicClient, fromRlp, hexToBytes, http } from 'viem';
|
|
9
|
+
import { mainnet } from 'viem/chains';
|
|
10
|
+
|
|
11
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
|
|
13
|
+
const RPC_URL = process.env.RPC_URL;
|
|
14
|
+
const ADDRESS = (process.env.ADDRESS || '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045') as `0x${string}`;
|
|
15
|
+
const BLOCK_TAG = process.env.BLOCK_NUMBER ? BigInt(process.env.BLOCK_NUMBER) : 'latest';
|
|
16
|
+
const MAX_ACCOUNT_PATH = 15;
|
|
17
|
+
|
|
18
|
+
function padTo(arr: number[], len: number) {
|
|
19
|
+
return [...arr, ...Array(len - arr.length).fill(0)].slice(0, len);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function toBytes(hex: `0x${string}`) {
|
|
23
|
+
return Array.from(hexToBytes(hex));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function bytesToU64s(bytes: number[]) {
|
|
27
|
+
const paddedBytes = padTo(bytes, 32);
|
|
28
|
+
return Array.from({ length: 4 }, (_, i) => {
|
|
29
|
+
let val = 0n;
|
|
30
|
+
for (let j = 0; j < 8; j++) {
|
|
31
|
+
val += BigInt(paddedBytes[i * 8 + j]) << BigInt(j * 8);
|
|
32
|
+
}
|
|
33
|
+
return val.toString();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function toBytesAndLen(val: bigint | number) {
|
|
38
|
+
if (val === 0n || val === 0) {
|
|
39
|
+
return { bytes: [0], length: 0 };
|
|
40
|
+
}
|
|
41
|
+
let hex = val.toString(16);
|
|
42
|
+
if (hex.length % 2) {
|
|
43
|
+
hex = '0' + hex;
|
|
44
|
+
}
|
|
45
|
+
const bytes = toBytes(`0x${hex}`);
|
|
46
|
+
return { bytes, length: bytes.length };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function parseNode(rlp: `0x${string}`) {
|
|
50
|
+
// Should be safe when working with branches and extensions without embedded children.
|
|
51
|
+
const decoded = fromRlp(rlp) as `0x${string}`[];
|
|
52
|
+
const node = {
|
|
53
|
+
rows: Array(16)
|
|
54
|
+
.fill(0)
|
|
55
|
+
.map(() => Array(32).fill(0)),
|
|
56
|
+
row_exist: Array(16).fill(false),
|
|
57
|
+
node_type: 0,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
if (decoded.length === 17) {
|
|
61
|
+
for (let i = 0; i < 16; i++) {
|
|
62
|
+
if (decoded[i] !== '0x') {
|
|
63
|
+
node.row_exist[i] = true;
|
|
64
|
+
node.rows[i] = padTo(toBytes(decoded[i]), 32);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} else if (decoded.length === 2) {
|
|
68
|
+
const keyBytes = toBytes(decoded[0]);
|
|
69
|
+
const prefix = keyBytes[0];
|
|
70
|
+
if (prefix >> 4 >= 2) {
|
|
71
|
+
throw new Error('Unsupported: leaf node in proof path');
|
|
72
|
+
}
|
|
73
|
+
node.node_type = 1;
|
|
74
|
+
// Extension header format expected by the noir code: check out storage_proof types.nr.
|
|
75
|
+
node.rows[0][0] = prefix >> 4;
|
|
76
|
+
node.rows[0][8] = prefix & 0x0f;
|
|
77
|
+
node.rows[0][16] = keyBytes.length - 1;
|
|
78
|
+
|
|
79
|
+
for (let i = 1; i < keyBytes.length && i < 32; i++) {
|
|
80
|
+
node.rows[1][i - 1] = keyBytes[i];
|
|
81
|
+
}
|
|
82
|
+
node.rows[2] = padTo(toBytes(decoded[1]), 32);
|
|
83
|
+
node.row_exist[0] = node.row_exist[1] = node.row_exist[2] = true;
|
|
84
|
+
}
|
|
85
|
+
return node;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function parseProof(proof: `0x${string}`[], maxLen: number) {
|
|
89
|
+
const nodes = proof.slice(0, -1).slice(0, maxLen).map(parseNode);
|
|
90
|
+
while (nodes.length < maxLen) {
|
|
91
|
+
nodes.push({
|
|
92
|
+
rows: Array(16)
|
|
93
|
+
.fill(0)
|
|
94
|
+
.map(() => Array(32).fill(0)),
|
|
95
|
+
row_exist: Array(16).fill(false),
|
|
96
|
+
node_type: 0,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return nodes;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function nodeToLibFormat(node: { rows: number[][]; row_exist: boolean[]; node_type: number }) {
|
|
103
|
+
return {
|
|
104
|
+
rows: node.rows.map(bytesToU64s),
|
|
105
|
+
row_exist: node.row_exist,
|
|
106
|
+
node_type: String(node.node_type),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function main() {
|
|
111
|
+
if (!RPC_URL) {
|
|
112
|
+
throw new Error('RPC_URL is not set');
|
|
113
|
+
}
|
|
114
|
+
console.log(`Fetching account proof for ${ADDRESS}`);
|
|
115
|
+
|
|
116
|
+
const client = createPublicClient({
|
|
117
|
+
chain: mainnet,
|
|
118
|
+
transport: http(RPC_URL),
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const [blockNumber, proof, block] = await Promise.all([
|
|
122
|
+
client.getBlockNumber(),
|
|
123
|
+
client.getProof({
|
|
124
|
+
address: ADDRESS,
|
|
125
|
+
storageKeys: [],
|
|
126
|
+
blockNumber: BLOCK_TAG === 'latest' ? undefined : BLOCK_TAG,
|
|
127
|
+
}),
|
|
128
|
+
client.getBlock({
|
|
129
|
+
blockNumber: BLOCK_TAG === 'latest' ? undefined : BLOCK_TAG,
|
|
130
|
+
}),
|
|
131
|
+
]);
|
|
132
|
+
|
|
133
|
+
console.log(`Block: ${blockNumber}, Account nodes: ${proof.accountProof.length}`);
|
|
134
|
+
|
|
135
|
+
// The -1 is because the last node in the proof is the leaf, which is excluded from path verification.
|
|
136
|
+
const accountPathLen = proof.accountProof.length - 1;
|
|
137
|
+
if (accountPathLen > MAX_ACCOUNT_PATH) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
`Account proof path length ${accountPathLen} exceeds MAX_ACCOUNT_PATH ${MAX_ACCOUNT_PATH}. Increase the limit.`,
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const nonce = toBytesAndLen(proof.nonce);
|
|
144
|
+
const balance = toBytesAndLen(proof.balance);
|
|
145
|
+
|
|
146
|
+
const data = {
|
|
147
|
+
block_number: String(blockNumber),
|
|
148
|
+
node_length: String(accountPathLen),
|
|
149
|
+
root: bytesToU64s(toBytes(block.stateRoot)),
|
|
150
|
+
nodes: parseProof(proof.accountProof, MAX_ACCOUNT_PATH).map(nodeToLibFormat),
|
|
151
|
+
account: {
|
|
152
|
+
address: toBytes(ADDRESS).map(String),
|
|
153
|
+
balance: padTo(balance.bytes, 32).map(String),
|
|
154
|
+
balance_length: String(balance.length),
|
|
155
|
+
code_hash: bytesToU64s(toBytes(proof.codeHash)),
|
|
156
|
+
nonce: padTo(nonce.bytes, 8).map(String),
|
|
157
|
+
nonce_length: String(nonce.length),
|
|
158
|
+
storage_hash: bytesToU64s(toBytes(proof.storageHash)),
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
fs.writeFileSync(join(__dirname, 'account_proof.json'), JSON.stringify(data, null, 2));
|
|
163
|
+
console.log('account_proof.json generated');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
main().catch(console.error);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { encodeArguments } from '@aztec/stdlib/abi';
|
|
3
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
3
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
5
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
5
6
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
@@ -8,20 +9,20 @@ import { NativeWorldStateService } from '@aztec/world-state';
|
|
|
8
9
|
|
|
9
10
|
import { SideEffectTrace } from '../../../public/side_effect_trace.js';
|
|
10
11
|
import type { AvmContractCallResult } from '../../avm/avm_contract_call_result.js';
|
|
12
|
+
import { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
|
|
13
|
+
import { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
14
|
+
import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
|
|
15
|
+
import { AvmSimulator } from '../avm_simulator.js';
|
|
16
|
+
import { CallDataArray } from '../calldata.js';
|
|
17
|
+
import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
|
|
18
|
+
import { initContext, initExecutionEnvironment } from './initializers.js';
|
|
11
19
|
import {
|
|
12
|
-
|
|
20
|
+
DEFAULT_TIMESTAMP,
|
|
21
|
+
getContractFunctionAbi,
|
|
13
22
|
getFunctionSelector,
|
|
14
|
-
initContext,
|
|
15
|
-
initExecutionEnvironment,
|
|
16
23
|
resolveContractAssertionMessage,
|
|
17
|
-
} from '
|
|
18
|
-
import { AvmPersistableStateManager } from '../../avm/journal/journal.js';
|
|
19
|
-
import { WorldStateDB } from '../../public_db_sources.js';
|
|
20
|
-
import { AvmSimulator } from '../avm_simulator.js';
|
|
21
|
-
import { BaseAvmSimulationTester } from './base_avm_simulation_tester.js';
|
|
22
|
-
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
24
|
+
} from './utils.js';
|
|
23
25
|
|
|
24
|
-
const TIMESTAMP = new Fr(99833);
|
|
25
26
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -33,24 +34,27 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
33
34
|
constructor(
|
|
34
35
|
contractDataSource: SimpleContractDataSource,
|
|
35
36
|
merkleTrees: MerkleTreeWriteOperations,
|
|
36
|
-
private stateManager:
|
|
37
|
+
private stateManager: PublicPersistableStateManager,
|
|
37
38
|
) {
|
|
38
39
|
super(contractDataSource, merkleTrees);
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
static async create(
|
|
42
|
+
static async create(
|
|
43
|
+
worldStateService: NativeWorldStateService, // make sure to close this later
|
|
44
|
+
): Promise<AvmSimulationTester> {
|
|
42
45
|
const contractDataSource = new SimpleContractDataSource();
|
|
43
|
-
const merkleTrees = await
|
|
44
|
-
const
|
|
46
|
+
const merkleTrees = await worldStateService.fork();
|
|
47
|
+
const treesDB = new PublicTreesDB(merkleTrees);
|
|
48
|
+
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
45
49
|
const trace = new SideEffectTrace();
|
|
46
50
|
const firstNullifier = new Fr(420000);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
|
|
52
|
+
const stateManager = PublicPersistableStateManager.create(
|
|
53
|
+
treesDB,
|
|
54
|
+
contractsDB,
|
|
51
55
|
trace,
|
|
52
|
-
/*doMerkleOperations=*/ false,
|
|
53
56
|
firstNullifier,
|
|
57
|
+
DEFAULT_TIMESTAMP,
|
|
54
58
|
);
|
|
55
59
|
return new AvmSimulationTester(contractDataSource, merkleTrees, stateManager);
|
|
56
60
|
}
|
|
@@ -70,20 +74,28 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
70
74
|
throw new Error(`Contract not found at address: ${address}`);
|
|
71
75
|
}
|
|
72
76
|
const fnSelector = await getFunctionSelector(fnName, contractArtifact);
|
|
73
|
-
const fnAbi =
|
|
77
|
+
const fnAbi = getContractFunctionAbi(fnName, contractArtifact);
|
|
74
78
|
const encodedArgs = encodeArguments(fnAbi!, args);
|
|
75
79
|
const calldata = [fnSelector.toField(), ...encodedArgs];
|
|
76
80
|
|
|
77
81
|
const globals = GlobalVariables.empty();
|
|
78
|
-
globals.timestamp =
|
|
82
|
+
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
79
83
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
80
84
|
|
|
85
|
+
const config = PublicSimulatorConfig.from({
|
|
86
|
+
skipFeeEnforcement: false,
|
|
87
|
+
collectDebugLogs: true,
|
|
88
|
+
collectHints: false,
|
|
89
|
+
collectStatistics: false,
|
|
90
|
+
collectCallMetadata: true,
|
|
91
|
+
});
|
|
81
92
|
const environment = initExecutionEnvironment({
|
|
82
|
-
calldata,
|
|
93
|
+
calldata: new CallDataArray(calldata),
|
|
83
94
|
globals,
|
|
84
95
|
address,
|
|
85
96
|
sender,
|
|
86
97
|
isStaticCall,
|
|
98
|
+
config,
|
|
87
99
|
});
|
|
88
100
|
const persistableState = await this.stateManager.fork();
|
|
89
101
|
const context = initContext({ env: environment, persistableState });
|
|
@@ -94,7 +106,12 @@ export class AvmSimulationTester extends BaseAvmSimulationTester {
|
|
|
94
106
|
if (result.reverted) {
|
|
95
107
|
this.logger.error(`Error in ${fnName}:`);
|
|
96
108
|
this.logger.error(
|
|
97
|
-
resolveContractAssertionMessage(
|
|
109
|
+
resolveContractAssertionMessage(
|
|
110
|
+
fnName,
|
|
111
|
+
result.revertReason!,
|
|
112
|
+
result.output.bestEffortReadAll(),
|
|
113
|
+
contractArtifact,
|
|
114
|
+
)!,
|
|
98
115
|
);
|
|
99
116
|
} else {
|
|
100
117
|
this.logger.info(`Simulation of function ${fnName} succeeded!`);
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
|
+
import { getCanonicalAuthRegistry } from '@aztec/protocol-contracts/auth-registry';
|
|
5
6
|
import { computeFeePayerBalanceStorageSlot, getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
|
|
7
|
+
import { getCanonicalInstanceRegistry } from '@aztec/protocol-contracts/instance-registry';
|
|
6
8
|
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
7
9
|
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
|
-
import type {
|
|
11
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
10
12
|
import { computePublicDataTreeLeafSlot, siloNullifier } from '@aztec/stdlib/hash';
|
|
11
13
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
12
14
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
13
15
|
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
+
import type { SimpleContractDataSource } from '../../fixtures/simple_contract_data_source.js';
|
|
17
|
+
import { createContractClassAndInstance } from './utils.js';
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* An abstract test class that enables tests of real apps in the AVM without requiring e2e tests.
|
|
@@ -44,7 +46,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
44
46
|
const leafSlot = await computePublicDataTreeLeafSlot(address, slot);
|
|
45
47
|
// get existing preimage
|
|
46
48
|
const publicDataWrite = new PublicDataWrite(leafSlot, value);
|
|
47
|
-
await this.merkleTrees.
|
|
49
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [publicDataWrite.toBuffer()]);
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
/**
|
|
@@ -57,6 +59,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
57
59
|
contractArtifact: ContractArtifact,
|
|
58
60
|
skipNullifierInsertion = false,
|
|
59
61
|
seed = 0,
|
|
62
|
+
contractClassSeed = seed,
|
|
60
63
|
originalContractClassId?: Fr, // if previously upgraded
|
|
61
64
|
): Promise<ContractInstanceWithAddress> {
|
|
62
65
|
const { contractClass, contractInstance } = await createContractClassAndInstance(
|
|
@@ -64,6 +67,7 @@ export abstract class BaseAvmSimulationTester {
|
|
|
64
67
|
deployer,
|
|
65
68
|
contractArtifact,
|
|
66
69
|
seed,
|
|
70
|
+
contractClassSeed,
|
|
67
71
|
originalContractClassId,
|
|
68
72
|
);
|
|
69
73
|
|
|
@@ -80,16 +84,40 @@ export abstract class BaseAvmSimulationTester {
|
|
|
80
84
|
const feeJuiceContractClassPublic = {
|
|
81
85
|
...feeJuice.contractClass,
|
|
82
86
|
privateFunctions: [],
|
|
83
|
-
|
|
87
|
+
utilityFunctions: [],
|
|
84
88
|
};
|
|
85
89
|
await this.contractDataSource.addNewContract(feeJuice.artifact, feeJuiceContractClassPublic, feeJuice.instance);
|
|
86
90
|
return feeJuice.instance;
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
async registerAuthContract(): Promise<ContractInstanceWithAddress> {
|
|
94
|
+
const authRegistry = await getCanonicalAuthRegistry();
|
|
95
|
+
const authRegistryContractClassPublic = {
|
|
96
|
+
...authRegistry.contractClass,
|
|
97
|
+
privateFunctions: [],
|
|
98
|
+
utilityFunctions: [],
|
|
99
|
+
};
|
|
100
|
+
await this.contractDataSource.addNewContract(
|
|
101
|
+
authRegistry.artifact,
|
|
102
|
+
authRegistryContractClassPublic,
|
|
103
|
+
authRegistry.instance,
|
|
104
|
+
);
|
|
105
|
+
return authRegistry.instance;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async registerInstanceRegistryContract(): Promise<ContractInstanceWithAddress> {
|
|
109
|
+
const instanceRegistry = await getCanonicalInstanceRegistry();
|
|
110
|
+
const instanceRegistryContractClassPublic = {
|
|
111
|
+
...instanceRegistry.contractClass,
|
|
112
|
+
privateFunctions: [],
|
|
113
|
+
utilityFunctions: [],
|
|
114
|
+
};
|
|
115
|
+
await this.contractDataSource.addNewContract(
|
|
116
|
+
instanceRegistry.artifact,
|
|
117
|
+
instanceRegistryContractClassPublic,
|
|
118
|
+
instanceRegistry.instance,
|
|
119
|
+
);
|
|
120
|
+
return instanceRegistry.instance;
|
|
93
121
|
}
|
|
94
122
|
|
|
95
123
|
async addContractInstance(contractInstance: ContractInstanceWithAddress, skipNullifierInsertion = false) {
|
|
@@ -101,9 +129,14 @@ export abstract class BaseAvmSimulationTester {
|
|
|
101
129
|
|
|
102
130
|
private async insertContractAddressNullifier(contractAddress: AztecAddress) {
|
|
103
131
|
const contractAddressNullifier = await siloNullifier(
|
|
104
|
-
AztecAddress.fromNumber(
|
|
132
|
+
AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
105
133
|
contractAddress.toField(),
|
|
106
134
|
);
|
|
107
|
-
await this.merkleTrees.
|
|
135
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [contractAddressNullifier.toBuffer()]);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async insertNullifier(contractThatEmitted: AztecAddress, nullifier: Fr) {
|
|
139
|
+
const siloedNullifier = await siloNullifier(contractThatEmitted, nullifier);
|
|
140
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.NULLIFIER_TREE, [siloedNullifier.toBuffer()]);
|
|
108
141
|
}
|
|
109
142
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
6
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
8
|
+
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
9
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
10
|
+
|
|
11
|
+
import { mock } from 'jest-mock-extended';
|
|
12
|
+
|
|
13
|
+
import type { PublicContractsDB, PublicTreesDB } from '../../public_db_sources.js';
|
|
14
|
+
import type { PublicSideEffectTraceInterface } from '../../side_effect_trace_interface.js';
|
|
15
|
+
import { NullifierManager } from '../../state_manager/nullifiers.js';
|
|
16
|
+
import { PublicStorage } from '../../state_manager/public_storage.js';
|
|
17
|
+
import { PublicPersistableStateManager } from '../../state_manager/state_manager.js';
|
|
18
|
+
import { AvmContext } from '../avm_context.js';
|
|
19
|
+
import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
|
|
20
|
+
import { AvmMachineState } from '../avm_machine_state.js';
|
|
21
|
+
import { AvmSimulator } from '../avm_simulator.js';
|
|
22
|
+
import { CallDataArray } from '../calldata.js';
|
|
23
|
+
import { DEFAULT_TIMESTAMP } from './utils.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create a new AVM context with default values.
|
|
27
|
+
*/
|
|
28
|
+
export function initContext(overrides?: {
|
|
29
|
+
persistableState?: PublicPersistableStateManager;
|
|
30
|
+
env?: AvmExecutionEnvironment;
|
|
31
|
+
machineState?: AvmMachineState;
|
|
32
|
+
}): AvmContext {
|
|
33
|
+
const ctx = new AvmContext(
|
|
34
|
+
overrides?.persistableState || initPersistableStateManager(),
|
|
35
|
+
overrides?.env || initExecutionEnvironment(),
|
|
36
|
+
overrides?.machineState || initMachineState(),
|
|
37
|
+
);
|
|
38
|
+
ctx.provideSimulator = AvmSimulator.build;
|
|
39
|
+
return ctx;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Creates an empty state manager with mocked host storage. */
|
|
43
|
+
export function initPersistableStateManager(overrides?: {
|
|
44
|
+
treesDB?: PublicTreesDB;
|
|
45
|
+
contractsDB?: PublicContractsDB;
|
|
46
|
+
trace?: PublicSideEffectTraceInterface;
|
|
47
|
+
publicStorage?: PublicStorage;
|
|
48
|
+
nullifiers?: NullifierManager;
|
|
49
|
+
firstNullifier?: Fr;
|
|
50
|
+
timestamp?: UInt64;
|
|
51
|
+
}): PublicPersistableStateManager {
|
|
52
|
+
const treesDB = overrides?.treesDB || mock<PublicTreesDB>();
|
|
53
|
+
return new PublicPersistableStateManager(
|
|
54
|
+
treesDB,
|
|
55
|
+
overrides?.contractsDB || mock<PublicContractsDB>(),
|
|
56
|
+
overrides?.trace || mock<PublicSideEffectTraceInterface>(),
|
|
57
|
+
overrides?.firstNullifier || new Fr(27),
|
|
58
|
+
overrides?.timestamp || DEFAULT_TIMESTAMP,
|
|
59
|
+
/*doMerkleOperations=*/ false,
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
65
|
+
*/
|
|
66
|
+
export function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnvironment>): AvmExecutionEnvironment {
|
|
67
|
+
return new AvmExecutionEnvironment(
|
|
68
|
+
overrides?.address ?? AztecAddress.zero(),
|
|
69
|
+
overrides?.sender ?? AztecAddress.zero(),
|
|
70
|
+
overrides?.contractCallDepth ?? Fr.zero(),
|
|
71
|
+
overrides?.transactionFee ?? Fr.zero(),
|
|
72
|
+
overrides?.globals ?? GlobalVariables.empty(),
|
|
73
|
+
overrides?.isStaticCall ?? false,
|
|
74
|
+
overrides?.calldata ?? new CallDataArray([]),
|
|
75
|
+
overrides?.config ?? PublicSimulatorConfig.empty(),
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
|
|
81
|
+
*/
|
|
82
|
+
export function initGlobalVariables(overrides?: Partial<GlobalVariables>): GlobalVariables {
|
|
83
|
+
return new GlobalVariables(
|
|
84
|
+
overrides?.chainId ?? Fr.zero(),
|
|
85
|
+
overrides?.version ?? Fr.zero(),
|
|
86
|
+
overrides?.blockNumber ?? BlockNumber.ZERO,
|
|
87
|
+
overrides?.slotNumber ?? SlotNumber.ZERO,
|
|
88
|
+
overrides?.timestamp ?? 0n,
|
|
89
|
+
overrides?.coinbase ?? EthAddress.ZERO,
|
|
90
|
+
overrides?.feeRecipient ?? AztecAddress.zero(),
|
|
91
|
+
overrides?.gasFees ?? GasFees.empty(),
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Create an empty instance of the Machine State where all values are set to a large enough amount, unless overridden in the overrides object
|
|
97
|
+
*/
|
|
98
|
+
export function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState {
|
|
99
|
+
return AvmMachineState.fromState({
|
|
100
|
+
l2GasLeft: overrides?.l2GasLeft ?? AVM_MAX_PROCESSABLE_L2_GAS,
|
|
101
|
+
daGasLeft: overrides?.daGasLeft ?? 1e8,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS } from '@aztec/constants';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import {
|
|
5
|
+
type ContractArtifact,
|
|
6
|
+
type FunctionAbi,
|
|
7
|
+
type FunctionArtifact,
|
|
8
|
+
FunctionSelector,
|
|
9
|
+
getAllFunctionAbis,
|
|
10
|
+
} from '@aztec/stdlib/abi';
|
|
11
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
|
+
import {
|
|
13
|
+
type ContractClassPublic,
|
|
14
|
+
type ContractInstanceWithAddress,
|
|
15
|
+
computeInitializationHash,
|
|
16
|
+
} from '@aztec/stdlib/contract';
|
|
17
|
+
import { isNoirCallStackUnresolved } from '@aztec/stdlib/errors';
|
|
18
|
+
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
19
|
+
import { deriveKeys } from '@aztec/stdlib/keys';
|
|
20
|
+
import { makeContractClassPublic, makeContractInstanceFromClassId } from '@aztec/stdlib/testing';
|
|
21
|
+
import type { UInt64 } from '@aztec/stdlib/types';
|
|
22
|
+
|
|
23
|
+
import { strict as assert } from 'assert';
|
|
24
|
+
import merge from 'lodash.merge';
|
|
25
|
+
|
|
26
|
+
import { resolveAssertionMessageFromRevertData, traverseCauseChain } from '../../../common/index.js';
|
|
27
|
+
import { Field, Uint8, Uint32, Uint64 } from '../avm_memory_types.js';
|
|
28
|
+
import type { AvmRevertReason } from '../errors.js';
|
|
29
|
+
|
|
30
|
+
export const PUBLIC_DISPATCH_FN_NAME = 'public_dispatch';
|
|
31
|
+
export const DEFAULT_TIMESTAMP: UInt64 = 99833n;
|
|
32
|
+
export const DEFAULT_BLOCK_NUMBER = BlockNumber(42);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Create a new object with all the same properties as the original, except for the ones in the overrides object.
|
|
36
|
+
*/
|
|
37
|
+
export function allSameExcept(original: any, overrides: any): any {
|
|
38
|
+
return merge({}, original, overrides);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function randomMemoryBytes(length: number): Uint8[] {
|
|
42
|
+
return [...Array(length)].map(_ => new Uint8(Math.floor(Math.random() * 255)));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function randomMemoryUint32s(length: number): Uint32[] {
|
|
46
|
+
return [...Array(length)].map(_ => new Uint32(Math.floor(Math.random() * 255)));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function randomMemoryUint64s(length: number): Uint64[] {
|
|
50
|
+
return [...Array(length)].map(_ => new Uint64(Math.floor(Math.random() * 255)));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function randomMemoryFields(length: number): Field[] {
|
|
54
|
+
return [...Array(length)].map(_ => new Field(Fr.random()));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getFunctionSelector(
|
|
58
|
+
functionName: string,
|
|
59
|
+
contractArtifact: ContractArtifact,
|
|
60
|
+
): Promise<FunctionSelector> {
|
|
61
|
+
const fnArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName)!;
|
|
62
|
+
assert(!!fnArtifact, `Function ${functionName} not found in ${contractArtifact.name}`);
|
|
63
|
+
const params = fnArtifact.parameters;
|
|
64
|
+
return FunctionSelector.fromNameAndParameters(fnArtifact.name, params);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getContractFunctionArtifact(
|
|
68
|
+
functionName: string,
|
|
69
|
+
contractArtifact: ContractArtifact,
|
|
70
|
+
): FunctionArtifact | undefined {
|
|
71
|
+
return contractArtifact.functions.find(f => f.name === functionName);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function getContractFunctionAbi(
|
|
75
|
+
functionName: string,
|
|
76
|
+
contractArtifact: ContractArtifact,
|
|
77
|
+
): FunctionAbi | undefined {
|
|
78
|
+
return (
|
|
79
|
+
contractArtifact.functions.find(f => f.name === functionName) ??
|
|
80
|
+
contractArtifact.nonDispatchPublicFunctions.find(f => f.name === functionName)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function resolveContractAssertionMessage(
|
|
85
|
+
functionName: string,
|
|
86
|
+
revertReason: AvmRevertReason,
|
|
87
|
+
output: Fr[],
|
|
88
|
+
contractArtifact: ContractArtifact,
|
|
89
|
+
): string | undefined {
|
|
90
|
+
traverseCauseChain(revertReason, cause => {
|
|
91
|
+
revertReason = cause as AvmRevertReason;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const functionArtifact = getAllFunctionAbis(contractArtifact).find(f => f.name === functionName);
|
|
95
|
+
if (!functionArtifact || !revertReason.noirCallStack || !isNoirCallStackUnresolved(revertReason.noirCallStack)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return resolveAssertionMessageFromRevertData(output, functionArtifact);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Create a contract class and instance given constructor args, artifact, etc.
|
|
104
|
+
* NOTE: This is useful for testing real-ish contract class registration and instance deployment TXs (via logs)
|
|
105
|
+
* @param constructorArgs - The constructor arguments for the contract.
|
|
106
|
+
* @param deployer - The deployer of the contract.
|
|
107
|
+
* @param contractArtifact - The contract artifact for the contract.
|
|
108
|
+
* @param seed - The seed for the contract.
|
|
109
|
+
* @param originalContractClassId - The original contract class ID (if upgraded)
|
|
110
|
+
* @returns The contract class, instance, and contract address nullifier.
|
|
111
|
+
*/
|
|
112
|
+
export async function createContractClassAndInstance(
|
|
113
|
+
constructorArgs: any[],
|
|
114
|
+
deployer: AztecAddress,
|
|
115
|
+
contractArtifact: ContractArtifact,
|
|
116
|
+
seed = 0,
|
|
117
|
+
contractClassSeed = seed,
|
|
118
|
+
originalContractClassId?: Fr, // if previously upgraded
|
|
119
|
+
): Promise<{
|
|
120
|
+
contractClass: ContractClassPublic;
|
|
121
|
+
contractInstance: ContractInstanceWithAddress;
|
|
122
|
+
contractAddressNullifier: Fr;
|
|
123
|
+
}> {
|
|
124
|
+
const bytecode = (getContractFunctionArtifact(PUBLIC_DISPATCH_FN_NAME, contractArtifact) as FunctionArtifact)!
|
|
125
|
+
.bytecode;
|
|
126
|
+
const contractClass = await makeContractClassPublic(contractClassSeed, bytecode);
|
|
127
|
+
|
|
128
|
+
const constructorAbi = getContractFunctionAbi('constructor', contractArtifact);
|
|
129
|
+
const { publicKeys } = await deriveKeys(new Fr(seed));
|
|
130
|
+
const initializationHash = await computeInitializationHash(constructorAbi, constructorArgs);
|
|
131
|
+
const contractInstance =
|
|
132
|
+
originalContractClassId === undefined
|
|
133
|
+
? await makeContractInstanceFromClassId(contractClass.id, seed, {
|
|
134
|
+
deployer,
|
|
135
|
+
initializationHash,
|
|
136
|
+
publicKeys,
|
|
137
|
+
})
|
|
138
|
+
: await makeContractInstanceFromClassId(originalContractClassId, seed, {
|
|
139
|
+
deployer,
|
|
140
|
+
initializationHash,
|
|
141
|
+
currentClassId: contractClass.id,
|
|
142
|
+
publicKeys,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
const contractAddressNullifier = await siloNullifier(
|
|
146
|
+
AztecAddress.fromNumber(CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS),
|
|
147
|
+
contractInstance.address.toField(),
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
return { contractClass, contractInstance, contractAddressNullifier };
|
|
151
|
+
}
|
package/src/public/avm/index.ts
CHANGED