@aztec/simulator 0.55.1 → 0.56.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/dest/avm/avm_execution_environment.d.ts +0 -8
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +1 -19
- package/dest/avm/avm_gas.d.ts +2 -2
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +31 -115
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +6 -6
- package/dest/avm/avm_memory_types.d.ts +35 -7
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +25 -11
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +5 -6
- package/dest/avm/bytecode_utils.d.ts +1 -2
- package/dest/avm/bytecode_utils.d.ts.map +1 -1
- package/dest/avm/bytecode_utils.js +3 -17
- package/dest/avm/fixtures/index.d.ts +4 -16
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +9 -25
- package/dest/avm/journal/index.d.ts +0 -1
- package/dest/avm/journal/index.d.ts.map +1 -1
- package/dest/avm/journal/index.js +1 -2
- package/dest/avm/journal/journal.d.ts +4 -4
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +14 -13
- package/dest/avm/opcodes/bitwise.d.ts +10 -4
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +17 -11
- package/dest/avm/opcodes/commitment.js +2 -2
- package/dest/avm/opcodes/comparators.js +2 -2
- package/dest/avm/opcodes/conversion.d.ts +3 -2
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +18 -11
- package/dest/avm/opcodes/environment_getters.d.ts +27 -63
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +75 -80
- package/dest/avm/opcodes/hashing.d.ts +7 -5
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +40 -24
- package/dest/avm/opcodes/index.d.ts +3 -0
- package/dest/avm/opcodes/index.d.ts.map +1 -1
- package/dest/avm/opcodes/index.js +4 -1
- package/dest/avm/opcodes/instruction_impl.d.ts +0 -26
- package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction_impl.js +1 -51
- package/dest/avm/opcodes/memory.d.ts +7 -2
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +23 -6
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +7 -6
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +5 -24
- package/dest/avm/serialization/instruction_serialization.d.ts +48 -60
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +50 -63
- package/dest/avm/test_utils.d.ts +8 -8
- package/dest/avm/test_utils.d.ts.map +1 -1
- package/dest/avm/test_utils.js +15 -15
- package/dest/client/simulator.d.ts +1 -1
- package/dest/client/test_utils.d.ts.map +1 -1
- package/dest/client/test_utils.js +12 -6
- package/dest/client/unconstrained_execution.d.ts +2 -2
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +3 -3
- package/dest/public/enqueued_call_simulator.d.ts +43 -0
- package/dest/public/enqueued_call_simulator.d.ts.map +1 -0
- package/dest/public/enqueued_call_simulator.js +155 -0
- package/dest/public/enqueued_calls_processor.d.ts +44 -0
- package/dest/public/enqueued_calls_processor.d.ts.map +1 -0
- package/dest/public/enqueued_calls_processor.js +218 -0
- package/dest/public/execution.d.ts +4 -9
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +5 -10
- package/dest/public/executor.d.ts +3 -5
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +5 -9
- package/dest/public/hints_builder.d.ts +4 -3
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +4 -4
- package/dest/public/index.d.ts +3 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +3 -3
- package/dest/public/public_db_sources.d.ts +17 -24
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +58 -65
- package/dest/public/public_kernel.d.ts +3 -9
- package/dest/public/public_kernel.d.ts.map +1 -1
- package/dest/public/public_kernel.js +13 -40
- package/dest/public/public_kernel_circuit_simulator.d.ts +5 -11
- package/dest/public/public_kernel_circuit_simulator.d.ts.map +1 -1
- package/dest/public/public_kernel_tail_simulator.d.ts +19 -0
- package/dest/public/public_kernel_tail_simulator.d.ts.map +1 -0
- package/dest/public/public_kernel_tail_simulator.js +45 -0
- package/dest/public/public_processor.d.ts +8 -5
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +31 -48
- package/dest/public/public_processor_metrics.d.ts +3 -3
- package/dest/public/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor_metrics.js +1 -1
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +4 -8
- package/package.json +9 -9
- package/src/avm/avm_execution_environment.ts +1 -21
- package/src/avm/avm_gas.ts +30 -114
- package/src/avm/avm_machine_state.ts +5 -5
- package/src/avm/avm_memory_types.ts +31 -9
- package/src/avm/avm_simulator.ts +4 -5
- package/src/avm/bytecode_utils.ts +2 -17
- package/src/avm/fixtures/index.ts +12 -44
- package/src/avm/journal/index.ts +0 -1
- package/src/avm/journal/journal.ts +13 -18
- package/src/avm/opcodes/bitwise.ts +14 -10
- package/src/avm/opcodes/commitment.ts +1 -1
- package/src/avm/opcodes/comparators.ts +2 -2
- package/src/avm/opcodes/conversion.ts +19 -10
- package/src/avm/opcodes/environment_getters.ts +72 -99
- package/src/avm/opcodes/hashing.ts +47 -22
- package/src/avm/opcodes/index.ts +3 -0
- package/src/avm/opcodes/instruction_impl.ts +0 -62
- package/src/avm/opcodes/memory.ts +20 -6
- package/src/avm/opcodes/multi_scalar_mul.ts +6 -6
- package/src/avm/serialization/bytecode_serialization.ts +11 -33
- package/src/avm/serialization/instruction_serialization.ts +5 -18
- package/src/avm/test_utils.ts +20 -16
- package/src/client/test_utils.ts +36 -9
- package/src/client/unconstrained_execution.ts +3 -8
- package/src/public/enqueued_call_simulator.ts +336 -0
- package/src/public/enqueued_calls_processor.ts +388 -0
- package/src/public/execution.ts +5 -12
- package/src/public/executor.ts +4 -12
- package/src/public/hints_builder.ts +14 -12
- package/src/public/index.ts +3 -2
- package/src/public/public_db_sources.ts +62 -67
- package/src/public/public_kernel.ts +15 -49
- package/src/public/public_kernel_circuit_simulator.ts +6 -10
- package/src/public/public_kernel_tail_simulator.ts +106 -0
- package/src/public/public_processor.ts +61 -86
- package/src/public/public_processor_metrics.ts +3 -3
- package/src/public/side_effect_trace.ts +5 -12
- package/dest/avm/journal/host_storage.d.ts +0 -13
- package/dest/avm/journal/host_storage.d.ts.map +0 -1
- package/dest/avm/journal/host_storage.js +0 -13
- package/dest/avm/opcodes/context_getters.d.ts +0 -15
- package/dest/avm/opcodes/context_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/context_getters.js +0 -19
- package/dest/public/abstract_phase_manager.d.ts +0 -93
- package/dest/public/abstract_phase_manager.d.ts.map +0 -1
- package/dest/public/abstract_phase_manager.js +0 -285
- package/dest/public/app_logic_phase_manager.d.ts +0 -25
- package/dest/public/app_logic_phase_manager.d.ts.map +0 -1
- package/dest/public/app_logic_phase_manager.js +0 -52
- package/dest/public/phase_manager_factory.d.ts +0 -18
- package/dest/public/phase_manager_factory.d.ts.map +0 -1
- package/dest/public/phase_manager_factory.js +0 -56
- package/dest/public/setup_phase_manager.d.ts +0 -25
- package/dest/public/setup_phase_manager.d.ts.map +0 -1
- package/dest/public/setup_phase_manager.js +0 -39
- package/dest/public/tail_phase_manager.d.ts +0 -23
- package/dest/public/tail_phase_manager.d.ts.map +0 -1
- package/dest/public/tail_phase_manager.js +0 -50
- package/dest/public/teardown_phase_manager.d.ts +0 -27
- package/dest/public/teardown_phase_manager.d.ts.map +0 -1
- package/dest/public/teardown_phase_manager.js +0 -56
- package/src/avm/journal/host_storage.ts +0 -14
- package/src/avm/opcodes/context_getters.ts +0 -23
- package/src/public/abstract_phase_manager.ts +0 -522
- package/src/public/app_logic_phase_manager.ts +0 -81
- package/src/public/phase_manager_factory.ts +0 -126
- package/src/public/setup_phase_manager.ts +0 -61
- package/src/public/tail_phase_manager.ts +0 -127
- package/src/public/teardown_phase_manager.ts +0 -86
|
@@ -16,7 +16,7 @@ import { PublicStorage } from './public_storage.js';
|
|
|
16
16
|
export class AvmPersistableStateManager {
|
|
17
17
|
constructor(
|
|
18
18
|
/** Reference to node storage */
|
|
19
|
-
|
|
19
|
+
worldStateDB,
|
|
20
20
|
/** Side effect trace */
|
|
21
21
|
trace,
|
|
22
22
|
/** Public storage, including cached writes */
|
|
@@ -24,7 +24,7 @@ export class AvmPersistableStateManager {
|
|
|
24
24
|
publicStorage,
|
|
25
25
|
/** Nullifier set, including cached/recently-emitted nullifiers */
|
|
26
26
|
nullifiers) {
|
|
27
|
-
this.
|
|
27
|
+
this.worldStateDB = worldStateDB;
|
|
28
28
|
this.trace = trace;
|
|
29
29
|
this.publicStorage = publicStorage;
|
|
30
30
|
this.nullifiers = nullifiers;
|
|
@@ -33,17 +33,17 @@ export class AvmPersistableStateManager {
|
|
|
33
33
|
/**
|
|
34
34
|
* Create a new state manager with some preloaded pending siloed nullifiers
|
|
35
35
|
*/
|
|
36
|
-
static newWithPendingSiloedNullifiers(
|
|
37
|
-
const parentNullifiers = NullifierManager.newWithPendingSiloedNullifiers(
|
|
38
|
-
return new AvmPersistableStateManager(
|
|
39
|
-
/*publicStorage=*/ new PublicStorage(
|
|
36
|
+
static newWithPendingSiloedNullifiers(worldStateDB, trace, pendingSiloedNullifiers) {
|
|
37
|
+
const parentNullifiers = NullifierManager.newWithPendingSiloedNullifiers(worldStateDB, pendingSiloedNullifiers);
|
|
38
|
+
return new AvmPersistableStateManager(worldStateDB, trace,
|
|
39
|
+
/*publicStorage=*/ new PublicStorage(worldStateDB),
|
|
40
40
|
/*nullifiers=*/ parentNullifiers.fork());
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Create a new state manager forked from this one
|
|
44
44
|
*/
|
|
45
45
|
fork() {
|
|
46
|
-
return new AvmPersistableStateManager(this.
|
|
46
|
+
return new AvmPersistableStateManager(this.worldStateDB, this.trace.fork(), this.publicStorage.fork(), this.nullifiers.fork());
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Write to public storage, journal/trace the write.
|
|
@@ -93,7 +93,7 @@ export class AvmPersistableStateManager {
|
|
|
93
93
|
* @returns true if the note hash exists at the given leaf index, false otherwise
|
|
94
94
|
*/
|
|
95
95
|
async checkNoteHashExists(storageAddress, noteHash, leafIndex) {
|
|
96
|
-
const gotLeafValue = (await this.
|
|
96
|
+
const gotLeafValue = (await this.worldStateDB.getCommitmentValue(leafIndex.toBigInt())) ?? Fr.ZERO;
|
|
97
97
|
const exists = gotLeafValue.equals(noteHash);
|
|
98
98
|
this.log.debug(`noteHashes(${storageAddress})@${noteHash} ?? leafIndex: ${leafIndex} | gotLeafValue: ${gotLeafValue}, exists: ${exists}.`);
|
|
99
99
|
// TODO(8287): We still return exists here, but we need to transmit both the requested noteHash and the gotLeafValue
|
|
@@ -140,7 +140,7 @@ export class AvmPersistableStateManager {
|
|
|
140
140
|
* @returns exists - whether the message exists in the L1 to L2 Messages tree
|
|
141
141
|
*/
|
|
142
142
|
async checkL1ToL2MessageExists(contractAddress, msgHash, msgLeafIndex) {
|
|
143
|
-
const valueAtIndex = (await this.
|
|
143
|
+
const valueAtIndex = (await this.worldStateDB.getL1ToL2LeafValue(msgLeafIndex.toBigInt())) ?? Fr.ZERO;
|
|
144
144
|
const exists = valueAtIndex.equals(msgHash);
|
|
145
145
|
this.log.debug(`l1ToL2Messages(@${msgLeafIndex}) ?? exists: ${exists}, expected: ${msgHash}, found: ${valueAtIndex}.`);
|
|
146
146
|
// TODO(8287): We still return exists here, but we need to transmit both the requested msgHash and the value
|
|
@@ -175,7 +175,7 @@ export class AvmPersistableStateManager {
|
|
|
175
175
|
async getContractInstance(contractAddress) {
|
|
176
176
|
let exists = true;
|
|
177
177
|
const aztecAddress = AztecAddress.fromField(contractAddress);
|
|
178
|
-
let instance = await this.
|
|
178
|
+
let instance = await this.worldStateDB.getContractInstance(aztecAddress);
|
|
179
179
|
if (instance === undefined) {
|
|
180
180
|
instance = SerializableContractInstance.empty().withAddress(aztecAddress);
|
|
181
181
|
exists = false;
|
|
@@ -196,7 +196,7 @@ export class AvmPersistableStateManager {
|
|
|
196
196
|
* Get a contract's bytecode from the contracts DB
|
|
197
197
|
*/
|
|
198
198
|
async getBytecode(contractAddress, selector) {
|
|
199
|
-
return await this.
|
|
199
|
+
return await this.worldStateDB.getBytecode(contractAddress, selector);
|
|
200
200
|
}
|
|
201
201
|
/**
|
|
202
202
|
* Accept the nested call's state and trace the nested call
|
|
@@ -205,9 +205,10 @@ export class AvmPersistableStateManager {
|
|
|
205
205
|
if (!avmCallResults.reverted) {
|
|
206
206
|
this.acceptNestedCallState(nestedState);
|
|
207
207
|
}
|
|
208
|
-
const functionName = (await
|
|
208
|
+
const functionName = (await this.worldStateDB.getDebugFunctionName(nestedEnvironment.address, nestedEnvironment.functionSelector)) ??
|
|
209
|
+
`${nestedEnvironment.address}:${nestedEnvironment.functionSelector}`;
|
|
209
210
|
this.log.verbose(`[AVM] Calling nested function ${functionName}`);
|
|
210
211
|
this.trace.traceNestedCall(nestedState.trace, nestedEnvironment, startGasLeft, endGasLeft, bytecode, avmCallResults, functionName);
|
|
211
212
|
}
|
|
212
213
|
}
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam91cm5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vam91cm5hbC9qb3VybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQW1DLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU90RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0lBR3JDO0lBQ0UsZ0NBQWdDO0lBQ2YsWUFBMEI7SUFDM0Msd0JBQXdCO0lBQ1AsS0FBcUM7SUFDdEQsOENBQThDO0lBQzlDLCtEQUErRDtJQUMvQyxhQUE0QjtJQUM1QyxrRUFBa0U7SUFDakQsVUFBNEI7UUFQNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFMUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0M7UUFHdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFM0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFYOUIsUUFBRyxHQUFnQixpQkFBaUIsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBWXhGLENBQUM7SUFFSjs7T0FFRztJQUNJLE1BQU0sQ0FBQyw4QkFBOEIsQ0FDMUMsWUFBMEIsRUFDMUIsS0FBcUMsRUFDckMsdUJBQTZCO1FBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsOEJBQThCLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDaEgsT0FBTyxJQUFJLDBCQUEwQixDQUNuQyxZQUFZLEVBQ1osS0FBSztRQUNM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
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
2
|
import { type IntegralValue, type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
3
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
4
|
-
import {
|
|
3
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
+
import { Instruction } from './instruction.js';
|
|
5
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
5
6
|
declare abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
6
7
|
execute(context: AvmContext): Promise<void>;
|
|
7
8
|
protected abstract compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
@@ -34,10 +35,15 @@ export declare class Shr extends ThreeOperandBitwiseInstruction {
|
|
|
34
35
|
protected compute(a: IntegralValue, b: IntegralValue): IntegralValue;
|
|
35
36
|
protected checkTags(memory: TaggedMemoryInterface, inTag: number, aOffset: number, bOffset: number): void;
|
|
36
37
|
}
|
|
37
|
-
export declare class Not extends
|
|
38
|
+
export declare class Not extends Instruction {
|
|
39
|
+
private indirect;
|
|
40
|
+
private srcOffset;
|
|
41
|
+
private dstOffset;
|
|
38
42
|
static readonly type: string;
|
|
39
43
|
static readonly opcode = Opcode.NOT_8;
|
|
40
|
-
|
|
44
|
+
static readonly wireFormat8: OperandType[];
|
|
45
|
+
static readonly wireFormat16: OperandType[];
|
|
46
|
+
constructor(indirect: number, srcOffset: number, dstOffset: number);
|
|
41
47
|
execute(context: AvmContext): Promise<void>;
|
|
42
48
|
}
|
|
43
49
|
export {};
|
|
@@ -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;AACpD,OAAO,EAAE,KAAK,aAAa,
|
|
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,EAAgB,KAAK,qBAAqB,EAAW,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uBAAe,8BAA+B,SAAQ,uBAAuB;IAC9D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;IAC7E,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGnG;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,EAAG,SAAQ,8BAA8B;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAQ;IACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,eAAe;cAElB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;CAG9E;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;cAG1D,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5G;AAED,qBAAa,GAAI,SAAQ,8BAA8B;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;cAEnB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa;cAG1D,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5G;AAED,qBAAa,GAAI,SAAQ,WAAW;IAOtB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,SAAS;IANlF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;IAEtC,MAAM,CAAC,QAAQ,CAAC,WAAW,gBAAgF;IAC3G,MAAM,CAAC,QAAQ,CAAC,YAAY,gBAAkF;gBAE1F,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM;IAI7E,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAezD"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { TypeTag } from '../avm_memory_types.js';
|
|
2
|
-
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
1
|
+
import { TaggedMemory, TypeTag } from '../avm_memory_types.js';
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
3
|
import { Addressing } from './addressing_mode.js';
|
|
4
|
-
import {
|
|
4
|
+
import { Instruction } from './instruction.js';
|
|
5
|
+
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
5
6
|
class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
6
7
|
async execute(context) {
|
|
7
8
|
const memoryOperations = { reads: 2, writes: 1, indirect: this.indirect };
|
|
@@ -63,18 +64,21 @@ export class Shr extends ThreeOperandBitwiseInstruction {
|
|
|
63
64
|
}
|
|
64
65
|
Shr.type = 'SHR';
|
|
65
66
|
Shr.opcode = Opcode.SHR_8; // FIXME: needed for gas.
|
|
66
|
-
export class Not extends
|
|
67
|
-
constructor(indirect,
|
|
68
|
-
super(
|
|
67
|
+
export class Not extends Instruction {
|
|
68
|
+
constructor(indirect, srcOffset, dstOffset) {
|
|
69
|
+
super();
|
|
70
|
+
this.indirect = indirect;
|
|
71
|
+
this.srcOffset = srcOffset;
|
|
72
|
+
this.dstOffset = dstOffset;
|
|
69
73
|
}
|
|
70
74
|
async execute(context) {
|
|
71
75
|
const memoryOperations = { reads: 1, writes: 1, indirect: this.indirect };
|
|
72
76
|
const memory = context.machineState.memory.track(this.type);
|
|
73
77
|
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
74
|
-
const [
|
|
75
|
-
memory.
|
|
76
|
-
const
|
|
77
|
-
const res =
|
|
78
|
+
const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset], memory);
|
|
79
|
+
TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
|
|
80
|
+
const value = memory.getAs(srcOffset);
|
|
81
|
+
const res = value.not();
|
|
78
82
|
memory.set(dstOffset, res);
|
|
79
83
|
memory.assert(memoryOperations);
|
|
80
84
|
context.machineState.incrementPc();
|
|
@@ -82,4 +86,6 @@ export class Not extends TwoOperandInstruction {
|
|
|
82
86
|
}
|
|
83
87
|
Not.type = 'NOT';
|
|
84
88
|
Not.opcode = Opcode.NOT_8;
|
|
85
|
-
|
|
89
|
+
Not.wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8];
|
|
90
|
+
Not.wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9iaXR3aXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBc0IsWUFBWSxFQUE4QixPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsTUFBZSw4QkFBK0IsU0FBUSx1QkFBdUI7SUFDcEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtQjtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUVoRSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQzlFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDNUMsTUFBTSxDQUNQLENBQUM7UUFDRixJQUFJLENBQUMsU0FB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
|
|
@@ -22,7 +22,7 @@ export class PedersenCommitment extends Instruction {
|
|
|
22
22
|
const generatorIndex = memory.get(genIndexOffset).toNumber();
|
|
23
23
|
memory.checkTag(TypeTag.UINT32, genIndexOffset);
|
|
24
24
|
const memoryOperations = { reads: inputSize + 2, writes: 3, indirect: this.indirect };
|
|
25
|
-
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
25
|
+
context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: inputSize }));
|
|
26
26
|
const inputBuffer = inputs.map(input => input.toBuffer());
|
|
27
27
|
// TODO: Add the generate index to the pedersenCommit function
|
|
28
28
|
const commitment = pedersenCommit(inputBuffer, generatorIndex).map(f => new Field(f));
|
|
@@ -47,4 +47,4 @@ PedersenCommitment.wireFormat = [
|
|
|
47
47
|
OperandType.UINT32 /* Input Size Offset */,
|
|
48
48
|
OperandType.UINT32 /* Generator Index Offset */,
|
|
49
49
|
];
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFjakQsWUFDVSxRQUFnQixFQUNoQixXQUFtQixFQUNuQixZQUFvQixFQUNwQixlQUF1QixFQUN2QixjQUFzQjtRQUU5QixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQVE7SUFHaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUM3RyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxD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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Uint1 } from '../avm_memory_types.js';
|
|
2
2
|
import { Opcode } from '../serialization/instruction_serialization.js';
|
|
3
3
|
import { Addressing } from './addressing_mode.js';
|
|
4
4
|
import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
@@ -11,7 +11,7 @@ class ComparatorInstruction extends ThreeOperandInstruction {
|
|
|
11
11
|
memory.checkTags(this.inTag, aOffset, bOffset);
|
|
12
12
|
const a = memory.get(aOffset);
|
|
13
13
|
const b = memory.get(bOffset);
|
|
14
|
-
const dest = new
|
|
14
|
+
const dest = new Uint1(this.compare(a, b) ? 1 : 0);
|
|
15
15
|
memory.set(dstOffset, dest);
|
|
16
16
|
memory.assert(memoryOperations);
|
|
17
17
|
context.machineState.incrementPc();
|
|
@@ -5,12 +5,13 @@ export declare class ToRadixLE extends Instruction {
|
|
|
5
5
|
private indirect;
|
|
6
6
|
private srcOffset;
|
|
7
7
|
private dstOffset;
|
|
8
|
-
private
|
|
8
|
+
private radixOffset;
|
|
9
9
|
private numLimbs;
|
|
10
|
+
private outputBits;
|
|
10
11
|
static type: string;
|
|
11
12
|
static readonly opcode: Opcode;
|
|
12
13
|
static readonly wireFormat: OperandType[];
|
|
13
|
-
constructor(indirect: number, srcOffset: number, dstOffset: number,
|
|
14
|
+
constructor(indirect: number, srcOffset: number, dstOffset: number, radixOffset: number, numLimbs: number, outputBits: number);
|
|
14
15
|
execute(context: AvmContext): Promise<void>;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=conversion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/conversion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,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,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IApBpB,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,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;IAKf,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkCzD"}
|
|
@@ -1,34 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { TypeTag, Uint1, Uint8 } from '../avm_memory_types.js';
|
|
2
|
+
import { InstructionExecutionError } from '../errors.js';
|
|
3
3
|
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
4
|
import { Addressing } from './addressing_mode.js';
|
|
5
5
|
import { Instruction } from './instruction.js';
|
|
6
6
|
export class ToRadixLE extends Instruction {
|
|
7
|
-
constructor(indirect, srcOffset, dstOffset,
|
|
8
|
-
assert(radix <= 256, 'Radix cannot be greater than 256');
|
|
7
|
+
constructor(indirect, srcOffset, dstOffset, radixOffset, numLimbs, outputBits) {
|
|
9
8
|
super();
|
|
10
9
|
this.indirect = indirect;
|
|
11
10
|
this.srcOffset = srcOffset;
|
|
12
11
|
this.dstOffset = dstOffset;
|
|
13
|
-
this.
|
|
12
|
+
this.radixOffset = radixOffset;
|
|
14
13
|
this.numLimbs = numLimbs;
|
|
14
|
+
this.outputBits = outputBits;
|
|
15
15
|
}
|
|
16
16
|
async execute(context) {
|
|
17
17
|
const memory = context.machineState.memory.track(this.type);
|
|
18
|
-
const [srcOffset, dstOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset], memory);
|
|
19
|
-
const memoryOperations = { reads:
|
|
18
|
+
const [srcOffset, dstOffset, radixOffset] = Addressing.fromWire(this.indirect).resolve([this.srcOffset, this.dstOffset, this.radixOffset], memory);
|
|
19
|
+
const memoryOperations = { reads: 2, writes: this.numLimbs, indirect: this.indirect };
|
|
20
20
|
context.machineState.consumeGas(this.gasCost({ ...memoryOperations, dynMultiplier: this.numLimbs }));
|
|
21
21
|
// The radix gadget only takes in a Field
|
|
22
22
|
memory.checkTag(TypeTag.FIELD, srcOffset);
|
|
23
|
+
memory.checkTag(TypeTag.UINT32, radixOffset);
|
|
23
24
|
let value = memory.get(srcOffset).toBigInt();
|
|
24
|
-
const
|
|
25
|
+
const radix = memory.get(radixOffset).toBigInt();
|
|
26
|
+
if (radix > 256) {
|
|
27
|
+
throw new InstructionExecutionError(`ToRadixLE instruction's radix should be <= 256 (was ${radix})`);
|
|
28
|
+
}
|
|
29
|
+
const radixBN = BigInt(radix);
|
|
25
30
|
const limbArray = [];
|
|
26
31
|
for (let i = 0; i < this.numLimbs; i++) {
|
|
27
32
|
const limb = value % radixBN;
|
|
28
33
|
limbArray.push(limb);
|
|
29
34
|
value /= radixBN;
|
|
30
35
|
}
|
|
31
|
-
const
|
|
36
|
+
const outputType = this.outputBits != 0 ? Uint1 : Uint8;
|
|
37
|
+
const res = limbArray.map(byte => new outputType(byte));
|
|
32
38
|
memory.setSlice(dstOffset, res);
|
|
33
39
|
memory.assert(memoryOperations);
|
|
34
40
|
context.machineState.incrementPc();
|
|
@@ -42,7 +48,8 @@ ToRadixLE.wireFormat = [
|
|
|
42
48
|
OperandType.UINT8, // Indirect
|
|
43
49
|
OperandType.UINT32, // src memory address
|
|
44
50
|
OperandType.UINT32, // dst memory address
|
|
45
|
-
OperandType.UINT32, // radix
|
|
51
|
+
OperandType.UINT32, // radix memory address
|
|
46
52
|
OperandType.UINT32, // number of limbs (Immediate)
|
|
53
|
+
OperandType.UINT1, // output is in "bits" mode (Immediate - Uint1 still takes up a whole byte)
|
|
47
54
|
];
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9jb252ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLFNBQVUsU0FBUSxXQUFXO0lBZXhDLFlBQ1UsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsVUFBa0I7UUFFMUIsS0FBSyxFQUFFLENBQUM7UUFQQSxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQVE7SUFHNUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQ3BGLENBQUMsSUFB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
|
|
@@ -1,66 +1,30 @@
|
|
|
1
1
|
import type { AvmContext } from '../avm_context.js';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
+
import { Instruction } from './instruction.js';
|
|
4
|
+
export declare enum EnvironmentVariable {
|
|
5
|
+
ADDRESS = 0,
|
|
6
|
+
STORAGEADDRESS = 1,
|
|
7
|
+
SENDER = 2,
|
|
8
|
+
FUNCTIONSELECTOR = 3,
|
|
9
|
+
TRANSACTIONFEE = 4,
|
|
10
|
+
CHAINID = 5,
|
|
11
|
+
VERSION = 6,
|
|
12
|
+
BLOCKNUMBER = 7,
|
|
13
|
+
TIMESTAMP = 8,
|
|
14
|
+
FEEPERL2GAS = 9,
|
|
15
|
+
FEEPERDAGAS = 10,
|
|
16
|
+
ISSTATICCALL = 11,
|
|
17
|
+
L2GASLEFT = 12,
|
|
18
|
+
DAGASLEFT = 13
|
|
19
|
+
}
|
|
20
|
+
export declare class GetEnvVar extends Instruction {
|
|
21
|
+
private indirect;
|
|
22
|
+
private varEnum;
|
|
23
|
+
private dstOffset;
|
|
24
|
+
static readonly type: string;
|
|
25
|
+
static readonly opcode: Opcode;
|
|
26
|
+
static readonly wireFormat16: OperandType[];
|
|
27
|
+
constructor(indirect: number, varEnum: EnvironmentVariable, dstOffset: number);
|
|
28
|
+
execute(context: AvmContext): Promise<void>;
|
|
9
29
|
}
|
|
10
|
-
export declare class Address extends EnvironmentGetterInstruction {
|
|
11
|
-
static type: string;
|
|
12
|
-
static readonly opcode: Opcode;
|
|
13
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
14
|
-
}
|
|
15
|
-
export declare class StorageAddress extends EnvironmentGetterInstruction {
|
|
16
|
-
static type: string;
|
|
17
|
-
static readonly opcode: Opcode;
|
|
18
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
19
|
-
}
|
|
20
|
-
export declare class Sender extends EnvironmentGetterInstruction {
|
|
21
|
-
static type: string;
|
|
22
|
-
static readonly opcode: Opcode;
|
|
23
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
24
|
-
}
|
|
25
|
-
export declare class FunctionSelector extends EnvironmentGetterInstruction {
|
|
26
|
-
static type: string;
|
|
27
|
-
static readonly opcode: Opcode;
|
|
28
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Uint32;
|
|
29
|
-
}
|
|
30
|
-
export declare class TransactionFee extends EnvironmentGetterInstruction {
|
|
31
|
-
static type: string;
|
|
32
|
-
static readonly opcode: Opcode;
|
|
33
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
34
|
-
}
|
|
35
|
-
export declare class ChainId extends EnvironmentGetterInstruction {
|
|
36
|
-
static type: string;
|
|
37
|
-
static readonly opcode: Opcode;
|
|
38
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
39
|
-
}
|
|
40
|
-
export declare class Version extends EnvironmentGetterInstruction {
|
|
41
|
-
static type: string;
|
|
42
|
-
static readonly opcode: Opcode;
|
|
43
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
44
|
-
}
|
|
45
|
-
export declare class BlockNumber extends EnvironmentGetterInstruction {
|
|
46
|
-
static type: string;
|
|
47
|
-
static readonly opcode: Opcode;
|
|
48
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
49
|
-
}
|
|
50
|
-
export declare class Timestamp extends EnvironmentGetterInstruction {
|
|
51
|
-
static type: string;
|
|
52
|
-
static readonly opcode: Opcode;
|
|
53
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Uint64;
|
|
54
|
-
}
|
|
55
|
-
export declare class FeePerL2Gas extends EnvironmentGetterInstruction {
|
|
56
|
-
static type: string;
|
|
57
|
-
static readonly opcode: Opcode;
|
|
58
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
59
|
-
}
|
|
60
|
-
export declare class FeePerDAGas extends EnvironmentGetterInstruction {
|
|
61
|
-
static type: string;
|
|
62
|
-
static readonly opcode: Opcode;
|
|
63
|
-
protected getEnvironmentValue(env: AvmExecutionEnvironment): Field;
|
|
64
|
-
}
|
|
65
|
-
export {};
|
|
66
30
|
//# sourceMappingURL=environment_getters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"environment_getters.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/environment_getters.ts"],"names":[],"mappings":"AAAA,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,oBAAY,mBAAmB;IAC7B,OAAO,IAAA;IACP,cAAc,IAAA;IACd,MAAM,IAAA;IACN,gBAAgB,IAAA;IAChB,cAAc,IAAA;IACd,OAAO,IAAA;IACP,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,WAAW,IAAA;IACX,WAAW,KAAA;IACX,YAAY,KAAA;IACZ,SAAS,KAAA;IACT,SAAS,KAAA;CACV;AAqCD,qBAAa,SAAU,SAAQ,WAAW;IAU5B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,OAAO;IAAuB,OAAO,CAAC,SAAS;IAT7F,gBAAuB,IAAI,EAAE,MAAM,CAAe;IAClD,gBAAuB,MAAM,EAAE,MAAM,CAAuB;IAC5D,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAKzC;gBAEkB,QAAQ,EAAE,MAAM,EAAU,OAAO,EAAE,mBAAmB,EAAU,SAAS,EAAE,MAAM;IAIxF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAYzD"}
|