@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
package/dest/avm/avm_context.js
CHANGED
|
@@ -3,42 +3,39 @@ import { AvmMachineState } from './avm_machine_state.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* An execution context includes the information necessary to initiate AVM
|
|
5
5
|
* execution along with all state maintained by the AVM throughout execution.
|
|
6
|
-
*/
|
|
7
|
-
|
|
6
|
+
*/ export class AvmContext {
|
|
7
|
+
persistableState;
|
|
8
|
+
environment;
|
|
9
|
+
machineState;
|
|
8
10
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
constructor(persistableState, environment, machineState) {
|
|
11
|
+
* Create a new AVM context
|
|
12
|
+
* @param persistableState - Manages world state and accrued substate during execution - (caching, fetching, tracing)
|
|
13
|
+
* @param environment - Contains constant variables provided by the kernel
|
|
14
|
+
* @param machineState - VM state that is modified on an instruction-by-instruction basis
|
|
15
|
+
* @returns new AvmContext instance
|
|
16
|
+
*/ constructor(persistableState, environment, machineState){
|
|
16
17
|
this.persistableState = persistableState;
|
|
17
18
|
this.environment = environment;
|
|
18
19
|
this.machineState = machineState;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const deriveFn = callType === 'CALL'
|
|
36
|
-
? this.environment.deriveEnvironmentForNestedCall
|
|
37
|
-
: this.environment.deriveEnvironmentForNestedStaticCall;
|
|
22
|
+
* Prepare a new AVM context that will be ready for an external/nested call
|
|
23
|
+
* - Fork the world state journal
|
|
24
|
+
* - Derive a machine state from the current state
|
|
25
|
+
* - E.g., gas metering is preserved but pc is reset
|
|
26
|
+
* - Derive an execution environment from the caller/parent
|
|
27
|
+
* - Alter address
|
|
28
|
+
*
|
|
29
|
+
* @param address - The contract instance to initialize a context for
|
|
30
|
+
* @param calldata - Data/arguments for nested call
|
|
31
|
+
* @param allocatedGas - Gas allocated for the nested call
|
|
32
|
+
* @param callType - Type of call (CALL or STATICCALL)
|
|
33
|
+
* @returns new AvmContext instance
|
|
34
|
+
*/ createNestedContractCallContext(address, calldata, allocatedGas, callType) {
|
|
35
|
+
const deriveFn = callType === 'CALL' ? this.environment.deriveEnvironmentForNestedCall : this.environment.deriveEnvironmentForNestedStaticCall;
|
|
38
36
|
const newExecutionEnvironment = deriveFn.call(this.environment, address, calldata);
|
|
39
37
|
const forkedWorldState = this.persistableState.fork();
|
|
40
38
|
const machineState = AvmMachineState.fromState(gasToGasLeft(allocatedGas));
|
|
41
39
|
return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7Ozs7T0FNRztJQUNILFlBQ1MsZ0JBQTRDLEVBQzVDLFdBQW9DLEVBQ3BDLFlBQTZCO1FBRjdCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNEI7UUFDNUMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtJQUNuQyxDQUFDO0lBRUo7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLCtCQUErQixDQUNwQyxPQUFxQixFQUNyQixRQUFjLEVBQ2QsWUFBaUIsRUFDakIsUUFBK0I7UUFFL0IsTUFBTSxRQUFRLEdBQ1osUUFBUSxLQUFLLE1BQU07WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsOEJBQThCO1lBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxDQUFDO1FBQzVELE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNGIn0=
|
|
@@ -3,9 +3,12 @@ import { inspect } from 'util';
|
|
|
3
3
|
import { createSimulationError } from '../common/errors.js';
|
|
4
4
|
/**
|
|
5
5
|
* Results of an contract call's execution in the AVM.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
*/ export class AvmContractCallResult {
|
|
7
|
+
reverted;
|
|
8
|
+
output;
|
|
9
|
+
gasLeft;
|
|
10
|
+
revertReason;
|
|
11
|
+
constructor(reverted, output, gasLeft, revertReason){
|
|
9
12
|
this.reverted = reverted;
|
|
10
13
|
this.output = output;
|
|
11
14
|
this.gasLeft = gasLeft;
|
|
@@ -26,9 +29,12 @@ export class AvmContractCallResult {
|
|
|
26
29
|
/**
|
|
27
30
|
* Similar to AvmContractCallResult, but with a SimulationError and standard Gas
|
|
28
31
|
* which are useful for consumption external to core AVM simulation.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
*/ export class AvmFinalizedCallResult {
|
|
33
|
+
reverted;
|
|
34
|
+
output;
|
|
35
|
+
gasLeft;
|
|
36
|
+
revertReason;
|
|
37
|
+
constructor(reverted, output, gasLeft, revertReason){
|
|
32
38
|
this.reverted = reverted;
|
|
33
39
|
this.output = output;
|
|
34
40
|
this.gasLeft = gasLeft;
|
|
@@ -42,4 +48,3 @@ export class AvmFinalizedCallResult {
|
|
|
42
48
|
return resultsStr;
|
|
43
49
|
}
|
|
44
50
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2NvbnRyYWN0X2NhbGxfcmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F2bS9hdm1fY29udHJhY3RfY2FsbF9yZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJNUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQ1MsUUFBaUIsRUFDakIsTUFBWSxFQUNaLE9BQWUsRUFDZixZQUE4QjtRQUg5QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQU07UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsaUJBQVksR0FBWixZQUFZLENBQWtCO0lBQ3BDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxVQUFVLEdBQUcsYUFBYSxJQUFJLENBQUMsUUFBUSxhQUFhLElBQUksQ0FBQyxNQUFNLGNBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFVBQVUsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0csT0FBTyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RyxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1MsUUFBaUIsRUFDakIsTUFBWSxFQUNaLE9BQVksRUFDWixZQUE4QjtRQUg5QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQU07UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osaUJBQVksR0FBWixZQUFZLENBQWtCO0lBQ3BDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxVQUFVLEdBQUcsYUFBYSxJQUFJLENBQUMsUUFBUSxhQUFhLElBQUksQ0FBQyxNQUFNLGNBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFVBQVUsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ==
|
|
@@ -2,9 +2,15 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
2
2
|
/**
|
|
3
3
|
* Contains variables that remain constant during AVM execution
|
|
4
4
|
* These variables are provided by the public kernel circuit
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
*/ export class AvmExecutionEnvironment {
|
|
6
|
+
address;
|
|
7
|
+
sender;
|
|
8
|
+
contractCallDepth;
|
|
9
|
+
transactionFee;
|
|
10
|
+
globals;
|
|
11
|
+
isStaticCall;
|
|
12
|
+
calldata;
|
|
13
|
+
constructor(address, sender, contractCallDepth, transactionFee, globals, isStaticCall, calldata){
|
|
8
14
|
this.address = address;
|
|
9
15
|
this.sender = sender;
|
|
10
16
|
this.contractCallDepth = contractCallDepth;
|
|
@@ -14,9 +20,7 @@ export class AvmExecutionEnvironment {
|
|
|
14
20
|
this.calldata = calldata;
|
|
15
21
|
}
|
|
16
22
|
deriveEnvironmentForNestedCallInternal(targetAddress, calldata, isStaticCall) {
|
|
17
|
-
return new AvmExecutionEnvironment(
|
|
18
|
-
/*address=*/ targetAddress,
|
|
19
|
-
/*sender=*/ this.address, this.contractCallDepth.add(Fr.ONE), this.transactionFee, this.globals, isStaticCall, calldata);
|
|
23
|
+
return new AvmExecutionEnvironment(/*address=*/ targetAddress, /*sender=*/ this.address, this.contractCallDepth.add(Fr.ONE), this.transactionFee, this.globals, isStaticCall, calldata);
|
|
20
24
|
}
|
|
21
25
|
deriveEnvironmentForNestedCall(targetAddress, calldata) {
|
|
22
26
|
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ false);
|
|
@@ -25,4 +29,3 @@ export class AvmExecutionEnvironment {
|
|
|
25
29
|
return this.deriveEnvironmentForNestedCallInternal(targetAddress, calldata, /*isStaticCall=*/ true);
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2V4ZWN1dGlvbl9lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX2V4ZWN1dGlvbl9lbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNrQixPQUFxQixFQUNyQixNQUFvQixFQUNwQixpQkFBcUIsRUFDckIsY0FBa0IsRUFDbEIsT0FBd0IsRUFDeEIsWUFBcUIsRUFDckIsUUFBYztRQU5kLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQUk7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQUk7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQVM7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBTTtJQUM3QixDQUFDO0lBRUksc0NBQXNDLENBQUMsYUFBMkIsRUFBRSxRQUFjLEVBQUUsWUFBcUI7UUFDL0csT0FBTyxJQUFJLHVCQUF1QjtRQUNoQyxZQUFZLENBQUMsYUFBYTtRQUMxQixXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxPQUFPLEVBQ1osWUFBWSxFQUNaLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVNLDhCQUE4QixDQUFDLGFBQTJCLEVBQUUsUUFBYztRQUMvRSxPQUFPLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFTSxvQ0FBb0MsQ0FBQyxhQUEyQixFQUFFLFFBQWM7UUFDckYsT0FBTyxJQUFJLENBQUMsc0NBQXNDLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RyxDQUFDO0NBQ0YifQ==
|
package/dest/avm/avm_gas.js
CHANGED
|
@@ -3,41 +3,51 @@ import { TypeTag } from './avm_memory_types.js';
|
|
|
3
3
|
import { InstructionExecutionError } from './errors.js';
|
|
4
4
|
import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
|
|
5
5
|
import { Opcode } from './serialization/instruction_serialization.js';
|
|
6
|
-
/** Maps a Gas struct to gasLeft properties. */
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/** Maps a Gas struct to gasLeft properties. */ export function gasToGasLeft(gas) {
|
|
7
|
+
return {
|
|
8
|
+
l2GasLeft: gas.l2Gas,
|
|
9
|
+
daGasLeft: gas.daGas
|
|
10
|
+
};
|
|
9
11
|
}
|
|
10
|
-
/** Maps gasLeft properties to a gas struct. */
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
/** Maps gasLeft properties to a gas struct. */ export function gasLeftToGas(gasLeft) {
|
|
13
|
+
return {
|
|
14
|
+
l2Gas: gasLeft.l2GasLeft,
|
|
15
|
+
daGas: gasLeft.daGasLeft
|
|
16
|
+
};
|
|
13
17
|
}
|
|
14
|
-
/** Creates a new instance with all values set to zero except the ones set. */
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
/** Creates a new instance with all values set to zero except the ones set. */ export function makeGas(gasCost) {
|
|
19
|
+
return {
|
|
20
|
+
...EmptyGas,
|
|
21
|
+
...gasCost
|
|
22
|
+
};
|
|
17
23
|
}
|
|
18
|
-
/** Sums together multiple instances of Gas. */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}), EmptyGas);
|
|
24
|
+
/** Sums together multiple instances of Gas. */ export function sumGas(...gases) {
|
|
25
|
+
return gases.reduce((acc, gas)=>({
|
|
26
|
+
l2Gas: acc.l2Gas + (gas.l2Gas ?? 0),
|
|
27
|
+
daGas: acc.daGas + (gas.daGas ?? 0)
|
|
28
|
+
}), EmptyGas);
|
|
24
29
|
}
|
|
25
|
-
/** Multiplies a gas instance by a scalar. */
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
/** Multiplies a gas instance by a scalar. */ export function mulGas(gas, scalar) {
|
|
31
|
+
return {
|
|
32
|
+
l2Gas: (gas.l2Gas ?? 0) * scalar,
|
|
33
|
+
daGas: (gas.daGas ?? 0) * scalar
|
|
34
|
+
};
|
|
28
35
|
}
|
|
29
|
-
/** Zero gas across all gas dimensions. */
|
|
30
|
-
export const EmptyGas = {
|
|
36
|
+
/** Zero gas across all gas dimensions. */ export const EmptyGas = {
|
|
31
37
|
l2Gas: 0,
|
|
32
|
-
daGas: 0
|
|
38
|
+
daGas: 0
|
|
33
39
|
};
|
|
34
40
|
function makeCost(l2Gas, daGas) {
|
|
35
|
-
return {
|
|
41
|
+
return {
|
|
42
|
+
l2Gas,
|
|
43
|
+
daGas
|
|
44
|
+
};
|
|
36
45
|
}
|
|
37
|
-
/** Dimensions of gas usage: L1, L2, and DA. */
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
/** Dimensions of gas usage: L1, L2, and DA. */ export const GAS_DIMENSIONS = [
|
|
47
|
+
'l2Gas',
|
|
48
|
+
'daGas'
|
|
49
|
+
];
|
|
50
|
+
/** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */ const BASE_GAS_COSTS = {
|
|
41
51
|
[Opcode.ADD_8]: makeCost(c.AVM_ADD_BASE_L2_GAS, 0),
|
|
42
52
|
[Opcode.ADD_16]: makeCost(c.AVM_ADD_BASE_L2_GAS, 0),
|
|
43
53
|
[Opcode.SUB_8]: makeCost(c.AVM_SUB_BASE_L2_GAS, 0),
|
|
@@ -105,51 +115,79 @@ const BASE_GAS_COSTS = {
|
|
|
105
115
|
[Opcode.KECCAKF1600]: makeCost(c.AVM_KECCAKF1600_BASE_L2_GAS, 0),
|
|
106
116
|
[Opcode.ECADD]: makeCost(c.AVM_ECADD_BASE_L2_GAS, 0),
|
|
107
117
|
[Opcode.MSM]: makeCost(c.AVM_MSM_BASE_L2_GAS, 0),
|
|
108
|
-
[Opcode.TORADIXBE]: makeCost(c.AVM_TORADIXBE_BASE_L2_GAS, 0)
|
|
118
|
+
[Opcode.TORADIXBE]: makeCost(c.AVM_TORADIXBE_BASE_L2_GAS, 0)
|
|
109
119
|
};
|
|
110
120
|
const DYNAMIC_GAS_COSTS = new Map([
|
|
111
|
-
[
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
[
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
[
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
[
|
|
122
|
+
Opcode.CALLDATACOPY,
|
|
123
|
+
makeCost(c.AVM_CALLDATACOPY_DYN_L2_GAS, 0)
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
Opcode.RETURNDATACOPY,
|
|
127
|
+
makeCost(c.AVM_RETURNDATACOPY_DYN_L2_GAS, 0)
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
Opcode.EMITUNENCRYPTEDLOG,
|
|
131
|
+
makeCost(c.AVM_EMITUNENCRYPTEDLOG_DYN_L2_GAS, c.AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS)
|
|
132
|
+
],
|
|
133
|
+
[
|
|
134
|
+
Opcode.CALL,
|
|
135
|
+
makeCost(c.AVM_CALL_DYN_L2_GAS, 0)
|
|
136
|
+
],
|
|
137
|
+
[
|
|
138
|
+
Opcode.STATICCALL,
|
|
139
|
+
makeCost(c.AVM_STATICCALL_DYN_L2_GAS, 0)
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
Opcode.RETURN,
|
|
143
|
+
makeCost(c.AVM_RETURN_DYN_L2_GAS, 0)
|
|
144
|
+
],
|
|
145
|
+
[
|
|
146
|
+
Opcode.REVERT_8,
|
|
147
|
+
makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)
|
|
148
|
+
],
|
|
149
|
+
[
|
|
150
|
+
Opcode.REVERT_16,
|
|
151
|
+
makeCost(c.AVM_REVERT_DYN_L2_GAS, 0)
|
|
152
|
+
],
|
|
153
|
+
[
|
|
154
|
+
Opcode.DEBUGLOG,
|
|
155
|
+
makeCost(c.AVM_DEBUGLOG_DYN_L2_GAS, 0)
|
|
156
|
+
],
|
|
157
|
+
[
|
|
158
|
+
Opcode.MSM,
|
|
159
|
+
makeCost(c.AVM_MSM_DYN_L2_GAS, 0)
|
|
160
|
+
],
|
|
161
|
+
[
|
|
162
|
+
Opcode.TORADIXBE,
|
|
163
|
+
makeCost(c.AVM_TORADIXBE_DYN_L2_GAS, 0)
|
|
164
|
+
]
|
|
122
165
|
]);
|
|
123
|
-
/** Returns the fixed base gas cost for a given opcode. */
|
|
124
|
-
export function getBaseGasCost(opcode) {
|
|
166
|
+
/** Returns the fixed base gas cost for a given opcode. */ export function getBaseGasCost(opcode) {
|
|
125
167
|
return BASE_GAS_COSTS[opcode];
|
|
126
168
|
}
|
|
127
169
|
export function getDynamicGasCost(opcode) {
|
|
128
170
|
return DYNAMIC_GAS_COSTS.has(opcode) ? DYNAMIC_GAS_COSTS.get(opcode) : makeCost(0, 0);
|
|
129
171
|
}
|
|
130
|
-
/** Returns the gas cost associated with the memory operations performed. */
|
|
131
|
-
export function getMemoryGasCost(args) {
|
|
172
|
+
/** Returns the gas cost associated with the memory operations performed. */ export function getMemoryGasCost(args) {
|
|
132
173
|
const { reads, writes, indirect } = args;
|
|
133
174
|
const indirectCount = Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
|
|
134
|
-
const l2MemoryGasCost = (reads ?? 0) * GAS_COST_CONSTANTS.MEMORY_READ +
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
175
|
+
const l2MemoryGasCost = (reads ?? 0) * GAS_COST_CONSTANTS.MEMORY_READ + (writes ?? 0) * GAS_COST_CONSTANTS.MEMORY_WRITE + indirectCount * GAS_COST_CONSTANTS.MEMORY_INDIRECT_READ_PENALTY;
|
|
176
|
+
return makeGas({
|
|
177
|
+
l2Gas: l2MemoryGasCost
|
|
178
|
+
});
|
|
138
179
|
}
|
|
139
|
-
/** Constants used in base cost calculations. */
|
|
140
|
-
export const GAS_COST_CONSTANTS = {
|
|
180
|
+
/** Constants used in base cost calculations. */ export const GAS_COST_CONSTANTS = {
|
|
141
181
|
MEMORY_READ: 10,
|
|
142
182
|
MEMORY_INDIRECT_READ_PENALTY: 10,
|
|
143
|
-
MEMORY_WRITE: 100
|
|
183
|
+
MEMORY_WRITE: 100
|
|
144
184
|
};
|
|
145
|
-
/** Returns gas cost for an operation on a given type tag based on the base cost per byte. */
|
|
146
|
-
export function getGasCostForTypeTag(tag, baseCost) {
|
|
185
|
+
/** Returns gas cost for an operation on a given type tag based on the base cost per byte. */ export function getGasCostForTypeTag(tag, baseCost) {
|
|
147
186
|
return mulGas(baseCost, getGasCostMultiplierFromTypeTag(tag));
|
|
148
187
|
}
|
|
149
|
-
/** Returns a multiplier based on the size of the type represented by the tag. Throws on uninitialized or invalid. */
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
case TypeTag.UINT1: // same as u8
|
|
188
|
+
/** Returns a multiplier based on the size of the type represented by the tag. Throws on uninitialized or invalid. */ function getGasCostMultiplierFromTypeTag(tag) {
|
|
189
|
+
switch(tag){
|
|
190
|
+
case TypeTag.UINT1:
|
|
153
191
|
return 1;
|
|
154
192
|
case TypeTag.UINT8:
|
|
155
193
|
return 1;
|
|
@@ -167,4 +205,3 @@ function getGasCostMultiplierFromTypeTag(tag) {
|
|
|
167
205
|
throw new InstructionExecutionError(`Invalid tag type for gas cost multiplier: ${TypeTag[tag]}`);
|
|
168
206
|
}
|
|
169
207
|
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2dhcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX2dhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLDhCQUE4QixDQUFDO0FBRWxELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFRdEUsK0NBQStDO0FBQy9DLE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBUTtJQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBaUQ7SUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDaEUsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxNQUFNLFVBQVUsT0FBTyxDQUFDLE9BQXFCO0lBQzNDLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFHLEtBQXFCO0lBQzdDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxHQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDbkMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUNwQyxDQUFDLEVBQ0YsUUFBUSxDQUNULENBQUM7QUFDSixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBaUIsRUFBRSxNQUFjO0lBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2hGLENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFRO0lBQzNCLEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLENBQUM7Q0FDVCxDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQVUsQ0FBQztBQUUxRCwySEFBMkg7QUFDM0gsTUFBTSxjQUFjLEdBQXdCO0lBQzFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO0lBQzdFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsNEJB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
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import { GAS_DIMENSIONS } from './avm_gas.js';
|
|
2
1
|
import { TaggedMemory } from './avm_memory_types.js';
|
|
3
2
|
import { OutOfGasError } from './errors.js';
|
|
4
3
|
/**
|
|
5
4
|
* Avm state modified on an instruction-per-instruction basis.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/** Output data must NOT be modified once it is set */
|
|
30
|
-
this.output = [];
|
|
5
|
+
*/ export class AvmMachineState {
|
|
6
|
+
/** gas remaining of the gas allocated for a contract call */ l2GasLeft;
|
|
7
|
+
daGasLeft;
|
|
8
|
+
/** program counter, byte based */ pc = 0;
|
|
9
|
+
/** program counter of the next instruction, byte based */ nextPc = 0;
|
|
10
|
+
/** return/revertdata of the last nested call. */ nestedReturndata = [];
|
|
11
|
+
/**
|
|
12
|
+
* Used to track the call stack and revert data of nested calls.
|
|
13
|
+
* This is used to provide a more detailed revert reason when a contract call reverts.
|
|
14
|
+
* It is only a heuristic and may not always provide the correct revert reason.
|
|
15
|
+
*/ collectedRevertInfo;
|
|
16
|
+
/**
|
|
17
|
+
* On INTERNALCALL, internal call stack is pushed to with the current pc and the return pc.
|
|
18
|
+
* On INTERNALRETURN, value is popped from the internal call stack and assigned to the return pc.
|
|
19
|
+
*/ internalCallStack = [];
|
|
20
|
+
/** Memory accessible to user code */ memory = new TaggedMemory();
|
|
21
|
+
/**
|
|
22
|
+
* Signals that execution should end.
|
|
23
|
+
* AvmContext execution continues executing instructions until the machine state signals "halted"
|
|
24
|
+
*/ halted = false;
|
|
25
|
+
/** Signals that execution has reverted normally (this does not cover exceptional halts) */ reverted = false;
|
|
26
|
+
/** Output data must NOT be modified once it is set */ output = [];
|
|
27
|
+
constructor(gasLeftOrL2GasLeft, daGasLeft){
|
|
31
28
|
if (typeof gasLeftOrL2GasLeft === 'object') {
|
|
32
29
|
({ l2Gas: this.l2GasLeft, daGas: this.daGasLeft } = gasLeftOrL2GasLeft);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
30
|
+
} else {
|
|
35
31
|
this.l2GasLeft = gasLeftOrL2GasLeft;
|
|
36
32
|
this.daGasLeft = daGasLeft;
|
|
37
33
|
}
|
|
38
34
|
}
|
|
39
35
|
get gasLeft() {
|
|
40
|
-
return {
|
|
36
|
+
return {
|
|
37
|
+
l2Gas: this.l2GasLeft,
|
|
38
|
+
daGas: this.daGasLeft
|
|
39
|
+
};
|
|
41
40
|
}
|
|
42
41
|
static fromState(state) {
|
|
43
42
|
return new AvmMachineState(state.l2GasLeft, state.daGasLeft);
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
consumeGas(gasCost) {
|
|
45
|
+
* Consumes the given gas.
|
|
46
|
+
* Should any of the gas dimensions get depleted, it sets all gas left to zero and triggers
|
|
47
|
+
* an exceptional halt by throwing an OutOfGasError.
|
|
48
|
+
*/ consumeGas(gasCost) {
|
|
51
49
|
// Assert there is enough gas on every dimension.
|
|
52
|
-
const
|
|
50
|
+
const outOfL2Gas = this.l2GasLeft - (gasCost.l2Gas ?? 0) < 0;
|
|
51
|
+
const outOfDaGas = this.daGasLeft - (gasCost.daGas ?? 0) < 0;
|
|
53
52
|
// If not, trigger an exceptional halt.
|
|
54
|
-
|
|
55
|
-
if (outOfGasDimensions.length > 0) {
|
|
53
|
+
if (outOfL2Gas || outOfDaGas) {
|
|
56
54
|
this.exceptionalHalt();
|
|
57
|
-
|
|
55
|
+
const dimensions = [];
|
|
56
|
+
if (outOfL2Gas) {
|
|
57
|
+
dimensions.push('l2Gas');
|
|
58
|
+
}
|
|
59
|
+
if (outOfDaGas) {
|
|
60
|
+
dimensions.push('daGas');
|
|
61
|
+
}
|
|
62
|
+
throw new OutOfGasError(dimensions);
|
|
58
63
|
}
|
|
59
64
|
// Otherwise, charge the corresponding gas
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
65
|
+
this.l2GasLeft -= gasCost.l2Gas ?? 0;
|
|
66
|
+
this.daGasLeft -= gasCost.daGas ?? 0;
|
|
63
67
|
}
|
|
64
|
-
/** Increases the gas left by the amounts specified. */
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this[`${dimension}Left`] += gasRefund[dimension] ?? 0;
|
|
68
|
-
}
|
|
68
|
+
/** Increases the gas left by the amounts specified. */ refundGas(gasRefund) {
|
|
69
|
+
this.l2GasLeft += gasRefund.l2Gas ?? 0;
|
|
70
|
+
this.daGasLeft += gasRefund.daGas ?? 0;
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return(output) {
|
|
73
|
+
* Halt as successful
|
|
74
|
+
* Output data must NOT be modified once it is set
|
|
75
|
+
* @param output
|
|
76
|
+
*/ return(output) {
|
|
76
77
|
this.halted = true;
|
|
77
78
|
this.output = output;
|
|
78
79
|
}
|
|
79
80
|
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
revert(output) {
|
|
81
|
+
* Halt as reverted
|
|
82
|
+
* Output data must NOT be modified once it is set
|
|
83
|
+
* @param output
|
|
84
|
+
*/ revert(output) {
|
|
85
85
|
this.halted = true;
|
|
86
86
|
this.reverted = true;
|
|
87
87
|
this.output = output;
|
|
@@ -96,12 +96,11 @@ export class AvmMachineState {
|
|
|
96
96
|
return this.output;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
* Flag an exceptional halt. Clears gas left and sets the reverted flag. No output data.
|
|
100
|
+
*/ exceptionalHalt() {
|
|
101
|
+
this.l2GasLeft = 0;
|
|
102
|
+
this.daGasLeft = 0;
|
|
103
103
|
this.reverted = true;
|
|
104
104
|
this.halted = true;
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21hY2hpbmVfc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9tYWNoaW5lX3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBd0IsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBeUJsRTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBc0MxQixZQUFZLGtCQUFnQyxFQUFFLFNBQWtCO1FBbENoRSxrQ0FBa0M7UUFDM0IsT0FBRSxHQUFXLENBQUMsQ0FBQztRQUN0QiwwREFBMEQ7UUFDbkQsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUMxQixpREFBaUQ7UUFDMUMscUJBQWdCLEdBQVMsRUFBRSxDQUFDO1FBUW5DOzs7V0FHRztRQUNJLHNCQUFpQixHQUFxQixFQUFFLENBQUM7UUFFaEQscUNBQXFDO1FBQ3JCLFdBQU0sR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRDs7O1dBR0c7UUFDSyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ2hDLDJGQUEyRjtRQUNuRixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ2xDLHNEQUFzRDtRQUM5QyxXQUFNLEdBQVMsRUFBRSxDQUFDO1FBS3hCLElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBbUIsQ0FBQztZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FB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
|