@aztec/simulator 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/dest/acvm/acvm.js +18 -21
- package/dest/acvm/acvm_types.js +3 -2
- package/dest/acvm/deserialize.js +9 -13
- package/dest/acvm/index.js +0 -1
- package/dest/acvm/oracle/index.js +0 -1
- package/dest/acvm/oracle/oracle.js +42 -23
- package/dest/acvm/oracle/typed_oracle.js +36 -38
- package/dest/acvm/serialize.js +7 -14
- package/dest/avm/avm_context.js +24 -27
- package/dest/avm/avm_contract_call_result.js +12 -7
- package/dest/avm/avm_execution_environment.js +10 -7
- package/dest/avm/avm_gas.js +93 -56
- package/dest/avm/avm_machine_state.js +60 -61
- package/dest/avm/avm_memory_types.js +166 -255
- package/dest/avm/avm_simulator.js +68 -47
- package/dest/avm/avm_tree.js +282 -276
- package/dest/avm/bytecode_utils.js +8 -6
- package/dest/avm/errors.js +46 -63
- package/dest/avm/fixtures/avm_simulation_tester.js +18 -17
- package/dest/avm/fixtures/base_avm_simulation_tester.js +21 -16
- package/dest/avm/fixtures/index.js +27 -26
- package/dest/avm/fixtures/simple_contract_data_source.js +9 -13
- package/dest/avm/index.js +0 -1
- package/dest/avm/journal/index.js +0 -1
- package/dest/avm/journal/journal.js +147 -200
- package/dest/avm/journal/nullifiers.js +43 -46
- package/dest/avm/journal/public_storage.js +73 -87
- package/dest/avm/opcodes/accrued_substate.js +140 -110
- package/dest/avm/opcodes/addressing_mode.js +29 -31
- package/dest/avm/opcodes/arithmetic.js +17 -15
- package/dest/avm/opcodes/bitwise.js +40 -26
- package/dest/avm/opcodes/comparators.js +12 -10
- package/dest/avm/opcodes/contract.js +31 -29
- package/dest/avm/opcodes/control_flow.js +47 -43
- package/dest/avm/opcodes/conversion.js +30 -26
- package/dest/avm/opcodes/ec_add.js +35 -34
- package/dest/avm/opcodes/environment_getters.js +33 -33
- package/dest/avm/opcodes/external_calls.js +83 -74
- package/dest/avm/opcodes/hashing.js +69 -61
- package/dest/avm/opcodes/index.js +0 -1
- package/dest/avm/opcodes/instruction.js +31 -40
- package/dest/avm/opcodes/instruction_impl.js +12 -15
- package/dest/avm/opcodes/memory.js +177 -156
- package/dest/avm/opcodes/misc.js +27 -25
- package/dest/avm/opcodes/multi_scalar_mul.js +43 -41
- package/dest/avm/opcodes/storage.js +28 -25
- package/dest/avm/serialization/buffer_cursor.js +4 -4
- package/dest/avm/serialization/bytecode_serialization.js +292 -89
- package/dest/avm/serialization/instruction_serialization.js +67 -28
- package/dest/avm/test_utils.js +6 -9
- package/dest/client/client_execution_context.js +197 -219
- package/dest/client/db_oracle.js +4 -7
- package/dest/client/execution_note_cache.js +80 -81
- package/dest/client/index.js +0 -1
- package/dest/client/pick_notes.js +27 -30
- package/dest/client/private_execution.js +13 -14
- package/dest/client/simulator.js +44 -48
- package/dest/client/unconstrained_execution.js +8 -11
- package/dest/client/view_data_oracle.js +130 -139
- package/dest/common/debug_fn_name.js +1 -4
- package/dest/common/errors.js +30 -39
- package/dest/common/hashed_values_cache.js +16 -20
- package/dest/common/index.js +0 -1
- package/dest/common/message_load_oracle_inputs.js +7 -7
- package/dest/common/simulation_provider.js +3 -6
- package/dest/common.js +0 -1
- package/dest/providers/acvm_native.js +46 -32
- package/dest/providers/acvm_wasm.js +18 -10
- package/dest/providers/acvm_wasm_with_blobs.js +2 -5
- package/dest/providers/factory.js +5 -5
- package/dest/providers/index.js +0 -1
- package/dest/public/bytecode_errors.js +1 -2
- package/dest/public/db_interfaces.js +1 -2
- package/dest/public/execution.js +2 -4
- package/dest/public/executor_metrics.js +16 -12
- package/dest/public/fee_payment.js +2 -5
- package/dest/public/fixtures/index.js +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +13 -17
- package/dest/public/fixtures/utils.js +11 -14
- package/dest/public/index.js +0 -1
- package/dest/public/public_db_sources.js +79 -87
- package/dest/public/public_processor.js +310 -306
- package/dest/public/public_processor_metrics.js +46 -27
- package/dest/public/public_tx_context.js +97 -118
- package/dest/public/public_tx_simulator.js +299 -314
- package/dest/public/side_effect_errors.js +1 -2
- package/dest/public/side_effect_trace.js +44 -71
- package/dest/public/side_effect_trace_interface.js +1 -2
- package/dest/public/unique_class_ids.js +22 -27
- package/dest/public/utils.js +16 -11
- package/dest/server.js +0 -1
- package/dest/stats/index.js +0 -1
- package/dest/stats/stats.js +1 -2
- package/dest/test/utils.js +5 -4
- package/package.json +11 -11
- package/src/acvm/oracle/typed_oracle.ts +34 -34
- package/src/avm/avm_machine_state.ts +18 -14
- package/src/avm/avm_memory_types.ts +43 -183
- package/src/avm/avm_simulator.ts +37 -11
- package/src/avm/opcodes/accrued_substate.ts +7 -21
- package/src/avm/opcodes/addressing_mode.ts +9 -2
- package/src/avm/opcodes/arithmetic.ts +1 -3
- package/src/avm/opcodes/bitwise.ts +2 -6
- package/src/avm/opcodes/comparators.ts +1 -3
- package/src/avm/opcodes/contract.ts +1 -3
- package/src/avm/opcodes/control_flow.ts +1 -9
- package/src/avm/opcodes/conversion.ts +1 -3
- package/src/avm/opcodes/ec_add.ts +1 -3
- package/src/avm/opcodes/environment_getters.ts +1 -3
- package/src/avm/opcodes/external_calls.ts +3 -6
- package/src/avm/opcodes/hashing.ts +3 -9
- package/src/avm/opcodes/memory.ts +6 -20
- package/src/avm/opcodes/misc.ts +1 -3
- package/src/avm/opcodes/multi_scalar_mul.ts +1 -7
- package/src/avm/opcodes/storage.ts +2 -6
- package/src/client/index.ts +2 -2
- package/dest/acvm/acvm.d.ts +0 -35
- package/dest/acvm/acvm.d.ts.map +0 -1
- package/dest/acvm/acvm_types.d.ts +0 -10
- package/dest/acvm/acvm_types.d.ts.map +0 -1
- package/dest/acvm/deserialize.d.ts +0 -36
- package/dest/acvm/deserialize.d.ts.map +0 -1
- package/dest/acvm/index.d.ts +0 -6
- package/dest/acvm/index.d.ts.map +0 -1
- package/dest/acvm/oracle/index.d.ts +0 -14
- package/dest/acvm/oracle/index.d.ts.map +0 -1
- package/dest/acvm/oracle/oracle.d.ts +0 -49
- package/dest/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/typed_oracle.d.ts +0 -75
- package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/acvm/serialize.d.ts +0 -20
- package/dest/acvm/serialize.d.ts.map +0 -1
- package/dest/avm/avm_context.d.ts +0 -39
- package/dest/avm/avm_context.d.ts.map +0 -1
- package/dest/avm/avm_contract_call_result.d.ts +0 -30
- package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/avm/avm_execution_environment.d.ts +0 -21
- package/dest/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/avm/avm_gas.d.ts +0 -60
- package/dest/avm/avm_gas.d.ts.map +0 -1
- package/dest/avm/avm_machine_state.d.ts +0 -93
- package/dest/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/avm/avm_memory_types.d.ts +0 -310
- package/dest/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/avm/avm_simulator.d.ts +0 -37
- package/dest/avm/avm_simulator.d.ts.map +0 -1
- package/dest/avm/avm_tree.d.ts +0 -281
- package/dest/avm/avm_tree.d.ts.map +0 -1
- package/dest/avm/bytecode_utils.d.ts +0 -5
- package/dest/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/avm/errors.d.ts +0 -121
- package/dest/avm/errors.d.ts.map +0 -1
- package/dest/avm/fixtures/avm_simulation_tester.d.ts +0 -21
- package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts +0 -35
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/index.d.ts +0 -67
- package/dest/avm/fixtures/index.d.ts.map +0 -1
- package/dest/avm/fixtures/simple_contract_data_source.d.ts +0 -31
- package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/avm/index.d.ts +0 -4
- package/dest/avm/index.d.ts.map +0 -1
- package/dest/avm/journal/index.d.ts +0 -2
- package/dest/avm/journal/index.d.ts.map +0 -1
- package/dest/avm/journal/journal.d.ts +0 -176
- package/dest/avm/journal/journal.d.ts.map +0 -1
- package/dest/avm/journal/nullifiers.d.ts +0 -62
- package/dest/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/avm/journal/public_storage.d.ts +0 -66
- package/dest/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/avm/opcodes/addressing_mode.d.ts +0 -27
- package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/avm/opcodes/arithmetic.d.ts +0 -37
- package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/avm/opcodes/bitwise.d.ts +0 -50
- package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/avm/opcodes/comparators.d.ts +0 -25
- package/dest/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/avm/opcodes/contract.d.ts +0 -21
- package/dest/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/avm/opcodes/conversion.d.ts +0 -17
- package/dest/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/external_calls.d.ts +0 -50
- package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/avm/opcodes/hashing.d.ts +0 -36
- package/dest/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/avm/opcodes/index.d.ts +0 -16
- package/dest/avm/opcodes/index.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction.d.ts +0 -70
- package/dest/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/avm/opcodes/memory.d.ts +0 -74
- package/dest/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/avm/opcodes/misc.d.ts +0 -17
- package/dest/avm/opcodes/misc.d.ts.map +0 -1
- 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/storage.d.ts +0 -24
- package/dest/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/avm/serialization/buffer_cursor.d.ts +0 -28
- package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/avm/serialization/bytecode_serialization.d.ts +0 -21
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/instruction_serialization.d.ts +0 -105
- package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/avm/test_utils.d.ts +0 -16
- package/dest/avm/test_utils.d.ts.map +0 -1
- package/dest/client/client_execution_context.d.ts +0 -214
- package/dest/client/client_execution_context.d.ts.map +0 -1
- package/dest/client/db_oracle.d.ts +0 -229
- package/dest/client/db_oracle.d.ts.map +0 -1
- package/dest/client/execution_note_cache.d.ts +0 -93
- package/dest/client/execution_note_cache.d.ts.map +0 -1
- package/dest/client/index.d.ts +0 -15
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/pick_notes.d.ts +0 -85
- package/dest/client/pick_notes.d.ts.map +0 -1
- package/dest/client/private_execution.d.ts +0 -19
- package/dest/client/private_execution.d.ts.map +0 -1
- package/dest/client/simulator.d.ts +0 -60
- package/dest/client/simulator.d.ts.map +0 -1
- package/dest/client/unconstrained_execution.d.ts +0 -10
- package/dest/client/unconstrained_execution.d.ts.map +0 -1
- package/dest/client/view_data_oracle.d.ts +0 -159
- package/dest/client/view_data_oracle.d.ts.map +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -4
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/errors.d.ts +0 -54
- package/dest/common/errors.d.ts.map +0 -1
- package/dest/common/hashed_values_cache.d.ts +0 -28
- package/dest/common/hashed_values_cache.d.ts.map +0 -1
- package/dest/common/index.d.ts +0 -3
- package/dest/common/index.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/simulation_provider.d.ts +0 -19
- package/dest/common/simulation_provider.d.ts.map +0 -1
- package/dest/common.d.ts +0 -2
- package/dest/common.d.ts.map +0 -1
- package/dest/providers/acvm_native.d.ts +0 -40
- package/dest/providers/acvm_native.d.ts.map +0 -1
- package/dest/providers/acvm_wasm.d.ts +0 -15
- package/dest/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/providers/factory.d.ts +0 -12
- package/dest/providers/factory.d.ts.map +0 -1
- package/dest/providers/index.d.ts +0 -5
- package/dest/providers/index.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/db_interfaces.d.ts +0 -105
- package/dest/public/db_interfaces.d.ts.map +0 -1
- package/dest/public/execution.d.ts +0 -102
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/executor_metrics.d.ts +0 -13
- package/dest/public/executor_metrics.d.ts.map +0 -1
- package/dest/public/fee_payment.d.ts +0 -11
- package/dest/public/fee_payment.d.ts.map +0 -1
- package/dest/public/fixtures/index.d.ts +0 -3
- package/dest/public/fixtures/index.d.ts.map +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +0 -21
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +0 -1
- package/dest/public/fixtures/utils.d.ts +0 -17
- package/dest/public/fixtures/utils.d.ts.map +0 -1
- package/dest/public/index.d.ts +0 -9
- package/dest/public/index.d.ts.map +0 -1
- package/dest/public/public_db_sources.d.ts +0 -81
- package/dest/public/public_db_sources.d.ts.map +0 -1
- package/dest/public/public_processor.d.ts +0 -72
- package/dest/public/public_processor.d.ts.map +0 -1
- package/dest/public/public_processor_metrics.d.ts +0 -27
- package/dest/public/public_processor_metrics.d.ts.map +0 -1
- package/dest/public/public_tx_context.d.ts +0 -131
- package/dest/public/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator.d.ts +0 -99
- package/dest/public/public_tx_simulator.d.ts.map +0 -1
- package/dest/public/side_effect_errors.d.ts +0 -4
- package/dest/public/side_effect_errors.d.ts.map +0 -1
- package/dest/public/side_effect_trace.d.ts +0 -126
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.d.ts +0 -32
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/unique_class_ids.d.ts +0 -37
- package/dest/public/unique_class_ids.d.ts.map +0 -1
- package/dest/public/utils.d.ts +0 -5
- package/dest/public/utils.d.ts.map +0 -1
- package/dest/server.d.ts +0 -6
- package/dest/server.d.ts.map +0 -1
- package/dest/stats/index.d.ts +0 -2
- package/dest/stats/index.d.ts.map +0 -1
- package/dest/stats/stats.d.ts +0 -4
- package/dest/stats/stats.d.ts.map +0 -1
- package/dest/test/utils.d.ts +0 -12
- package/dest/test/utils.d.ts.map +0 -1
|
@@ -1,46 +1,44 @@
|
|
|
1
|
-
var _ExecutionNoteCache_instances, _ExecutionNoteCache_addNote;
|
|
2
|
-
import { __classPrivateFieldGet } from "tslib";
|
|
3
1
|
import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/circuits.js/hash';
|
|
4
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
3
|
/**
|
|
6
4
|
* Data that's accessible by all the function calls in an execution.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
*/ export class ExecutionNoteCache {
|
|
6
|
+
txRequestHash;
|
|
7
|
+
/**
|
|
8
|
+
* New notes created in this transaction.
|
|
9
|
+
* They are pushed to this array in the same order as they are emitted.
|
|
10
|
+
*/ notes;
|
|
11
|
+
/**
|
|
12
|
+
* This mapping maps from a contract address to the notes in the contract.
|
|
13
|
+
*/ noteMap;
|
|
14
|
+
/**
|
|
15
|
+
* This maps from a contract address to the nullifiers emitted from the contract.
|
|
16
|
+
* The note which is nullified might be new or not (i.e., was generated in a previous transaction).
|
|
17
|
+
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
18
|
+
*/ nullifierMap;
|
|
19
|
+
/**
|
|
20
|
+
* All nullifiers emitted in this transaction.
|
|
21
|
+
*/ allNullifiers;
|
|
22
|
+
minRevertibleSideEffectCounter;
|
|
23
|
+
inRevertiblePhase;
|
|
24
|
+
/**
|
|
25
|
+
* We don't need to use the tx request hash for nonces if another non revertible nullifier is emitted.
|
|
26
|
+
* In that case we disable injecting the tx request hash as a nullifier.
|
|
27
|
+
*/ usedTxRequestHashForNonces;
|
|
28
|
+
constructor(txRequestHash){
|
|
11
29
|
this.txRequestHash = txRequestHash;
|
|
12
|
-
/**
|
|
13
|
-
* New notes created in this transaction.
|
|
14
|
-
* They are pushed to this array in the same order as they are emitted.
|
|
15
|
-
*/
|
|
16
30
|
this.notes = [];
|
|
17
|
-
/**
|
|
18
|
-
* This mapping maps from a contract address to the notes in the contract.
|
|
19
|
-
*/
|
|
20
31
|
this.noteMap = new Map();
|
|
21
|
-
/**
|
|
22
|
-
* This maps from a contract address to the nullifiers emitted from the contract.
|
|
23
|
-
* The note which is nullified might be new or not (i.e., was generated in a previous transaction).
|
|
24
|
-
* Note that their value (bigint representation) is used because Frs cannot be looked up in Sets.
|
|
25
|
-
*/
|
|
26
32
|
this.nullifierMap = new Map();
|
|
27
|
-
/**
|
|
28
|
-
* All nullifiers emitted in this transaction.
|
|
29
|
-
*/
|
|
30
33
|
this.allNullifiers = new Set();
|
|
31
34
|
this.minRevertibleSideEffectCounter = 0;
|
|
32
35
|
this.inRevertiblePhase = false;
|
|
33
|
-
/**
|
|
34
|
-
* We don't need to use the tx request hash for nonces if another non revertible nullifier is emitted.
|
|
35
|
-
* In that case we disable injecting the tx request hash as a nullifier.
|
|
36
|
-
*/
|
|
37
36
|
this.usedTxRequestHashForNonces = true;
|
|
38
37
|
}
|
|
39
38
|
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
async setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter) {
|
|
39
|
+
* Enters the revertible phase of the transaction.
|
|
40
|
+
* @param minRevertibleSideEffectCounter - The counter at which the transaction enters the revertible phase.
|
|
41
|
+
*/ async setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter) {
|
|
44
42
|
if (this.inRevertiblePhase) {
|
|
45
43
|
throw new Error(`Cannot enter the revertible phase twice. Current counter: ${minRevertibleSideEffectCounter}. Previous enter counter: ${this.minRevertibleSideEffectCounter}`);
|
|
46
44
|
}
|
|
@@ -56,19 +54,22 @@ export class ExecutionNoteCache {
|
|
|
56
54
|
// They cannot be squashed by nullifiers emitted after minRevertibleSideEffectCounter is set.
|
|
57
55
|
// Their indexes in the tx are known at this point and won't change. So we can assign a nonce to each one of them.
|
|
58
56
|
// The nonces will be used to create the "complete" nullifier.
|
|
59
|
-
const updatedNotes = await Promise.all(this.notes.map(async ({ note, counter }, i)
|
|
57
|
+
const updatedNotes = await Promise.all(this.notes.map(async ({ note, counter }, i)=>{
|
|
60
58
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
61
59
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, await siloNoteHash(note.contractAddress, note.noteHash));
|
|
62
60
|
return {
|
|
63
61
|
counter,
|
|
64
|
-
note: {
|
|
65
|
-
|
|
62
|
+
note: {
|
|
63
|
+
...note,
|
|
64
|
+
nonce
|
|
65
|
+
},
|
|
66
|
+
noteHashForConsumption: uniqueNoteHash
|
|
66
67
|
};
|
|
67
68
|
}));
|
|
68
69
|
// Rebuild the data.
|
|
69
70
|
this.notes = [];
|
|
70
71
|
this.noteMap = new Map();
|
|
71
|
-
updatedNotes.forEach(n
|
|
72
|
+
updatedNotes.forEach((n)=>this.#addNote(n));
|
|
72
73
|
}
|
|
73
74
|
finish() {
|
|
74
75
|
// If we never entered the revertible phase, we need to use the tx request hash as a nonce for the notes if no nullifiers have been emitted.
|
|
@@ -77,93 +78,98 @@ export class ExecutionNoteCache {
|
|
|
77
78
|
}
|
|
78
79
|
// If we entered the revertible phase, the nonce generator was decided based on wether or not a nullifier was emitted before entering.
|
|
79
80
|
return {
|
|
80
|
-
usedTxRequestHashForNonces: this.usedTxRequestHashForNonces
|
|
81
|
+
usedTxRequestHashForNonces: this.usedTxRequestHashForNonces
|
|
81
82
|
};
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
addNewNote(note, counter) {
|
|
85
|
+
* Add a new note to cache.
|
|
86
|
+
* @param note - New note created during execution.
|
|
87
|
+
*/ addNewNote(note, counter) {
|
|
88
88
|
const previousNote = this.notes[this.notes.length - 1];
|
|
89
89
|
if (previousNote && previousNote.counter >= counter) {
|
|
90
90
|
throw new Error(`Note hash counters must be strictly increasing. Current counter: ${counter}. Previous counter: ${previousNote.counter}.`);
|
|
91
91
|
}
|
|
92
|
-
|
|
92
|
+
this.#addNote({
|
|
93
|
+
note,
|
|
94
|
+
counter,
|
|
95
|
+
noteHashForConsumption: note.noteHash
|
|
96
|
+
});
|
|
93
97
|
}
|
|
94
98
|
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
async nullifyNote(contractAddress, innerNullifier, noteHash) {
|
|
99
|
+
* Add a nullifier to cache. It could be for a db note or a new note created during execution.
|
|
100
|
+
* @param contractAddress - Contract address of the note.
|
|
101
|
+
* @param innerNullifier - Inner nullifier of the note.
|
|
102
|
+
* @param noteHash - A hash of the note. If this value equals 0, it means the note being nullified is from a previous
|
|
103
|
+
* transaction (and thus not a new note).
|
|
104
|
+
*/ async nullifyNote(contractAddress, innerNullifier, noteHash) {
|
|
102
105
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
103
106
|
let nullifiedNoteHashCounter = undefined;
|
|
104
107
|
// Find and remove the matching new note and log(s) if the emitted noteHash is not empty.
|
|
105
108
|
if (!noteHash.isEmpty()) {
|
|
106
109
|
const notesInContract = this.noteMap.get(contractAddress.toBigInt()) ?? [];
|
|
107
|
-
const noteIndexToRemove = notesInContract.findIndex(n
|
|
110
|
+
const noteIndexToRemove = notesInContract.findIndex((n)=>n.noteHashForConsumption.equals(noteHash));
|
|
108
111
|
if (noteIndexToRemove === -1) {
|
|
109
112
|
throw new Error('Attempt to remove a pending note that does not exist.');
|
|
110
113
|
}
|
|
111
114
|
const note = notesInContract.splice(noteIndexToRemove, 1)[0];
|
|
112
115
|
nullifiedNoteHashCounter = note.counter;
|
|
113
116
|
this.noteMap.set(contractAddress.toBigInt(), notesInContract);
|
|
114
|
-
this.notes = this.notes.filter(n
|
|
117
|
+
this.notes = this.notes.filter((n)=>n.counter !== note.counter);
|
|
115
118
|
// If the note is non revertible and the nullifier was emitted in the revertible phase, both the note hash and the nullifier will be emitted
|
|
116
119
|
if (this.inRevertiblePhase && note.counter < this.minRevertibleSideEffectCounter) {
|
|
117
120
|
this.recordNullifier(contractAddress, siloedNullifier);
|
|
118
121
|
}
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
122
|
+
} else {
|
|
121
123
|
// If the note being nullified comes from a previous tx the nullifier will be emitted.
|
|
122
124
|
this.recordNullifier(contractAddress, siloedNullifier);
|
|
123
125
|
}
|
|
124
126
|
return nullifiedNoteHashCounter;
|
|
125
127
|
}
|
|
126
128
|
/**
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
async nullifierCreated(contractAddress, innerNullifier) {
|
|
129
|
+
* Adds a nullifier to the cache. Note cache needs to track all nullifiers to decide which nullifier to use for note siloing.
|
|
130
|
+
* @param contractAddress - Contract address that emitted the nullifier.
|
|
131
|
+
* @param innerNullifier
|
|
132
|
+
*/ async nullifierCreated(contractAddress, innerNullifier) {
|
|
132
133
|
const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
|
|
133
134
|
this.recordNullifier(contractAddress, siloedNullifier);
|
|
134
135
|
}
|
|
135
136
|
/**
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
getNotes(contractAddress, storageSlot) {
|
|
137
|
+
* Return notes created up to current point in execution.
|
|
138
|
+
* If a nullifier for a note in this list is emitted, the note will be deleted.
|
|
139
|
+
* @param contractAddress - Contract address of the notes.
|
|
140
|
+
* @param storageSlot - Storage slot of the notes.
|
|
141
|
+
**/ getNotes(contractAddress, storageSlot) {
|
|
142
142
|
const notes = this.noteMap.get(contractAddress.toBigInt()) ?? [];
|
|
143
|
-
return notes.filter(n
|
|
143
|
+
return notes.filter((n)=>n.note.storageSlot.equals(storageSlot)).map((n)=>n.note);
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
checkNoteExists(contractAddress, noteHash) {
|
|
146
|
+
* Check if a note exists in the newNotes array.
|
|
147
|
+
* @param contractAddress - Contract address of the note.
|
|
148
|
+
* @param storageSlot - Storage slot of the note.
|
|
149
|
+
* @param noteHash - A hash of the note.
|
|
150
|
+
**/ checkNoteExists(contractAddress, noteHash) {
|
|
152
151
|
const notes = this.noteMap.get(contractAddress.toBigInt()) ?? [];
|
|
153
|
-
return notes.some(n
|
|
152
|
+
return notes.some((n)=>n.note.noteHash.equals(noteHash));
|
|
154
153
|
}
|
|
155
154
|
/**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
getNullifiers(contractAddress) {
|
|
155
|
+
* Return all nullifiers emitted from a contract.
|
|
156
|
+
* @param contractAddress - Address of the contract.
|
|
157
|
+
*/ getNullifiers(contractAddress) {
|
|
160
158
|
return this.nullifierMap.get(contractAddress.toBigInt()) ?? new Set();
|
|
161
159
|
}
|
|
160
|
+
#addNote(note) {
|
|
161
|
+
this.notes.push(note);
|
|
162
|
+
const notes = this.noteMap.get(note.note.contractAddress.toBigInt()) ?? [];
|
|
163
|
+
notes.push(note);
|
|
164
|
+
this.noteMap.set(note.note.contractAddress.toBigInt(), notes);
|
|
165
|
+
}
|
|
162
166
|
getAllNotes() {
|
|
163
167
|
return this.notes;
|
|
164
168
|
}
|
|
165
169
|
getAllNullifiers() {
|
|
166
|
-
return [
|
|
170
|
+
return [
|
|
171
|
+
...this.allNullifiers
|
|
172
|
+
].map((n)=>new Fr(n));
|
|
167
173
|
}
|
|
168
174
|
recordNullifier(contractAddress, siloedNullifier) {
|
|
169
175
|
const nullifiers = this.getNullifiers(contractAddress);
|
|
@@ -172,10 +178,3 @@ export class ExecutionNoteCache {
|
|
|
172
178
|
this.allNullifiers.add(siloedNullifier.toBigInt());
|
|
173
179
|
}
|
|
174
180
|
}
|
|
175
|
-
_ExecutionNoteCache_instances = new WeakSet(), _ExecutionNoteCache_addNote = function _ExecutionNoteCache_addNote(note) {
|
|
176
|
-
this.notes.push(note);
|
|
177
|
-
const notes = this.noteMap.get(note.note.contractAddress.toBigInt()) ?? [];
|
|
178
|
-
notes.push(note);
|
|
179
|
-
this.noteMap.set(note.note.contractAddress.toBigInt(), notes);
|
|
180
|
-
};
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX25vdGVfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2V4ZWN1dGlvbl9ub3RlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuSCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFVOUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBaUM3QixZQUE2QixhQUFpQjs7UUFBakIsa0JBQWEsR0FBYixhQUFhLENBQUk7UUFoQzlDOzs7V0FHRztRQUNLLFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQ2xDOztXQUVHO1FBQ0ssWUFBTyxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXhEOzs7O1dBSUc7UUFDSyxpQkFBWSxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTNEOztXQUVHO1FBQ0ssa0JBQWEsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV2QyxtQ0FBOEIsR0FBRyxDQUFDLENBQUM7UUFFbkMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRWxDOzs7V0FHRztRQUNLLCtCQUEwQixHQUFHLElBQUksQ0FBQztJQUVPLENBQUM7SUFFbEQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLDhCQUFzQztRQUNuRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELDhCQUE4Qiw2QkFBNkIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQzlKLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsOEJBQThCLEdBQUcsOEJBQThCLENBQUM7UUFFckUsSUFBSSxj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
|
package/dest/client/index.js
CHANGED
|
@@ -11,4 +11,3 @@ export { TypedOracle } from '../acvm/oracle/typed_oracle.js';
|
|
|
11
11
|
export { Oracle } from '../acvm/oracle/oracle.js';
|
|
12
12
|
export { MessageLoadOracleInputs } from '../common/message_load_oracle_inputs.js';
|
|
13
13
|
export { resolveAssertionMessageFromRevertData, resolveOpcodeLocations } from '../common/errors.js';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVksMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFZLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUscUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyJ9
|
|
@@ -2,31 +2,30 @@ import { Comparator } from '@aztec/circuit-types';
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
/**
|
|
4
4
|
* The order to sort an array.
|
|
5
|
-
*/
|
|
6
|
-
export var SortOrder;
|
|
7
|
-
(function (SortOrder) {
|
|
5
|
+
*/ export var SortOrder = /*#__PURE__*/ function(SortOrder) {
|
|
8
6
|
SortOrder[SortOrder["NADA"] = 0] = "NADA";
|
|
9
7
|
SortOrder[SortOrder["DESC"] = 1] = "DESC";
|
|
10
8
|
SortOrder[SortOrder["ASC"] = 2] = "ASC";
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
return SortOrder;
|
|
10
|
+
}({});
|
|
11
|
+
const selectPropertyFromPackedNoteContent = (noteData, selector)=>{
|
|
13
12
|
const noteValueBuffer = noteData[selector.index].toBuffer();
|
|
14
13
|
const noteValue = noteValueBuffer.subarray(selector.offset, selector.offset + selector.length);
|
|
15
14
|
return Fr.fromBuffer(noteValue);
|
|
16
15
|
};
|
|
17
|
-
const selectNotes = (noteDatas, selects)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}));
|
|
29
|
-
const sortNotes = (a, b, sorts, level = 0)
|
|
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)=>{
|
|
30
29
|
if (sorts[level] === undefined) {
|
|
31
30
|
return 0;
|
|
32
31
|
}
|
|
@@ -36,19 +35,17 @@ const sortNotes = (a, b, sorts, level = 0) => {
|
|
|
36
35
|
}
|
|
37
36
|
const aValue = selectPropertyFromPackedNoteContent(a, selector);
|
|
38
37
|
const bValue = selectPropertyFromPackedNoteContent(b, selector);
|
|
39
|
-
const dir = order === 1 ? [
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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];
|
|
45
46
|
};
|
|
46
47
|
/**
|
|
47
48
|
* Pick from a note array a number of notes that meet the criteria.
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
|
-
return selectNotes(noteDatas, selects)
|
|
51
|
-
.sort((a, b) => sortNotes(a.note.items, b.note.items, sorts))
|
|
52
|
-
.slice(offset, limit ? offset + limit : undefined);
|
|
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);
|
|
53
51
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja19ub3Rlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcGlja19ub3Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBMEI5Qzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIseUNBQVEsQ0FBQTtJQUNSLHlDQUFRLENBQUE7SUFDUix1Q0FBTyxDQUFBO0FBQ1QsQ0FBQyxFQUpXLFNBQVMsS0FBVCxTQUFTLFFBSXBCO0FBb0RELE1BQU0sbUNBQW1DLEdBQUcsQ0FBQyxRQUFjLEVBQUUsUUFBMEIsRUFBTSxFQUFFO0lBQzdGLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9GLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUF5QixTQUFjLEVBQUUsT0FBaUIsRUFBTyxFQUFFLENBQ3JGLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO0lBQ2hELE1BQU0sV0FBVyxHQUFHLG1DQUFtQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sa0JBQWtCLEdBQUc7UUFDekIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEQsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsRCxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUM1QyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDL0MsQ0FBQztJQUVGLE9BQU8sa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUMxQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBRUosTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFFLEtBQWEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUU7SUFDdkUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVoRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDNUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUN2QyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFNBQWMsRUFDZCxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQWM7SUFFL0QsT0FBTyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztTQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDNUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PrivateCallExecutionResult } from '@aztec/circuit-types';
|
|
2
|
-
import { Fr, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH, PrivateCircuitPublicInputs
|
|
2
|
+
import { Fr, PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH, PrivateCircuitPublicInputs } from '@aztec/circuits.js';
|
|
3
3
|
import { countArgumentsSize } from '@aztec/foundation/abi';
|
|
4
4
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -8,22 +8,23 @@ import { Oracle, extractCallStack } from '../acvm/index.js';
|
|
|
8
8
|
import { ExecutionError, resolveAssertionMessageFromError } from '../common/errors.js';
|
|
9
9
|
/**
|
|
10
10
|
* Execute a private function and return the execution result.
|
|
11
|
-
*/
|
|
12
|
-
export async function executePrivateFunction(simulator, context, artifact, contractAddress, functionSelector, log = createLogger('simulator:private_execution')) {
|
|
11
|
+
*/ export async function executePrivateFunction(simulator, context, artifact, contractAddress, functionSelector, log = createLogger('simulator:private_execution')) {
|
|
13
12
|
const functionName = await context.getDebugFunctionName();
|
|
14
|
-
log.verbose(`Executing private function ${functionName}`, {
|
|
13
|
+
log.verbose(`Executing private function ${functionName}`, {
|
|
14
|
+
contract: contractAddress
|
|
15
|
+
});
|
|
15
16
|
const acir = artifact.bytecode;
|
|
16
17
|
const initialWitness = context.getInitialWitness(artifact);
|
|
17
18
|
const acvmCallback = new Oracle(context);
|
|
18
19
|
const timer = new Timer();
|
|
19
|
-
const acirExecutionResult = await simulator
|
|
20
|
-
.executeUserCircuit(acir, initialWitness, acvmCallback)
|
|
21
|
-
.catch((err) => {
|
|
20
|
+
const acirExecutionResult = await simulator.executeUserCircuit(acir, initialWitness, acvmCallback).catch((err)=>{
|
|
22
21
|
err.message = resolveAssertionMessageFromError(err, artifact);
|
|
23
22
|
throw new ExecutionError(err.message, {
|
|
24
23
|
contractAddress,
|
|
25
|
-
functionSelector
|
|
26
|
-
}, extractCallStack(err, artifact.debug), {
|
|
24
|
+
functionSelector
|
|
25
|
+
}, extractCallStack(err, artifact.debug), {
|
|
26
|
+
cause: err
|
|
27
|
+
});
|
|
27
28
|
});
|
|
28
29
|
const duration = timer.ms();
|
|
29
30
|
const partialWitness = acirExecutionResult.partialWitness;
|
|
@@ -36,7 +37,7 @@ export async function executePrivateFunction(simulator, context, artifact, contr
|
|
|
36
37
|
eventName: 'circuit-witness-generation',
|
|
37
38
|
inputSize: initialWitnessSize,
|
|
38
39
|
outputSize: publicInputs.toBuffer().length,
|
|
39
|
-
appCircuitName: functionName
|
|
40
|
+
appCircuitName: functionName
|
|
40
41
|
});
|
|
41
42
|
const contractClassLogs = context.getContractClassLogs();
|
|
42
43
|
const rawReturnValues = await context.loadFromExecutionCache(publicInputs.returnsHash);
|
|
@@ -54,13 +55,12 @@ export async function executePrivateFunction(simulator, context, artifact, contr
|
|
|
54
55
|
* @param artifact - The function artifact
|
|
55
56
|
* @param partialWitness - The partial witness, result of simulating the function.
|
|
56
57
|
* @returns - The public inputs.
|
|
57
|
-
*/
|
|
58
|
-
export function extractPrivateCircuitPublicInputs(artifact, partialWitness) {
|
|
58
|
+
*/ export function extractPrivateCircuitPublicInputs(artifact, partialWitness) {
|
|
59
59
|
const parametersSize = countArgumentsSize(artifact) + PRIVATE_CONTEXT_INPUTS_LENGTH;
|
|
60
60
|
const returnsSize = PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH;
|
|
61
61
|
const returnData = [];
|
|
62
62
|
// Return values always appear in the witness after arguments.
|
|
63
|
-
for
|
|
63
|
+
for(let i = parametersSize; i < parametersSize + returnsSize; i++){
|
|
64
64
|
const returnedField = partialWitness.get(i);
|
|
65
65
|
if (returnedField === undefined) {
|
|
66
66
|
throw new Error(`Missing return value for index ${i}`);
|
|
@@ -69,4 +69,3 @@ export function extractPrivateCircuitPublicInputs(artifact, partialWitness) {
|
|
|
69
69
|
}
|
|
70
70
|
return PrivateCircuitPublicInputs.fromFields(returnData);
|
|
71
71
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3ByaXZhdGVfZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxFLE9BQU8sRUFDTCxFQUFFLEVBQ0Ysb0NBQW9DLEVBQ3BDLDZCQUE2QixFQUM3QiwwQkFBMEIsR0FDM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWdELGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFvQixNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdkY7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxTQUE2QixFQUM3QixPQUErQixFQUMvQixRQUEwQixFQUMxQixlQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsR0FBRyxHQUFHLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQztJQUVqRCxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFELEdBQUcsQ0FBQyxPQUFPLENBQUMsOEJBQThCLFlBQVksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDekYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMvQixNQUFNLGNBQWMsR0FBRyxP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
|
package/dest/client/simulator.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { PrivateExecutionResult
|
|
1
|
+
import { PrivateExecutionResult } from '@aztec/circuit-types';
|
|
2
2
|
import { CallContext } from '@aztec/circuits.js';
|
|
3
|
-
import { FunctionSelector, FunctionType, encodeArguments
|
|
3
|
+
import { FunctionSelector, FunctionType, encodeArguments } from '@aztec/foundation/abi';
|
|
4
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
6
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -13,24 +13,26 @@ import { executeUnconstrainedFunction } from './unconstrained_execution.js';
|
|
|
13
13
|
import { ViewDataOracle } from './view_data_oracle.js';
|
|
14
14
|
/**
|
|
15
15
|
* The ACIR simulator.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
*/ export class AcirSimulator {
|
|
17
|
+
db;
|
|
18
|
+
node;
|
|
19
|
+
simulationProvider;
|
|
20
|
+
log;
|
|
21
|
+
constructor(db, node, simulationProvider){
|
|
19
22
|
this.db = db;
|
|
20
23
|
this.node = node;
|
|
21
24
|
this.simulationProvider = simulationProvider;
|
|
22
25
|
this.log = createLogger('simulator');
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
async run(request, entryPointArtifact, contractAddress, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), scopes) {
|
|
28
|
+
* Runs a private function.
|
|
29
|
+
* @param request - The transaction request.
|
|
30
|
+
* @param entryPointArtifact - The artifact of the entry point function.
|
|
31
|
+
* @param contractAddress - The address of the contract (should match request.origin)
|
|
32
|
+
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract or a specific account.
|
|
33
|
+
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
34
|
+
* @returns The result of the execution.
|
|
35
|
+
*/ async run(request, entryPointArtifact, contractAddress, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), scopes) {
|
|
34
36
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
35
37
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
36
38
|
}
|
|
@@ -49,41 +51,37 @@ export class AcirSimulator {
|
|
|
49
51
|
const { usedTxRequestHashForNonces } = noteCache.finish();
|
|
50
52
|
const firstNullifierHint = usedTxRequestHashForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
|
|
51
53
|
return new PrivateExecutionResult(executionResult, firstNullifierHint);
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
+
} catch (err) {
|
|
54
55
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
async runUnconstrained(request, entryPointArtifact, contractAddress, scopes) {
|
|
59
|
+
* Runs an unconstrained function.
|
|
60
|
+
* @param request - The transaction request.
|
|
61
|
+
* @param entryPointArtifact - The artifact of the entry point function.
|
|
62
|
+
* @param contractAddress - The address of the contract.
|
|
63
|
+
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
64
|
+
*/ async runUnconstrained(request, entryPointArtifact, contractAddress, scopes) {
|
|
65
65
|
if (entryPointArtifact.functionType !== FunctionType.UNCONSTRAINED) {
|
|
66
66
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as unconstrained`);
|
|
67
67
|
}
|
|
68
68
|
const context = new ViewDataOracle(contractAddress, [], this.db, this.node, undefined, scopes);
|
|
69
69
|
try {
|
|
70
70
|
return await executeUnconstrainedFunction(this.simulationProvider, context, entryPointArtifact, contractAddress, request.selector, request.args);
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
71
|
+
} catch (err) {
|
|
73
72
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
74
73
|
}
|
|
75
74
|
}
|
|
76
75
|
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
async computeNoteHashAndOptionallyANullifier(contractAddress, nonce, storageSlot, noteTypeId, computeNullifier, note) {
|
|
76
|
+
* Computes the inner nullifier of a note.
|
|
77
|
+
* @param contractAddress - The address of the contract.
|
|
78
|
+
* @param nonce - The nonce of the note hash.
|
|
79
|
+
* @param storageSlot - The storage slot.
|
|
80
|
+
* @param noteTypeId - The note type identifier.
|
|
81
|
+
* @param computeNullifier - A flag indicating whether to compute the nullifier or just return 0.
|
|
82
|
+
* @param note - The note.
|
|
83
|
+
* @returns The nullifier.
|
|
84
|
+
*/ async computeNoteHashAndOptionallyANullifier(contractAddress, nonce, storageSlot, noteTypeId, computeNullifier, note) {
|
|
87
85
|
const artifact = await this.db.getFunctionArtifactByName(contractAddress, 'compute_note_hash_and_optionally_a_nullifier');
|
|
88
86
|
if (!artifact) {
|
|
89
87
|
throw new Error(`Mandatory implementation of "compute_note_hash_and_optionally_a_nullifier" missing in noir contract ${contractAddress.toString()}.`);
|
|
@@ -108,29 +106,27 @@ export class AcirSimulator {
|
|
|
108
106
|
storageSlot,
|
|
109
107
|
noteTypeId,
|
|
110
108
|
computeNullifier,
|
|
111
|
-
extendedNoteItems
|
|
109
|
+
extendedNoteItems
|
|
112
110
|
]),
|
|
113
|
-
returnTypes: artifact.returnTypes
|
|
111
|
+
returnTypes: artifact.returnTypes
|
|
114
112
|
};
|
|
115
|
-
const [noteHash, uniqueNoteHash, siloedNoteHash, innerNullifier] =
|
|
113
|
+
const [noteHash, uniqueNoteHash, siloedNoteHash, innerNullifier] = await this.runUnconstrained(execRequest, artifact, contractAddress);
|
|
116
114
|
return {
|
|
117
115
|
noteHash: new Fr(noteHash),
|
|
118
116
|
uniqueNoteHash: new Fr(uniqueNoteHash),
|
|
119
117
|
siloedNoteHash: new Fr(siloedNoteHash),
|
|
120
|
-
innerNullifier: new Fr(innerNullifier)
|
|
118
|
+
innerNullifier: new Fr(innerNullifier)
|
|
121
119
|
};
|
|
122
120
|
}
|
|
123
121
|
/**
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
async computeNoteHash(contractAddress, storageSlot, noteTypeId, note) {
|
|
122
|
+
* Computes a hash of the note.
|
|
123
|
+
* @param contractAddress - The address of the contract.
|
|
124
|
+
* @param storageSlot - The storage slot.
|
|
125
|
+
* @param noteTypeId - The note type identifier.
|
|
126
|
+
* @param note - The note.
|
|
127
|
+
* @returns The note hash.
|
|
128
|
+
*/ async computeNoteHash(contractAddress, storageSlot, noteTypeId, note) {
|
|
132
129
|
const { noteHash } = await this.computeNoteHashAndOptionallyANullifier(contractAddress, Fr.ZERO, storageSlot, noteTypeId, false, note);
|
|
133
130
|
return noteHash;
|
|
134
131
|
}
|
|
135
132
|
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9zaW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLHNCQUFzQixHQUV2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFFWixlQUFlLEdBQ2hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFBb0IsRUFBWSxFQUFVLElBQWUsRUFBVSxrQkFBc0M7UUFBckYsT0FBRSxHQUFGLEVBQUUsQ0FBVTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVc7UUFBVSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3ZHLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxD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
|
|
@@ -6,25 +6,22 @@ import { ExecutionError, resolveAssertionMessageFromError } from '../common/erro
|
|
|
6
6
|
// docs:start:execute_unconstrained_function
|
|
7
7
|
/**
|
|
8
8
|
* Execute an unconstrained function and return the decoded values.
|
|
9
|
-
*/
|
|
10
|
-
export async function executeUnconstrainedFunction(simulatorProvider, oracle, artifact, contractAddress, functionSelector, args, log = createLogger('simulator:unconstrained_execution')) {
|
|
9
|
+
*/ export async function executeUnconstrainedFunction(simulatorProvider, oracle, artifact, contractAddress, functionSelector, args, log = createLogger('simulator:unconstrained_execution')) {
|
|
11
10
|
log.verbose(`Executing unconstrained function ${artifact.name}`, {
|
|
12
11
|
contract: contractAddress,
|
|
13
|
-
selector: functionSelector
|
|
12
|
+
selector: functionSelector
|
|
14
13
|
});
|
|
15
14
|
const acir = artifact.bytecode;
|
|
16
15
|
const initialWitness = toACVMWitness(0, args);
|
|
17
|
-
const acirExecutionResult = await simulatorProvider
|
|
18
|
-
.executeUserCircuit(acir, initialWitness, new Oracle(oracle))
|
|
19
|
-
.catch((err) => {
|
|
16
|
+
const acirExecutionResult = await simulatorProvider.executeUserCircuit(acir, initialWitness, new Oracle(oracle)).catch((err)=>{
|
|
20
17
|
err.message = resolveAssertionMessageFromError(err, artifact);
|
|
21
18
|
throw new ExecutionError(err.message, {
|
|
22
19
|
contractAddress,
|
|
23
|
-
functionSelector
|
|
24
|
-
}, extractCallStack(err, artifact.debug), {
|
|
20
|
+
functionSelector
|
|
21
|
+
}, extractCallStack(err, artifact.debug), {
|
|
22
|
+
cause: err
|
|
23
|
+
});
|
|
25
24
|
});
|
|
26
25
|
const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness);
|
|
27
26
|
return decodeFromAbi(artifact.returnTypes, returnWitness);
|
|
28
|
-
}
|
|
29
|
-
// docs:end:execute_unconstrained_function
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5jb25zdHJhaW5lZF9leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L3VuY29uc3RyYWluZWRfZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXZGLDRDQUE0QztBQUM1Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsNEJBQTRCLENBQ2hELGlCQUFxQyxFQUNyQyxNQUFzQixFQUN0QixRQUEwQixFQUMxQixlQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsSUFBVSxFQUNWLEdBQUcsR0FBRyxZQUFZLENBQUMsbUNBQW1DLENBQUM7SUFFdkQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQy9ELFFBQVEsRUFBRSxlQUFlO1FBQ3pCLFFBQVEsRUFBRSxnQkFBZ0I7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMvQixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxpQkFBaUI7U0FDaEQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1RCxLQUFLLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtRQUNwQixHQUFHLENBQUMsT0FBTyxHQUFHLGdDQUFnQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxNQUFNLElBQUksY0FBYyxDQUN0QixHQUFHLENBQUMsT0FBTyxFQUNYO1lBQ0UsZUFBZTtZQUNmLGdCQUFnQjtTQUNqQixFQUNELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ3JDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVMLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUNELDBDQUEwQyJ9
|
|
27
|
+
} // docs:end:execute_unconstrained_function
|