@aztec/simulator 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dest/acvm/acvm.d.ts +5 -5
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm_types.d.ts +1 -1
- package/dest/acvm/acvm_types.d.ts.map +1 -1
- package/dest/acvm/deserialize.d.ts +1 -1
- package/dest/acvm/deserialize.d.ts.map +1 -1
- package/dest/acvm/oracle/index.d.ts +1 -2
- package/dest/acvm/oracle/index.d.ts.map +1 -1
- package/dest/acvm/oracle/index.js +1 -2
- package/dest/acvm/oracle/oracle.d.ts +2 -2
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +2 -3
- package/dest/acvm/oracle/typed_oracle.d.ts +6 -6
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/serialize.d.ts +4 -4
- package/dest/acvm/serialize.d.ts.map +1 -1
- package/dest/acvm/serialize.js +1 -1
- package/dest/avm/avm_context.d.ts +8 -18
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +10 -22
- package/dest/avm/avm_execution_environment.d.ts +4 -4
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +1 -1
- package/dest/avm/avm_gas.d.ts +71 -0
- package/dest/avm/avm_gas.d.ts.map +1 -0
- package/dest/avm/avm_gas.js +161 -0
- package/dest/avm/avm_machine_state.d.ts +5 -3
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +8 -2
- package/dest/avm/avm_memory_types.d.ts +54 -2
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +95 -2
- package/dest/avm/avm_message_call_result.d.ts +1 -1
- package/dest/avm/avm_message_call_result.d.ts.map +1 -1
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +10 -8
- package/dest/avm/errors.d.ts +1 -1
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/fixtures/index.d.ts +1 -1
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +2 -2
- package/dest/avm/journal/host_storage.d.ts +1 -1
- package/dest/avm/journal/host_storage.d.ts.map +1 -1
- package/dest/avm/journal/journal.d.ts +2 -2
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/trace.d.ts +1 -1
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace_types.d.ts +1 -1
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +44 -16
- package/dest/avm/opcodes/addressing_mode.d.ts +5 -3
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +5 -1
- package/dest/avm/opcodes/arithmetic.d.ts +7 -3
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +27 -16
- package/dest/avm/opcodes/bitwise.d.ts +21 -20
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +43 -65
- package/dest/avm/opcodes/comparators.d.ts +12 -9
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +22 -32
- package/dest/avm/opcodes/context_getters.d.ts +20 -0
- package/dest/avm/opcodes/context_getters.d.ts.map +1 -0
- package/dest/avm/opcodes/context_getters.js +26 -0
- package/dest/avm/opcodes/contract.d.ts +14 -0
- package/dest/avm/opcodes/contract.d.ts.map +1 -0
- package/dest/avm/opcodes/contract.js +49 -0
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +12 -2
- package/dest/avm/opcodes/environment_getters.d.ts +31 -34
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +34 -43
- package/dest/avm/opcodes/external_calls.d.ts +13 -19
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +50 -68
- package/dest/avm/opcodes/hashing.d.ts +3 -2
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +37 -18
- package/dest/avm/opcodes/index.d.ts +1 -0
- package/dest/avm/opcodes/index.d.ts.map +1 -1
- package/dest/avm/opcodes/index.js +2 -1
- package/dest/avm/opcodes/instruction.d.ts +12 -17
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +12 -22
- package/dest/avm/opcodes/instruction_impl.d.ts +14 -0
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +37 -16
- package/dest/avm/opcodes/memory.d.ts +4 -3
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +38 -19
- package/dest/avm/opcodes/storage.d.ts +5 -0
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +21 -7
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +7 -5
- package/dest/avm/serialization/instruction_serialization.d.ts +12 -11
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +13 -12
- package/dest/avm/temporary_executor_migration.d.ts +6 -4
- package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
- package/dest/avm/temporary_executor_migration.js +14 -3
- package/dest/client/client_execution_context.d.ts +11 -11
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +1 -1
- package/dest/client/db_oracle.d.ts +9 -9
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/db_oracle.js +1 -1
- package/dest/client/execution_note_cache.d.ts +2 -2
- package/dest/client/execution_note_cache.d.ts.map +1 -1
- package/dest/client/execution_result.d.ts +5 -5
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +1 -1
- package/dest/client/pick_notes.d.ts +1 -1
- package/dest/client/pick_notes.d.ts.map +1 -1
- package/dest/client/pick_notes.js +1 -1
- package/dest/client/private_execution.d.ts +5 -5
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +6 -2
- package/dest/client/simulator.d.ts +6 -6
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +1 -1
- package/dest/client/unconstrained_execution.d.ts +5 -5
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +1 -1
- package/dest/client/view_data_oracle.d.ts +6 -6
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +1 -1
- package/dest/common/errors.d.ts +1 -1
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/common/errors.js +1 -1
- package/dest/public/db.d.ts +6 -6
- package/dest/public/db.d.ts.map +1 -1
- package/dest/public/execution.d.ts +2 -2
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/executor.d.ts +13 -5
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +59 -20
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/public_execution_context.d.ts +7 -7
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +3 -3
- package/dest/public/state_actions.d.ts +2 -2
- package/dest/public/state_actions.d.ts.map +1 -1
- package/dest/simulator/acvm_native.d.ts +3 -3
- package/dest/simulator/acvm_native.d.ts.map +1 -1
- package/dest/simulator/acvm_wasm.d.ts +3 -3
- package/dest/simulator/acvm_wasm.d.ts.map +1 -1
- package/dest/simulator/acvm_wasm.js +2 -2
- package/dest/simulator/simulation_provider.d.ts +2 -2
- package/dest/simulator/simulation_provider.d.ts.map +1 -1
- package/dest/test/utils.d.ts +1 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/dest/test/utils.js +1 -1
- package/dest/utils.d.ts +1 -1
- package/dest/utils.d.ts.map +1 -1
- package/package.json +15 -9
- package/src/acvm/acvm.ts +8 -8
- package/src/acvm/acvm_types.ts +1 -1
- package/src/acvm/deserialize.ts +1 -1
- package/src/acvm/oracle/index.ts +1 -2
- package/src/acvm/oracle/oracle.ts +3 -4
- package/src/acvm/oracle/typed_oracle.ts +18 -18
- package/src/acvm/serialize.ts +4 -4
- package/src/avm/avm_context.ts +15 -37
- package/src/avm/avm_execution_environment.ts +4 -4
- package/src/avm/{avm_gas_cost.ts → avm_gas.ts} +75 -21
- package/src/avm/avm_machine_state.ts +10 -3
- package/src/avm/avm_memory_types.ts +131 -3
- package/src/avm/avm_message_call_result.ts +1 -1
- package/src/avm/avm_simulator.ts +10 -8
- package/src/avm/errors.ts +1 -1
- package/src/avm/fixtures/index.ts +6 -1
- package/src/avm/journal/host_storage.ts +1 -1
- package/src/avm/journal/journal.ts +2 -2
- package/src/avm/journal/trace.ts +1 -1
- package/src/avm/journal/trace_types.ts +1 -1
- package/src/avm/opcodes/accrued_substate.ts +57 -22
- package/src/avm/opcodes/addressing_mode.ts +8 -3
- package/src/avm/opcodes/arithmetic.ts +32 -22
- package/src/avm/opcodes/bitwise.ts +50 -84
- package/src/avm/opcodes/comparators.ts +28 -43
- package/src/avm/opcodes/context_getters.ts +32 -0
- package/src/avm/opcodes/contract.ts +58 -0
- package/src/avm/opcodes/control_flow.ts +24 -6
- package/src/avm/opcodes/environment_getters.ts +36 -45
- package/src/avm/opcodes/external_calls.ts +65 -84
- package/src/avm/opcodes/hashing.ts +46 -23
- package/src/avm/opcodes/index.ts +1 -0
- package/src/avm/opcodes/instruction.ts +16 -28
- package/src/avm/opcodes/instruction_impl.ts +45 -15
- package/src/avm/opcodes/memory.ts +48 -28
- package/src/avm/opcodes/storage.ts +26 -12
- package/src/avm/serialization/bytecode_serialization.ts +6 -3
- package/src/avm/serialization/instruction_serialization.ts +1 -0
- package/src/avm/temporary_executor_migration.ts +20 -6
- package/src/client/client_execution_context.ts +15 -15
- package/src/client/db_oracle.ts +16 -10
- package/src/client/execution_note_cache.ts +2 -2
- package/src/client/execution_result.ts +9 -5
- package/src/client/pick_notes.ts +1 -1
- package/src/client/private_execution.ts +12 -6
- package/src/client/simulator.ts +8 -8
- package/src/client/unconstrained_execution.ts +5 -5
- package/src/client/view_data_oracle.ts +11 -11
- package/src/common/errors.ts +1 -1
- package/src/public/db.ts +6 -6
- package/src/public/execution.ts +10 -10
- package/src/public/executor.ts +78 -25
- package/src/public/index.ts +2 -2
- package/src/public/public_execution_context.ts +17 -7
- package/src/public/state_actions.ts +2 -2
- package/src/simulator/acvm_native.ts +3 -3
- package/src/simulator/acvm_wasm.ts +8 -4
- package/src/simulator/simulation_provider.ts +2 -2
- package/src/test/utils.ts +1 -1
- package/src/utils.ts +1 -1
- package/dest/acvm/oracle/debug.d.ts +0 -19
- package/dest/acvm/oracle/debug.d.ts.map +0 -1
- package/dest/acvm/oracle/debug.js +0 -95
- package/dest/avm/avm_gas_cost.d.ts +0 -322
- package/dest/avm/avm_gas_cost.d.ts.map +0 -1
- package/dest/avm/avm_gas_cost.js +0 -118
- package/src/acvm/oracle/debug.ts +0 -109
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { type IntegralValue } from '../avm_memory_types.js';
|
|
2
3
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
4
|
import { ThreeOperandInstruction, TwoOperandInstruction } from './instruction_impl.js';
|
|
4
|
-
|
|
5
|
+
declare abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
6
|
+
execute(context: AvmContext): Promise<void>;
|
|
7
|
+
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
8
|
+
}
|
|
9
|
+
export declare class And extends ThreeOperandBitwiseInstruction {
|
|
5
10
|
static readonly type: string;
|
|
6
11
|
static readonly opcode = Opcode.AND;
|
|
7
|
-
|
|
8
|
-
execute(context: AvmContext): Promise<void>;
|
|
12
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
9
13
|
}
|
|
10
|
-
export declare class Or extends
|
|
14
|
+
export declare class Or extends ThreeOperandBitwiseInstruction {
|
|
11
15
|
static readonly type: string;
|
|
12
16
|
static readonly opcode = Opcode.OR;
|
|
13
|
-
|
|
14
|
-
execute(context: AvmContext): Promise<void>;
|
|
17
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
15
18
|
}
|
|
16
|
-
export declare class Xor extends
|
|
19
|
+
export declare class Xor extends ThreeOperandBitwiseInstruction {
|
|
17
20
|
static readonly type: string;
|
|
18
21
|
static readonly opcode = Opcode.XOR;
|
|
19
|
-
|
|
20
|
-
execute(context: AvmContext): Promise<void>;
|
|
22
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
21
23
|
}
|
|
22
|
-
export declare class
|
|
23
|
-
static readonly type: string;
|
|
24
|
-
static readonly opcode = Opcode.NOT;
|
|
25
|
-
constructor(indirect: number, inTag: number, aOffset: number, dstOffset: number);
|
|
26
|
-
execute(context: AvmContext): Promise<void>;
|
|
27
|
-
}
|
|
28
|
-
export declare class Shl extends ThreeOperandInstruction {
|
|
24
|
+
export declare class Shl extends ThreeOperandBitwiseInstruction {
|
|
29
25
|
static readonly type: string;
|
|
30
26
|
static readonly opcode = Opcode.SHL;
|
|
31
|
-
|
|
32
|
-
execute(context: AvmContext): Promise<void>;
|
|
27
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
33
28
|
}
|
|
34
|
-
export declare class Shr extends
|
|
29
|
+
export declare class Shr extends ThreeOperandBitwiseInstruction {
|
|
35
30
|
static readonly type: string;
|
|
36
31
|
static readonly opcode = Opcode.SHR;
|
|
37
|
-
|
|
32
|
+
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
33
|
+
}
|
|
34
|
+
export declare class Not extends TwoOperandInstruction {
|
|
35
|
+
static readonly type: string;
|
|
36
|
+
static readonly opcode = Opcode.NOT;
|
|
37
|
+
constructor(indirect: number, inTag: number, aOffset: number, dstOffset: number);
|
|
38
38
|
execute(context: AvmContext): Promise<void>;
|
|
39
39
|
}
|
|
40
|
+
export {};
|
|
40
41
|
//# sourceMappingURL=bitwise.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/bitwise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/bitwise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEvF,uBAAe,8BAA+B,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAC9E;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;IAEpC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAGrE;AAED,qBAAa,EAAG,SAAQ,8BAA8B;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa;IAEnC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAGrE;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;IAEpC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAGrE;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;IAEpC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAGrE;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;IAEpC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAGrE;AAED,qBAAa,GAAI,SAAQ,qBAAqB;IAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;gBAExB,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAIlE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD"}
|
|
@@ -1,92 +1,70 @@
|
|
|
1
1
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
2
2
|
import { ThreeOperandInstruction, TwoOperandInstruction } from './instruction_impl.js';
|
|
3
|
-
|
|
4
|
-
constructor(indirect, inTag, aOffset, bOffset, dstOffset) {
|
|
5
|
-
super(indirect, inTag, aOffset, bOffset, dstOffset);
|
|
6
|
-
}
|
|
3
|
+
class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
7
4
|
async execute(context) {
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
const memoryOperations = { reads: 2, writes: 1, indirect: this.indirect };
|
|
6
|
+
const memory = context.machineState.memory.track(this.type);
|
|
7
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
8
|
+
memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
9
|
+
const a = memory.getAs(this.aOffset);
|
|
10
|
+
const b = memory.getAs(this.bOffset);
|
|
11
|
+
const res = this.compute(a, b);
|
|
12
|
+
memory.set(this.dstOffset, res);
|
|
13
|
+
memory.assert(memoryOperations);
|
|
13
14
|
context.machineState.incrementPc();
|
|
14
15
|
}
|
|
15
16
|
}
|
|
17
|
+
export class And extends ThreeOperandBitwiseInstruction {
|
|
18
|
+
compute(a, b) {
|
|
19
|
+
return a.and(b);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
16
22
|
And.type = 'AND';
|
|
17
23
|
And.opcode = Opcode.AND;
|
|
18
|
-
export class Or extends
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
async execute(context) {
|
|
23
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
24
|
-
const a = context.machineState.memory.getAs(this.aOffset);
|
|
25
|
-
const b = context.machineState.memory.getAs(this.bOffset);
|
|
26
|
-
const res = a.or(b);
|
|
27
|
-
context.machineState.memory.set(this.dstOffset, res);
|
|
28
|
-
context.machineState.incrementPc();
|
|
24
|
+
export class Or extends ThreeOperandBitwiseInstruction {
|
|
25
|
+
compute(a, b) {
|
|
26
|
+
return a.or(b);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
Or.type = 'OR';
|
|
32
30
|
Or.opcode = Opcode.OR;
|
|
33
|
-
export class Xor extends
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
async execute(context) {
|
|
38
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
39
|
-
const a = context.machineState.memory.getAs(this.aOffset);
|
|
40
|
-
const b = context.machineState.memory.getAs(this.bOffset);
|
|
41
|
-
const res = a.xor(b);
|
|
42
|
-
context.machineState.memory.set(this.dstOffset, res);
|
|
43
|
-
context.machineState.incrementPc();
|
|
31
|
+
export class Xor extends ThreeOperandBitwiseInstruction {
|
|
32
|
+
compute(a, b) {
|
|
33
|
+
return a.xor(b);
|
|
44
34
|
}
|
|
45
35
|
}
|
|
46
36
|
Xor.type = 'XOR';
|
|
47
37
|
Xor.opcode = Opcode.XOR;
|
|
38
|
+
export class Shl extends ThreeOperandBitwiseInstruction {
|
|
39
|
+
compute(a, b) {
|
|
40
|
+
return a.shl(b);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
Shl.type = 'SHL';
|
|
44
|
+
Shl.opcode = Opcode.SHL;
|
|
45
|
+
export class Shr extends ThreeOperandBitwiseInstruction {
|
|
46
|
+
compute(a, b) {
|
|
47
|
+
return a.shr(b);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
Shr.type = 'SHR';
|
|
51
|
+
Shr.opcode = Opcode.SHR;
|
|
48
52
|
export class Not extends TwoOperandInstruction {
|
|
49
53
|
constructor(indirect, inTag, aOffset, dstOffset) {
|
|
50
54
|
super(indirect, inTag, aOffset, dstOffset);
|
|
51
55
|
}
|
|
52
56
|
async execute(context) {
|
|
53
|
-
|
|
54
|
-
const
|
|
57
|
+
const memoryOperations = { reads: 1, writes: 1, indirect: this.indirect };
|
|
58
|
+
const memory = context.machineState.memory.track(this.type);
|
|
59
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
60
|
+
memory.checkTags(this.inTag, this.aOffset);
|
|
61
|
+
const a = memory.getAs(this.aOffset);
|
|
55
62
|
const res = a.not();
|
|
56
|
-
|
|
63
|
+
memory.set(this.dstOffset, res);
|
|
64
|
+
memory.assert(memoryOperations);
|
|
57
65
|
context.machineState.incrementPc();
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
68
|
Not.type = 'NOT';
|
|
61
69
|
Not.opcode = Opcode.NOT;
|
|
62
|
-
|
|
63
|
-
constructor(indirect, inTag, aOffset, bOffset, dstOffset) {
|
|
64
|
-
super(indirect, inTag, aOffset, bOffset, dstOffset);
|
|
65
|
-
}
|
|
66
|
-
async execute(context) {
|
|
67
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
68
|
-
const a = context.machineState.memory.getAs(this.aOffset);
|
|
69
|
-
const b = context.machineState.memory.getAs(this.bOffset);
|
|
70
|
-
const res = a.shl(b);
|
|
71
|
-
context.machineState.memory.set(this.dstOffset, res);
|
|
72
|
-
context.machineState.incrementPc();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
Shl.type = 'SHL';
|
|
76
|
-
Shl.opcode = Opcode.SHL;
|
|
77
|
-
export class Shr extends ThreeOperandInstruction {
|
|
78
|
-
constructor(indirect, inTag, aOffset, bOffset, dstOffset) {
|
|
79
|
-
super(indirect, inTag, aOffset, bOffset, dstOffset);
|
|
80
|
-
}
|
|
81
|
-
async execute(context) {
|
|
82
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
83
|
-
const a = context.machineState.memory.getAs(this.aOffset);
|
|
84
|
-
const b = context.machineState.memory.getAs(this.bOffset);
|
|
85
|
-
const res = a.shr(b);
|
|
86
|
-
context.machineState.memory.set(this.dstOffset, res);
|
|
87
|
-
context.machineState.incrementPc();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
Shr.type = 'SHR';
|
|
91
|
-
Shr.opcode = Opcode.SHR;
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9iaXR3aXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixNQUFNLE9BQU8sR0FBSSxTQUFRLHVCQUF1QjtJQUk5QyxZQUFZLFFBQWdCLEVBQUUsS0FBYSxFQUFFLE9BQWUsRUFBRSxPQUFlLEVBQUUsU0FBaUI7UUFDOUYsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtQjtRQUMvQixPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXJELE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7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
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9iaXR3aXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixNQUFlLDhCQUErQixTQUFRLHVCQUF1QjtJQUNwRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW1CO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVoQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0NBR0Y7QUFFRCxNQUFNLE9BQU8sR0FBSSxTQUFRLDhCQUE4QjtJQUkzQyxPQUFPLENBQUMsQ0FBZ0IsRUFBRSxDQUFnQjtRQUNsRCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7QUFMZSxRQUFJLEdBQVcsS0FBSyxDQUFDO0FBQ3JCLFVBQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBT3RDLE1BQU0sT0FBTyxFQUFHLFNBQVEsOEJBQThCO0lBSTFDLE9BQU8sQ0FBQyxDQUFnQixFQUFFLENBQWdCO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDOztBQUxlLE9BQUksR0FBVyxJQUFJLENBQUM7QUFDcEIsU0FBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFPckMsTUFBTSxPQUFPLEdBQUksU0FBUSw4QkFBOEI7SUFJM0MsT0FBTyxDQUFDLENBQWdCLEVBQUUsQ0FBZ0I7UUFDbEQsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7O0FBTGUsUUFBSSxHQUFXLEtBQUssQ0FBQztBQUNyQixVQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQU90QyxNQUFNLE9BQU8sR0FBSSxTQUFRLDhCQUE4QjtJQUkzQyxPQUFPLENBQUMsQ0FBZ0IsRUFBRSxDQUFnQjtRQUNsRCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7QUFMZSxRQUFJLEdBQVcsS0FBSyxDQUFDO0FBQ3JCLFVBQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBT3RDLE1BQU0sT0FBTyxHQUFJLFNBQVEsOEJBQThCO0lBSTNDLE9BQU8sQ0FBQyxDQUFnQixFQUFFLENBQWdCO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDOztBQUxlLFFBQUksR0FBVyxLQUFLLENBQUM7QUFDckIsVUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFPdEMsTUFBTSxPQUFPLEdBQUksU0FBUSxxQkFBcUI7SUFJNUMsWUFBWSxRQUFnQixFQUFFLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBaUI7UUFDN0UsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW1CO1FBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7QUFyQmUsUUFBSSxHQUFXLEtBQUssQ0FBQztBQUNyQixVQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyJ9
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { type MemoryValue } from '../avm_memory_types.js';
|
|
2
3
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
4
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
4
|
-
|
|
5
|
+
declare abstract class ComparatorInstruction extends ThreeOperandInstruction {
|
|
6
|
+
execute(context: AvmContext): Promise<void>;
|
|
7
|
+
protected abstract compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class Eq extends ComparatorInstruction {
|
|
5
10
|
static readonly type: string;
|
|
6
11
|
static readonly opcode = Opcode.EQ;
|
|
7
|
-
|
|
8
|
-
execute(context: AvmContext): Promise<void>;
|
|
12
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
9
13
|
}
|
|
10
|
-
export declare class Lt extends
|
|
14
|
+
export declare class Lt extends ComparatorInstruction {
|
|
11
15
|
static readonly type: string;
|
|
12
16
|
static readonly opcode = Opcode.LT;
|
|
13
|
-
|
|
14
|
-
execute(context: AvmContext): Promise<void>;
|
|
17
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
15
18
|
}
|
|
16
|
-
export declare class Lte extends
|
|
19
|
+
export declare class Lte extends ComparatorInstruction {
|
|
17
20
|
static readonly type: string;
|
|
18
21
|
static readonly opcode = Opcode.LTE;
|
|
19
|
-
|
|
20
|
-
execute(context: AvmContext): Promise<void>;
|
|
22
|
+
protected compare(a: MemoryValue, b: MemoryValue): boolean;
|
|
21
23
|
}
|
|
24
|
+
export {};
|
|
22
25
|
//# sourceMappingURL=comparators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/comparators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/comparators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,qBAAsB,SAAQ,uBAAuB;IACrD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO;CACpE;AAED,qBAAa,EAAG,SAAQ,qBAAqB;IAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa;IAEnC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO;CAG3D;AAED,qBAAa,EAAG,SAAQ,qBAAqB;IAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa;IAEnC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO;CAG3D;AAED,qBAAa,GAAI,SAAQ,qBAAqB;IAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc;IAEpC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO;CAG3D"}
|
|
@@ -1,49 +1,39 @@
|
|
|
1
1
|
import { Uint8 } from '../avm_memory_types.js';
|
|
2
2
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
3
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
4
|
-
|
|
5
|
-
constructor(indirect, inTag, aOffset, bOffset, dstOffset) {
|
|
6
|
-
super(indirect, inTag, aOffset, bOffset, dstOffset);
|
|
7
|
-
}
|
|
4
|
+
class ComparatorInstruction extends ThreeOperandInstruction {
|
|
8
5
|
async execute(context) {
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
const memoryOperations = { reads: 2, writes: 1, indirect: this.indirect };
|
|
7
|
+
const memory = context.machineState.memory.track(this.type);
|
|
8
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
9
|
+
memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
10
|
+
const a = memory.get(this.aOffset);
|
|
11
|
+
const b = memory.get(this.bOffset);
|
|
12
|
+
const dest = new Uint8(this.compare(a, b) ? 1 : 0);
|
|
13
|
+
memory.set(this.dstOffset, dest);
|
|
14
|
+
memory.assert(memoryOperations);
|
|
14
15
|
context.machineState.incrementPc();
|
|
15
16
|
}
|
|
16
17
|
}
|
|
18
|
+
export class Eq extends ComparatorInstruction {
|
|
19
|
+
compare(a, b) {
|
|
20
|
+
return a.equals(b);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
17
23
|
Eq.type = 'EQ';
|
|
18
24
|
Eq.opcode = Opcode.EQ;
|
|
19
|
-
export class Lt extends
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
async execute(context) {
|
|
24
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
25
|
-
const a = context.machineState.memory.get(this.aOffset);
|
|
26
|
-
const b = context.machineState.memory.get(this.bOffset);
|
|
27
|
-
const dest = new Uint8(a.lt(b) ? 1 : 0);
|
|
28
|
-
context.machineState.memory.set(this.dstOffset, dest);
|
|
29
|
-
context.machineState.incrementPc();
|
|
25
|
+
export class Lt extends ComparatorInstruction {
|
|
26
|
+
compare(a, b) {
|
|
27
|
+
return a.lt(b);
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
30
|
Lt.type = 'LT';
|
|
33
31
|
Lt.opcode = Opcode.LT;
|
|
34
|
-
export class Lte extends
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
async execute(context) {
|
|
39
|
-
context.machineState.memory.checkTags(this.inTag, this.aOffset, this.bOffset);
|
|
40
|
-
const a = context.machineState.memory.get(this.aOffset);
|
|
41
|
-
const b = context.machineState.memory.get(this.bOffset);
|
|
42
|
-
const dest = new Uint8(a.lt(b) || a.equals(b) ? 1 : 0);
|
|
43
|
-
context.machineState.memory.set(this.dstOffset, dest);
|
|
44
|
-
context.machineState.incrementPc();
|
|
32
|
+
export class Lte extends ComparatorInstruction {
|
|
33
|
+
compare(a, b) {
|
|
34
|
+
return a.lt(b) || a.equals(b);
|
|
45
35
|
}
|
|
46
36
|
}
|
|
47
37
|
Lte.type = 'LTE';
|
|
48
38
|
Lte.opcode = Opcode.LTE;
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL29wY29kZXMvY29tcGFyYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQixLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsTUFBZSxxQkFBc0IsU0FBUSx1QkFBdUI7SUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtQjtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FHRjtBQUVELE1BQU0sT0FBTyxFQUFHLFNBQVEscUJBQXFCO0lBSWpDLE9BQU8sQ0FBQyxDQUFjLEVBQUUsQ0FBYztRQUM5QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQzs7QUFMZSxPQUFJLEdBQVcsSUFBSSxDQUFDO0FBQ3BCLFNBQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBT3JDLE1BQU0sT0FBTyxFQUFHLFNBQVEscUJBQXFCO0lBSWpDLE9BQU8sQ0FBQyxDQUFjLEVBQUUsQ0FBYztRQUM5QyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQzs7QUFMZSxPQUFJLEdBQVcsSUFBSSxDQUFDO0FBQ3BCLFNBQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBT3JDLE1BQU0sT0FBTyxHQUFJLFNBQVEscUJBQXFCO0lBSWxDLE9BQU8sQ0FBQyxDQUFjLEVBQUUsQ0FBYztRQUM5QyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDOztBQUxlLFFBQUksR0FBVyxLQUFLLENBQUM7QUFDckIsVUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { type MemoryValue } from '../avm_memory_types.js';
|
|
3
|
+
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { GetterInstruction } from './instruction_impl.js';
|
|
5
|
+
export declare class L2GasLeft extends GetterInstruction {
|
|
6
|
+
static type: string;
|
|
7
|
+
static readonly opcode: Opcode;
|
|
8
|
+
protected getValue(context: AvmContext): MemoryValue;
|
|
9
|
+
}
|
|
10
|
+
export declare class L1GasLeft extends GetterInstruction {
|
|
11
|
+
static type: string;
|
|
12
|
+
static readonly opcode: Opcode;
|
|
13
|
+
protected getValue(context: AvmContext): MemoryValue;
|
|
14
|
+
}
|
|
15
|
+
export declare class DAGasLeft extends GetterInstruction {
|
|
16
|
+
static type: string;
|
|
17
|
+
static readonly opcode: Opcode;
|
|
18
|
+
protected getValue(context: AvmContext): MemoryValue;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=context_getters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context_getters.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/context_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAGlD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;CAGrD;AAED,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAElD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;CAGrD;AAED,qBAAa,SAAU,SAAQ,iBAAiB;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAElD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW;CAGrD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Field } from '../avm_memory_types.js';
|
|
2
|
+
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { GetterInstruction } from './instruction_impl.js';
|
|
4
|
+
export class L2GasLeft extends GetterInstruction {
|
|
5
|
+
// TODO(@spalladino) Yellow paper specifies that the value should be an Uint32, not a Field.
|
|
6
|
+
getValue(context) {
|
|
7
|
+
return new Field(context.machineState.l2GasLeft);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
L2GasLeft.type = 'L2GASLEFT';
|
|
11
|
+
L2GasLeft.opcode = Opcode.L2GASLEFT;
|
|
12
|
+
export class L1GasLeft extends GetterInstruction {
|
|
13
|
+
getValue(context) {
|
|
14
|
+
return new Field(context.machineState.l1GasLeft);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
L1GasLeft.type = 'L1GASLEFT';
|
|
18
|
+
L1GasLeft.opcode = Opcode.L1GASLEFT;
|
|
19
|
+
export class DAGasLeft extends GetterInstruction {
|
|
20
|
+
getValue(context) {
|
|
21
|
+
return new Field(context.machineState.daGasLeft);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
DAGasLeft.type = 'DAGASLEFT';
|
|
25
|
+
DAGasLeft.opcode = Opcode.DAGASLEFT;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF9nZXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F2bS9vcGNvZGVzL2NvbnRleHRfZ2V0dGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxNQUFNLE9BQU8sU0FBVSxTQUFRLGlCQUFpQjtJQUk5Qyw0RkFBNEY7SUFDbEYsUUFBUSxDQUFDLE9BQW1CO1FBQ3BDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDOztBQU5NLGNBQUksR0FBVyxXQUFXLENBQUM7QUFDbEIsZ0JBQU0sR0FBVyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBUXBELE1BQU0sT0FBTyxTQUFVLFNBQVEsaUJBQWlCO0lBSXBDLFFBQVEsQ0FBQyxPQUFtQjtRQUNwQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7QUFMTSxjQUFJLEdBQVcsV0FBVyxDQUFDO0FBQ2xCLGdCQUFNLEdBQVcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQU9wRCxNQUFNLE9BQU8sU0FBVSxTQUFRLGlCQUFpQjtJQUlwQyxRQUFRLENBQUMsT0FBbUI7UUFDcEMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7O0FBTE0sY0FBSSxHQUFXLFdBQVcsQ0FBQztBQUNsQixnQkFBTSxHQUFXLE1BQU0sQ0FBQyxTQUFTLENBQUMifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AvmContext } from '../avm_context.js';
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Instruction } from './instruction.js';
|
|
4
|
+
export declare class GetContractInstance extends Instruction {
|
|
5
|
+
private indirect;
|
|
6
|
+
private addressOffset;
|
|
7
|
+
private dstOffset;
|
|
8
|
+
static readonly type: string;
|
|
9
|
+
static readonly opcode: Opcode;
|
|
10
|
+
static readonly wireFormat: OperandType[];
|
|
11
|
+
constructor(indirect: number, addressOffset: number, dstOffset: number);
|
|
12
|
+
execute(context: AvmContext): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,mBAAoB,SAAQ,WAAW;IAWtC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,aAAa;IAAU,OAAO,CAAC,SAAS;IAVtF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAyB;IACrD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA8B;IAE5D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM;IAIxF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkClD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { AztecAddress, Fr } from '@aztec/circuits.js';
|
|
2
|
+
import { Field } from '../avm_memory_types.js';
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Addressing } from './addressing_mode.js';
|
|
5
|
+
import { Instruction } from './instruction.js';
|
|
6
|
+
export class GetContractInstance extends Instruction {
|
|
7
|
+
constructor(indirect, addressOffset, dstOffset) {
|
|
8
|
+
super();
|
|
9
|
+
this.indirect = indirect;
|
|
10
|
+
this.addressOffset = addressOffset;
|
|
11
|
+
this.dstOffset = dstOffset;
|
|
12
|
+
}
|
|
13
|
+
async execute(context) {
|
|
14
|
+
const [addressOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.addressOffset, this.dstOffset], context.machineState.memory);
|
|
15
|
+
const address = AztecAddress.fromField(context.machineState.memory.get(addressOffset).toFr());
|
|
16
|
+
const instance = await context.persistableState.hostStorage.contractsDb.getContractInstance(address);
|
|
17
|
+
const data = instance === undefined
|
|
18
|
+
? [
|
|
19
|
+
new Field(0), // not found
|
|
20
|
+
new Field(0),
|
|
21
|
+
new Field(0),
|
|
22
|
+
new Field(0),
|
|
23
|
+
new Field(0),
|
|
24
|
+
new Field(0),
|
|
25
|
+
new Field(0),
|
|
26
|
+
]
|
|
27
|
+
: [
|
|
28
|
+
new Fr(1), // found
|
|
29
|
+
instance.salt,
|
|
30
|
+
instance.deployer.toField(),
|
|
31
|
+
instance.contractClassId,
|
|
32
|
+
instance.initializationHash,
|
|
33
|
+
instance.portalContractAddress.toField(),
|
|
34
|
+
instance.publicKeysHash,
|
|
35
|
+
].map(f => new Field(f));
|
|
36
|
+
context.machineState.memory.setSlice(dstOffset, data);
|
|
37
|
+
context.machineState.incrementPc();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
GetContractInstance.type = 'GETCONTRACTINSTANCE';
|
|
41
|
+
GetContractInstance.opcode = Opcode.GETCONTRACTINSTANCE;
|
|
42
|
+
// Informs (de)serialization. See Instruction.deserialize.
|
|
43
|
+
GetContractInstance.wireFormat = [
|
|
44
|
+
OperandType.UINT8,
|
|
45
|
+
OperandType.UINT8,
|
|
46
|
+
OperandType.UINT32,
|
|
47
|
+
OperandType.UINT32,
|
|
48
|
+
];
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL29wY29kZXMvY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUFXO0lBV2xELFlBQW9CLFFBQWdCLEVBQVUsYUFBcUIsRUFBVSxTQUFpQjtRQUM1RixLQUFLLEVBQUUsQ0FBQztRQURVLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFFOUYsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDL0IsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQzNFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3BDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUM1QixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RixNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJHLE1BQU0sSUFBSSxHQUNSLFFBQVEsS0FBSyxTQUFTO1lBQ3BCLENBQUMsQ0FBQztnQkFDRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZO2dCQUMxQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNaLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNiO1lBQ0gsQ0FBQyxDQUFDO2dCQUNFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVE7Z0JBQ25CLFFBQVEsQ0FBQyxJQUFJO2dCQUNiLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUMzQixRQUFRLENBQUMsZUFBZTtnQkFDeEIsUUFBUSxDQUFDLGtCQUFrQjtnQkFDM0IsUUFBUSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRTtnQkFDeEMsUUFBUSxDQUFDLGNBQWM7YUFDeEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDOztBQS9DZSx3QkFBSSxHQUFXLHFCQUFxQixDQUFDO0FBQ3JDLDBCQUFNLEdBQVcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0FBQzVELDBEQUEwRDtBQUMxQyw4QkFBVSxHQUFrQjtJQUMxQyxXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsTUFBTTtJQUNsQixXQUFXLENBQUMsTUFBTTtDQUNuQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/control_flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,IAAK,SAAQ,WAAW;IAMvB,OAAO,CAAC,UAAU;IAL9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAe;IAE7C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/control_flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,IAAK,SAAQ,WAAW;IAMvB,OAAO,CAAC,UAAU;IAL9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAe;IAE7C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzD;AAED,qBAAa,KAAM,SAAQ,WAAW;IAYxB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,GAAG;IAAU,OAAO,CAAC,UAAU;IAX7E,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAgB;IAG9C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,GAAG,EAAE,MAAM,EAAU,UAAU,EAAE,MAAM;IAIxE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBzD;AAED,qBAAa,YAAa,SAAQ,WAAW;IAM/B,OAAO,CAAC,GAAG;IALvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAkB;IAC9C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAuB;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,GAAG,EAAE,MAAM;IAIlB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzD;AAED,qBAAa,cAAe,SAAQ,WAAW;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAoB;IAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAAuB;;IAMnD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAWzD"}
|
|
@@ -7,7 +7,9 @@ export class Jump extends Instruction {
|
|
|
7
7
|
this.jumpOffset = jumpOffset;
|
|
8
8
|
}
|
|
9
9
|
async execute(context) {
|
|
10
|
+
context.machineState.consumeGas(this.gasCost());
|
|
10
11
|
context.machineState.pc = this.jumpOffset;
|
|
12
|
+
context.machineState.memory.assert({});
|
|
11
13
|
}
|
|
12
14
|
}
|
|
13
15
|
Jump.type = 'JUMP';
|
|
@@ -22,7 +24,10 @@ export class JumpI extends Instruction {
|
|
|
22
24
|
this.condOffset = condOffset;
|
|
23
25
|
}
|
|
24
26
|
async execute(context) {
|
|
25
|
-
const
|
|
27
|
+
const memoryOperations = { reads: 1, indirect: this.indirect };
|
|
28
|
+
const memory = context.machineState.memory.track(this.type);
|
|
29
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
30
|
+
const condition = memory.getAs(this.condOffset);
|
|
26
31
|
// TODO: reconsider this casting
|
|
27
32
|
if (condition.toBigInt() == 0n) {
|
|
28
33
|
context.machineState.incrementPc();
|
|
@@ -30,6 +35,7 @@ export class JumpI extends Instruction {
|
|
|
30
35
|
else {
|
|
31
36
|
context.machineState.pc = this.loc;
|
|
32
37
|
}
|
|
38
|
+
memory.assert(memoryOperations);
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
41
|
JumpI.type = 'JUMPI';
|
|
@@ -47,8 +53,10 @@ export class InternalCall extends Instruction {
|
|
|
47
53
|
this.loc = loc;
|
|
48
54
|
}
|
|
49
55
|
async execute(context) {
|
|
56
|
+
context.machineState.consumeGas(this.gasCost());
|
|
50
57
|
context.machineState.internalCallStack.push(context.machineState.pc + 1);
|
|
51
58
|
context.machineState.pc = this.loc;
|
|
59
|
+
context.machineState.memory.assert({});
|
|
52
60
|
}
|
|
53
61
|
}
|
|
54
62
|
InternalCall.type = 'INTERNALCALL';
|
|
@@ -60,15 +68,17 @@ export class InternalReturn extends Instruction {
|
|
|
60
68
|
super();
|
|
61
69
|
}
|
|
62
70
|
async execute(context) {
|
|
71
|
+
context.machineState.consumeGas(this.gasCost());
|
|
63
72
|
const jumpOffset = context.machineState.internalCallStack.pop();
|
|
64
73
|
if (jumpOffset === undefined) {
|
|
65
74
|
throw new InstructionExecutionError('Internal call stack empty!');
|
|
66
75
|
}
|
|
67
76
|
context.machineState.pc = jumpOffset;
|
|
77
|
+
context.machineState.memory.assert({});
|
|
68
78
|
}
|
|
69
79
|
}
|
|
70
80
|
InternalReturn.type = 'INTERNALRETURN';
|
|
71
81
|
InternalReturn.opcode = Opcode.INTERNALRETURN;
|
|
72
82
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
73
83
|
InternalReturn.wireFormat = [OperandType.UINT8];
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbF9mbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F2bS9vcGNvZGVzL2NvbnRyb2xfZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLElBQUssU0FBUSxXQUFXO0lBTW5DLFlBQW9CLFVBQWtCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBRFUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtJQUV0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtQjtRQUN0QyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVoRCxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDOztBQWZNLFNBQUksR0FBVyxNQUFNLENBQUM7QUFDYixXQUFNLEdBQVcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QywwREFBMEQ7QUFDMUMsZUFBVSxHQUFrQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBZXRGLE1BQU0sT0FBTyxLQUFNLFNBQVEsV0FBVztJQVlwQyxZQUFvQixRQUFnQixFQUFVLEdBQVcsRUFBVSxVQUFrQjtRQUNuRixLQUFLLEVBQUUsQ0FBQztRQURVLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQVUsZUFBVSxHQUFWLFVB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
|