@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,18 +1,28 @@
|
|
|
1
|
+
import { PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
|
|
1
2
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
2
|
-
import {
|
|
3
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
5
|
import { encodeArguments } from '@aztec/stdlib/abi';
|
|
4
|
-
import {
|
|
6
|
+
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
7
|
+
import { FALLBACK_TEARDOWN_DA_GAS_LIMIT, FALLBACK_TEARDOWN_L2_GAS_LIMIT, Gas, GasFees } from '@aztec/stdlib/gas';
|
|
5
8
|
import { PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
6
9
|
import { GlobalVariables, PublicCallRequestWithCalldata } from '@aztec/stdlib/tx';
|
|
7
|
-
import { BaseAvmSimulationTester } from '../avm/
|
|
8
|
-
import { DEFAULT_BLOCK_NUMBER, DEFAULT_TIMESTAMP, getContractFunctionAbi, getFunctionSelector } from '../avm/
|
|
10
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
11
|
+
import { DEFAULT_BLOCK_NUMBER, DEFAULT_TIMESTAMP, getContractFunctionAbi, getFunctionSelector } from '../avm/testing/utils.js';
|
|
9
12
|
import { PublicContractsDB } from '../public_db_sources.js';
|
|
10
|
-
import {
|
|
11
|
-
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator.js';
|
|
13
|
+
import { MeasuredPublicTxSimulator } from '../public_tx_simulator/public_tx_simulator.js';
|
|
12
14
|
import { TestExecutorMetrics } from '../test_executor_metrics.js';
|
|
13
15
|
import { SimpleContractDataSource } from './simple_contract_data_source.js';
|
|
14
16
|
import { createTxForPublicCalls } from './utils.js';
|
|
15
17
|
const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
18
|
+
const defaultConfig = PublicSimulatorConfig.from({
|
|
19
|
+
skipFeeEnforcement: false,
|
|
20
|
+
collectCallMetadata: true,
|
|
21
|
+
collectDebugLogs: true,
|
|
22
|
+
collectHints: false,
|
|
23
|
+
collectPublicInputs: false,
|
|
24
|
+
collectStatistics: false
|
|
25
|
+
});
|
|
16
26
|
/**
|
|
17
27
|
* A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
|
|
18
28
|
* It provides an interface for simulating one transaction at a time and maintains state between subsequent
|
|
@@ -22,20 +32,20 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
22
32
|
txCount;
|
|
23
33
|
simulator;
|
|
24
34
|
metricsPrefix;
|
|
25
|
-
constructor(merkleTree, contractDataSource, globals = defaultGlobals(), metrics = new TestExecutorMetrics(),
|
|
35
|
+
constructor(merkleTree, contractDataSource, globals = defaultGlobals(), metrics = new TestExecutorMetrics(), simulatorFactory, config = defaultConfig){
|
|
26
36
|
super(contractDataSource, merkleTree), this.metrics = metrics, this.txCount = 0;
|
|
27
37
|
const contractsDB = new PublicContractsDB(contractDataSource);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
this.simulator = useCppSimulator ? new MeasuredCppPublicTxSimulatorHintedDbs(merkleTree, contractsDB, globals, this.metrics, config) : new MeasuredPublicTxSimulator(merkleTree, contractsDB, globals, this.metrics, config);
|
|
38
|
+
if (simulatorFactory) {
|
|
39
|
+
this.simulator = simulatorFactory(merkleTree, contractsDB, globals, this.metrics, config);
|
|
40
|
+
} else {
|
|
41
|
+
this.simulator = new MeasuredPublicTxSimulator(merkleTree, contractsDB, globals, this.metrics, config);
|
|
42
|
+
}
|
|
34
43
|
}
|
|
35
|
-
static async create(worldStateService, globals = defaultGlobals(), metrics = new TestExecutorMetrics(),
|
|
44
|
+
static async create(worldStateService, globals = defaultGlobals(), metrics = new TestExecutorMetrics(), config = defaultConfig) {
|
|
36
45
|
const contractDataSource = new SimpleContractDataSource();
|
|
37
46
|
const merkleTree = await worldStateService.fork();
|
|
38
|
-
|
|
47
|
+
const simulatorFactory = (mt, cdb, g, m, c)=>new MeasuredPublicTxSimulator(mt, cdb, g, m, c);
|
|
48
|
+
return new PublicTxSimulationTester(merkleTree, contractDataSource, globals, metrics, simulatorFactory, config);
|
|
39
49
|
}
|
|
40
50
|
setMetricsPrefix(prefix) {
|
|
41
51
|
this.metricsPrefix = prefix;
|
|
@@ -46,19 +56,29 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
46
56
|
new Fr(420000 + this.txCount)
|
|
47
57
|
]
|
|
48
58
|
}
|
|
49
|
-
}) {
|
|
59
|
+
}, gasLimits) {
|
|
50
60
|
const setupCallRequests = await asyncMap(setupCalls, (call)=>this.#createPubicCallRequestForCall(call, call.sender ?? sender));
|
|
51
61
|
const appCallRequests = await asyncMap(appCalls, (call)=>this.#createPubicCallRequestForCall(call, call.sender ?? sender));
|
|
52
62
|
const teardownCallRequest = teardownCall ? await this.#createPubicCallRequestForCall(teardownCall, teardownCall.sender ?? sender) : undefined;
|
|
53
63
|
this.txCount++;
|
|
54
|
-
return createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer, /*gasUsedByPrivate*/ Gas
|
|
64
|
+
return createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer, /*gasUsedByPrivate*/ teardownCall ? new Gas(FALLBACK_TEARDOWN_DA_GAS_LIMIT + TX_DA_GAS_OVERHEAD, FALLBACK_TEARDOWN_L2_GAS_LIMIT + PUBLIC_TX_L2_GAS_OVERHEAD) : new Gas(TX_DA_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD), defaultGlobals(), gasLimits);
|
|
55
65
|
}
|
|
56
|
-
async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = sender, /* need some unique first nullifier for note-nonce computations */ privateInsertions, txLabel = 'unlabeledTx') {
|
|
57
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
66
|
+
async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = sender, /* need some unique first nullifier for note-nonce computations */ privateInsertions, txLabel = 'unlabeledTx', gasLimits) {
|
|
67
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
58
68
|
await this.setFeePayerBalance(feePayer);
|
|
59
69
|
const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
|
|
60
70
|
const fullTxLabel = this.metricsPrefix ? `${this.metricsPrefix}/${txLabelWithCount}` : txLabelWithCount;
|
|
71
|
+
if (!this.simulator) {
|
|
72
|
+
throw new Error('No simulator configured. Pass a simulatorFactory to the constructor or use PublicTxSimulationTester.create()');
|
|
73
|
+
}
|
|
61
74
|
const avmResult = await this.simulator.simulate(tx, fullTxLabel);
|
|
75
|
+
await this.#recordBytecodeSizes(fullTxLabel, [
|
|
76
|
+
...setupCalls,
|
|
77
|
+
...appCalls,
|
|
78
|
+
...teardownCall ? [
|
|
79
|
+
teardownCall
|
|
80
|
+
] : []
|
|
81
|
+
]);
|
|
62
82
|
// Something like this is often useful for debugging:
|
|
63
83
|
//if (avmResult.revertReason) {
|
|
64
84
|
// // resolve / enrich revert reason
|
|
@@ -76,8 +96,8 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
76
96
|
*
|
|
77
97
|
* This wrapper around simulation allows for easy labeling of a TX
|
|
78
98
|
* which is especially useful when reporting benchmarks or metrics.
|
|
79
|
-
*/ async simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions) {
|
|
80
|
-
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel);
|
|
99
|
+
*/ async simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits) {
|
|
100
|
+
return await this.simulateTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, txLabel, gasLimits);
|
|
81
101
|
}
|
|
82
102
|
/**
|
|
83
103
|
* Execute a transaction and return the result.
|
|
@@ -85,34 +105,81 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
85
105
|
* This function can be (it is) overridden by a subclass (AvmProvingTester)
|
|
86
106
|
* to do more work (like prove and verify) while still reusing existing
|
|
87
107
|
* test fixtures (like amm_test). That is why it is not named "simulate*".
|
|
88
|
-
*/ async executeTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions) {
|
|
89
|
-
return await this.simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
108
|
+
*/ async executeTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits) {
|
|
109
|
+
return await this.simulateTxWithLabel(txLabel, sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
90
110
|
}
|
|
91
111
|
prettyPrintMetrics() {
|
|
92
112
|
this.metrics.prettyPrint();
|
|
93
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Cancel the current simulation if one is in progress.
|
|
116
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
117
|
+
* Safe to call even if no simulation is in progress.
|
|
118
|
+
*
|
|
119
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
120
|
+
*/ async cancel(waitTimeoutMs) {
|
|
121
|
+
await this.simulator.cancel?.(waitTimeoutMs);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
125
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
126
|
+
*/ getSimulator() {
|
|
127
|
+
return this.simulator;
|
|
128
|
+
}
|
|
94
129
|
async #createPubicCallRequestForCall(call, sender) {
|
|
95
130
|
const address = call.address;
|
|
96
131
|
const contractArtifact = call.contractArtifact || await this.contractDataSource.getContractArtifact(address);
|
|
97
132
|
if (!contractArtifact) {
|
|
98
133
|
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
99
134
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
135
|
+
let calldata = [];
|
|
136
|
+
if (!call.fnName) {
|
|
137
|
+
this.logger.debug(`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`);
|
|
138
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
139
|
+
try {
|
|
140
|
+
calldata = call.args.map((arg)=>new Fr(arg));
|
|
141
|
+
} catch (error) {
|
|
142
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
147
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact);
|
|
148
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
149
|
+
calldata = [
|
|
150
|
+
fnSelector.toField(),
|
|
151
|
+
...encodedArgs
|
|
152
|
+
];
|
|
153
|
+
}
|
|
107
154
|
const isStaticCall = call.isStaticCall ?? false;
|
|
108
155
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
109
156
|
return new PublicCallRequestWithCalldata(request, calldata);
|
|
110
157
|
}
|
|
158
|
+
// WARNING: Deduplicates by artifact name, so two different artifacts with the same name
|
|
159
|
+
// in a single tx would only record the first one's bytecode size.
|
|
160
|
+
async #recordBytecodeSizes(txLabel, calls) {
|
|
161
|
+
const seenArtifactNames = new Set();
|
|
162
|
+
for (const call of calls){
|
|
163
|
+
const artifact = await this.contractDataSource.getContractArtifact(call.address);
|
|
164
|
+
if (!artifact || seenArtifactNames.has(artifact.name)) {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
seenArtifactNames.add(artifact.name);
|
|
168
|
+
const instance = await this.contractDataSource.getContract(call.address);
|
|
169
|
+
if (!instance) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const contractClass = await this.contractDataSource.getContractClass(instance.currentContractClassId);
|
|
173
|
+
if (contractClass) {
|
|
174
|
+
this.metrics.recordBytecodeSize(txLabel, artifact.name, contractClass.packedBytecode.length);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
111
178
|
}
|
|
112
179
|
export function defaultGlobals() {
|
|
113
180
|
const globals = GlobalVariables.empty();
|
|
114
181
|
globals.timestamp = DEFAULT_TIMESTAMP;
|
|
115
182
|
globals.gasFees = DEFAULT_GAS_FEES; // apply some nonzero default gas fees
|
|
116
|
-
globals.blockNumber = DEFAULT_BLOCK_NUMBER;
|
|
183
|
+
globals.blockNumber = BlockNumber(DEFAULT_BLOCK_NUMBER);
|
|
117
184
|
return globals;
|
|
118
185
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import type { ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
4
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
5
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
@@ -21,15 +22,15 @@ export declare class SimpleContractDataSource implements ContractDataSource {
|
|
|
21
22
|
*/
|
|
22
23
|
addNewContract(contractArtifact: ContractArtifact, contractClass: ContractClassPublic, contractInstance: ContractInstanceWithAddress): Promise<void>;
|
|
23
24
|
addContractArtifact(classId: Fr, artifact: ContractArtifact): Promise<void>;
|
|
24
|
-
getBlockNumber(): Promise<
|
|
25
|
+
getBlockNumber(): Promise<BlockNumber>;
|
|
25
26
|
getContractClass(id: Fr): Promise<ContractClassPublic | undefined>;
|
|
26
27
|
getBytecodeCommitment(_id: Fr): Promise<Fr | undefined>;
|
|
27
28
|
getContract(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
|
|
28
29
|
getContractClassIds(): Promise<Fr[]>;
|
|
29
30
|
getContractArtifact(address: AztecAddress): Promise<ContractArtifact | undefined>;
|
|
30
|
-
getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string>;
|
|
31
|
+
getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string | undefined>;
|
|
31
32
|
registerContractFunctionSignatures(_signatures: string[]): Promise<void>;
|
|
32
33
|
addContractClass(contractClass: ContractClassPublic): Promise<void>;
|
|
33
34
|
addContractInstance(contractInstance: ContractInstanceWithAddress): Promise<void>;
|
|
34
35
|
}
|
|
35
|
-
//# sourceMappingURL=
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlX2NvbnRyYWN0X2RhdGFfc291cmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHVibGljL2ZpeHR1cmVzL3NpbXBsZV9jb250cmFjdF9kYXRhX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSW5IOzs7Ozs7R0FNRztBQUNILHFCQUFhLHdCQUF5QixZQUFXLGtCQUFrQjtJQUMxRCxNQUFNLHlDQUErQztJQUc1RCxPQUFPLENBQUMsZUFBZSxDQUErQztJQUV0RSxPQUFPLENBQUMsaUJBQWlCLENBQXVEO0lBRWhGLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBNEM7SUFFckUsT0FBTyxDQUFDLGlCQUFpQixDQUFrQztJQUkzRDs7O09BR0c7SUFDRyxjQUFjLENBQ2xCLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxhQUFhLEVBQUUsbUJBQW1CLEVBQ2xDLGdCQUFnQixFQUFFLDJCQUEyQixpQkFLOUM7SUFFSyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsaUJBY2hFO0lBSUQsY0FBYyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFckM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsQ0FFakU7SUFFRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBRXREO0lBRUQsV0FBVyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQyxDQUVuRjtJQUVELG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUVuQztJQUVLLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxDQVN0RjtJQUVLLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBYXpHO0lBRUQsa0NBQWtDLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdkU7SUFFRCxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUdsRTtJQUVELG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FHaEY7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple_contract_data_source.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/simple_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"simple_contract_data_source.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/simple_contract_data_source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAInH;;;;;;GAMG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IAC1D,MAAM,yCAA+C;IAG5D,OAAO,CAAC,eAAe,CAA+C;IAEtE,OAAO,CAAC,iBAAiB,CAAuD;IAEhF,OAAO,CAAC,iBAAiB,CAA4C;IAErE,OAAO,CAAC,iBAAiB,CAAkC;IAI3D;;;OAGG;IACG,cAAc,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,mBAAmB,EAClC,gBAAgB,EAAE,2BAA2B,iBAK9C;IAEK,mBAAmB,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,iBAchE;IAID,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAErC;IAED,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAEjE;IAED,qBAAqB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAEtD;IAED,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAEnF;IAED,mBAAmB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnC;IAEK,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAStF;IAEK,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAazG;IAED,kCAAkC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;IAED,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;IAED,mBAAmB,CAAC,gBAAgB,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { getFunctionSelector } from '../avm/
|
|
2
|
+
import { getFunctionSelector } from '../avm/testing/utils.js';
|
|
3
3
|
/**
|
|
4
4
|
* This class is used during public/avm testing to function as a database of
|
|
5
5
|
* contract contract classes and instances. Tests can populate it with classes
|
|
@@ -70,14 +70,14 @@ import { getFunctionSelector } from '../avm/fixtures/utils.js';
|
|
|
70
70
|
async getDebugFunctionName(address, selector) {
|
|
71
71
|
const contractInstance = await this.getContract(address);
|
|
72
72
|
if (!contractInstance) {
|
|
73
|
-
this.logger.warn(`Couldn't get fn name for debugging. Contract not in tester's ContractDataSource
|
|
74
|
-
return
|
|
73
|
+
this.logger.warn(`Couldn't get fn name for debugging. Contract not in tester's ContractDataSource.`);
|
|
74
|
+
return undefined;
|
|
75
75
|
}
|
|
76
76
|
const key = `${contractInstance.currentContractClassId.toString()}:${selector.toString()}`;
|
|
77
77
|
const fnName = this.debugFunctionName.get(key);
|
|
78
78
|
if (!fnName) {
|
|
79
|
-
this.logger.warn(`Couldn't get fn name for debugging
|
|
80
|
-
return
|
|
79
|
+
this.logger.warn(`Couldn't get fn name for debugging...`);
|
|
80
|
+
return undefined;
|
|
81
81
|
}
|
|
82
82
|
return fnName;
|
|
83
83
|
}
|
|
@@ -3,6 +3,10 @@ import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
5
|
import { PublicTxSimulationTester } from './public_tx_simulation_tester.js';
|
|
6
|
-
export
|
|
6
|
+
export type TokenTestOptions = {
|
|
7
|
+
/** Skip return value assertions in balance checks (useful for benchmarking with collectCallMetadata=false) */
|
|
8
|
+
skipReturnValueAssertions?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function tokenTest(tester: PublicTxSimulationTester, logger: Logger, tokenArtifact: ContractArtifact, expectToBeTrue: (x: boolean) => void, options?: TokenTestOptions): Promise<void>;
|
|
7
11
|
export declare function setUpToken(tester: PublicTxSimulationTester, tokenArtifact: ContractArtifact, admin: AztecAddress, expectToBeTrue: (x: boolean) => void, seed?: number): Promise<ContractInstanceWithAddress>;
|
|
8
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5fdGVzdC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy90b2tlbl90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFNUUsTUFBTSxNQUFNLGdCQUFnQixHQUFHO0lBQzdCLDhHQUE4RztJQUM5Ryx5QkFBeUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUNyQyxDQUFDO0FBRUYsd0JBQXNCLFNBQVMsQ0FDN0IsTUFBTSxFQUFFLHdCQUF3QixFQUNoQyxNQUFNLEVBQUUsTUFBTSxFQUNkLGFBQWEsRUFBRSxnQkFBZ0IsRUFDL0IsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQ3BDLE9BQU8sR0FBRSxnQkFBcUIsaUJBK0QvQjtBQUVELHdCQUFzQixVQUFVLENBQzlCLE1BQU0sRUFBRSx3QkFBd0IsRUFDaEMsYUFBYSxFQUFFLGdCQUFnQixFQUMvQixLQUFLLEVBQUUsWUFBWSxFQUNuQixjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLElBQUksRUFDcEMsSUFBSSxTQUFJLHdDQTBCVCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_test.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/token_test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,wBAAsB,SAAS,CAC7B,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,gBAAgB,EAC/B,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,iBA+
|
|
1
|
+
{"version":3,"file":"token_test.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/token_test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8GAA8G;IAC9G,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,wBAAwB,EAChC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,gBAAgB,EAC/B,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EACpC,OAAO,GAAE,gBAAqB,iBA+D/B;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,wBAAwB,EAChC,aAAa,EAAE,gBAAgB,EAC/B,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EACpC,IAAI,SAAI,wCA0BT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { Timer } from '@aztec/foundation/timer';
|
|
3
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
-
export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue) {
|
|
4
|
+
export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue, options = {}) {
|
|
5
5
|
const timer = new Timer();
|
|
6
6
|
const admin = AztecAddress.fromNumber(42);
|
|
7
7
|
const sender = AztecAddress.fromNumber(111);
|
|
@@ -20,7 +20,7 @@ export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue) {
|
|
|
20
20
|
}
|
|
21
21
|
]);
|
|
22
22
|
expectToBeTrue(mintResult.revertCode.isOK());
|
|
23
|
-
await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue);
|
|
23
|
+
await checkBalance(tester, token, sender, sender, mintAmount, expectToBeTrue, options);
|
|
24
24
|
const authwitNonce = new Fr(0);
|
|
25
25
|
const transferAmount = 50n;
|
|
26
26
|
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
@@ -37,8 +37,8 @@ export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue) {
|
|
|
37
37
|
}
|
|
38
38
|
]);
|
|
39
39
|
expectToBeTrue(transferResult.revertCode.isOK());
|
|
40
|
-
await checkBalance(tester, token, sender,
|
|
41
|
-
await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue);
|
|
40
|
+
await checkBalance(tester, token, sender, sender, mintAmount - transferAmount, expectToBeTrue, options);
|
|
41
|
+
await checkBalance(tester, token, sender, receiver, transferAmount, expectToBeTrue, options);
|
|
42
42
|
// EXECUTE! This means that if using AvmProvingTester subclass, it will PROVE the transaction!
|
|
43
43
|
const burnResult = await tester.executeTxWithLabel(/*txLabel=*/ 'Token/burn_public', /*sender=*/ receiver, /*setupCalls=*/ [], /*appCalls=*/ [
|
|
44
44
|
{
|
|
@@ -52,7 +52,7 @@ export async function tokenTest(tester, logger, tokenArtifact, expectToBeTrue) {
|
|
|
52
52
|
}
|
|
53
53
|
]);
|
|
54
54
|
expectToBeTrue(burnResult.revertCode.isOK());
|
|
55
|
-
await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue);
|
|
55
|
+
await checkBalance(tester, token, sender, receiver, 0n, expectToBeTrue, options);
|
|
56
56
|
logger.info(`TokenContract test took ${timer.ms()}ms\n`);
|
|
57
57
|
}
|
|
58
58
|
export async function setUpToken(tester, tokenArtifact, admin, expectToBeTrue, seed = 0) {
|
|
@@ -74,7 +74,7 @@ export async function setUpToken(tester, tokenArtifact, admin, expectToBeTrue, s
|
|
|
74
74
|
expectToBeTrue(result.revertCode.isOK());
|
|
75
75
|
return token;
|
|
76
76
|
}
|
|
77
|
-
async function checkBalance(tester, token, sender, account, expectedBalance, expectToBeTrue) {
|
|
77
|
+
async function checkBalance(tester, token, sender, account, expectedBalance, expectToBeTrue, options = {}) {
|
|
78
78
|
// Strictly simulate this! No need to "execute" (aka prove if using AvmProvingTester subclass).
|
|
79
79
|
const balResult = await tester.simulateTxWithLabel(/*txLabel=*/ 'Token/balance_of_public', sender, /*setupCalls=*/ [], /*appCalls=*/ [
|
|
80
80
|
{
|
|
@@ -87,9 +87,10 @@ async function checkBalance(tester, token, sender, account, expectedBalance, exp
|
|
|
87
87
|
}
|
|
88
88
|
]);
|
|
89
89
|
expectToBeTrue(balResult.revertCode.isOK());
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
if (!options.skipReturnValueAssertions) {
|
|
91
|
+
// should be 1 call with 1 return value that is expectedBalance
|
|
92
|
+
const appLogicReturnValues = balResult.getAppLogicReturnValues();
|
|
93
|
+
expectToBeTrue(appLogicReturnValues.length === 1);
|
|
94
|
+
expectToBeTrue(appLogicReturnValues[0].values?.[0]?.toBigInt() === expectedBalance);
|
|
95
|
+
}
|
|
95
96
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
4
4
|
import { Gas } from '@aztec/stdlib/gas';
|
|
@@ -19,8 +19,8 @@ export type TestPrivateInsertions = {
|
|
|
19
19
|
/**
|
|
20
20
|
* Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
|
|
21
21
|
*/
|
|
22
|
-
export declare function createTxForPublicCalls(privateInsertions: TestPrivateInsertions, setupCallRequests: PublicCallRequestWithCalldata[], appCallRequests: PublicCallRequestWithCalldata[], teardownCallRequest?: PublicCallRequestWithCalldata, feePayer?: AztecAddress, gasUsedByPrivate?: Gas, globals?: GlobalVariables): Promise<Tx>;
|
|
22
|
+
export declare function createTxForPublicCalls(privateInsertions: TestPrivateInsertions, setupCallRequests: PublicCallRequestWithCalldata[], appCallRequests: PublicCallRequestWithCalldata[], teardownCallRequest?: PublicCallRequestWithCalldata, feePayer?: AztecAddress, gasUsedByPrivate?: Gas, globals?: GlobalVariables, gasLimits?: Gas): Promise<Tx>;
|
|
23
23
|
export declare function createTxForPrivateOnly(feePayer?: AztecAddress, gasUsedByPrivate?: Gas): Promise<Tx>;
|
|
24
24
|
export declare function addNewContractClassToTx(tx: Tx, contractClass: ContractClassPublic, skipNullifierInsertion?: boolean): Promise<void>;
|
|
25
25
|
export declare function addNewContractInstanceToTx(tx: Tx, contractInstance: ContractInstanceWithAddress, skipNullifierInsertion?: boolean): Promise<void>;
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZml4dHVyZXMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFHTCxHQUFHLEVBR0osTUFBTSxtQkFBbUIsQ0FBQztBQVUzQixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FLE9BQU8sRUFFTCxlQUFlLEVBRWYsNkJBQTZCLEVBQzdCLEVBQUUsRUFHSCxNQUFNLGtCQUFrQixDQUFDO0FBSTFCLE1BQU0sTUFBTSxxQkFBcUIsR0FBRztJQUNsQyxVQUFVLENBQUMsRUFBRTtRQUNYLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUM7S0FDcEMsQ0FBQztJQUNGLGFBQWEsQ0FBQyxFQUFFO1FBQ2QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbEIsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbEIsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztLQUNwQyxDQUFDO0NBQ0gsQ0FBQztBQUVGOztHQUVHO0FBQ0gsd0JBQXNCLHNCQUFzQixDQUMxQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFDeEMsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsRUFDbEQsZUFBZSxFQUFFLDZCQUE2QixFQUFFLEVBQ2hELG1CQUFtQixDQUFDLEVBQUUsNkJBQTZCLEVBQ25ELFFBQVEsZUFBc0IsRUFDOUIsZ0JBQWdCLEdBQUUsR0FBaUIsRUFDbkMsT0FBTyxHQUFFLGVBQXlDLEVBQ2xELFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FDZCxPQUFPLENBQUMsRUFBRSxDQUFDLENBOEZiO0FBRUQsd0JBQXNCLHNCQUFzQixDQUMxQyxRQUFRLGVBQXNCLEVBQzlCLGdCQUFnQixHQUFFLEdBQXFCLEdBQ3RDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0EwQmI7QUFFRCx3QkFBc0IsdUJBQXVCLENBQzNDLEVBQUUsRUFBRSxFQUFFLEVBQ04sYUFBYSxFQUFFLG1CQUFtQixFQUNsQyxzQkFBc0IsVUFBUSxpQkE2Qi9CO0FBRUQsd0JBQXNCLDBCQUEwQixDQUM5QyxFQUFFLEVBQUUsRUFBRSxFQUNOLGdCQUFnQixFQUFFLDJCQUEyQixFQUM3QyxzQkFBc0IsVUFBUSxpQkF5Qy9CIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/utils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAGL,GAAG,EAGJ,MAAM,mBAAmB,CAAC;AAU3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAEL,eAAe,EAEf,6BAA6B,EAC7B,EAAE,EAGH,MAAM,kBAAkB,CAAC;AAI1B,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;IACF,aAAa,CAAC,EAAE;QACd,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACpC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,qBAAqB,EACxC,iBAAiB,EAAE,6BAA6B,EAAE,EAClD,eAAe,EAAE,6BAA6B,EAAE,EAChD,mBAAmB,CAAC,EAAE,6BAA6B,EACnD,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAiB,EACnC,OAAO,GAAE,eAAyC,EAClD,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,EAAE,CAAC,CA8Fb;AAED,wBAAsB,sBAAsB,CAC1C,QAAQ,eAAsB,EAC9B,gBAAgB,GAAE,GAAqB,GACtC,OAAO,CAAC,EAAE,CAAC,CA0Bb;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,EAAE,EACN,aAAa,EAAE,mBAAmB,EAClC,sBAAsB,UAAQ,iBA6B/B;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,gBAAgB,EAAE,2BAA2B,EAC7C,sBAAsB,UAAQ,iBAyC/B"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE, CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS,
|
|
1
|
+
import { CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE, CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_REGISTRY_CONTRACT_ADDRESS, MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
-
import { Fr } from '@aztec/foundation/
|
|
3
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG } from '@aztec/protocol-contracts';
|
|
5
5
|
import { bufferAsFields } from '@aztec/stdlib/abi';
|
|
6
6
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
7
|
+
import { FALLBACK_TEARDOWN_DA_GAS_LIMIT, FALLBACK_TEARDOWN_L2_GAS_LIMIT, Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
8
8
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
9
9
|
import { LogHash, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, countAccumulatedItems } from '@aztec/stdlib/kernel';
|
|
10
10
|
import { ContractClassLogFields, PrivateLog } from '@aztec/stdlib/logs';
|
|
@@ -13,10 +13,10 @@ import { BlockHeader, GlobalVariables, HashedValues, Tx, TxConstantData, TxConte
|
|
|
13
13
|
import { strict as assert } from 'assert';
|
|
14
14
|
/**
|
|
15
15
|
* Craft a carrier transaction for some public calls for simulation by PublicTxSimulator.
|
|
16
|
-
*/ export async function createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer = AztecAddress.zero(), gasUsedByPrivate = Gas.empty(), globals = GlobalVariables.empty()) {
|
|
16
|
+
*/ export async function createTxForPublicCalls(privateInsertions, setupCallRequests, appCallRequests, teardownCallRequest, feePayer = AztecAddress.zero(), gasUsedByPrivate = Gas.empty(), globals = GlobalVariables.empty(), gasLimits) {
|
|
17
17
|
assert(setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined, "Can't create public tx with no enqueued calls");
|
|
18
18
|
// use max limits
|
|
19
|
-
|
|
19
|
+
gasLimits = gasLimits ?? new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
20
20
|
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
21
21
|
// Non revertible private insertions
|
|
22
22
|
if (!privateInsertions.nonRevertible?.nullifiers?.length) {
|
|
@@ -69,14 +69,15 @@ import { strict as assert } from 'assert';
|
|
|
69
69
|
forPublic.publicTeardownCallRequest = teardownCallRequest.request;
|
|
70
70
|
}
|
|
71
71
|
const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
|
|
72
|
-
const teardownGasLimits = teardownCallRequest ? new Gas(
|
|
72
|
+
const teardownGasLimits = teardownCallRequest ? new Gas(FALLBACK_TEARDOWN_DA_GAS_LIMIT, FALLBACK_TEARDOWN_L2_GAS_LIMIT) : Gas.empty();
|
|
73
73
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
74
74
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
75
|
-
const header = BlockHeader.empty(
|
|
76
|
-
|
|
75
|
+
const header = BlockHeader.empty({
|
|
76
|
+
globalVariables: globals
|
|
77
|
+
});
|
|
77
78
|
const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
|
|
78
|
-
const
|
|
79
|
-
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer,
|
|
79
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
80
|
+
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, expirationTimestamp, forPublic);
|
|
80
81
|
const calldata = [
|
|
81
82
|
...setupCallRequests,
|
|
82
83
|
...appCallRequests,
|
|
@@ -93,14 +94,14 @@ import { strict as assert } from 'assert';
|
|
|
93
94
|
}
|
|
94
95
|
export async function createTxForPrivateOnly(feePayer = AztecAddress.zero(), gasUsedByPrivate = new Gas(10, 10)) {
|
|
95
96
|
// use max limits
|
|
96
|
-
const gasLimits = new Gas(
|
|
97
|
+
const gasLimits = new Gas(MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT, MAX_PROCESSABLE_L2_GAS);
|
|
97
98
|
const forRollup = PartialPrivateTailPublicInputsForRollup.empty();
|
|
98
99
|
const maxFeesPerGas = feePayer.isZero() ? GasFees.empty() : new GasFees(10, 10);
|
|
99
100
|
const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
|
|
100
101
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
101
102
|
const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
|
|
102
|
-
const
|
|
103
|
-
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer,
|
|
103
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
104
|
+
const txData = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsedByPrivate, feePayer, expirationTimestamp, /*forPublic=*/ undefined, forRollup);
|
|
104
105
|
return await Tx.create({
|
|
105
106
|
data: txData,
|
|
106
107
|
chonkProof: ChonkProof.empty(),
|
|
@@ -134,17 +135,15 @@ export async function addNewContractClassToTx(tx, contractClass, skipNullifierIn
|
|
|
134
135
|
tx.contractClassLogFields.push(logFields);
|
|
135
136
|
}
|
|
136
137
|
export async function addNewContractInstanceToTx(tx, contractInstance, skipNullifierInsertion = false) {
|
|
137
|
-
//
|
|
138
|
-
// is not broadcast in such private logs
|
|
138
|
+
// Only ivpk_m is broadcast as a point (x, y); the other five keys are hashes.
|
|
139
139
|
const publicKeysAsFields = [
|
|
140
|
-
contractInstance.publicKeys.
|
|
141
|
-
contractInstance.publicKeys.
|
|
142
|
-
contractInstance.publicKeys.
|
|
143
|
-
contractInstance.publicKeys.
|
|
144
|
-
contractInstance.publicKeys.
|
|
145
|
-
contractInstance.publicKeys.
|
|
146
|
-
contractInstance.publicKeys.
|
|
147
|
-
contractInstance.publicKeys.masterTaggingPublicKey.y
|
|
140
|
+
contractInstance.publicKeys.npkMHash,
|
|
141
|
+
contractInstance.publicKeys.ivpkM.x,
|
|
142
|
+
contractInstance.publicKeys.ivpkM.y,
|
|
143
|
+
contractInstance.publicKeys.ovpkMHash,
|
|
144
|
+
contractInstance.publicKeys.tpkMHash,
|
|
145
|
+
contractInstance.publicKeys.mspkMHash,
|
|
146
|
+
contractInstance.publicKeys.fbpkMHash
|
|
148
147
|
];
|
|
149
148
|
const logFields = [
|
|
150
149
|
CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG,
|
|
@@ -153,6 +152,7 @@ export async function addNewContractInstanceToTx(tx, contractInstance, skipNulli
|
|
|
153
152
|
new Fr(contractInstance.salt),
|
|
154
153
|
contractInstance.currentContractClassId,
|
|
155
154
|
contractInstance.initializationHash,
|
|
155
|
+
contractInstance.immutablesHash,
|
|
156
156
|
...publicKeysAsFields,
|
|
157
157
|
contractInstance.deployer.toField()
|
|
158
158
|
];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AvmTxHint, type PublicTxResult } from '@aztec/stdlib/avm';
|
|
2
|
+
import { type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
3
|
+
import { GlobalVariables, ProtocolContracts } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
5
|
+
import { BaseAvmSimulationTester } from '../avm/testing/base_avm_simulation_tester.js';
|
|
6
|
+
import { SimpleContractDataSource } from '../fixtures/simple_contract_data_source.js';
|
|
7
|
+
/**
|
|
8
|
+
* Request structure for fuzzer simulation communication from C++.
|
|
9
|
+
* Matches the C++ FuzzerSimulationRequest struct
|
|
10
|
+
*/
|
|
11
|
+
export declare class FuzzerSimulationRequest {
|
|
12
|
+
readonly wsDataDir: string;
|
|
13
|
+
readonly wsMapSizeKb: number;
|
|
14
|
+
readonly tx: AvmTxHint;
|
|
15
|
+
readonly globals: GlobalVariables;
|
|
16
|
+
readonly contractClasses: any[];
|
|
17
|
+
readonly contractInstances: [any, any][];
|
|
18
|
+
readonly publicDataWrites: any[];
|
|
19
|
+
readonly noteHashes: any[];
|
|
20
|
+
readonly protocolContracts: ProtocolContracts;
|
|
21
|
+
constructor(wsDataDir: string, wsMapSizeKb: number, tx: AvmTxHint, globals: GlobalVariables, contractClasses: any[], contractInstances: [any, any][], publicDataWrites: any[], noteHashes: any[], protocolContracts: ProtocolContracts);
|
|
22
|
+
static fromPlainObject(obj: any): FuzzerSimulationRequest;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A simulator class for the AVM fuzzer that extends BaseAvmSimulationTester.
|
|
26
|
+
* It provides methods for registering contracts from C++ msgpack data and simulating transactions.
|
|
27
|
+
* The simulation itself runs on the production C++ AVM simulator, so the fuzzer compares brillig
|
|
28
|
+
* execution against the real AVM rather than a TS reference.
|
|
29
|
+
*/
|
|
30
|
+
export declare class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
31
|
+
private simulator;
|
|
32
|
+
constructor(merkleTrees: MerkleTreeWriteOperations, contractDataSource: SimpleContractDataSource, globals: GlobalVariables);
|
|
33
|
+
/**
|
|
34
|
+
* Static factory method to create an AvmFuzzerSimulator.
|
|
35
|
+
*/
|
|
36
|
+
static create(worldStateService: NativeWorldStateService, globals: GlobalVariables): Promise<AvmFuzzerSimulator>;
|
|
37
|
+
/**
|
|
38
|
+
* Simulate a transaction from a C++ AvmTxHint.
|
|
39
|
+
*/
|
|
40
|
+
simulate(txHint: AvmTxHint): Promise<PublicTxResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Add a contract class from C++ raw msgpack data.
|
|
43
|
+
*/
|
|
44
|
+
addContractClassFromCpp(rawClass: any): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Add a contract instance from C++ raw msgpack data.
|
|
47
|
+
* This also inserts the contract address nullifier into the nullifier tree,
|
|
48
|
+
* unless the address is a protocol canonical address (1-11).
|
|
49
|
+
*/
|
|
50
|
+
addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Apply public data tree writes from C++ raw msgpack data.
|
|
53
|
+
* This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
|
|
54
|
+
*/
|
|
55
|
+
applyPublicDataWrites(rawWrites: any[]): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Apply note hashes from C++ raw msgpack data.
|
|
58
|
+
* This is used to pre-populate the note hash tree before simulation.
|
|
59
|
+
*/
|
|
60
|
+
applyNoteHashes(rawNoteHashes: any[]): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2Z1enplcl9zaW11bGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wdWJsaWMvZnV6emluZy9hdm1fZnV6emVyX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFZbkUsT0FBTyxFQUFnQixLQUFLLHlCQUF5QixFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sRUFFTCxlQUFlLEVBRWYsaUJBQWlCLEVBS2xCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUl0Rjs7O0dBR0c7QUFDSCxxQkFBYSx1QkFBdUI7YUFFaEIsU0FBUyxFQUFFLE1BQU07YUFDakIsV0FBVyxFQUFFLE1BQU07YUFDbkIsRUFBRSxFQUFFLFNBQVM7YUFDYixPQUFPLEVBQUUsZUFBZTthQUN4QixlQUFlLEVBQUUsR0FBRyxFQUFFO2FBQ3RCLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQy9CLGdCQUFnQixFQUFFLEdBQUcsRUFBRTthQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFO2FBQ2pCLGlCQUFpQixFQUFFLGlCQUFpQjtJQVR0RCxZQUNrQixTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsTUFBTSxFQUNuQixFQUFFLEVBQUUsU0FBUyxFQUNiLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFDdEIsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFDL0IsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEVBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFDakIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ2xEO0lBRUosTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLHVCQUF1QixDQWV4RDtDQUNGO0FBbUhEOzs7OztHQUtHO0FBQ0gscUJBQWEsa0JBQW1CLFNBQVEsdUJBQXVCO0lBQzdELE9BQU8sQ0FBQyxTQUFTLENBQW9CO0lBRXJDLFlBQ0UsV0FBVyxFQUFFLHlCQUF5QixFQUN0QyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFjekI7SUFFRDs7T0FFRztJQUNILE9BQW9CLE1BQU0sQ0FDeEIsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQzFDLE9BQU8sRUFBRSxlQUFlLEdBQ3ZCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUk3QjtJQUVEOztPQUVHO0lBQ1UsUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQVVoRTtJQUVEOztPQUVHO0lBQ1UsdUJBQXVCLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBR2pFO0lBRUQ7Ozs7T0FJRztJQUNVLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBTXhGO0lBRUQ7OztPQUdHO0lBQ1UscUJBQXFCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLbEU7SUFFRDs7O09BR0c7SUFDVSxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJaEU7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avm_fuzzer_simulator.d.ts","sourceRoot":"","sources":["../../../src/public/fuzzing/avm_fuzzer_simulator.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnE,OAAO,EAAgB,KAAK,yBAAyB,EAAsB,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAEL,eAAe,EAEf,iBAAiB,EAKlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAItF;;;GAGG;AACH,qBAAa,uBAAuB;aAEhB,SAAS,EAAE,MAAM;aACjB,WAAW,EAAE,MAAM;aACnB,EAAE,EAAE,SAAS;aACb,OAAO,EAAE,eAAe;aACxB,eAAe,EAAE,GAAG,EAAE;aACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;aAC/B,gBAAgB,EAAE,GAAG,EAAE;aACvB,UAAU,EAAE,GAAG,EAAE;aACjB,iBAAiB,EAAE,iBAAiB;IATtD,YACkB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,GAAG,EAAE,EACtB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC/B,gBAAgB,EAAE,GAAG,EAAE,EACvB,UAAU,EAAE,GAAG,EAAE,EACjB,iBAAiB,EAAE,iBAAiB,EAClD;IAEJ,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,uBAAuB,CAexD;CACF;AAmHD;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,uBAAuB;IAC7D,OAAO,CAAC,SAAS,CAAoB;IAErC,YACE,WAAW,EAAE,yBAAyB,EACtC,kBAAkB,EAAE,wBAAwB,EAC5C,OAAO,EAAE,eAAe,EAczB;IAED;;OAEG;IACH,OAAoB,MAAM,CACxB,iBAAiB,EAAE,uBAAuB,EAC1C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAI7B;IAED;;OAEG;IACU,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAUhE;IAED;;OAEG;IACU,uBAAuB,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;IAED;;;;OAIG;IACU,0BAA0B,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxF;IAED;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;IAED;;;OAGG;IACU,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;CACF"}
|