@aztec/simulator 0.76.4 → 0.77.0-testnet-ignition.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dest/client.d.ts +5 -0
- package/dest/client.d.ts.map +1 -0
- package/dest/client.js +3 -0
- package/dest/{public → common}/db_interfaces.d.ts +8 -33
- package/dest/common/db_interfaces.d.ts.map +1 -0
- package/dest/common/db_interfaces.js +1 -0
- package/dest/common/debug_fn_name.d.ts +3 -2
- package/dest/common/debug_fn_name.d.ts.map +1 -1
- package/dest/common/debug_fn_name.js +2 -5
- package/dest/common/errors.d.ts +4 -4
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +30 -39
- package/dest/common/index.d.ts +2 -1
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +2 -2
- package/dest/common/message_load_oracle_inputs.d.ts +2 -2
- package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/common/message_load_oracle_inputs.js +8 -8
- package/dest/common/stats/index.d.ts.map +1 -0
- package/dest/{stats → common/stats}/stats.d.ts +2 -2
- package/dest/common/stats/stats.d.ts.map +1 -0
- package/dest/common/stats/stats.js +10 -0
- package/dest/{acvm → private/acvm}/acvm.d.ts +4 -4
- package/dest/private/acvm/acvm.d.ts.map +1 -0
- package/dest/private/acvm/acvm.js +70 -0
- package/dest/{acvm → private/acvm}/acvm_types.d.ts +1 -1
- package/dest/private/acvm/acvm_types.d.ts.map +1 -0
- package/dest/private/acvm/acvm_types.js +3 -0
- package/dest/{acvm → private/acvm}/deserialize.d.ts +2 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -0
- package/dest/private/acvm/deserialize.js +42 -0
- package/dest/private/acvm/index.d.ts.map +1 -0
- package/dest/private/acvm/index.js +5 -0
- package/dest/{acvm → private/acvm}/oracle/index.d.ts +1 -1
- package/dest/private/acvm/oracle/index.d.ts.map +1 -0
- package/dest/private/acvm/oracle/index.js +2 -0
- package/dest/{acvm → private/acvm}/oracle/oracle.d.ts +4 -3
- package/dest/private/acvm/oracle/oracle.d.ts.map +1 -0
- package/dest/private/acvm/oracle/oracle.js +263 -0
- package/dest/{acvm → private/acvm}/oracle/typed_oracle.d.ts +12 -6
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -0
- package/dest/private/acvm/oracle/typed_oracle.js +132 -0
- package/dest/{acvm → private/acvm}/serialize.d.ts +7 -3
- package/dest/private/acvm/serialize.d.ts.map +1 -0
- package/dest/private/acvm/serialize.js +46 -0
- package/dest/{client → private}/client_execution_context.d.ts +20 -17
- package/dest/private/client_execution_context.d.ts.map +1 -0
- package/dest/private/client_execution_context.js +378 -0
- package/dest/{client → private}/db_oracle.d.ts +19 -7
- package/dest/private/db_oracle.d.ts.map +1 -0
- package/dest/private/db_oracle.js +14 -0
- package/dest/{client → private}/execution_note_cache.d.ts +2 -2
- package/dest/private/execution_note_cache.d.ts.map +1 -0
- package/dest/private/execution_note_cache.js +180 -0
- package/dest/{common → private}/hashed_values_cache.d.ts +2 -2
- package/dest/private/hashed_values_cache.d.ts.map +1 -0
- package/dest/private/hashed_values_cache.js +46 -0
- package/dest/private/index.d.ts +13 -0
- package/dest/private/index.d.ts.map +1 -0
- package/dest/private/index.js +12 -0
- package/dest/{client → private}/pick_notes.d.ts +1 -1
- package/dest/private/pick_notes.d.ts.map +1 -0
- package/dest/private/pick_notes.js +51 -0
- package/dest/private/private_execution.d.ts +24 -0
- package/dest/private/private_execution.d.ts.map +1 -0
- package/dest/private/private_execution.js +90 -0
- package/dest/{providers → private/providers}/acvm_native.d.ts +5 -5
- package/dest/private/providers/acvm_native.d.ts.map +1 -0
- package/dest/private/providers/acvm_native.js +139 -0
- package/dest/{providers → private/providers}/acvm_wasm.d.ts +4 -4
- package/dest/private/providers/acvm_wasm.d.ts.map +1 -0
- package/dest/private/providers/acvm_wasm.js +62 -0
- package/dest/{providers → private/providers}/acvm_wasm_with_blobs.d.ts +5 -5
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -0
- package/dest/{providers → private/providers}/acvm_wasm_with_blobs.js +3 -6
- package/dest/{providers → private/providers}/factory.d.ts +1 -1
- package/dest/private/providers/factory.d.ts.map +1 -0
- package/dest/private/providers/factory.js +27 -0
- package/dest/{common → private/providers}/simulation_provider.d.ts +5 -5
- package/dest/private/providers/simulation_provider.d.ts.map +1 -0
- package/dest/private/providers/simulation_provider.js +24 -0
- package/dest/private/simulator.d.ts +36 -0
- package/dest/private/simulator.d.ts.map +1 -0
- package/dest/private/simulator.js +78 -0
- package/dest/{client → private}/unconstrained_execution.d.ts +5 -5
- package/dest/private/unconstrained_execution.d.ts.map +1 -0
- package/dest/private/unconstrained_execution.js +27 -0
- package/dest/{client → private}/view_data_oracle.d.ts +15 -7
- package/dest/private/view_data_oracle.d.ts.map +1 -0
- package/dest/private/view_data_oracle.js +260 -0
- package/dest/{avm → public/avm}/avm_context.d.ts +7 -5
- package/dest/public/avm/avm_context.d.ts.map +1 -0
- package/dest/public/avm/avm_context.js +44 -0
- package/dest/{avm → public/avm}/avm_contract_call_result.d.ts +5 -5
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -0
- package/dest/public/avm/avm_contract_call_result.js +50 -0
- package/dest/{avm → public/avm}/avm_execution_environment.d.ts +2 -2
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -0
- package/dest/public/avm/avm_execution_environment.js +31 -0
- package/dest/public/avm/avm_gas.d.ts.map +1 -0
- package/dest/public/avm/avm_gas.js +202 -0
- package/dest/{avm → public/avm}/avm_machine_state.d.ts +2 -2
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -0
- package/dest/public/avm/avm_machine_state.js +106 -0
- package/dest/{avm → public/avm}/avm_memory_types.d.ts +2 -2
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -0
- package/dest/public/avm/avm_memory_types.js +340 -0
- package/dest/{avm → public/avm}/avm_simulator.d.ts +5 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -0
- package/dest/public/avm/avm_simulator.js +202 -0
- package/dest/public/avm/bytecode_utils.d.ts.map +1 -0
- package/dest/public/avm/bytecode_utils.js +17 -0
- package/dest/{avm → public/avm}/errors.d.ts +5 -4
- package/dest/public/avm/errors.d.ts.map +1 -0
- package/dest/public/avm/errors.js +179 -0
- package/dest/{avm → public/avm}/fixtures/avm_simulation_tester.d.ts +6 -6
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.js +76 -0
- package/dest/{avm → public/avm}/fixtures/base_avm_simulation_tester.d.ts +13 -12
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -0
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +83 -0
- package/dest/{avm → public/avm}/fixtures/index.d.ts +24 -7
- package/dest/public/avm/fixtures/index.d.ts.map +1 -0
- package/dest/public/avm/fixtures/index.js +175 -0
- package/dest/{avm → public/avm}/fixtures/simple_contract_data_source.d.ts +10 -6
- package/dest/public/avm/fixtures/simple_contract_data_source.d.ts.map +1 -0
- package/dest/public/avm/fixtures/simple_contract_data_source.js +74 -0
- package/dest/public/avm/index.d.ts +4 -0
- package/dest/public/avm/index.d.ts.map +1 -0
- package/dest/{avm/index.d.ts → public/avm/index.js} +1 -2
- package/dest/public/avm/journal/index.d.ts.map +1 -0
- package/dest/{avm → public/avm}/journal/journal.d.ts +51 -18
- package/dest/public/avm/journal/journal.d.ts.map +1 -0
- package/dest/public/avm/journal/journal.js +486 -0
- package/dest/{avm → public/avm}/journal/nullifiers.d.ts +8 -6
- package/dest/public/avm/journal/nullifiers.d.ts.map +1 -0
- package/dest/public/avm/journal/nullifiers.js +97 -0
- package/dest/{avm → public/avm}/journal/public_storage.d.ts +2 -2
- package/dest/public/avm/journal/public_storage.d.ts.map +1 -0
- package/dest/public/avm/journal/public_storage.js +145 -0
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -0
- package/dest/public/avm/opcodes/accrued_substate.js +252 -0
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -0
- package/dest/public/avm/opcodes/addressing_mode.js +74 -0
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -0
- package/dest/public/avm/opcodes/arithmetic.js +73 -0
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -0
- package/dest/public/avm/opcodes/bitwise.js +106 -0
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -0
- package/dest/public/avm/opcodes/comparators.js +43 -0
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -0
- package/dest/public/avm/opcodes/contract.js +66 -0
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -0
- package/dest/public/avm/opcodes/control_flow.js +105 -0
- package/dest/{avm → public/avm}/opcodes/conversion.d.ts +1 -1
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -0
- package/dest/public/avm/opcodes/conversion.js +69 -0
- package/dest/{avm → public/avm}/opcodes/ec_add.d.ts +1 -1
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -0
- package/dest/public/avm/opcodes/ec_add.js +84 -0
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -0
- package/dest/public/avm/opcodes/environment_getters.js +79 -0
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -0
- package/dest/public/avm/opcodes/external_calls.js +180 -0
- package/dest/{avm → public/avm}/opcodes/hashing.d.ts +1 -1
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -0
- package/dest/public/avm/opcodes/hashing.js +114 -0
- package/dest/public/avm/opcodes/index.d.ts.map +1 -0
- package/dest/{avm → public/avm}/opcodes/instruction.d.ts +2 -2
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction.js +91 -0
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -0
- package/dest/public/avm/opcodes/instruction_impl.js +30 -0
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -0
- package/dest/public/avm/opcodes/memory.js +253 -0
- package/dest/{avm → public/avm}/opcodes/misc.d.ts +1 -1
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -0
- package/dest/public/avm/opcodes/misc.js +48 -0
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -0
- package/dest/public/avm/opcodes/storage.js +66 -0
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -0
- package/dest/public/avm/serialization/buffer_cursor.js +99 -0
- package/dest/{avm → public/avm}/serialization/bytecode_serialization.d.ts +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/bytecode_serialization.js +328 -0
- package/dest/{avm → public/avm}/serialization/instruction_serialization.d.ts +1 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -0
- package/dest/public/avm/serialization/instruction_serialization.js +225 -0
- package/dest/{avm → public/avm}/test_utils.d.ts +6 -4
- package/dest/public/avm/test_utils.d.ts.map +1 -0
- package/dest/public/avm/test_utils.js +52 -0
- package/dest/public/bytecode_errors.js +1 -2
- package/dest/public/execution.d.ts +8 -2
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +4 -5
- package/dest/public/executor_metrics.js +16 -12
- package/dest/public/fixtures/index.js +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +15 -9
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +54 -53
- package/dest/public/fixtures/utils.d.ts +7 -11
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +92 -32
- package/dest/public/index.d.ts +5 -4
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +5 -5
- package/dest/public/public_db_sources.d.ts +82 -34
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +171 -196
- package/dest/public/{public_processor.d.ts → public_processor/public_processor.d.ts} +10 -8
- package/dest/public/public_processor/public_processor.d.ts.map +1 -0
- package/dest/public/public_processor/public_processor.js +379 -0
- package/dest/public/{public_processor_metrics.d.ts → public_processor/public_processor_metrics.d.ts} +3 -3
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -0
- package/dest/public/public_processor/public_processor_metrics.js +125 -0
- package/dest/public/{public_tx_context.d.ts → public_tx_simulator/public_tx_context.d.ts} +14 -8
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_context.js +320 -0
- package/dest/public/{public_tx_simulator.d.ts → public_tx_simulator/public_tx_simulator.d.ts} +10 -7
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -0
- package/dest/public/public_tx_simulator/public_tx_simulator.js +325 -0
- package/dest/public/side_effect_errors.js +1 -2
- package/dest/public/side_effect_trace.d.ts +16 -10
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +82 -149
- package/dest/public/side_effect_trace_interface.d.ts +9 -7
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/side_effect_trace_interface.js +1 -2
- package/dest/public/tx_contract_cache.d.ts +41 -0
- package/dest/public/tx_contract_cache.d.ts.map +1 -0
- package/dest/public/tx_contract_cache.js +49 -0
- package/dest/public/unique_class_ids.js +23 -28
- package/dest/public/utils.d.ts +2 -2
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +17 -12
- package/dest/server.d.ts +4 -4
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +3 -5
- package/dest/test/utils.d.ts +3 -2
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +9 -7
- package/package.json +19 -21
- package/src/client.ts +4 -0
- package/src/{public → common}/db_interfaces.ts +8 -40
- package/src/common/debug_fn_name.ts +4 -2
- package/src/common/errors.ts +5 -5
- package/src/common/index.ts +2 -1
- package/src/common/message_load_oracle_inputs.ts +2 -2
- package/src/common/stats/index.ts +1 -0
- package/src/{stats → common/stats}/stats.ts +2 -2
- package/src/{acvm → private/acvm}/acvm.ts +5 -5
- package/src/{acvm → private/acvm}/acvm_types.ts +1 -1
- package/src/{acvm → private/acvm}/deserialize.ts +2 -2
- package/src/{acvm → private/acvm}/oracle/index.ts +1 -1
- package/src/{acvm → private/acvm}/oracle/oracle.ts +22 -12
- package/src/{acvm → private/acvm}/oracle/typed_oracle.ts +50 -55
- package/src/{acvm → private/acvm}/serialize.ts +10 -3
- package/src/{client → private}/client_execution_context.ts +54 -37
- package/src/{client → private}/db_oracle.ts +20 -20
- package/src/{client → private}/execution_note_cache.ts +3 -3
- package/src/{common → private}/hashed_values_cache.ts +2 -2
- package/src/private/index.ts +12 -0
- package/src/{client → private}/pick_notes.ts +1 -1
- package/src/{client → private}/private_execution.ts +46 -14
- package/src/{providers → private/providers}/acvm_native.ts +6 -6
- package/src/{providers → private/providers}/acvm_wasm.ts +4 -4
- package/src/{providers → private/providers}/acvm_wasm_with_blobs.ts +5 -5
- package/src/{providers → private/providers}/factory.ts +1 -1
- package/src/{common → private/providers}/simulation_provider.ts +5 -5
- package/src/{client → private}/simulator.ts +31 -123
- package/src/{client → private}/unconstrained_execution.ts +7 -7
- package/src/{client → private}/view_data_oracle.ts +25 -28
- package/src/{avm → public/avm}/avm_context.ts +12 -7
- package/src/{avm → public/avm}/avm_contract_call_result.ts +6 -6
- package/src/{avm → public/avm}/avm_execution_environment.ts +2 -2
- package/src/{avm → public/avm}/avm_gas.ts +1 -3
- package/src/{avm → public/avm}/avm_machine_state.ts +2 -2
- package/src/{avm → public/avm}/avm_memory_types.ts +4 -4
- package/src/{avm → public/avm}/avm_simulator.ts +12 -6
- package/src/{avm → public/avm}/errors.ts +5 -4
- package/src/{avm → public/avm}/fixtures/avm_simulation_tester.ts +16 -15
- package/src/{avm → public/avm}/fixtures/base_avm_simulation_tester.ts +45 -40
- package/src/{avm → public/avm}/fixtures/index.ts +77 -12
- package/src/{avm → public/avm}/fixtures/simple_contract_data_source.ts +26 -19
- package/src/{avm → public/avm}/index.ts +1 -1
- package/src/public/avm/journal/index.ts +1 -0
- package/src/{avm → public/avm}/journal/journal.ts +330 -305
- package/src/{avm → public/avm}/journal/nullifiers.ts +20 -19
- package/src/{avm → public/avm}/journal/public_storage.ts +2 -2
- package/src/{avm → public/avm}/opcodes/contract.ts +1 -1
- package/src/{avm → public/avm}/opcodes/control_flow.ts +1 -1
- package/src/{avm → public/avm}/opcodes/conversion.ts +1 -1
- package/src/{avm → public/avm}/opcodes/ec_add.ts +2 -2
- package/src/{avm → public/avm}/opcodes/external_calls.ts +5 -6
- package/src/{avm → public/avm}/opcodes/hashing.ts +1 -1
- package/src/public/avm/opcodes/index.ts +15 -0
- package/src/{avm → public/avm}/opcodes/instruction.ts +2 -2
- package/src/{avm → public/avm}/opcodes/misc.ts +1 -1
- package/src/public/avm/serialization/bytecode_serialization.ts +204 -0
- package/src/{avm → public/avm}/serialization/instruction_serialization.ts +0 -1
- package/src/{avm → public/avm}/test_utils.ts +10 -7
- package/src/public/execution.ts +9 -12
- package/src/public/fixtures/public_tx_simulation_tester.ts +66 -72
- package/src/public/fixtures/utils.ts +122 -33
- package/src/public/index.ts +5 -4
- package/src/public/public_db_sources.ts +216 -222
- package/src/public/{public_processor.ts → public_processor/public_processor.ts} +78 -53
- package/src/public/{public_processor_metrics.ts → public_processor/public_processor_metrics.ts} +3 -3
- package/src/public/{public_tx_context.ts → public_tx_simulator/public_tx_context.ts} +70 -75
- package/src/public/{public_tx_simulator.ts → public_tx_simulator/public_tx_simulator.ts} +104 -91
- package/src/public/side_effect_trace.ts +85 -160
- package/src/public/side_effect_trace_interface.ts +10 -23
- package/src/public/tx_contract_cache.ts +69 -0
- package/src/public/unique_class_ids.ts +1 -1
- package/src/public/utils.ts +2 -2
- package/src/server.ts +4 -4
- package/src/test/utils.ts +5 -3
- package/dest/acvm/acvm.d.ts.map +0 -1
- package/dest/acvm/acvm.js +0 -73
- package/dest/acvm/acvm_types.d.ts.map +0 -1
- package/dest/acvm/acvm_types.js +0 -2
- package/dest/acvm/deserialize.d.ts.map +0 -1
- package/dest/acvm/deserialize.js +0 -46
- package/dest/acvm/index.d.ts.map +0 -1
- package/dest/acvm/index.js +0 -6
- package/dest/acvm/oracle/index.d.ts.map +0 -1
- package/dest/acvm/oracle/index.js +0 -3
- package/dest/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/oracle.js +0 -230
- package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/typed_oracle.js +0 -131
- package/dest/acvm/serialize.d.ts.map +0 -1
- package/dest/acvm/serialize.js +0 -48
- package/dest/avm/avm_context.d.ts.map +0 -1
- package/dest/avm/avm_context.js +0 -44
- package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/avm/avm_contract_call_result.js +0 -45
- package/dest/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/avm/avm_execution_environment.js +0 -28
- package/dest/avm/avm_gas.d.ts.map +0 -1
- package/dest/avm/avm_gas.js +0 -170
- package/dest/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/avm/avm_machine_state.js +0 -112
- package/dest/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/avm/avm_memory_types.js +0 -327
- package/dest/avm/avm_simulator.d.ts.map +0 -1
- package/dest/avm/avm_simulator.js +0 -193
- package/dest/avm/avm_tree.d.ts +0 -282
- package/dest/avm/avm_tree.d.ts.map +0 -1
- package/dest/avm/avm_tree.js +0 -684
- package/dest/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/avm/bytecode_utils.js +0 -15
- package/dest/avm/errors.d.ts.map +0 -1
- package/dest/avm/errors.js +0 -196
- package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/avm_simulation_tester.js +0 -73
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/base_avm_simulation_tester.js +0 -76
- package/dest/avm/fixtures/index.d.ts.map +0 -1
- package/dest/avm/fixtures/index.js +0 -134
- package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/avm/fixtures/simple_contract_data_source.js +0 -75
- package/dest/avm/index.d.ts.map +0 -1
- package/dest/avm/index.js +0 -4
- package/dest/avm/journal/index.d.ts.map +0 -1
- package/dest/avm/journal/index.js +0 -2
- package/dest/avm/journal/journal.d.ts.map +0 -1
- package/dest/avm/journal/journal.js +0 -499
- package/dest/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/avm/journal/nullifiers.js +0 -99
- package/dest/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/avm/journal/public_storage.js +0 -159
- package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/avm/opcodes/accrued_substate.js +0 -215
- package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/avm/opcodes/addressing_mode.js +0 -81
- package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/avm/opcodes/arithmetic.js +0 -70
- package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/avm/opcodes/bitwise.js +0 -90
- package/dest/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/avm/opcodes/comparators.js +0 -40
- package/dest/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/avm/opcodes/contract.js +0 -63
- package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/avm/opcodes/control_flow.js +0 -97
- package/dest/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/avm/opcodes/conversion.js +0 -64
- package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/avm/opcodes/ec_add.js +0 -82
- package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/environment_getters.js +0 -78
- package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/avm/opcodes/external_calls.js +0 -169
- package/dest/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/avm/opcodes/hashing.js +0 -103
- package/dest/avm/opcodes/index.d.ts.map +0 -1
- package/dest/avm/opcodes/index.js +0 -16
- package/dest/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction.js +0 -100
- package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction_impl.js +0 -33
- package/dest/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/avm/opcodes/memory.js +0 -226
- package/dest/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/avm/opcodes/misc.js +0 -45
- package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +0 -112
- package/dest/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/avm/opcodes/storage.js +0 -61
- package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/avm/serialization/buffer_cursor.js +0 -99
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/bytecode_serialization.js +0 -132
- package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/instruction_serialization.js +0 -187
- package/dest/avm/test_utils.d.ts.map +0 -1
- package/dest/avm/test_utils.js +0 -52
- package/dest/client/client_execution_context.d.ts.map +0 -1
- package/dest/client/client_execution_context.js +0 -392
- package/dest/client/db_oracle.d.ts.map +0 -1
- package/dest/client/db_oracle.js +0 -17
- package/dest/client/execution_note_cache.d.ts.map +0 -1
- package/dest/client/execution_note_cache.js +0 -181
- package/dest/client/index.d.ts +0 -16
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/index.js +0 -15
- package/dest/client/pick_notes.d.ts.map +0 -1
- package/dest/client/pick_notes.js +0 -54
- package/dest/client/private_execution.d.ts +0 -19
- package/dest/client/private_execution.d.ts.map +0 -1
- package/dest/client/private_execution.js +0 -72
- package/dest/client/simulator.d.ts +0 -60
- package/dest/client/simulator.d.ts.map +0 -1
- package/dest/client/simulator.js +0 -136
- package/dest/client/unconstrained_execution.d.ts.map +0 -1
- package/dest/client/unconstrained_execution.js +0 -30
- package/dest/client/view_data_oracle.d.ts.map +0 -1
- package/dest/client/view_data_oracle.js +0 -268
- package/dest/common/hashed_values_cache.d.ts.map +0 -1
- package/dest/common/hashed_values_cache.js +0 -50
- package/dest/common/simulation_provider.d.ts.map +0 -1
- package/dest/common/simulation_provider.js +0 -27
- package/dest/common.d.ts +0 -2
- package/dest/common.d.ts.map +0 -1
- package/dest/common.js +0 -2
- package/dest/providers/acvm_native.d.ts.map +0 -1
- package/dest/providers/acvm_native.js +0 -125
- package/dest/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/providers/acvm_wasm.js +0 -54
- package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/providers/factory.d.ts.map +0 -1
- package/dest/providers/factory.js +0 -27
- package/dest/providers/index.d.ts +0 -5
- package/dest/providers/index.d.ts.map +0 -1
- package/dest/providers/index.js +0 -5
- package/dest/public/db_interfaces.d.ts.map +0 -1
- package/dest/public/db_interfaces.js +0 -2
- package/dest/public/fee_payment.d.ts +0 -11
- package/dest/public/fee_payment.d.ts.map +0 -1
- package/dest/public/fee_payment.js +0 -21
- package/dest/public/public_processor.d.ts.map +0 -1
- package/dest/public/public_processor.js +0 -352
- package/dest/public/public_processor_metrics.d.ts.map +0 -1
- package/dest/public/public_processor_metrics.js +0 -106
- package/dest/public/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_context.js +0 -341
- package/dest/public/public_tx_simulator.d.ts.map +0 -1
- package/dest/public/public_tx_simulator.js +0 -333
- package/dest/stats/index.d.ts.map +0 -1
- package/dest/stats/index.js +0 -2
- package/dest/stats/stats.d.ts.map +0 -1
- package/dest/stats/stats.js +0 -11
- package/src/avm/avm_tree.ts +0 -887
- package/src/avm/opcodes/multi_scalar_mul.ts +0 -121
- package/src/avm/serialization/bytecode_serialization.ts +0 -212
- package/src/client/index.ts +0 -15
- package/src/common.ts +0 -1
- package/src/providers/index.ts +0 -4
- package/src/public/fee_payment.ts +0 -23
- /package/dest/{stats → common/stats}/index.d.ts +0 -0
- /package/{src/stats/index.ts → dest/common/stats/index.js} +0 -0
- /package/dest/{acvm → private/acvm}/index.d.ts +0 -0
- /package/dest/{avm → public/avm}/avm_gas.d.ts +0 -0
- /package/dest/{avm → public/avm}/bytecode_utils.d.ts +0 -0
- /package/dest/{avm → public/avm}/journal/index.d.ts +0 -0
- /package/{src/avm/journal/index.ts → dest/public/avm/journal/index.js} +0 -0
- /package/dest/{avm → public/avm}/opcodes/accrued_substate.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/addressing_mode.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/arithmetic.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/bitwise.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/comparators.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/contract.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/control_flow.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/environment_getters.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/external_calls.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/index.d.ts +0 -0
- /package/{src/avm/opcodes/index.ts → dest/public/avm/opcodes/index.js} +0 -0
- /package/dest/{avm → public/avm}/opcodes/instruction_impl.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/memory.d.ts +0 -0
- /package/dest/{avm → public/avm}/opcodes/storage.d.ts +0 -0
- /package/dest/{avm → public/avm}/serialization/buffer_cursor.d.ts +0 -0
- /package/src/{acvm → private/acvm}/index.ts +0 -0
- /package/src/{avm → public/avm}/bytecode_utils.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/.eslintrc.cjs +0 -0
- /package/src/{avm → public/avm}/opcodes/accrued_substate.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/addressing_mode.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/arithmetic.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/bitwise.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/comparators.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/environment_getters.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/instruction_impl.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/memory.ts +0 -0
- /package/src/{avm → public/avm}/opcodes/storage.ts +0 -0
- /package/src/{avm → public/avm}/serialization/buffer_cursor.ts +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { HashedValues } from '@aztec/stdlib/tx';
|
|
3
|
+
/**
|
|
4
|
+
* A cache for hashed values (arguments, returns) during transaction execution.
|
|
5
|
+
*/ export class HashedValuesCache {
|
|
6
|
+
cache;
|
|
7
|
+
constructor(initialArguments = []){
|
|
8
|
+
this.cache = new Map();
|
|
9
|
+
for (const initialArg of initialArguments){
|
|
10
|
+
this.cache.set(initialArg.hash.toBigInt(), initialArg.values);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates a new hashed values cache.
|
|
15
|
+
* @param initialArguments - The initial arguments to add to the cache.
|
|
16
|
+
* @returns The new hashed values cache.
|
|
17
|
+
*/ static create(initialArguments = []) {
|
|
18
|
+
return new HashedValuesCache(initialArguments);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Gets preimage of a hash.
|
|
22
|
+
* @param hash - The hash to get the preimage of.
|
|
23
|
+
* @returns The preimage.
|
|
24
|
+
*/ getPreimage(hash) {
|
|
25
|
+
if (hash.equals(Fr.ZERO)) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
const hashedValues = this.cache.get(hash.toBigInt());
|
|
29
|
+
if (!hashedValues) {
|
|
30
|
+
throw new Error(`Preimage for hash ${hash.toString()} not found in cache`);
|
|
31
|
+
}
|
|
32
|
+
return hashedValues;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Stores values in cache and returns its hash.
|
|
36
|
+
* @param values - The values to store.
|
|
37
|
+
* @returns The hash of the values.
|
|
38
|
+
*/ async store(values) {
|
|
39
|
+
if (values.length === 0) {
|
|
40
|
+
return Fr.ZERO;
|
|
41
|
+
}
|
|
42
|
+
const hashedValues = await HashedValues.fromValues(values);
|
|
43
|
+
this.cache.set(hashedValues.hash.toBigInt(), hashedValues.values);
|
|
44
|
+
return hashedValues.hash;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { AcirSimulator } from './simulator.js';
|
|
2
|
+
export { ViewDataOracle } from './view_data_oracle.js';
|
|
3
|
+
export { type DBOracle, ContractClassNotFoundError, ContractNotFoundError } from './db_oracle.js';
|
|
4
|
+
export * from './pick_notes.js';
|
|
5
|
+
export { ExecutionNoteCache } from './execution_note_cache.js';
|
|
6
|
+
export { extractPrivateCircuitPublicInputs, readCurrentClassId } from './private_execution.js';
|
|
7
|
+
export { witnessMapToFields } from './acvm/deserialize.js';
|
|
8
|
+
export { toACVMWitness } from './acvm/serialize.js';
|
|
9
|
+
export { extractCallStack } from './acvm/acvm.js';
|
|
10
|
+
export { type NoteData, TypedOracle } from './acvm/oracle/typed_oracle.js';
|
|
11
|
+
export { Oracle } from './acvm/oracle/oracle.js';
|
|
12
|
+
export { HashedValuesCache } from './hashed_values_cache.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/private/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,QAAQ,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAClG,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { AcirSimulator } from './simulator.js';
|
|
2
|
+
export { ViewDataOracle } from './view_data_oracle.js';
|
|
3
|
+
export { ContractClassNotFoundError, ContractNotFoundError } from './db_oracle.js';
|
|
4
|
+
export * from './pick_notes.js';
|
|
5
|
+
export { ExecutionNoteCache } from './execution_note_cache.js';
|
|
6
|
+
export { extractPrivateCircuitPublicInputs, readCurrentClassId } from './private_execution.js';
|
|
7
|
+
export { witnessMapToFields } from './acvm/deserialize.js';
|
|
8
|
+
export { toACVMWitness } from './acvm/serialize.js';
|
|
9
|
+
export { extractCallStack } from './acvm/acvm.js';
|
|
10
|
+
export { TypedOracle } from './acvm/oracle/typed_oracle.js';
|
|
11
|
+
export { Oracle } from './acvm/oracle/oracle.js';
|
|
12
|
+
export { HashedValuesCache } from './hashed_values_cache.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick_notes.d.ts","sourceRoot":"","sources":["../../src/private/pick_notes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;OAEG;IACH,KAAK,EAAE,EAAE,CAAC;IACV;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,GAAG,IAAI;CACR;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;CACZ;AA8CD;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,YAAY,EAC9C,SAAS,EAAE,CAAC,EAAE,EACd,EAAE,OAAY,EAAE,KAAU,EAAE,KAAS,EAAE,MAAU,EAAE,EAAE,UAAU,GAC9D,CAAC,EAAE,CAIL"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { Comparator } from '@aztec/stdlib/note';
|
|
3
|
+
/**
|
|
4
|
+
* The order to sort an array.
|
|
5
|
+
*/ export var SortOrder = /*#__PURE__*/ function(SortOrder) {
|
|
6
|
+
SortOrder[SortOrder["NADA"] = 0] = "NADA";
|
|
7
|
+
SortOrder[SortOrder["DESC"] = 1] = "DESC";
|
|
8
|
+
SortOrder[SortOrder["ASC"] = 2] = "ASC";
|
|
9
|
+
return SortOrder;
|
|
10
|
+
}({});
|
|
11
|
+
const selectPropertyFromPackedNoteContent = (noteData, selector)=>{
|
|
12
|
+
const noteValueBuffer = noteData[selector.index].toBuffer();
|
|
13
|
+
const noteValue = noteValueBuffer.subarray(selector.offset, selector.offset + selector.length);
|
|
14
|
+
return Fr.fromBuffer(noteValue);
|
|
15
|
+
};
|
|
16
|
+
const selectNotes = (noteDatas, selects)=>noteDatas.filter((noteData)=>selects.every(({ selector, value, comparator })=>{
|
|
17
|
+
const noteValueFr = selectPropertyFromPackedNoteContent(noteData.note.items, selector);
|
|
18
|
+
const comparatorSelector = {
|
|
19
|
+
[Comparator.EQ]: ()=>noteValueFr.equals(value),
|
|
20
|
+
[Comparator.NEQ]: ()=>!noteValueFr.equals(value),
|
|
21
|
+
[Comparator.LT]: ()=>noteValueFr.lt(value),
|
|
22
|
+
[Comparator.LTE]: ()=>noteValueFr.lt(value) || noteValueFr.equals(value),
|
|
23
|
+
[Comparator.GT]: ()=>!noteValueFr.lt(value) && !noteValueFr.equals(value),
|
|
24
|
+
[Comparator.GTE]: ()=>!noteValueFr.lt(value)
|
|
25
|
+
};
|
|
26
|
+
return comparatorSelector[comparator]();
|
|
27
|
+
}));
|
|
28
|
+
const sortNotes = (a, b, sorts, level = 0)=>{
|
|
29
|
+
if (sorts[level] === undefined) {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
const { selector, order } = sorts[level];
|
|
33
|
+
if (order === 0) {
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
const aValue = selectPropertyFromPackedNoteContent(a, selector);
|
|
37
|
+
const bValue = selectPropertyFromPackedNoteContent(b, selector);
|
|
38
|
+
const dir = order === 1 ? [
|
|
39
|
+
-1,
|
|
40
|
+
1
|
|
41
|
+
] : [
|
|
42
|
+
1,
|
|
43
|
+
-1
|
|
44
|
+
];
|
|
45
|
+
return aValue.toBigInt() === bValue.toBigInt() ? sortNotes(a, b, sorts, level + 1) : aValue.toBigInt() > bValue.toBigInt() ? dir[0] : dir[1];
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Pick from a note array a number of notes that meet the criteria.
|
|
49
|
+
*/ export function pickNotes(noteDatas, { selects = [], sorts = [], limit = 0, offset = 0 }) {
|
|
50
|
+
return selectNotes(noteDatas, selects).sort((a, b)=>sortNotes(a.note.items, b.note.items, sorts)).slice(offset, limit ? offset + limit : undefined);
|
|
51
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { type FunctionArtifact, type FunctionSelector } from '@aztec/stdlib/abi';
|
|
3
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { ContractInstance } from '@aztec/stdlib/contract';
|
|
5
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
6
|
+
import { PrivateCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
7
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
8
|
+
import { type ACVMWitness } from './acvm/index.js';
|
|
9
|
+
import type { ClientExecutionContext } from './client_execution_context.js';
|
|
10
|
+
import type { SimulationProvider } from './providers/simulation_provider.js';
|
|
11
|
+
/**
|
|
12
|
+
* Execute a private function and return the execution result.
|
|
13
|
+
*/
|
|
14
|
+
export declare function executePrivateFunction(simulator: SimulationProvider, context: ClientExecutionContext, artifact: FunctionArtifact, contractAddress: AztecAddress, functionSelector: FunctionSelector, log?: import("@aztec/foundation/log").Logger): Promise<PrivateCallExecutionResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Get the private circuit public inputs from the partial witness.
|
|
17
|
+
* @param artifact - The function artifact
|
|
18
|
+
* @param partialWitness - The partial witness, result of simulating the function.
|
|
19
|
+
* @returns - The public inputs.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractPrivateCircuitPublicInputs(artifact: FunctionArtifact, partialWitness: ACVMWitness): PrivateCircuitPublicInputs;
|
|
22
|
+
export declare function readCurrentClassId(contractAddress: AztecAddress, instance: ContractInstance, node: AztecNode, blockNumber: number): Promise<Fr>;
|
|
23
|
+
export declare function verifyCurrentClassId(contractAddress: AztecAddress, instance: ContractInstance, node: AztecNode, blockNumber: number): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=private_execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private_execution.d.ts","sourceRoot":"","sources":["../../src/private/private_execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAI9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAsB,MAAM,mBAAmB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGlE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAI9D,OAAO,EAAE,KAAK,WAAW,EAA4B,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,kBAAkB,EAC7B,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,eAAe,EAAE,YAAY,EAC7B,gBAAgB,EAAE,gBAAgB,EAClC,GAAG,yCAA8C,GAChD,OAAO,CAAC,0BAA0B,CAAC,CA+DrC;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,WAAW,GAC1B,0BAA0B,CAa5B;AAED,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,eAWpB;AAED,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,YAAY,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,iBAQpB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH } from '@aztec/constants';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
5
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
6
|
+
import { countArgumentsSize } from '@aztec/stdlib/abi';
|
|
7
|
+
import { PrivateCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
8
|
+
import { SharedMutableValues, SharedMutableValuesWithHash } from '@aztec/stdlib/shared-mutable';
|
|
9
|
+
import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
10
|
+
import { ExecutionError, resolveAssertionMessageFromError } from '../common/errors.js';
|
|
11
|
+
import { fromACVMField, witnessMapToFields } from './acvm/deserialize.js';
|
|
12
|
+
import { Oracle, extractCallStack } from './acvm/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Execute a private function and return the execution result.
|
|
15
|
+
*/ export async function executePrivateFunction(simulator, context, artifact, contractAddress, functionSelector, log = createLogger('simulator:private_execution')) {
|
|
16
|
+
const functionName = await context.getDebugFunctionName();
|
|
17
|
+
log.verbose(`Executing private function ${functionName}`, {
|
|
18
|
+
contract: contractAddress
|
|
19
|
+
});
|
|
20
|
+
const acir = artifact.bytecode;
|
|
21
|
+
const initialWitness = context.getInitialWitness(artifact);
|
|
22
|
+
const acvmCallback = new Oracle(context);
|
|
23
|
+
const timer = new Timer();
|
|
24
|
+
const acirExecutionResult = await simulator.executeUserCircuit(acir, initialWitness, acvmCallback).catch((err)=>{
|
|
25
|
+
err.message = resolveAssertionMessageFromError(err, artifact);
|
|
26
|
+
throw new ExecutionError(err.message, {
|
|
27
|
+
contractAddress,
|
|
28
|
+
functionSelector
|
|
29
|
+
}, extractCallStack(err, artifact.debug), {
|
|
30
|
+
cause: err
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
const duration = timer.ms();
|
|
34
|
+
const partialWitness = acirExecutionResult.partialWitness;
|
|
35
|
+
const publicInputs = extractPrivateCircuitPublicInputs(artifact, partialWitness);
|
|
36
|
+
// TODO (alexg) estimate this size
|
|
37
|
+
const initialWitnessSize = witnessMapToFields(initialWitness).length * Fr.SIZE_IN_BYTES;
|
|
38
|
+
log.debug(`Ran external function ${contractAddress.toString()}:${functionSelector}`, {
|
|
39
|
+
circuitName: 'app-circuit',
|
|
40
|
+
duration,
|
|
41
|
+
eventName: 'circuit-witness-generation',
|
|
42
|
+
inputSize: initialWitnessSize,
|
|
43
|
+
outputSize: publicInputs.toBuffer().length,
|
|
44
|
+
appCircuitName: functionName
|
|
45
|
+
});
|
|
46
|
+
const contractClassLogs = context.getContractClassLogs();
|
|
47
|
+
const rawReturnValues = await context.loadFromExecutionCache(publicInputs.returnsHash);
|
|
48
|
+
const noteHashLeafIndexMap = context.getNoteHashLeafIndexMap();
|
|
49
|
+
const newNotes = context.getNewNotes();
|
|
50
|
+
const noteHashNullifierCounterMap = context.getNoteHashNullifierCounterMap();
|
|
51
|
+
const nestedExecutions = context.getNestedExecutions();
|
|
52
|
+
const enqueuedPublicFunctionCalls = context.getEnqueuedPublicFunctionCalls();
|
|
53
|
+
const publicTeardownFunctionCall = context.getPublicTeardownFunctionCall();
|
|
54
|
+
log.debug(`Returning from call to ${contractAddress.toString()}:${functionSelector}`);
|
|
55
|
+
return new PrivateCallExecutionResult(acir, Buffer.from(artifact.verificationKey, 'base64'), partialWitness, publicInputs, noteHashLeafIndexMap, newNotes, noteHashNullifierCounterMap, rawReturnValues, nestedExecutions, enqueuedPublicFunctionCalls, publicTeardownFunctionCall, contractClassLogs);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the private circuit public inputs from the partial witness.
|
|
59
|
+
* @param artifact - The function artifact
|
|
60
|
+
* @param partialWitness - The partial witness, result of simulating the function.
|
|
61
|
+
* @returns - The public inputs.
|
|
62
|
+
*/ export function extractPrivateCircuitPublicInputs(artifact, partialWitness) {
|
|
63
|
+
const parametersSize = countArgumentsSize(artifact) + PRIVATE_CONTEXT_INPUTS_LENGTH;
|
|
64
|
+
const returnsSize = PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH;
|
|
65
|
+
const returnData = [];
|
|
66
|
+
// Return values always appear in the witness after arguments.
|
|
67
|
+
for(let i = parametersSize; i < parametersSize + returnsSize; i++){
|
|
68
|
+
const returnedField = partialWitness.get(i);
|
|
69
|
+
if (returnedField === undefined) {
|
|
70
|
+
throw new Error(`Missing return value for index ${i}`);
|
|
71
|
+
}
|
|
72
|
+
returnData.push(fromACVMField(returnedField));
|
|
73
|
+
}
|
|
74
|
+
return PrivateCircuitPublicInputs.fromFields(returnData);
|
|
75
|
+
}
|
|
76
|
+
export async function readCurrentClassId(contractAddress, instance, node, blockNumber) {
|
|
77
|
+
const { sharedMutableSlot } = await SharedMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
78
|
+
const sharedMutableValues = await SharedMutableValues.readFromTree(sharedMutableSlot, (slot)=>node.getPublicStorageAt(ProtocolContractAddress.ContractInstanceDeployer, slot, blockNumber));
|
|
79
|
+
let currentClassId = sharedMutableValues.svc.getCurrentAt(blockNumber)[0];
|
|
80
|
+
if (currentClassId.isZero()) {
|
|
81
|
+
currentClassId = instance.originalContractClassId;
|
|
82
|
+
}
|
|
83
|
+
return currentClassId;
|
|
84
|
+
}
|
|
85
|
+
export async function verifyCurrentClassId(contractAddress, instance, node, blockNumber) {
|
|
86
|
+
const currentClassId = await readCurrentClassId(contractAddress, instance, node, blockNumber);
|
|
87
|
+
if (!instance.currentContractClassId.equals(currentClassId)) {
|
|
88
|
+
throw new Error(`Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
|
|
4
|
+
import type { WitnessMap } from '@noir-lang/types';
|
|
5
|
+
import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
|
|
6
|
+
import type { ACVMWitness } from '../acvm/acvm_types.js';
|
|
7
|
+
import type { SimulationProvider } from './simulation_provider.js';
|
|
8
8
|
export declare enum ACVM_RESULT {
|
|
9
9
|
SUCCESS = 0,
|
|
10
10
|
FAILURE = 1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acvm_native.d.ts","sourceRoot":"","sources":["../../../src/private/providers/acvm_native.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAInE,oBAAY,WAAW;IACrB,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAmBnD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,UAAU,EACxB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC,CAqErB;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAChD,OAAO,CAAC,gBAAgB;IAAU,OAAO,CAAC,UAAU;IAAU,OAAO,CAAC,eAAe,CAAC;gBAA9E,gBAAgB,EAAE,MAAM,EAAU,UAAU,EAAE,MAAM,EAAU,eAAe,CAAC,oBAAQ;IACpG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB1G,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,WAAW,EAC5B,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,mBAAmB,CAAC;CAGhC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { runInDirectory } from '@aztec/foundation/fs';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
+
import * as proc from 'child_process';
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
const logger = createLogger('simulator:acvm-native');
|
|
7
|
+
export var ACVM_RESULT = /*#__PURE__*/ function(ACVM_RESULT) {
|
|
8
|
+
ACVM_RESULT[ACVM_RESULT["SUCCESS"] = 0] = "SUCCESS";
|
|
9
|
+
ACVM_RESULT[ACVM_RESULT["FAILURE"] = 1] = "FAILURE";
|
|
10
|
+
return ACVM_RESULT;
|
|
11
|
+
}({});
|
|
12
|
+
/**
|
|
13
|
+
* Parses a TOML format witness map string into a Map structure
|
|
14
|
+
* @param outputString - The witness map in TOML format
|
|
15
|
+
* @returns The parsed witness map
|
|
16
|
+
*/ function parseIntoWitnessMap(outputString) {
|
|
17
|
+
const lines = outputString.split('\n');
|
|
18
|
+
return new Map(lines.filter((line)=>line.length).map((line)=>{
|
|
19
|
+
const pair = line.replaceAll(' ', '').split('=');
|
|
20
|
+
return [
|
|
21
|
+
Number(pair[0]),
|
|
22
|
+
pair[1].replaceAll('"', '')
|
|
23
|
+
];
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param inputWitness - The circuit's input witness
|
|
29
|
+
* @param bytecode - The circuit bytecode
|
|
30
|
+
* @param workingDirectory - A directory to use for temporary files by the ACVM
|
|
31
|
+
* @param pathToAcvm - The path to the ACVM binary
|
|
32
|
+
* @param outputFilename - If specified, the output will be stored as a file, encoded using Bincode
|
|
33
|
+
* @returns The completed partial witness outputted from the circuit
|
|
34
|
+
*/ export async function executeNativeCircuit(inputWitness, bytecode, workingDirectory, pathToAcvm, outputFilename) {
|
|
35
|
+
const bytecodeFilename = 'bytecode';
|
|
36
|
+
const witnessFilename = 'input_witness.toml';
|
|
37
|
+
// convert the witness map to TOML format
|
|
38
|
+
let witnessMap = '';
|
|
39
|
+
inputWitness.forEach((value, key)=>{
|
|
40
|
+
witnessMap = witnessMap.concat(`${key} = '${value}'\n`);
|
|
41
|
+
});
|
|
42
|
+
try {
|
|
43
|
+
// Check that the directory exists
|
|
44
|
+
await fs.access(workingDirectory);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
status: 1,
|
|
48
|
+
reason: `Working directory ${workingDirectory} does not exist`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
// Write the bytecode and input witness to the working directory
|
|
53
|
+
await fs.writeFile(`${workingDirectory}/${bytecodeFilename}`, bytecode);
|
|
54
|
+
await fs.writeFile(`${workingDirectory}/${witnessFilename}`, witnessMap);
|
|
55
|
+
// Execute the ACVM using the given args
|
|
56
|
+
const args = [
|
|
57
|
+
`execute`,
|
|
58
|
+
`--working-directory`,
|
|
59
|
+
`${workingDirectory}`,
|
|
60
|
+
`--bytecode`,
|
|
61
|
+
`${bytecodeFilename}`,
|
|
62
|
+
`--input-witness`,
|
|
63
|
+
`${witnessFilename}`,
|
|
64
|
+
'--print',
|
|
65
|
+
'--output-witness',
|
|
66
|
+
'output-witness'
|
|
67
|
+
];
|
|
68
|
+
logger.debug(`Calling ACVM with ${args.join(' ')}`);
|
|
69
|
+
const processPromise = new Promise((resolve, reject)=>{
|
|
70
|
+
let outputWitness = Buffer.alloc(0);
|
|
71
|
+
let errorBuffer = Buffer.alloc(0);
|
|
72
|
+
const acvm = proc.spawn(pathToAcvm, args);
|
|
73
|
+
acvm.stdout.on('data', (data)=>{
|
|
74
|
+
outputWitness = Buffer.concat([
|
|
75
|
+
outputWitness,
|
|
76
|
+
data
|
|
77
|
+
]);
|
|
78
|
+
});
|
|
79
|
+
acvm.stderr.on('data', (data)=>{
|
|
80
|
+
errorBuffer = Buffer.concat([
|
|
81
|
+
errorBuffer,
|
|
82
|
+
data
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
acvm.on('close', (code)=>{
|
|
86
|
+
if (code === 0) {
|
|
87
|
+
resolve(outputWitness.toString('utf-8'));
|
|
88
|
+
} else {
|
|
89
|
+
logger.error(`From ACVM: ${errorBuffer.toString('utf-8')}`);
|
|
90
|
+
reject(errorBuffer.toString('utf-8'));
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
const duration = new Timer();
|
|
95
|
+
const output = await processPromise;
|
|
96
|
+
if (outputFilename) {
|
|
97
|
+
const outputWitnessFileName = `${workingDirectory}/output-witness.gz`;
|
|
98
|
+
await fs.copyFile(outputWitnessFileName, outputFilename);
|
|
99
|
+
}
|
|
100
|
+
const witness = parseIntoWitnessMap(output);
|
|
101
|
+
return {
|
|
102
|
+
status: 0,
|
|
103
|
+
witness,
|
|
104
|
+
duration: duration.ms()
|
|
105
|
+
};
|
|
106
|
+
} catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
status: 1,
|
|
109
|
+
reason: `${error}`
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export class NativeACVMSimulator {
|
|
114
|
+
workingDirectory;
|
|
115
|
+
pathToAcvm;
|
|
116
|
+
witnessFilename;
|
|
117
|
+
constructor(workingDirectory, pathToAcvm, witnessFilename){
|
|
118
|
+
this.workingDirectory = workingDirectory;
|
|
119
|
+
this.pathToAcvm = pathToAcvm;
|
|
120
|
+
this.witnessFilename = witnessFilename;
|
|
121
|
+
}
|
|
122
|
+
async executeProtocolCircuit(input, compiledCircuit) {
|
|
123
|
+
// Execute the circuit on those initial witness values
|
|
124
|
+
const operation = async (directory)=>{
|
|
125
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
126
|
+
const decodedBytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
|
|
127
|
+
// Execute the circuit
|
|
128
|
+
const result = await executeNativeCircuit(input, decodedBytecode, directory, this.pathToAcvm, this.witnessFilename);
|
|
129
|
+
if (result.status == 1) {
|
|
130
|
+
throw new Error(`Failed to generate witness: ${result.reason}`);
|
|
131
|
+
}
|
|
132
|
+
return result.witness;
|
|
133
|
+
};
|
|
134
|
+
return await runInDirectory(this.workingDirectory, operation, false, logger);
|
|
135
|
+
}
|
|
136
|
+
executeUserCircuit(_acir, _initialWitness, _callback) {
|
|
137
|
+
throw new Error('Not implemented');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
|
|
4
|
+
import type { WitnessMap } from '@noir-lang/types';
|
|
5
5
|
import { type ACIRCallback } from '../acvm/acvm.js';
|
|
6
|
-
import {
|
|
7
|
-
import { type SimulationProvider } from '
|
|
6
|
+
import type { ACVMWitness } from '../acvm/acvm_types.js';
|
|
7
|
+
import { type SimulationProvider } from './simulation_provider.js';
|
|
8
8
|
export declare class WASMSimulator implements SimulationProvider {
|
|
9
9
|
protected log: import("@aztec/foundation/log").Logger;
|
|
10
10
|
constructor(log?: import("@aztec/foundation/log").Logger);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acvm_wasm.d.ts","sourceRoot":"","sources":["../../../src/private/providers/acvm_wasm.ts"],"names":[],"mappings":";;AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,0BAA0B,CAAC;AAEtF,qBAAa,aAAc,YAAW,kBAAkB;IAC1C,SAAS,CAAC,GAAG;gBAAH,GAAG,yCAAiC;IAEpD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAiCpG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY;CAI3F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { foreignCallHandler } from '@aztec/noir-protocol-circuits-types/client';
|
|
3
|
+
import initACVM, { executeCircuit } from '@noir-lang/acvm_js';
|
|
4
|
+
import initAbi from '@noir-lang/noirc_abi';
|
|
5
|
+
import { acvm } from '../acvm/acvm.js';
|
|
6
|
+
import { parseErrorPayload } from './simulation_provider.js';
|
|
7
|
+
export class WASMSimulator {
|
|
8
|
+
log;
|
|
9
|
+
constructor(log = createLogger('wasm-simulator')){
|
|
10
|
+
this.log = log;
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
// If these are available, then we are in the
|
|
14
|
+
// web environment. For the node environment, this
|
|
15
|
+
// is a no-op.
|
|
16
|
+
if (typeof initAbi === 'function') {
|
|
17
|
+
/** @ts-expect-error The node bundle doesn't include these default imports, so TS complains */ await Promise.all([
|
|
18
|
+
initAbi(),
|
|
19
|
+
initACVM()
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async executeProtocolCircuit(input, compiledCircuit) {
|
|
24
|
+
this.log.debug('init', {
|
|
25
|
+
hash: compiledCircuit.hash
|
|
26
|
+
});
|
|
27
|
+
await this.init();
|
|
28
|
+
// Execute the circuit on those initial witness values
|
|
29
|
+
//
|
|
30
|
+
// Decode the bytecode from base64 since the acvm does not know about base64 encoding
|
|
31
|
+
const decodedBytecode = Buffer.from(compiledCircuit.bytecode, 'base64');
|
|
32
|
+
//
|
|
33
|
+
// Execute the circuit
|
|
34
|
+
try {
|
|
35
|
+
const _witnessMap = await executeCircuit(decodedBytecode, input, foreignCallHandler);
|
|
36
|
+
this.log.debug('execution successful', {
|
|
37
|
+
hash: compiledCircuit.hash
|
|
38
|
+
});
|
|
39
|
+
return _witnessMap;
|
|
40
|
+
} catch (err) {
|
|
41
|
+
// Typescript types catched errors as unknown or any, so we need to narrow its type to check if it has raw assertion payload.
|
|
42
|
+
if (typeof err === 'object' && err !== null && 'rawAssertionPayload' in err) {
|
|
43
|
+
const parsed = parseErrorPayload(compiledCircuit.abi, err);
|
|
44
|
+
this.log.debug('execution failed', {
|
|
45
|
+
hash: compiledCircuit.hash,
|
|
46
|
+
error: parsed,
|
|
47
|
+
message: parsed.message
|
|
48
|
+
});
|
|
49
|
+
throw parsed;
|
|
50
|
+
}
|
|
51
|
+
this.log.debug('execution failed', {
|
|
52
|
+
hash: compiledCircuit.hash,
|
|
53
|
+
error: err
|
|
54
|
+
});
|
|
55
|
+
throw new Error(`Circuit execution failed: ${err}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async executeUserCircuit(acir, initialWitness, callback) {
|
|
59
|
+
await this.init();
|
|
60
|
+
return acvm(acir, initialWitness, callback);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { type SimulationProvider } from '
|
|
3
|
+
import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
|
|
4
|
+
import type { WitnessMap } from '@noir-lang/types';
|
|
5
|
+
import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
|
|
6
|
+
import type { ACVMWitness } from '../acvm/acvm_types.js';
|
|
7
|
+
import { type SimulationProvider } from './simulation_provider.js';
|
|
8
8
|
/**
|
|
9
9
|
* A simulation provider that uses the WASM simulator with the ability to handle blobs via the foreign call handler.
|
|
10
10
|
* This class is temporary while brillig cannot handle the blob math, and it is kept separate
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acvm_wasm_with_blobs.d.ts","sourceRoot":"","sources":["../../../src/private/providers/acvm_wasm_with_blobs.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,0BAA0B,CAAC;AAEtF;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IACzD,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAwB1G,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,WAAW,EAC5B,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,mBAAmB,CAAC;CAGhC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { foreignCallHandler } from '@aztec/noir-protocol-circuits-types/server';
|
|
2
2
|
import { executeCircuit } from '@noir-lang/acvm_js';
|
|
3
|
-
import { parseErrorPayload } from '
|
|
3
|
+
import { parseErrorPayload } from './simulation_provider.js';
|
|
4
4
|
/**
|
|
5
5
|
* A simulation provider that uses the WASM simulator with the ability to handle blobs via the foreign call handler.
|
|
6
6
|
* This class is temporary while brillig cannot handle the blob math, and it is kept separate
|
|
7
7
|
* because the zkg commitment library used in the blob code is not browser compatible.
|
|
8
8
|
*
|
|
9
9
|
* It is only used in the context of server-side code executing simulated protocol circuits.
|
|
10
|
-
*/
|
|
11
|
-
export class WASMSimulatorWithBlobs {
|
|
10
|
+
*/ export class WASMSimulatorWithBlobs {
|
|
12
11
|
async executeProtocolCircuit(input, compiledCircuit) {
|
|
13
12
|
// Execute the circuit on those initial witness values
|
|
14
13
|
//
|
|
@@ -19,8 +18,7 @@ export class WASMSimulatorWithBlobs {
|
|
|
19
18
|
try {
|
|
20
19
|
const _witnessMap = await executeCircuit(decodedBytecode, input, foreignCallHandler);
|
|
21
20
|
return _witnessMap;
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
21
|
+
} catch (err) {
|
|
24
22
|
// Typescript types catched errors as unknown or any, so we need to narrow its type to check if it has raw assertion payload.
|
|
25
23
|
if (typeof err === 'object' && err !== null && 'rawAssertionPayload' in err) {
|
|
26
24
|
throw parseErrorPayload(compiledCircuit.abi, err);
|
|
@@ -32,4 +30,3 @@ export class WASMSimulatorWithBlobs {
|
|
|
32
30
|
throw new Error('Not implemented');
|
|
33
31
|
}
|
|
34
32
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN2bV93YXNtX3dpdGhfYmxvYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmlkZXJzL2Fjdm1fd2FzbV93aXRoX2Jsb2JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hGLE9BQU8sRUFBdUIsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFLekUsT0FBTyxFQUEyQixpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTlGOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQWlCLEVBQUUsZUFBb0M7UUFDbEYsc0RBQXNEO1FBQ3RELEVBQUU7UUFDRixxRkFBcUY7UUFDckYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hFLEVBQUU7UUFDRixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxjQUFjLENBQ3RDLGVBQWUsRUFDZixLQUFLLEVBQ0wsa0JBQWtCLENBQ25CLENBQUM7WUFFRixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLDZIQUE2SDtZQUM3SCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLHFCQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUM1RSxNQUFNLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBcUIsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQ2hCLEtBQWEsRUFDYixlQUE0QixFQUM1QixTQUF1QjtRQUV2QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Logger } from '@aztec/foundation/log';
|
|
2
|
-
import {
|
|
2
|
+
import type { SimulationProvider } from './simulation_provider.js';
|
|
3
3
|
export type SimulationProviderConfig = {
|
|
4
4
|
acvmBinaryPath?: string;
|
|
5
5
|
acvmWorkingDirectory?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/private/providers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAMlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,kCAAkC;;;EAMjD;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,EAChC,MAAM,GAAE,MAAkC,GACzC,OAAO,CAAC,kBAAkB,CAAC,CAa7B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import { NativeACVMSimulator } from './acvm_native.js';
|
|
4
|
+
import { WASMSimulator } from './acvm_wasm.js';
|
|
5
|
+
export function getSimulationProviderConfigFromEnv() {
|
|
6
|
+
const { ACVM_BINARY_PATH, ACVM_WORKING_DIRECTORY } = process.env;
|
|
7
|
+
return {
|
|
8
|
+
acvmWorkingDirectory: ACVM_WORKING_DIRECTORY ? ACVM_WORKING_DIRECTORY : undefined,
|
|
9
|
+
acvmBinaryPath: ACVM_BINARY_PATH ? ACVM_BINARY_PATH : undefined
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export async function createSimulationProvider(config, logger = createLogger('simulator')) {
|
|
13
|
+
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
14
|
+
try {
|
|
15
|
+
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
16
|
+
await fs.mkdir(config.acvmWorkingDirectory, {
|
|
17
|
+
recursive: true
|
|
18
|
+
});
|
|
19
|
+
logger.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
|
|
20
|
+
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath);
|
|
21
|
+
} catch {
|
|
22
|
+
logger.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
logger.info('Using WASM ACVM simulation');
|
|
26
|
+
return new WASMSimulator();
|
|
27
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import type { NoirCompiledCircuit } from '@aztec/stdlib/noir';
|
|
4
|
+
import type { ExecutionError } from '@noir-lang/acvm_js';
|
|
5
|
+
import type { Abi, WitnessMap } from '@noir-lang/types';
|
|
6
|
+
import type { ACIRCallback, ACIRExecutionResult } from '../acvm/acvm.js';
|
|
7
|
+
import type { ACVMWitness } from '../acvm/acvm_types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Low level simulation interface
|
|
10
10
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulation_provider.d.ts","sourceRoot":"","sources":["../../../src/private/providers/simulation_provider.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrH;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAAE,uBAAuB,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAIlF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,GAAG,KAAK,CAuBhF"}
|