@aztec/simulator 0.32.1 → 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/oracle/index.d.ts +0 -1
- 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.map +1 -1
- package/dest/acvm/oracle/oracle.js +2 -3
- package/dest/avm/avm_context.d.ts +4 -14
- package/dest/avm/avm_context.d.ts.map +1 -1
- package/dest/avm/avm_context.js +10 -22
- 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 +4 -2
- 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 +53 -1
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +95 -2
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +10 -8
- 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 +30 -33
- 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 +2 -1
- 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 +10 -15
- 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 +2 -0
- package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
- package/dest/avm/temporary_executor_migration.js +14 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +6 -2
- package/dest/public/executor.d.ts +10 -2
- 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/package.json +15 -9
- package/src/acvm/oracle/index.ts +0 -1
- package/src/acvm/oracle/oracle.ts +1 -2
- package/src/avm/avm_context.ts +11 -33
- package/src/avm/{avm_gas_cost.ts → avm_gas.ts} +75 -21
- package/src/avm/avm_machine_state.ts +9 -2
- package/src/avm/avm_memory_types.ts +130 -2
- package/src/avm/avm_simulator.ts +9 -7
- 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 +49 -83
- 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 +23 -5
- package/src/avm/opcodes/environment_getters.ts +35 -44
- package/src/avm/opcodes/external_calls.ts +65 -84
- package/src/avm/opcodes/hashing.ts +45 -22
- package/src/avm/opcodes/index.ts +1 -0
- package/src/avm/opcodes/instruction.ts +14 -26
- 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 +16 -2
- package/src/client/private_execution.ts +8 -2
- package/src/public/executor.ts +75 -22
- package/src/public/index.ts +2 -2
- 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,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import { type DebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type FunctionsOf } from '@aztec/foundation/types';
|
|
4
5
|
/** MemoryValue gathers the common operations for all memory types. */
|
|
5
6
|
export declare abstract class MemoryValue {
|
|
6
7
|
abstract add(rhs: MemoryValue): MemoryValue;
|
|
@@ -13,6 +14,7 @@ export declare abstract class MemoryValue {
|
|
|
13
14
|
abstract toBigInt(): bigint;
|
|
14
15
|
abstract toBuffer(): Buffer;
|
|
15
16
|
toFr(): Fr;
|
|
17
|
+
toNumber(): number;
|
|
16
18
|
toString(): string;
|
|
17
19
|
}
|
|
18
20
|
/** IntegralValue gathers the common operations for all integral memory types. */
|
|
@@ -43,6 +45,7 @@ declare const Uint8_base: {
|
|
|
43
45
|
toBigInt(): bigint;
|
|
44
46
|
toBuffer(): Buffer;
|
|
45
47
|
toFr(): Fr;
|
|
48
|
+
toNumber(): number;
|
|
46
49
|
toString(): string;
|
|
47
50
|
};
|
|
48
51
|
readonly mod: bigint;
|
|
@@ -69,6 +72,7 @@ declare const Uint16_base: {
|
|
|
69
72
|
toBigInt(): bigint;
|
|
70
73
|
toBuffer(): Buffer;
|
|
71
74
|
toFr(): Fr;
|
|
75
|
+
toNumber(): number;
|
|
72
76
|
toString(): string;
|
|
73
77
|
};
|
|
74
78
|
readonly mod: bigint;
|
|
@@ -95,6 +99,7 @@ declare const Uint32_base: {
|
|
|
95
99
|
toBigInt(): bigint;
|
|
96
100
|
toBuffer(): Buffer;
|
|
97
101
|
toFr(): Fr;
|
|
102
|
+
toNumber(): number;
|
|
98
103
|
toString(): string;
|
|
99
104
|
};
|
|
100
105
|
readonly mod: bigint;
|
|
@@ -121,6 +126,7 @@ declare const Uint64_base: {
|
|
|
121
126
|
toBigInt(): bigint;
|
|
122
127
|
toBuffer(): Buffer;
|
|
123
128
|
toFr(): Fr;
|
|
129
|
+
toNumber(): number;
|
|
124
130
|
toString(): string;
|
|
125
131
|
};
|
|
126
132
|
readonly mod: bigint;
|
|
@@ -147,6 +153,7 @@ declare const Uint128_base: {
|
|
|
147
153
|
toBigInt(): bigint;
|
|
148
154
|
toBuffer(): Buffer;
|
|
149
155
|
toFr(): Fr;
|
|
156
|
+
toNumber(): number;
|
|
150
157
|
toString(): string;
|
|
151
158
|
};
|
|
152
159
|
readonly mod: bigint;
|
|
@@ -179,11 +186,15 @@ export declare enum TypeTag {
|
|
|
179
186
|
FIELD = 6,
|
|
180
187
|
INVALID = 7
|
|
181
188
|
}
|
|
182
|
-
export
|
|
189
|
+
export type TaggedMemoryInterface = FunctionsOf<TaggedMemory>;
|
|
190
|
+
export declare class TaggedMemory implements TaggedMemoryInterface {
|
|
183
191
|
static readonly log: DebugLogger;
|
|
192
|
+
static readonly TRACK_MEMORY_ACCESSES: boolean;
|
|
184
193
|
static readonly MAX_MEMORY_SIZE: number;
|
|
185
194
|
private _mem;
|
|
186
195
|
constructor();
|
|
196
|
+
/** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
|
|
197
|
+
track(type?: string): this | MeteredTaggedMemory;
|
|
187
198
|
get(offset: number): MemoryValue;
|
|
188
199
|
getAs<T>(offset: number): T;
|
|
189
200
|
getSlice(offset: number, size: number): MemoryValue[];
|
|
@@ -209,6 +220,47 @@ export declare class TaggedMemory {
|
|
|
209
220
|
static getTag(v: MemoryValue | undefined): TypeTag;
|
|
210
221
|
static integralFromTag(v: bigint | number, tag: TypeTag): IntegralValue;
|
|
211
222
|
static buildFromTagOrDie(v: bigint | number, tag: TypeTag): MemoryValue;
|
|
223
|
+
/** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
|
|
224
|
+
assert(_operations: Partial<MemoryOperations & {
|
|
225
|
+
indirect: number;
|
|
226
|
+
}>): void;
|
|
212
227
|
}
|
|
228
|
+
/** Tagged memory wrapper with metering for each memory read and write operation. */
|
|
229
|
+
export declare class MeteredTaggedMemory implements TaggedMemoryInterface {
|
|
230
|
+
private wrapped;
|
|
231
|
+
private type;
|
|
232
|
+
private reads;
|
|
233
|
+
private writes;
|
|
234
|
+
constructor(wrapped: TaggedMemory, type?: string);
|
|
235
|
+
/** Returns the number of reads and writes tracked so far and resets them to zero. */
|
|
236
|
+
reset(): MemoryOperations;
|
|
237
|
+
/**
|
|
238
|
+
* Asserts that the exact number of memory operations have been performed.
|
|
239
|
+
* Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
|
|
240
|
+
*/
|
|
241
|
+
assert(operations: Partial<MemoryOperations & {
|
|
242
|
+
indirect: number;
|
|
243
|
+
}>): void;
|
|
244
|
+
track(type?: string): MeteredTaggedMemory;
|
|
245
|
+
get(offset: number): MemoryValue;
|
|
246
|
+
getSliceAs<T>(offset: number, size: number): T[];
|
|
247
|
+
getAs<T>(offset: number): T;
|
|
248
|
+
getSlice(offset: number, size: number): MemoryValue[];
|
|
249
|
+
set(offset: number, v: MemoryValue): void;
|
|
250
|
+
setSlice(offset: number, vs: MemoryValue[]): void;
|
|
251
|
+
getSliceTags(offset: number, size: number): TypeTag[];
|
|
252
|
+
getTag(offset: number): TypeTag;
|
|
253
|
+
checkTag(tag: TypeTag, offset: number): void;
|
|
254
|
+
checkIsValidMemoryOffsetTag(offset: number): void;
|
|
255
|
+
checkTags(tag: TypeTag, ...offsets: number[]): void;
|
|
256
|
+
checkTagsRange(tag: TypeTag, startOffset: number, size: number): void;
|
|
257
|
+
}
|
|
258
|
+
/** Tracks number of memory reads and writes. */
|
|
259
|
+
export type MemoryOperations = {
|
|
260
|
+
/** How many total reads are performed. Slice reads are count as one per element. */
|
|
261
|
+
reads: number;
|
|
262
|
+
/** How many total writes are performed. Slice writes are count as one per element. */
|
|
263
|
+
writes: number;
|
|
264
|
+
};
|
|
213
265
|
export {};
|
|
214
266
|
//# sourceMappingURL=avm_memory_types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_memory_types.d.ts","sourceRoot":"","sources":["../../src/avm/avm_memory_types.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"avm_memory_types.d.ts","sourceRoot":"","sources":["../../src/avm/avm_memory_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,18 @@ import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
|
2
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
3
3
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { strict as assert } from 'assert';
|
|
5
|
-
import { TagCheckError } from './errors.js';
|
|
5
|
+
import { InstructionExecutionError, TagCheckError } from './errors.js';
|
|
6
|
+
import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
|
|
6
7
|
/** MemoryValue gathers the common operations for all memory types. */
|
|
7
8
|
export class MemoryValue {
|
|
8
9
|
// To field
|
|
9
10
|
toFr() {
|
|
10
11
|
return new Fr(this.toBigInt());
|
|
11
12
|
}
|
|
13
|
+
// To number. Throws if exceeds max safe int.
|
|
14
|
+
toNumber() {
|
|
15
|
+
return this.toFr().toNumber();
|
|
16
|
+
}
|
|
12
17
|
toString() {
|
|
13
18
|
return `${this.constructor.name}(0x${this.toBigInt().toString(16)})`;
|
|
14
19
|
}
|
|
@@ -150,6 +155,10 @@ export class TaggedMemory {
|
|
|
150
155
|
// We do not initialize memory size here because otherwise tests blow up when diffing.
|
|
151
156
|
this._mem = [];
|
|
152
157
|
}
|
|
158
|
+
/** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
|
|
159
|
+
track(type = 'instruction') {
|
|
160
|
+
return TaggedMemory.TRACK_MEMORY_ACCESSES ? new MeteredTaggedMemory(this, type) : this;
|
|
161
|
+
}
|
|
153
162
|
get(offset) {
|
|
154
163
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
155
164
|
const value = this.getAs(offset);
|
|
@@ -159,6 +168,9 @@ export class TaggedMemory {
|
|
|
159
168
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
160
169
|
const word = this._mem[offset];
|
|
161
170
|
TaggedMemory.log(`get(${offset}) = ${word}`);
|
|
171
|
+
if (word === undefined) {
|
|
172
|
+
TaggedMemory.log.warn(`Memory at offset ${offset} is undefined! This might be OK if it's stack dumping.`);
|
|
173
|
+
}
|
|
162
174
|
return word;
|
|
163
175
|
}
|
|
164
176
|
getSlice(offset, size) {
|
|
@@ -166,6 +178,7 @@ export class TaggedMemory {
|
|
|
166
178
|
assert(offset + size < TaggedMemory.MAX_MEMORY_SIZE);
|
|
167
179
|
const value = this._mem.slice(offset, offset + size);
|
|
168
180
|
TaggedMemory.log(`getSlice(${offset}, ${size}) = ${value}`);
|
|
181
|
+
assert(!value.some(e => e === undefined), 'Memory slice contains undefined values.');
|
|
169
182
|
assert(value.length === size, `Expected slice of size ${size}, got ${value.length}.`);
|
|
170
183
|
return value;
|
|
171
184
|
}
|
|
@@ -295,8 +308,88 @@ export class TaggedMemory {
|
|
|
295
308
|
throw new Error(`${TypeTag[tag]} is not a valid integral type.`);
|
|
296
309
|
}
|
|
297
310
|
}
|
|
311
|
+
/** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
|
|
312
|
+
assert(_operations) { }
|
|
298
313
|
}
|
|
299
314
|
TaggedMemory.log = createDebugLogger('aztec:avm_simulator:memory');
|
|
315
|
+
// Whether to track and validate memory accesses for each instruction.
|
|
316
|
+
TaggedMemory.TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
|
|
300
317
|
// FIXME: memory should be 2^32, but TS doesn't allow for arrays that big.
|
|
301
318
|
TaggedMemory.MAX_MEMORY_SIZE = Number((1n << 32n) - 2n);
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lbW9yeV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX21lbW9yeV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLHNFQUFzRTtBQUN0RSxNQUFNLE9BQWdCLFdBQVc7SUFrQi9CLFdBQVc7SUFDSixJQUFJO1FBQ1QsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBRUQsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBZ0IsYUFBYyxTQUFRLFdBQVc7Q0FPdEQ7QUFFRDs7O0lBR0k7QUFDSixTQUFTLDJCQUEyQixDQUFDLElBQVk7O0lBQy9DLFlBQU8sTUFBTSxZQUFhLFNBQVEsYUFBYTtZQUs3QyxZQUFtQixDQUFrQjtnQkFDbkMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMscUJBQXFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFB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QUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBUSxDQUFDO0lBQzVDLENBQUM7SUFFTSxZQUFZLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDOUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxHQUFHLENBQUMsTUFBYyxFQUFFLENBQWM7UUFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxRQUFRLENBQUMsTUFBYyxFQUFFLEVBQWlCO1FBQy9DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsMEVBQTBFO1FBQzFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdB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
|
|
319
|
+
/** Tagged memory wrapper with metering for each memory read and write operation. */
|
|
320
|
+
export class MeteredTaggedMemory {
|
|
321
|
+
constructor(wrapped, type = 'instruction') {
|
|
322
|
+
this.wrapped = wrapped;
|
|
323
|
+
this.type = type;
|
|
324
|
+
this.reads = 0;
|
|
325
|
+
this.writes = 0;
|
|
326
|
+
}
|
|
327
|
+
/** Returns the number of reads and writes tracked so far and resets them to zero. */
|
|
328
|
+
reset() {
|
|
329
|
+
const stats = { reads: this.reads, writes: this.writes };
|
|
330
|
+
this.reads = 0;
|
|
331
|
+
this.writes = 0;
|
|
332
|
+
return stats;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Asserts that the exact number of memory operations have been performed.
|
|
336
|
+
* Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
|
|
337
|
+
*/
|
|
338
|
+
assert(operations) {
|
|
339
|
+
const { reads: expectedReads, writes: expectedWrites, indirect } = { reads: 0, writes: 0, ...operations };
|
|
340
|
+
const totalExpectedReads = expectedReads + Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
|
|
341
|
+
const { reads: actualReads, writes: actualWrites } = this.reset();
|
|
342
|
+
if (actualReads !== totalExpectedReads) {
|
|
343
|
+
throw new InstructionExecutionError(`Incorrect number of memory reads for ${this.type}: expected ${totalExpectedReads} but executed ${actualReads}`);
|
|
344
|
+
}
|
|
345
|
+
if (actualWrites !== expectedWrites) {
|
|
346
|
+
throw new InstructionExecutionError(`Incorrect number of memory writes for ${this.type}: expected ${expectedWrites} but executed ${actualWrites}`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
track(type = 'instruction') {
|
|
350
|
+
return new MeteredTaggedMemory(this.wrapped, type);
|
|
351
|
+
}
|
|
352
|
+
get(offset) {
|
|
353
|
+
this.reads++;
|
|
354
|
+
return this.wrapped.get(offset);
|
|
355
|
+
}
|
|
356
|
+
getSliceAs(offset, size) {
|
|
357
|
+
this.reads += size;
|
|
358
|
+
return this.wrapped.getSliceAs(offset, size);
|
|
359
|
+
}
|
|
360
|
+
getAs(offset) {
|
|
361
|
+
this.reads++;
|
|
362
|
+
return this.wrapped.getAs(offset);
|
|
363
|
+
}
|
|
364
|
+
getSlice(offset, size) {
|
|
365
|
+
this.reads += size;
|
|
366
|
+
return this.wrapped.getSlice(offset, size);
|
|
367
|
+
}
|
|
368
|
+
set(offset, v) {
|
|
369
|
+
this.writes++;
|
|
370
|
+
this.wrapped.set(offset, v);
|
|
371
|
+
}
|
|
372
|
+
setSlice(offset, vs) {
|
|
373
|
+
this.writes += vs.length;
|
|
374
|
+
this.wrapped.setSlice(offset, vs);
|
|
375
|
+
}
|
|
376
|
+
getSliceTags(offset, size) {
|
|
377
|
+
return this.wrapped.getSliceTags(offset, size);
|
|
378
|
+
}
|
|
379
|
+
getTag(offset) {
|
|
380
|
+
return this.wrapped.getTag(offset);
|
|
381
|
+
}
|
|
382
|
+
checkTag(tag, offset) {
|
|
383
|
+
this.wrapped.checkTag(tag, offset);
|
|
384
|
+
}
|
|
385
|
+
checkIsValidMemoryOffsetTag(offset) {
|
|
386
|
+
this.wrapped.checkIsValidMemoryOffsetTag(offset);
|
|
387
|
+
}
|
|
388
|
+
checkTags(tag, ...offsets) {
|
|
389
|
+
this.wrapped.checkTags(tag, ...offsets);
|
|
390
|
+
}
|
|
391
|
+
checkTagsRange(tag, startOffset, size) {
|
|
392
|
+
this.wrapped.checkTagsRange(tag, startOffset, size);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lbW9yeV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX21lbW9yeV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUxQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUUsc0VBQXNFO0FBQ3RFLE1BQU0sT0FBZ0IsV0FBVztJQWtCL0IsV0FBVztJQUNKLElBQUk7UUFDVCxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCw2Q0FBNkM7SUFDdEMsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFFRCxpRkFBaUY7QUFDakYsTUFBTSxPQUFnQixhQUFjLFNBQVEsV0FBVztDQU90RDtBQUVEOzs7SUFHSTtBQUNKLFNBQVMsMkJBQTJCLENBQUMsSUFBWTs7SUFDL0MsWUFBTyxNQUFNLFlBQWEsU0FBUSxhQUFhO1lBSzdDLFlBQW1CLENBQWtCO2dCQUNuQyxLQUFL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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_simulator.d.ts","sourceRoot":"","sources":["../../src/avm/avm_simulator.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,YAAY;IAGX,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,GAAG,CAAc;gBAEL,OAAO,EAAE,UAAU;IAMvC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAgBvD;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI/E;;;OAGG;IACU,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"avm_simulator.d.ts","sourceRoot":"","sources":["../../src/avm/avm_simulator.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,YAAY;IAGX,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,GAAG,CAAc;gBAEL,OAAO,EAAE,UAAU;IAMvC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAgBvD;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI/E;;;OAGG;IACU,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;CA4C/F"}
|
|
@@ -34,24 +34,26 @@ export class AvmSimulator {
|
|
|
34
34
|
*/
|
|
35
35
|
async executeInstructions(instructions) {
|
|
36
36
|
assert(instructions.length > 0);
|
|
37
|
+
const { machineState } = this.context;
|
|
37
38
|
try {
|
|
38
39
|
// Execute instruction pointed to by the current program counter
|
|
39
40
|
// continuing until the machine state signifies a halt
|
|
40
|
-
while (!
|
|
41
|
-
const instruction = instructions[
|
|
41
|
+
while (!machineState.halted) {
|
|
42
|
+
const instruction = instructions[machineState.pc];
|
|
42
43
|
assert(!!instruction, 'AVM attempted to execute non-existent instruction. This should never happen (invalid bytecode or AVM simulator bug)!');
|
|
43
|
-
|
|
44
|
+
const gasLeft = `l1=${machineState.l1GasLeft} l2=${machineState.l2GasLeft} da=${machineState.daGasLeft}`;
|
|
45
|
+
this.log.debug(`@${machineState.pc} (${gasLeft}) ${instruction.toString()}`);
|
|
44
46
|
// Execute the instruction.
|
|
45
47
|
// Normal returns and reverts will return normally here.
|
|
46
48
|
// "Exceptional halts" will throw.
|
|
47
|
-
await instruction.
|
|
48
|
-
if (
|
|
49
|
+
await instruction.execute(this.context);
|
|
50
|
+
if (machineState.pc >= instructions.length) {
|
|
49
51
|
this.log('Passed end of program!');
|
|
50
|
-
throw new InvalidProgramCounterError(
|
|
52
|
+
throw new InvalidProgramCounterError(machineState.pc, /*max=*/ instructions.length);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
// Return results for processing by calling context
|
|
54
|
-
const results =
|
|
56
|
+
const results = machineState.getResults();
|
|
55
57
|
this.log(`Context execution results: ${results.toString()}`);
|
|
56
58
|
return results;
|
|
57
59
|
}
|
|
@@ -69,4 +71,4 @@ export class AvmSimulator {
|
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHMUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRS9FLE1BQU0sT0FBTyxZQUFZO0lBR3ZCLFlBQW9CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FDMUIsOEJBQThCLE9BQU8sQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUNoQyxRQUFRLENBQ1QsQ0FBQztRQUVGLGtGQUFrRjtRQUNsRiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFnQjtRQUMzQyxPQUFPLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUEyQjtRQUMxRCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QyxJQUFJLENBQUM7WUFDSCxnRUFBZ0U7WUFDaEUsc0RBQXNEO1lBQ3RELE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sQ0FDSixDQUFDLENBQUMsV0FBVyxFQUNiLHNIQUFzSCxDQUN2SCxDQUFDO2dCQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLFNBQVMsT0FBTyxZQUFZLENBQUMsU0FBUyxPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRSxLQUFLLE9BQU8sS0FBSyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSwyQkFBMkI7Z0JBQzNCLHdEQUF3RDtnQkFDeEQsa0NBQWtDO2dCQUNsQyxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUV4QyxJQUFJLFlBQVksQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQ25DLE1BQU0sSUFBSSwwQkFBMEIsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7WUFDSCxDQUFDO1lBRUQsbURBQW1EO1lBQ25ELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLDhCQUE4QixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUVELG1EQUFtRDtZQUNuRCwrQ0FBK0M7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accrued_substate.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/accrued_substate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,cAAe,SAAQ,WAAW;IAa3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IAftB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAyB;IAEvD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAMxB;gBAGQ,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"accrued_substate.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/accrued_substate.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,11 +14,15 @@ export class NoteHashExists extends Instruction {
|
|
|
14
14
|
this.existsOffset = existsOffset;
|
|
15
15
|
}
|
|
16
16
|
async execute(context) {
|
|
17
|
+
const memoryOperations = { reads: 2, writes: 1, indirect: this.indirect };
|
|
18
|
+
const memory = context.machineState.memory.track(this.type);
|
|
19
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
17
20
|
// Note that this instruction accepts any type in memory, and converts to Field.
|
|
18
|
-
const noteHash =
|
|
19
|
-
const leafIndex =
|
|
21
|
+
const noteHash = memory.get(this.noteHashOffset).toFr();
|
|
22
|
+
const leafIndex = memory.get(this.leafIndexOffset).toFr();
|
|
20
23
|
const exists = await context.persistableState.checkNoteHashExists(context.environment.storageAddress, noteHash, leafIndex);
|
|
21
|
-
|
|
24
|
+
memory.set(this.existsOffset, exists ? new Uint8(1) : new Uint8(0));
|
|
25
|
+
memory.assert(memoryOperations);
|
|
22
26
|
context.machineState.incrementPc();
|
|
23
27
|
}
|
|
24
28
|
}
|
|
@@ -39,11 +43,15 @@ export class EmitNoteHash extends Instruction {
|
|
|
39
43
|
this.noteHashOffset = noteHashOffset;
|
|
40
44
|
}
|
|
41
45
|
async execute(context) {
|
|
46
|
+
const memoryOperations = { reads: 1, indirect: this.indirect };
|
|
47
|
+
const memory = context.machineState.memory.track(this.type);
|
|
48
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
42
49
|
if (context.environment.isStaticCall) {
|
|
43
50
|
throw new StaticCallStorageAlterError();
|
|
44
51
|
}
|
|
45
|
-
const noteHash =
|
|
52
|
+
const noteHash = memory.get(this.noteHashOffset).toFr();
|
|
46
53
|
context.persistableState.writeNoteHash(noteHash);
|
|
54
|
+
memory.assert(memoryOperations);
|
|
47
55
|
context.machineState.incrementPc();
|
|
48
56
|
}
|
|
49
57
|
}
|
|
@@ -59,9 +67,13 @@ export class NullifierExists extends Instruction {
|
|
|
59
67
|
this.existsOffset = existsOffset;
|
|
60
68
|
}
|
|
61
69
|
async execute(context) {
|
|
62
|
-
const
|
|
70
|
+
const memoryOperations = { reads: 1, writes: 1, indirect: this.indirect };
|
|
71
|
+
const memory = context.machineState.memory.track(this.type);
|
|
72
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
73
|
+
const nullifier = memory.get(this.nullifierOffset).toFr();
|
|
63
74
|
const exists = await context.persistableState.checkNullifierExists(context.environment.storageAddress, nullifier);
|
|
64
|
-
|
|
75
|
+
memory.set(this.existsOffset, exists ? new Uint8(1) : new Uint8(0));
|
|
76
|
+
memory.assert(memoryOperations);
|
|
65
77
|
context.machineState.incrementPc();
|
|
66
78
|
}
|
|
67
79
|
}
|
|
@@ -79,7 +91,10 @@ export class EmitNullifier extends Instruction {
|
|
|
79
91
|
if (context.environment.isStaticCall) {
|
|
80
92
|
throw new StaticCallStorageAlterError();
|
|
81
93
|
}
|
|
82
|
-
const
|
|
94
|
+
const memoryOperations = { reads: 1, indirect: this.indirect };
|
|
95
|
+
const memory = context.machineState.memory.track(this.type);
|
|
96
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
97
|
+
const nullifier = memory.get(this.nullifierOffset).toFr();
|
|
83
98
|
try {
|
|
84
99
|
await context.persistableState.writeNullifier(context.environment.storageAddress, nullifier);
|
|
85
100
|
}
|
|
@@ -92,6 +107,7 @@ export class EmitNullifier extends Instruction {
|
|
|
92
107
|
throw e;
|
|
93
108
|
}
|
|
94
109
|
}
|
|
110
|
+
memory.assert(memoryOperations);
|
|
95
111
|
context.machineState.incrementPc();
|
|
96
112
|
}
|
|
97
113
|
}
|
|
@@ -108,10 +124,14 @@ export class L1ToL2MessageExists extends Instruction {
|
|
|
108
124
|
this.existsOffset = existsOffset;
|
|
109
125
|
}
|
|
110
126
|
async execute(context) {
|
|
111
|
-
const
|
|
112
|
-
const
|
|
127
|
+
const memoryOperations = { reads: 2, writes: 1, indirect: this.indirect };
|
|
128
|
+
const memory = context.machineState.memory.track(this.type);
|
|
129
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
130
|
+
const msgHash = memory.get(this.msgHashOffset).toFr();
|
|
131
|
+
const msgLeafIndex = memory.get(this.msgLeafIndexOffset).toFr();
|
|
113
132
|
const exists = await context.persistableState.checkL1ToL2MessageExists(msgHash, msgLeafIndex);
|
|
114
|
-
|
|
133
|
+
memory.set(this.existsOffset, exists ? new Uint8(1) : new Uint8(0));
|
|
134
|
+
memory.assert(memoryOperations);
|
|
115
135
|
context.machineState.incrementPc();
|
|
116
136
|
}
|
|
117
137
|
}
|
|
@@ -137,11 +157,15 @@ export class EmitUnencryptedLog extends Instruction {
|
|
|
137
157
|
if (context.environment.isStaticCall) {
|
|
138
158
|
throw new StaticCallStorageAlterError();
|
|
139
159
|
}
|
|
140
|
-
const
|
|
160
|
+
const memoryOperations = { reads: 1 + this.logSize, indirect: this.indirect };
|
|
161
|
+
const memory = context.machineState.memory.track(this.type);
|
|
162
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
163
|
+
const [eventSelectorOffset, logOffset] = Addressing.fromWire(this.indirect).resolve([this.eventSelectorOffset, this.logOffset], memory);
|
|
141
164
|
const contractAddress = context.environment.address;
|
|
142
|
-
const event =
|
|
143
|
-
const log =
|
|
165
|
+
const event = memory.get(eventSelectorOffset).toFr();
|
|
166
|
+
const log = memory.getSlice(logOffset, this.logSize).map(f => f.toFr());
|
|
144
167
|
context.persistableState.writeLog(contractAddress, event, log);
|
|
168
|
+
memory.assert(memoryOperations);
|
|
145
169
|
context.machineState.incrementPc();
|
|
146
170
|
}
|
|
147
171
|
}
|
|
@@ -166,9 +190,13 @@ export class SendL2ToL1Message extends Instruction {
|
|
|
166
190
|
if (context.environment.isStaticCall) {
|
|
167
191
|
throw new StaticCallStorageAlterError();
|
|
168
192
|
}
|
|
169
|
-
const
|
|
170
|
-
const
|
|
193
|
+
const memoryOperations = { reads: 2, indirect: this.indirect };
|
|
194
|
+
const memory = context.machineState.memory.track(this.type);
|
|
195
|
+
context.machineState.consumeGas(this.gasCost(memoryOperations));
|
|
196
|
+
const recipient = memory.get(this.recipientOffset).toFr();
|
|
197
|
+
const content = memory.get(this.contentOffset).toFr();
|
|
171
198
|
context.persistableState.writeL1Message(recipient, content);
|
|
199
|
+
memory.assert(memoryOperations);
|
|
172
200
|
context.machineState.incrementPc();
|
|
173
201
|
}
|
|
174
202
|
}
|
|
@@ -176,4 +204,4 @@ SendL2ToL1Message.type = 'SENDL2TOL1MSG';
|
|
|
176
204
|
SendL2ToL1Message.opcode = Opcode.SENDL2TOL1MSG;
|
|
177
205
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
178
206
|
SendL2ToL1Message.wireFormat = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT32, OperandType.UINT32];
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjcnVlZF9zdWJzdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9hY2NydWVkX3N1YnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxNQUFNLE9BQU8sY0FBZSxTQUFRLFdBQVc7SUFZN0MsWUFDVSxRQUFnQixFQUNoQixjQUFzQixFQUN0QixlQUF1QixFQUN2QixZQUFvQjtRQUU1QixLQUFLLEVBQUUsQ0FBQztRQUxBLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFHOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDL0IsZ0ZBQWdGO1FBQ2hGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0UsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMs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
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjcnVlZF9zdWJzdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9hY2NydWVkX3N1YnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxNQUFNLE9BQU8sY0FBZSxTQUFRLFdBQVc7SUFZN0MsWUFDVSxRQUFnQixFQUNoQixjQUFzQixFQUN0QixlQUF1QixFQUN2QixZQUFvQjtRQUU1QixLQUFLLEVBQUUsQ0FBQztRQUxBLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFDdEIsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFHOUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQs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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TaggedMemoryInterface } from '../avm_memory_types.js';
|
|
2
2
|
export declare enum AddressingMode {
|
|
3
3
|
DIRECT = 0,
|
|
4
4
|
INDIRECT = 1,
|
|
@@ -7,18 +7,20 @@ export declare enum AddressingMode {
|
|
|
7
7
|
/** A class to represent the addressing mode of an instruction. */
|
|
8
8
|
export declare class Addressing {
|
|
9
9
|
/** The addressing mode for each operand. The length of this array is the number of operands of the instruction. */
|
|
10
|
-
readonly modePerOperand
|
|
10
|
+
private readonly modePerOperand;
|
|
11
11
|
constructor(
|
|
12
12
|
/** The addressing mode for each operand. The length of this array is the number of operands of the instruction. */
|
|
13
13
|
modePerOperand: AddressingMode[]);
|
|
14
14
|
static fromWire(wireModes: number): Addressing;
|
|
15
15
|
toWire(): number;
|
|
16
|
+
/** Returns how many operands use the given addressing mode. */
|
|
17
|
+
count(mode: AddressingMode): number;
|
|
16
18
|
/**
|
|
17
19
|
* Resolves the offsets using the addressing mode.
|
|
18
20
|
* @param offsets The offsets to resolve.
|
|
19
21
|
* @param mem The memory to use for resolution.
|
|
20
22
|
* @returns The resolved offsets. The length of the returned array is the same as the length of the input array.
|
|
21
23
|
*/
|
|
22
|
-
resolve(offsets: number[], mem:
|
|
24
|
+
resolve(offsets: number[], mem: TaggedMemoryInterface): number[];
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=addressing_mode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addressing_mode.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/addressing_mode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"addressing_mode.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/addressing_mode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,oBAAY,cAAc;IACxB,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,sBAAsB,IAAA;CACvB;AAED,kEAAkE;AAClE,qBAAa,UAAU;IAEnB,mHAAmH;IACnH,OAAO,CAAC,QAAQ,CAAC,cAAc;;IAD/B,mHAAmH;IAClG,cAAc,EAAE,cAAc,EAAE;WAKrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;IAU9C,MAAM,IAAI,MAAM;IAYvB,+DAA+D;IACxD,KAAK,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAI1C;;;;;OAKG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,qBAAqB,GAAG,MAAM,EAAE;CAmBxE"}
|