@aztec/simulator 0.87.2 → 0.87.3-nightly.20250528
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/client.d.ts +2 -0
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +2 -0
- package/dest/private/acvm/acvm.d.ts +4 -0
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/oracle/oracle.d.ts +1 -1
- package/dest/private/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/private/acvm/oracle/oracle.js +2 -2
- package/dest/private/acvm/oracle/typed_oracle.d.ts +1 -1
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/private/acvm/oracle/typed_oracle.js +2 -2
- package/dest/private/private_execution.d.ts.map +1 -1
- package/dest/private/private_execution.js +2 -1
- package/dest/private/private_execution_oracle.d.ts +1 -1
- package/dest/private/private_execution_oracle.d.ts.map +1 -1
- package/dest/private/private_execution_oracle.js +1 -1
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts +39 -19
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/providers/circuit_recording/circuit_recorder.js +90 -126
- package/dest/private/providers/circuit_recording/file_circuit_recorder.d.ts +31 -0
- package/dest/private/providers/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
- package/dest/private/providers/circuit_recording/file_circuit_recorder.js +135 -0
- package/dest/private/providers/circuit_recording/memory_circuit_recorder.d.ts +5 -0
- package/dest/private/providers/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
- package/dest/private/providers/circuit_recording/memory_circuit_recorder.js +9 -0
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts +3 -1
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts.map +1 -1
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.js +16 -11
- package/dest/private/utility_execution_oracle.d.ts +1 -1
- package/dest/private/utility_execution_oracle.d.ts.map +1 -1
- package/dest/private/utility_execution_oracle.js +1 -1
- package/dest/public/avm/avm_gas.d.ts +4 -5
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +28 -18
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts +1 -0
- package/dest/public/avm/fixtures/base_avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/base_avm_simulation_tester.js +6 -0
- package/dest/public/avm/fixtures/utils.js +1 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +8 -7
- package/dest/public/avm/opcodes/addressing_mode.d.ts +2 -0
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +6 -0
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +1 -1
- package/dest/public/avm/opcodes/bitwise.d.ts +5 -1
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +17 -2
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +1 -1
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +1 -1
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +4 -4
- package/dest/public/avm/opcodes/conversion.d.ts +1 -0
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +263 -2
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +1 -1
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +1 -1
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +6 -8
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +3 -3
- package/dest/public/avm/opcodes/instruction.d.ts +9 -3
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction.js +12 -7
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +8 -6
- package/dest/public/avm/opcodes/misc.js +1 -3
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +5 -3
- package/dest/public/fixtures/index.d.ts +1 -0
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +1 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts +9 -0
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -0
- package/dest/public/fixtures/minimal_public_tx.js +43 -0
- package/dest/public/public_tx_simulator/apps_tests/amm_test.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/apps_tests/amm_test.js +27 -55
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +5 -4
- package/dest/public/side_effect_trace.d.ts +4 -1
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +13 -2
- package/dest/public/side_effect_trace_interface.d.ts +1 -0
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.d.ts +1 -0
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +3 -0
- package/dest/server.d.ts +2 -0
- package/dest/server.d.ts.map +1 -1
- package/dest/server.js +2 -0
- package/dest/testing.d.ts +1 -1
- package/dest/testing.d.ts.map +1 -1
- package/dest/testing.js +1 -1
- package/package.json +15 -15
- package/src/client.ts +2 -0
- package/src/private/acvm/acvm.ts +3 -0
- package/src/private/acvm/oracle/oracle.ts +2 -2
- package/src/private/acvm/oracle/typed_oracle.ts +2 -2
- package/src/private/private_execution.ts +1 -0
- package/src/private/private_execution_oracle.ts +1 -1
- package/src/private/providers/circuit_recording/circuit_recorder.ts +114 -136
- package/src/private/providers/circuit_recording/file_circuit_recorder.ts +158 -0
- package/src/private/providers/circuit_recording/memory_circuit_recorder.ts +11 -0
- package/src/private/providers/circuit_recording/simulation_provider_recorder_wrapper.ts +22 -14
- package/src/private/utility_execution_oracle.ts +1 -1
- package/src/public/avm/avm_gas.ts +20 -14
- package/src/public/avm/fixtures/base_avm_simulation_tester.ts +5 -0
- package/src/public/avm/fixtures/utils.ts +1 -1
- package/src/public/avm/opcodes/accrued_substate.ts +23 -7
- package/src/public/avm/opcodes/addressing_mode.ts +8 -0
- package/src/public/avm/opcodes/arithmetic.ts +3 -1
- package/src/public/avm/opcodes/bitwise.ts +26 -2
- package/src/public/avm/opcodes/comparators.ts +3 -1
- package/src/public/avm/opcodes/contract.ts +3 -1
- package/src/public/avm/opcodes/control_flow.ts +6 -4
- package/src/public/avm/opcodes/conversion.ts +21 -2
- package/src/public/avm/opcodes/ec_add.ts +3 -1
- package/src/public/avm/opcodes/environment_getters.ts +3 -1
- package/src/public/avm/opcodes/external_calls.ts +16 -8
- package/src/public/avm/opcodes/hashing.ts +11 -3
- package/src/public/avm/opcodes/instruction.ts +14 -7
- package/src/public/avm/opcodes/memory.ts +23 -6
- package/src/public/avm/opcodes/misc.ts +4 -4
- package/src/public/avm/opcodes/storage.ts +13 -3
- package/src/public/fixtures/index.ts +1 -0
- package/src/public/fixtures/minimal_public_tx.ts +57 -0
- package/src/public/public_tx_simulator/apps_tests/amm_test.ts +49 -44
- package/src/public/public_tx_simulator/public_tx_context.ts +26 -5
- package/src/public/side_effect_trace.ts +13 -0
- package/src/public/side_effect_trace_interface.ts +1 -0
- package/src/public/state_manager/state_manager.ts +4 -0
- package/src/server.ts +2 -0
- package/src/testing.ts +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import { type IntegralValue, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
2
|
+
import { type IntegralValue, type TaggedMemoryInterface, TypeTag } from '../avm_memory_types.js';
|
|
3
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
4
|
import { Instruction } from './instruction.js';
|
|
5
5
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
@@ -7,21 +7,25 @@ declare abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstru
|
|
|
7
7
|
execute(context: AvmContext): Promise<void>;
|
|
8
8
|
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
9
9
|
protected checkTags(memory: TaggedMemoryInterface, aOffset: number, bOffset: number): void;
|
|
10
|
+
protected getDynamicMultiplier(_lhsTag: TypeTag): number;
|
|
10
11
|
}
|
|
11
12
|
export declare class And extends ThreeOperandBitwiseInstruction {
|
|
12
13
|
static readonly type: string;
|
|
13
14
|
static readonly opcode = Opcode.AND_8;
|
|
14
15
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
16
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
15
17
|
}
|
|
16
18
|
export declare class Or extends ThreeOperandBitwiseInstruction {
|
|
17
19
|
static readonly type: string;
|
|
18
20
|
static readonly opcode = Opcode.OR_8;
|
|
19
21
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
22
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
20
23
|
}
|
|
21
24
|
export declare class Xor extends ThreeOperandBitwiseInstruction {
|
|
22
25
|
static readonly type: string;
|
|
23
26
|
static readonly opcode = Opcode.XOR_8;
|
|
24
27
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
28
|
+
protected getDynamicMultiplier(lhsTag: TypeTag): number;
|
|
25
29
|
}
|
|
26
30
|
export declare class Shl extends ThreeOperandBitwiseInstruction {
|
|
27
31
|
static readonly type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitwise.d.ts","sourceRoot":"","sources":["../../../../src/public/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/public/avm/opcodes/bitwise.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getBitwiseDynamicGasMultiplier } from '../avm_gas.js';
|
|
1
2
|
import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
|
|
2
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
4
|
import { Addressing } from './addressing_mode.js';
|
|
@@ -7,7 +8,7 @@ class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
|
7
8
|
async execute(context) {
|
|
8
9
|
const memory = context.machineState.memory;
|
|
9
10
|
const addressing = Addressing.fromWire(this.indirect);
|
|
10
|
-
context.machineState.consumeGas(this.
|
|
11
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
11
12
|
const operands = [
|
|
12
13
|
this.aOffset,
|
|
13
14
|
this.bOffset,
|
|
@@ -15,6 +16,8 @@ class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
|
15
16
|
];
|
|
16
17
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
17
18
|
this.checkTags(memory, aOffset, bOffset);
|
|
19
|
+
const multiplier = this.getDynamicMultiplier(memory.getTag(aOffset));
|
|
20
|
+
context.machineState.consumeGas(this.dynamicGasCost(multiplier));
|
|
18
21
|
const a = memory.getAs(aOffset);
|
|
19
22
|
const b = memory.getAs(bOffset);
|
|
20
23
|
const res = this.compute(a, b);
|
|
@@ -24,6 +27,9 @@ class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
|
24
27
|
TaggedMemory.checkIsIntegralTag(memory.getTag(aOffset));
|
|
25
28
|
memory.checkTagsAreSame(aOffset, bOffset);
|
|
26
29
|
}
|
|
30
|
+
getDynamicMultiplier(_lhsTag) {
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
export class And extends ThreeOperandBitwiseInstruction {
|
|
29
35
|
static type = 'AND';
|
|
@@ -31,6 +37,9 @@ export class And extends ThreeOperandBitwiseInstruction {
|
|
|
31
37
|
compute(a, b) {
|
|
32
38
|
return a.and(b);
|
|
33
39
|
}
|
|
40
|
+
getDynamicMultiplier(lhsTag) {
|
|
41
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
42
|
+
}
|
|
34
43
|
}
|
|
35
44
|
export class Or extends ThreeOperandBitwiseInstruction {
|
|
36
45
|
static type = 'OR';
|
|
@@ -38,6 +47,9 @@ export class Or extends ThreeOperandBitwiseInstruction {
|
|
|
38
47
|
compute(a, b) {
|
|
39
48
|
return a.or(b);
|
|
40
49
|
}
|
|
50
|
+
getDynamicMultiplier(lhsTag) {
|
|
51
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
52
|
+
}
|
|
41
53
|
}
|
|
42
54
|
export class Xor extends ThreeOperandBitwiseInstruction {
|
|
43
55
|
static type = 'XOR';
|
|
@@ -45,6 +57,9 @@ export class Xor extends ThreeOperandBitwiseInstruction {
|
|
|
45
57
|
compute(a, b) {
|
|
46
58
|
return a.xor(b);
|
|
47
59
|
}
|
|
60
|
+
getDynamicMultiplier(lhsTag) {
|
|
61
|
+
return getBitwiseDynamicGasMultiplier(lhsTag);
|
|
62
|
+
}
|
|
48
63
|
}
|
|
49
64
|
export class Shl extends ThreeOperandBitwiseInstruction {
|
|
50
65
|
static type = 'SHL';
|
|
@@ -92,7 +107,7 @@ export class Not extends Instruction {
|
|
|
92
107
|
async execute(context) {
|
|
93
108
|
const memory = context.machineState.memory;
|
|
94
109
|
const addressing = Addressing.fromWire(this.indirect);
|
|
95
|
-
context.machineState.consumeGas(this.
|
|
110
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
96
111
|
const operands = [
|
|
97
112
|
this.srcOffset,
|
|
98
113
|
this.dstOffset
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../../src/public/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;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,qBAAsB,SAAQ,uBAAuB;IACrD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../../src/public/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;AAEvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,qBAAsB,SAAQ,uBAAuB;IACrD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD,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,eAAe;IAErC,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,eAAe;IAErC,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,gBAAgB;IAEtC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO;CAG3D"}
|
|
@@ -6,7 +6,7 @@ class ComparatorInstruction extends ThreeOperandInstruction {
|
|
|
6
6
|
async execute(context) {
|
|
7
7
|
const memory = context.machineState.memory;
|
|
8
8
|
const addressing = Addressing.fromWire(this.indirect);
|
|
9
|
-
context.machineState.consumeGas(this.
|
|
9
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
10
10
|
const operands = [
|
|
11
11
|
this.aOffset,
|
|
12
12
|
this.bOffset,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,sBAAsB;IAChC,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;CACV;AAED,qBAAa,mBAAoB,SAAQ,WAAW;IAahD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAfpB,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,CAMvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;IAKtB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,sBAAsB;IAChC,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;CACV;AAED,qBAAa,mBAAoB,SAAQ,WAAW;IAahD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAfpB,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,CAMvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;IAKtB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAwClD"}
|
|
@@ -30,7 +30,7 @@ export class GetContractInstance extends Instruction {
|
|
|
30
30
|
async execute(context) {
|
|
31
31
|
const memory = context.machineState.memory;
|
|
32
32
|
const addressing = Addressing.fromWire(this.indirect);
|
|
33
|
-
context.machineState.consumeGas(this.
|
|
33
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
34
34
|
if (!(this.memberEnum in ContractInstanceMember)) {
|
|
35
35
|
throw new InstructionExecutionError(`Invalid GETCONSTRACTINSTANCE member enum ${this.memberEnum}`);
|
|
36
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../../src/public/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;AAEpF,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,CAAkB;IAEhD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,KAAM,SAAQ,WAAW;IAalC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAdb,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAGjD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM;IAKR,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"control_flow.d.ts","sourceRoot":"","sources":["../../../../src/public/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;AAEpF,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,CAAkB;IAEhD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAA2C;gBAEhE,UAAU,EAAE,MAAM;IAIzB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,KAAM,SAAQ,WAAW;IAalC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAdb,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAGjD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM;IAKR,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxC,SAAS,IAAI,OAAO;CAGrC;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;IAUxC,SAAS,IAAI,OAAO;CAGrC;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;IAUxC,SAAS,IAAI,OAAO;CAGrC"}
|
|
@@ -15,7 +15,7 @@ export class Jump extends Instruction {
|
|
|
15
15
|
super(), this.jumpOffset = jumpOffset;
|
|
16
16
|
}
|
|
17
17
|
async execute(context) {
|
|
18
|
-
context.machineState.consumeGas(this.
|
|
18
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
19
19
|
context.machineState.pc = this.jumpOffset;
|
|
20
20
|
}
|
|
21
21
|
handlesPC() {
|
|
@@ -41,7 +41,7 @@ export class JumpI extends Instruction {
|
|
|
41
41
|
async execute(context) {
|
|
42
42
|
const memory = context.machineState.memory;
|
|
43
43
|
const addressing = Addressing.fromWire(this.indirect);
|
|
44
|
-
context.machineState.consumeGas(this.
|
|
44
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
45
45
|
const operands = [
|
|
46
46
|
this.condOffset
|
|
47
47
|
];
|
|
@@ -70,7 +70,7 @@ export class InternalCall extends Instruction {
|
|
|
70
70
|
super(), this.loc = loc;
|
|
71
71
|
}
|
|
72
72
|
async execute(context) {
|
|
73
|
-
context.machineState.consumeGas(this.
|
|
73
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
74
74
|
context.machineState.internalCallStack.push({
|
|
75
75
|
callPc: context.machineState.pc,
|
|
76
76
|
returnPc: context.machineState.nextPc
|
|
@@ -92,7 +92,7 @@ export class InternalReturn extends Instruction {
|
|
|
92
92
|
super();
|
|
93
93
|
}
|
|
94
94
|
async execute(context) {
|
|
95
|
-
context.machineState.consumeGas(this.
|
|
95
|
+
context.machineState.consumeGas(this.baseGasCost(0, 0));
|
|
96
96
|
const stackEntry = context.machineState.internalCallStack.pop();
|
|
97
97
|
if (stackEntry === undefined) {
|
|
98
98
|
throw new InstructionExecutionError('Internal call stack empty!');
|
|
@@ -14,4 +14,5 @@ export declare class ToRadixBE extends Instruction {
|
|
|
14
14
|
constructor(indirect: number, srcOffset: number, radixOffset: number, numLimbsOffset: number, outputBitsOffset: number, dstOffset: number);
|
|
15
15
|
execute(context: AvmContext): Promise<void>;
|
|
16
16
|
}
|
|
17
|
+
export declare const MODULUS_LIMBS_PER_RADIX: number[];
|
|
17
18
|
//# sourceMappingURL=conversion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;IAgBtC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,SAAS;IApBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAGlD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,SAAU,SAAQ,WAAW;IAgBtC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,SAAS;IApBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAGlD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAqDzD;AAGD,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAU3C,CAAC"}
|
|
@@ -28,6 +28,7 @@ export class ToRadixBE extends Instruction {
|
|
|
28
28
|
async execute(context) {
|
|
29
29
|
const memory = context.machineState.memory;
|
|
30
30
|
const addressing = Addressing.fromWire(this.indirect);
|
|
31
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
31
32
|
const operands = [
|
|
32
33
|
this.srcOffset,
|
|
33
34
|
this.radixOffset,
|
|
@@ -42,10 +43,10 @@ export class ToRadixBE extends Instruction {
|
|
|
42
43
|
memory.checkTag(TypeTag.UINT32, numLimbsOffset);
|
|
43
44
|
memory.checkTag(TypeTag.UINT1, outputBitsOffset);
|
|
44
45
|
const numLimbs = memory.get(numLimbsOffset).toNumber();
|
|
45
|
-
|
|
46
|
+
const radix = memory.get(radixOffset).toBigInt();
|
|
47
|
+
context.machineState.consumeGas(this.dynamicGasCost(Math.max(numLimbs, radix > 256n ? 32 : MODULUS_LIMBS_PER_RADIX[Number(radix)])));
|
|
46
48
|
const outputBits = memory.get(outputBitsOffset).toNumber();
|
|
47
49
|
let value = memory.get(srcOffset).toBigInt();
|
|
48
|
-
const radix = memory.get(radixOffset).toBigInt();
|
|
49
50
|
if (radix < 2 || radix > 256) {
|
|
50
51
|
throw new InvalidToRadixInputsError(`ToRadixBE instruction's radix should be in range [2,256] (was ${radix}).`);
|
|
51
52
|
}
|
|
@@ -67,3 +68,263 @@ export class ToRadixBE extends Instruction {
|
|
|
67
68
|
memory.setSlice(dstOffset, res);
|
|
68
69
|
}
|
|
69
70
|
}
|
|
71
|
+
// First two are for radix = 0 and 1, which are invalid, so we have 0 limbs for those cases.
|
|
72
|
+
export const MODULUS_LIMBS_PER_RADIX = [
|
|
73
|
+
0,
|
|
74
|
+
0,
|
|
75
|
+
254,
|
|
76
|
+
161,
|
|
77
|
+
127,
|
|
78
|
+
110,
|
|
79
|
+
99,
|
|
80
|
+
91,
|
|
81
|
+
85,
|
|
82
|
+
81,
|
|
83
|
+
77,
|
|
84
|
+
74,
|
|
85
|
+
71,
|
|
86
|
+
69,
|
|
87
|
+
67,
|
|
88
|
+
65,
|
|
89
|
+
64,
|
|
90
|
+
63,
|
|
91
|
+
61,
|
|
92
|
+
60,
|
|
93
|
+
59,
|
|
94
|
+
58,
|
|
95
|
+
57,
|
|
96
|
+
57,
|
|
97
|
+
56,
|
|
98
|
+
55,
|
|
99
|
+
54,
|
|
100
|
+
54,
|
|
101
|
+
53,
|
|
102
|
+
53,
|
|
103
|
+
52,
|
|
104
|
+
52,
|
|
105
|
+
51,
|
|
106
|
+
51,
|
|
107
|
+
50,
|
|
108
|
+
50,
|
|
109
|
+
50,
|
|
110
|
+
49,
|
|
111
|
+
49,
|
|
112
|
+
48,
|
|
113
|
+
48,
|
|
114
|
+
48,
|
|
115
|
+
48,
|
|
116
|
+
47,
|
|
117
|
+
47,
|
|
118
|
+
47,
|
|
119
|
+
46,
|
|
120
|
+
46,
|
|
121
|
+
46,
|
|
122
|
+
46,
|
|
123
|
+
45,
|
|
124
|
+
45,
|
|
125
|
+
45,
|
|
126
|
+
45,
|
|
127
|
+
45,
|
|
128
|
+
44,
|
|
129
|
+
44,
|
|
130
|
+
44,
|
|
131
|
+
44,
|
|
132
|
+
44,
|
|
133
|
+
43,
|
|
134
|
+
43,
|
|
135
|
+
43,
|
|
136
|
+
43,
|
|
137
|
+
43,
|
|
138
|
+
43,
|
|
139
|
+
42,
|
|
140
|
+
42,
|
|
141
|
+
42,
|
|
142
|
+
42,
|
|
143
|
+
42,
|
|
144
|
+
42,
|
|
145
|
+
42,
|
|
146
|
+
41,
|
|
147
|
+
41,
|
|
148
|
+
41,
|
|
149
|
+
41,
|
|
150
|
+
41,
|
|
151
|
+
41,
|
|
152
|
+
41,
|
|
153
|
+
41,
|
|
154
|
+
41,
|
|
155
|
+
40,
|
|
156
|
+
40,
|
|
157
|
+
40,
|
|
158
|
+
40,
|
|
159
|
+
40,
|
|
160
|
+
40,
|
|
161
|
+
40,
|
|
162
|
+
40,
|
|
163
|
+
40,
|
|
164
|
+
39,
|
|
165
|
+
39,
|
|
166
|
+
39,
|
|
167
|
+
39,
|
|
168
|
+
39,
|
|
169
|
+
39,
|
|
170
|
+
39,
|
|
171
|
+
39,
|
|
172
|
+
39,
|
|
173
|
+
39,
|
|
174
|
+
39,
|
|
175
|
+
39,
|
|
176
|
+
38,
|
|
177
|
+
38,
|
|
178
|
+
38,
|
|
179
|
+
38,
|
|
180
|
+
38,
|
|
181
|
+
38,
|
|
182
|
+
38,
|
|
183
|
+
38,
|
|
184
|
+
38,
|
|
185
|
+
38,
|
|
186
|
+
38,
|
|
187
|
+
38,
|
|
188
|
+
38,
|
|
189
|
+
37,
|
|
190
|
+
37,
|
|
191
|
+
37,
|
|
192
|
+
37,
|
|
193
|
+
37,
|
|
194
|
+
37,
|
|
195
|
+
37,
|
|
196
|
+
37,
|
|
197
|
+
37,
|
|
198
|
+
37,
|
|
199
|
+
37,
|
|
200
|
+
37,
|
|
201
|
+
37,
|
|
202
|
+
37,
|
|
203
|
+
37,
|
|
204
|
+
37,
|
|
205
|
+
36,
|
|
206
|
+
36,
|
|
207
|
+
36,
|
|
208
|
+
36,
|
|
209
|
+
36,
|
|
210
|
+
36,
|
|
211
|
+
36,
|
|
212
|
+
36,
|
|
213
|
+
36,
|
|
214
|
+
36,
|
|
215
|
+
36,
|
|
216
|
+
36,
|
|
217
|
+
36,
|
|
218
|
+
36,
|
|
219
|
+
36,
|
|
220
|
+
36,
|
|
221
|
+
36,
|
|
222
|
+
36,
|
|
223
|
+
36,
|
|
224
|
+
36,
|
|
225
|
+
35,
|
|
226
|
+
35,
|
|
227
|
+
35,
|
|
228
|
+
35,
|
|
229
|
+
35,
|
|
230
|
+
35,
|
|
231
|
+
35,
|
|
232
|
+
35,
|
|
233
|
+
35,
|
|
234
|
+
35,
|
|
235
|
+
35,
|
|
236
|
+
35,
|
|
237
|
+
35,
|
|
238
|
+
35,
|
|
239
|
+
35,
|
|
240
|
+
35,
|
|
241
|
+
35,
|
|
242
|
+
35,
|
|
243
|
+
35,
|
|
244
|
+
35,
|
|
245
|
+
35,
|
|
246
|
+
35,
|
|
247
|
+
35,
|
|
248
|
+
35,
|
|
249
|
+
34,
|
|
250
|
+
34,
|
|
251
|
+
34,
|
|
252
|
+
34,
|
|
253
|
+
34,
|
|
254
|
+
34,
|
|
255
|
+
34,
|
|
256
|
+
34,
|
|
257
|
+
34,
|
|
258
|
+
34,
|
|
259
|
+
34,
|
|
260
|
+
34,
|
|
261
|
+
34,
|
|
262
|
+
34,
|
|
263
|
+
34,
|
|
264
|
+
34,
|
|
265
|
+
34,
|
|
266
|
+
34,
|
|
267
|
+
34,
|
|
268
|
+
34,
|
|
269
|
+
34,
|
|
270
|
+
34,
|
|
271
|
+
34,
|
|
272
|
+
34,
|
|
273
|
+
34,
|
|
274
|
+
34,
|
|
275
|
+
34,
|
|
276
|
+
34,
|
|
277
|
+
34,
|
|
278
|
+
34,
|
|
279
|
+
33,
|
|
280
|
+
33,
|
|
281
|
+
33,
|
|
282
|
+
33,
|
|
283
|
+
33,
|
|
284
|
+
33,
|
|
285
|
+
33,
|
|
286
|
+
33,
|
|
287
|
+
33,
|
|
288
|
+
33,
|
|
289
|
+
33,
|
|
290
|
+
33,
|
|
291
|
+
33,
|
|
292
|
+
33,
|
|
293
|
+
33,
|
|
294
|
+
33,
|
|
295
|
+
33,
|
|
296
|
+
33,
|
|
297
|
+
33,
|
|
298
|
+
33,
|
|
299
|
+
33,
|
|
300
|
+
33,
|
|
301
|
+
33,
|
|
302
|
+
33,
|
|
303
|
+
33,
|
|
304
|
+
33,
|
|
305
|
+
33,
|
|
306
|
+
33,
|
|
307
|
+
33,
|
|
308
|
+
33,
|
|
309
|
+
33,
|
|
310
|
+
33,
|
|
311
|
+
33,
|
|
312
|
+
33,
|
|
313
|
+
33,
|
|
314
|
+
33,
|
|
315
|
+
33,
|
|
316
|
+
33,
|
|
317
|
+
32,
|
|
318
|
+
32,
|
|
319
|
+
32,
|
|
320
|
+
32,
|
|
321
|
+
32,
|
|
322
|
+
32,
|
|
323
|
+
32,
|
|
324
|
+
32,
|
|
325
|
+
32,
|
|
326
|
+
32,
|
|
327
|
+
32,
|
|
328
|
+
32,
|
|
329
|
+
32
|
|
330
|
+
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ec_add.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/ec_add.ts"],"names":[],"mappings":"AAGA,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,KAAM,SAAQ,WAAW;IAkBlC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IAxBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAGtC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAUvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ec_add.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/ec_add.ts"],"names":[],"mappings":"AAGA,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,KAAM,SAAQ,WAAW;IAkBlC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IAxBnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAW;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAGtC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAUvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAwDzD"}
|
|
@@ -33,7 +33,7 @@ export class EcAdd extends Instruction {
|
|
|
33
33
|
async execute(context) {
|
|
34
34
|
const memory = context.machineState.memory;
|
|
35
35
|
const addressing = Addressing.fromWire(this.indirect);
|
|
36
|
-
context.machineState.consumeGas(this.
|
|
36
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
37
37
|
const operands = [
|
|
38
38
|
this.p1XOffset,
|
|
39
39
|
this.p1YOffset,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,MAAM,IAAA;IACN,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,WAAW,IAAA;IACX,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,SAAS,KAAA;IACT,SAAS,KAAA;CACV;AAiCD,qBAAa,SAAU,SAAQ,WAAW;IAWtC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAZjB,gBAAuB,IAAI,EAAE,MAAM,CAAe;IAClD,gBAAuB,MAAM,EAAE,MAAM,CAAuB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM;IAKZ,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,MAAM,IAAA;IACN,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,WAAW,IAAA;IACX,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,SAAS,KAAA;IACT,SAAS,KAAA;CACV;AAiCD,qBAAa,SAAU,SAAQ,WAAW;IAWtC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAZjB,gBAAuB,IAAI,EAAE,MAAM,CAAe;IAClD,gBAAuB,MAAM,EAAE,MAAM,CAAuB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM;IAKZ,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD"}
|
|
@@ -66,7 +66,7 @@ export class GetEnvVar extends Instruction {
|
|
|
66
66
|
async execute(context) {
|
|
67
67
|
const memory = context.machineState.memory;
|
|
68
68
|
const addressing = Addressing.fromWire(this.indirect);
|
|
69
|
-
context.machineState.consumeGas(this.
|
|
69
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
70
70
|
if (!(this.varEnum in EnvironmentVariable)) {
|
|
71
71
|
throw new InstructionExecutionError(`Invalid GETENVVAR var enum ${this.varEnum}`);
|
|
72
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external_calls.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/external_calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,YAAa,SAAQ,WAAW;IAa3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAhBpB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM;IAKf,OAAO,CAAC,OAAO,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"external_calls.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/external_calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,YAAa,SAAQ,WAAW;IAa3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAhBpB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAQvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM;IAKf,OAAO,CAAC,OAAO,EAAE,UAAU;IA6ExC,aAA6B,IAAI,IAAI,MAAM,GAAG,YAAY,CAAC;CAC5D;AAED,qBAAa,IAAK,SAAQ,YAAY;IACpC,MAAM,CAAC,IAAI,EAAG,MAAM,CAAU;IAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAe;IAE7C,IAAW,IAAI,WAEd;CACF;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,MAAM,CAAC,IAAI,EAAG,YAAY,CAAU;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAqB;IAEnD,IAAW,IAAI,iBAEd;CACF;AAED,qBAAa,WAAY,SAAQ,WAAW;IAWxC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IAXnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAEpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAIvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;IAKd,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAazD;AAED,qBAAa,MAAO,SAAQ,WAAW;IAYnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY;IAbtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAiB;IAE/C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxC,SAAS,IAAI,OAAO;CAGrC;AAED,qBAAa,MAAO,SAAQ,WAAW;IAkBnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IAnBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAY;IAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAmB;IAEjD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAKxC;IACF,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxC,SAAS,IAAI,OAAO;CAGrC"}
|
|
@@ -25,6 +25,7 @@ class ExternalCall extends Instruction {
|
|
|
25
25
|
async execute(context) {
|
|
26
26
|
const memory = context.machineState.memory;
|
|
27
27
|
const addressing = Addressing.fromWire(this.indirect);
|
|
28
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
28
29
|
const operands = [
|
|
29
30
|
this.l2GasOffset,
|
|
30
31
|
this.daGasOffset,
|
|
@@ -33,9 +34,8 @@ class ExternalCall extends Instruction {
|
|
|
33
34
|
this.argsOffset
|
|
34
35
|
];
|
|
35
36
|
const [l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset] = addressing.resolve(operands, memory);
|
|
36
|
-
|
|
37
|
-
memory.checkTags(TypeTag.
|
|
38
|
-
memory.checkTags(TypeTag.FIELD, daGasOffset);
|
|
37
|
+
memory.checkTags(TypeTag.UINT32, l2GasOffset);
|
|
38
|
+
memory.checkTags(TypeTag.UINT32, daGasOffset);
|
|
39
39
|
memory.checkTag(TypeTag.FIELD, addrOffset);
|
|
40
40
|
memory.checkTag(TypeTag.UINT32, argsSizeOffset);
|
|
41
41
|
const calldataSize = memory.get(argsSizeOffset).toNumber();
|
|
@@ -44,9 +44,7 @@ class ExternalCall extends Instruction {
|
|
|
44
44
|
const callAddress = memory.getAs(addrOffset);
|
|
45
45
|
// If we are already in a static call, we propagate the environment.
|
|
46
46
|
const callType = context.environment.isStaticCall ? 'STATICCALL' : this.type;
|
|
47
|
-
//
|
|
48
|
-
context.machineState.consumeGas(this.gasCost(calldataSize));
|
|
49
|
-
// Then we consume the gas allocated for the nested call. The excess will be refunded later.
|
|
47
|
+
// We consume the gas allocated for the nested call. The excess will be refunded later.
|
|
50
48
|
// Gas allocation is capped by the amount of gas left in the current context.
|
|
51
49
|
// We have to do some dancing here because the gas allocation is a field,
|
|
52
50
|
// but in the machine state we track gas as a number.
|
|
@@ -150,6 +148,7 @@ export class Return extends Instruction {
|
|
|
150
148
|
async execute(context) {
|
|
151
149
|
const memory = context.machineState.memory;
|
|
152
150
|
const addressing = Addressing.fromWire(this.indirect);
|
|
151
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
153
152
|
const operands = [
|
|
154
153
|
this.returnSizeOffset,
|
|
155
154
|
this.returnOffset
|
|
@@ -157,7 +156,6 @@ export class Return extends Instruction {
|
|
|
157
156
|
const [returnSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
158
157
|
memory.checkTag(TypeTag.UINT32, returnSizeOffset);
|
|
159
158
|
const returnSize = memory.get(returnSizeOffset).toNumber();
|
|
160
|
-
context.machineState.consumeGas(this.gasCost(returnSize));
|
|
161
159
|
const output = memory.getSlice(returnOffset, returnSize).map((word)=>word.toFr());
|
|
162
160
|
context.machineState.return(output);
|
|
163
161
|
}
|
|
@@ -189,6 +187,7 @@ export class Revert extends Instruction {
|
|
|
189
187
|
async execute(context) {
|
|
190
188
|
const memory = context.machineState.memory;
|
|
191
189
|
const addressing = Addressing.fromWire(this.indirect);
|
|
190
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
192
191
|
const operands = [
|
|
193
192
|
this.retSizeOffset,
|
|
194
193
|
this.returnOffset
|
|
@@ -196,7 +195,6 @@ export class Revert extends Instruction {
|
|
|
196
195
|
const [retSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
197
196
|
memory.checkTag(TypeTag.UINT32, retSizeOffset);
|
|
198
197
|
const retSize = memory.get(retSizeOffset).toNumber();
|
|
199
|
-
context.machineState.consumeGas(this.gasCost(retSize));
|
|
200
198
|
const output = memory.getSlice(returnOffset, retSize).map((word)=>word.toFr());
|
|
201
199
|
context.machineState.revert(output);
|
|
202
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.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,SAAU,SAAQ,WAAW;IActC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IAf3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAG9B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM;IAKtB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../../../../src/public/avm/opcodes/hashing.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,SAAU,SAAQ,WAAW;IActC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,iBAAiB;IAf3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAe;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAoB;IAClD,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAG9B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM;IAKtB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBzD;AAED,qBAAa,WAAY,SAAQ,WAAW;IAaxC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IAdrB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAiB;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsB;IAGpD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAKvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;IAMhB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBzD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAc9C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IAhBtB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAuB;IAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA4B;IAG1D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAMvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM;IAKjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BzD"}
|
|
@@ -23,7 +23,7 @@ export class Poseidon2 extends Instruction {
|
|
|
23
23
|
async execute(context) {
|
|
24
24
|
const memory = context.machineState.memory;
|
|
25
25
|
const addressing = Addressing.fromWire(this.indirect);
|
|
26
|
-
context.machineState.consumeGas(this.
|
|
26
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
27
27
|
const operands = [
|
|
28
28
|
this.inputStateOffset,
|
|
29
29
|
this.outputStateOffset
|
|
@@ -56,12 +56,12 @@ export class KeccakF1600 extends Instruction {
|
|
|
56
56
|
const inputSize = 25;
|
|
57
57
|
const memory = context.machineState.memory;
|
|
58
58
|
const addressing = Addressing.fromWire(this.indirect);
|
|
59
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
59
60
|
const operands = [
|
|
60
61
|
this.dstOffset,
|
|
61
62
|
this.inputOffset
|
|
62
63
|
];
|
|
63
64
|
const [dstOffset, inputOffset] = addressing.resolve(operands, memory);
|
|
64
|
-
context.machineState.consumeGas(this.gasCost());
|
|
65
65
|
const stateData = memory.getSlice(inputOffset, inputSize).map((word)=>word.toBigInt());
|
|
66
66
|
memory.checkTagsRange(TypeTag.UINT64, inputOffset, inputSize);
|
|
67
67
|
const updatedState = keccakf1600(stateData);
|
|
@@ -92,6 +92,7 @@ export class Sha256Compression extends Instruction {
|
|
|
92
92
|
const INPUTS_SIZE = 16;
|
|
93
93
|
const memory = context.machineState.memory;
|
|
94
94
|
const addressing = Addressing.fromWire(this.indirect);
|
|
95
|
+
context.machineState.consumeGas(this.baseGasCost(addressing.indirectOperandsCount(), addressing.relativeOperandsCount()));
|
|
95
96
|
const operands = [
|
|
96
97
|
this.outputOffset,
|
|
97
98
|
this.stateOffset,
|
|
@@ -99,7 +100,6 @@ export class Sha256Compression extends Instruction {
|
|
|
99
100
|
];
|
|
100
101
|
const [outputOffset, stateOffset, inputsOffset] = addressing.resolve(operands, memory);
|
|
101
102
|
// Note: size of output is same as size of state
|
|
102
|
-
context.machineState.consumeGas(this.gasCost());
|
|
103
103
|
const inputs = Uint32Array.from(memory.getSlice(inputsOffset, INPUTS_SIZE).map((word)=>word.toNumber()));
|
|
104
104
|
const state = Uint32Array.from(memory.getSlice(stateOffset, STATE_SIZE).map((word)=>word.toNumber()));
|
|
105
105
|
memory.checkTagsRange(TypeTag.UINT32, inputsOffset, INPUTS_SIZE);
|