@aztec/simulator 0.32.1 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dest/acvm/acvm.js +2 -2
- 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 +1 -1
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +4 -5
- 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_execution_environment.d.ts +4 -3
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +8 -7
- 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 +99 -6
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +15 -13
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +3 -3
- package/dest/avm/journal/journal.d.ts +14 -13
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +5 -5
- package/dest/avm/journal/trace.d.ts +8 -19
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +48 -116
- package/dest/avm/journal/trace_types.d.ts +23 -4
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +45 -17
- 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 +69 -72
- 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/client/client_execution_context.d.ts +2 -2
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +6 -6
- package/dest/client/private_execution.d.ts +1 -1
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +8 -4
- package/dest/client/unconstrained_execution.d.ts +1 -1
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +2 -2
- package/dest/client/view_data_oracle.d.ts +2 -2
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +2 -2
- package/dest/public/executor.d.ts +2 -8
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +101 -69
- package/dest/public/index.d.ts +1 -1
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/public_execution_context.d.ts +6 -6
- package/dest/public/public_execution_context.d.ts.map +1 -1
- package/dest/public/public_execution_context.js +8 -12
- package/dest/public/transitional_adaptors.d.ts +32 -0
- package/dest/public/transitional_adaptors.d.ts.map +1 -0
- package/dest/public/transitional_adaptors.js +161 -0
- package/package.json +15 -9
- package/src/acvm/acvm.ts +1 -1
- package/src/acvm/oracle/index.ts +0 -1
- package/src/acvm/oracle/oracle.ts +3 -4
- package/src/avm/avm_context.ts +11 -33
- package/src/avm/avm_execution_environment.ts +9 -17
- 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 +134 -6
- package/src/avm/avm_simulator.ts +14 -12
- package/src/avm/fixtures/index.ts +2 -1
- package/src/avm/journal/journal.ts +24 -17
- package/src/avm/journal/trace.ts +59 -121
- package/src/avm/journal/trace_types.ts +39 -39
- package/src/avm/opcodes/accrued_substate.ts +58 -23
- 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 +90 -89
- 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/client/client_execution_context.ts +5 -5
- package/src/client/private_execution.ts +10 -4
- package/src/client/unconstrained_execution.ts +1 -1
- package/src/client/view_data_oracle.ts +1 -1
- package/src/public/executor.ts +123 -75
- package/src/public/index.ts +2 -2
- package/src/public/public_execution_context.ts +14 -19
- package/src/public/transitional_adaptors.ts +240 -0
- 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/dest/avm/temporary_executor_migration.d.ts +0 -25
- package/dest/avm/temporary_executor_migration.d.ts.map +0 -1
- package/dest/avm/temporary_executor_migration.js +0 -83
- package/src/acvm/oracle/debug.ts +0 -109
- package/src/avm/temporary_executor_migration.ts +0 -122
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { TypeTag } from './avm_memory_types.js';
|
|
2
|
+
import { InstructionExecutionError } from './errors.js';
|
|
3
|
+
import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
|
|
4
|
+
import { Opcode } from './serialization/instruction_serialization.js';
|
|
5
|
+
/** Maps a Gas struct to gasLeft properties. */
|
|
6
|
+
export function gasToGasLeft(gas) {
|
|
7
|
+
return { l1GasLeft: gas.l1Gas, l2GasLeft: gas.l2Gas, daGasLeft: gas.daGas };
|
|
8
|
+
}
|
|
9
|
+
/** Maps gasLeft properties to a gas struct. */
|
|
10
|
+
export function gasLeftToGas(gasLeft) {
|
|
11
|
+
return { l1Gas: gasLeft.l1GasLeft, l2Gas: gasLeft.l2GasLeft, daGas: gasLeft.daGasLeft };
|
|
12
|
+
}
|
|
13
|
+
/** Creates a new instance with all values set to zero except the ones set. */
|
|
14
|
+
export function makeGas(gasCost) {
|
|
15
|
+
return { ...EmptyGas, ...gasCost };
|
|
16
|
+
}
|
|
17
|
+
/** Sums together multiple instances of Gas. */
|
|
18
|
+
export function sumGas(...gases) {
|
|
19
|
+
return gases.reduce((acc, gas) => ({
|
|
20
|
+
l1Gas: acc.l1Gas + (gas.l1Gas ?? 0),
|
|
21
|
+
l2Gas: acc.l2Gas + (gas.l2Gas ?? 0),
|
|
22
|
+
daGas: acc.daGas + (gas.daGas ?? 0),
|
|
23
|
+
}), EmptyGas);
|
|
24
|
+
}
|
|
25
|
+
/** Multiplies a gas instance by a scalar. */
|
|
26
|
+
export function mulGas(gas, scalar) {
|
|
27
|
+
return { l1Gas: (gas.l1Gas ?? 0) * scalar, l2Gas: (gas.l2Gas ?? 0) * scalar, daGas: (gas.daGas ?? 0) * scalar };
|
|
28
|
+
}
|
|
29
|
+
/** Zero gas across all gas dimensions. */
|
|
30
|
+
export const EmptyGas = {
|
|
31
|
+
l1Gas: 0,
|
|
32
|
+
l2Gas: 0,
|
|
33
|
+
daGas: 0,
|
|
34
|
+
};
|
|
35
|
+
/** Dimensions of gas usage: L1, L2, and DA. */
|
|
36
|
+
export const GasDimensions = ['l1Gas', 'l2Gas', 'daGas'];
|
|
37
|
+
/** Null object to represent a gas cost that's dynamic instead of fixed for a given instruction. */
|
|
38
|
+
export const DynamicGasCost = Symbol('DynamicGasCost');
|
|
39
|
+
/** Temporary default gas cost. We should eventually remove all usage of this variable in favor of actual gas for each opcode. */
|
|
40
|
+
const TemporaryDefaultGasCost = { l1Gas: 0, l2Gas: 10, daGas: 0 };
|
|
41
|
+
/** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */
|
|
42
|
+
export const GasCosts = {
|
|
43
|
+
[Opcode.ADD]: TemporaryDefaultGasCost,
|
|
44
|
+
[Opcode.SUB]: TemporaryDefaultGasCost,
|
|
45
|
+
[Opcode.MUL]: TemporaryDefaultGasCost,
|
|
46
|
+
[Opcode.DIV]: TemporaryDefaultGasCost,
|
|
47
|
+
[Opcode.FDIV]: TemporaryDefaultGasCost,
|
|
48
|
+
[Opcode.EQ]: TemporaryDefaultGasCost,
|
|
49
|
+
[Opcode.LT]: TemporaryDefaultGasCost,
|
|
50
|
+
[Opcode.LTE]: TemporaryDefaultGasCost,
|
|
51
|
+
[Opcode.AND]: TemporaryDefaultGasCost,
|
|
52
|
+
[Opcode.OR]: TemporaryDefaultGasCost,
|
|
53
|
+
[Opcode.XOR]: TemporaryDefaultGasCost,
|
|
54
|
+
[Opcode.NOT]: TemporaryDefaultGasCost,
|
|
55
|
+
[Opcode.SHL]: TemporaryDefaultGasCost,
|
|
56
|
+
[Opcode.SHR]: TemporaryDefaultGasCost,
|
|
57
|
+
[Opcode.CAST]: TemporaryDefaultGasCost,
|
|
58
|
+
// Execution environment
|
|
59
|
+
[Opcode.ADDRESS]: TemporaryDefaultGasCost,
|
|
60
|
+
[Opcode.STORAGEADDRESS]: TemporaryDefaultGasCost,
|
|
61
|
+
[Opcode.ORIGIN]: TemporaryDefaultGasCost,
|
|
62
|
+
[Opcode.SENDER]: TemporaryDefaultGasCost,
|
|
63
|
+
[Opcode.PORTAL]: TemporaryDefaultGasCost,
|
|
64
|
+
[Opcode.FEEPERL1GAS]: TemporaryDefaultGasCost,
|
|
65
|
+
[Opcode.FEEPERL2GAS]: TemporaryDefaultGasCost,
|
|
66
|
+
[Opcode.FEEPERDAGAS]: TemporaryDefaultGasCost,
|
|
67
|
+
[Opcode.CONTRACTCALLDEPTH]: TemporaryDefaultGasCost,
|
|
68
|
+
[Opcode.CHAINID]: TemporaryDefaultGasCost,
|
|
69
|
+
[Opcode.VERSION]: TemporaryDefaultGasCost,
|
|
70
|
+
[Opcode.BLOCKNUMBER]: TemporaryDefaultGasCost,
|
|
71
|
+
[Opcode.TIMESTAMP]: TemporaryDefaultGasCost,
|
|
72
|
+
[Opcode.COINBASE]: TemporaryDefaultGasCost,
|
|
73
|
+
[Opcode.BLOCKL1GASLIMIT]: TemporaryDefaultGasCost,
|
|
74
|
+
[Opcode.BLOCKL2GASLIMIT]: TemporaryDefaultGasCost,
|
|
75
|
+
[Opcode.BLOCKDAGASLIMIT]: TemporaryDefaultGasCost,
|
|
76
|
+
[Opcode.CALLDATACOPY]: TemporaryDefaultGasCost,
|
|
77
|
+
// Gas
|
|
78
|
+
[Opcode.L1GASLEFT]: TemporaryDefaultGasCost,
|
|
79
|
+
[Opcode.L2GASLEFT]: TemporaryDefaultGasCost,
|
|
80
|
+
[Opcode.DAGASLEFT]: TemporaryDefaultGasCost,
|
|
81
|
+
// Control flow
|
|
82
|
+
[Opcode.JUMP]: TemporaryDefaultGasCost,
|
|
83
|
+
[Opcode.JUMPI]: TemporaryDefaultGasCost,
|
|
84
|
+
[Opcode.INTERNALCALL]: TemporaryDefaultGasCost,
|
|
85
|
+
[Opcode.INTERNALRETURN]: TemporaryDefaultGasCost,
|
|
86
|
+
// Memory
|
|
87
|
+
[Opcode.SET]: TemporaryDefaultGasCost,
|
|
88
|
+
[Opcode.MOV]: TemporaryDefaultGasCost,
|
|
89
|
+
[Opcode.CMOV]: TemporaryDefaultGasCost,
|
|
90
|
+
// World state
|
|
91
|
+
[Opcode.SLOAD]: TemporaryDefaultGasCost,
|
|
92
|
+
[Opcode.SSTORE]: TemporaryDefaultGasCost,
|
|
93
|
+
[Opcode.NOTEHASHEXISTS]: TemporaryDefaultGasCost,
|
|
94
|
+
[Opcode.EMITNOTEHASH]: TemporaryDefaultGasCost,
|
|
95
|
+
[Opcode.NULLIFIEREXISTS]: TemporaryDefaultGasCost,
|
|
96
|
+
[Opcode.EMITNULLIFIER]: TemporaryDefaultGasCost,
|
|
97
|
+
[Opcode.L1TOL2MSGEXISTS]: TemporaryDefaultGasCost,
|
|
98
|
+
[Opcode.HEADERMEMBER]: TemporaryDefaultGasCost,
|
|
99
|
+
[Opcode.EMITUNENCRYPTEDLOG]: TemporaryDefaultGasCost,
|
|
100
|
+
[Opcode.SENDL2TOL1MSG]: TemporaryDefaultGasCost,
|
|
101
|
+
[Opcode.GETCONTRACTINSTANCE]: TemporaryDefaultGasCost,
|
|
102
|
+
// External calls
|
|
103
|
+
[Opcode.CALL]: TemporaryDefaultGasCost,
|
|
104
|
+
[Opcode.STATICCALL]: TemporaryDefaultGasCost,
|
|
105
|
+
[Opcode.DELEGATECALL]: TemporaryDefaultGasCost,
|
|
106
|
+
[Opcode.RETURN]: TemporaryDefaultGasCost,
|
|
107
|
+
[Opcode.REVERT]: TemporaryDefaultGasCost,
|
|
108
|
+
// Gadgets
|
|
109
|
+
[Opcode.KECCAK]: TemporaryDefaultGasCost,
|
|
110
|
+
[Opcode.POSEIDON]: TemporaryDefaultGasCost,
|
|
111
|
+
[Opcode.SHA256]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost,
|
|
112
|
+
[Opcode.PEDERSEN]: TemporaryDefaultGasCost, // temp - may be removed, but alot of contracts rely on i: TemporaryDefaultGasCost,t
|
|
113
|
+
};
|
|
114
|
+
/** Returns the fixed base gas cost for a given opcode, or throws if set to dynamic. */
|
|
115
|
+
export function getBaseGasCost(opcode) {
|
|
116
|
+
const cost = GasCosts[opcode];
|
|
117
|
+
if (cost === DynamicGasCost) {
|
|
118
|
+
throw new Error(`Opcode ${Opcode[opcode]} has dynamic gas cost`);
|
|
119
|
+
}
|
|
120
|
+
return cost;
|
|
121
|
+
}
|
|
122
|
+
/** Returns the gas cost associated with the memory operations performed. */
|
|
123
|
+
export function getMemoryGasCost(args) {
|
|
124
|
+
const { reads, writes, indirect } = args;
|
|
125
|
+
const indirectCount = Addressing.fromWire(indirect ?? 0).count(AddressingMode.INDIRECT);
|
|
126
|
+
const l2MemoryGasCost = (reads ?? 0) * GasCostConstants.MEMORY_READ +
|
|
127
|
+
(writes ?? 0) * GasCostConstants.MEMORY_WRITE +
|
|
128
|
+
indirectCount * GasCostConstants.MEMORY_INDIRECT_READ_PENALTY;
|
|
129
|
+
return makeGas({ l2Gas: l2MemoryGasCost });
|
|
130
|
+
}
|
|
131
|
+
/** Constants used in base cost calculations. */
|
|
132
|
+
export const GasCostConstants = {
|
|
133
|
+
MEMORY_READ: 10,
|
|
134
|
+
MEMORY_INDIRECT_READ_PENALTY: 10,
|
|
135
|
+
MEMORY_WRITE: 100,
|
|
136
|
+
};
|
|
137
|
+
/** Returns gas cost for an operation on a given type tag based on the base cost per byte. */
|
|
138
|
+
export function getGasCostForTypeTag(tag, baseCost) {
|
|
139
|
+
return mulGas(baseCost, getGasCostMultiplierFromTypeTag(tag));
|
|
140
|
+
}
|
|
141
|
+
/** Returns a multiplier based on the size of the type represented by the tag. Throws on uninitialized or invalid. */
|
|
142
|
+
function getGasCostMultiplierFromTypeTag(tag) {
|
|
143
|
+
switch (tag) {
|
|
144
|
+
case TypeTag.UINT8:
|
|
145
|
+
return 1;
|
|
146
|
+
case TypeTag.UINT16:
|
|
147
|
+
return 2;
|
|
148
|
+
case TypeTag.UINT32:
|
|
149
|
+
return 4;
|
|
150
|
+
case TypeTag.UINT64:
|
|
151
|
+
return 8;
|
|
152
|
+
case TypeTag.UINT128:
|
|
153
|
+
return 16;
|
|
154
|
+
case TypeTag.FIELD:
|
|
155
|
+
return 32;
|
|
156
|
+
case TypeTag.INVALID:
|
|
157
|
+
case TypeTag.UNINITIALIZED:
|
|
158
|
+
throw new InstructionExecutionError(`Invalid tag type for gas cost multiplier: ${TypeTag[tag]}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2dhcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX2dhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBU3RFLCtDQUErQztBQUMvQyxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVE7SUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUUsQ0FBQztBQUVELCtDQUErQztBQUMvQyxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQW9FO0lBQy9GLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzFGLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFxQjtJQUMzQyxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBRyxLQUFxQjtJQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQ2pCLENBQUMsR0FBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Fr } from '@aztec/circuits.js';
|
|
2
|
-
import { type
|
|
2
|
+
import { type Gas } from './avm_gas.js';
|
|
3
3
|
import { TaggedMemory } from './avm_memory_types.js';
|
|
4
4
|
import { AvmContractCallResults } from './avm_message_call_result.js';
|
|
5
5
|
/**
|
|
@@ -43,7 +43,9 @@ export declare class AvmMachineState {
|
|
|
43
43
|
* Should any of the gas dimensions get depleted, it sets all gas left to zero and triggers
|
|
44
44
|
* an exceptional halt by throwing an OutOfGasError.
|
|
45
45
|
*/
|
|
46
|
-
consumeGas(gasCost: Partial<
|
|
46
|
+
consumeGas(gasCost: Partial<Gas>): void;
|
|
47
|
+
/** Increases the gas left by the amounts specified. */
|
|
48
|
+
refundGas(gasRefund: Partial<Gas>): void;
|
|
47
49
|
/**
|
|
48
50
|
* Most instructions just increment PC before they complete
|
|
49
51
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avm_machine_state.d.ts","sourceRoot":"","sources":["../../src/avm/avm_machine_state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"avm_machine_state.d.ts","sourceRoot":"","sources":["../../src/avm/avm_machine_state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,KAAK,GAAG,EAAiB,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAGtE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IACnB,SAAS,EAAE,MAAM,CAAC;IACzB,6DAA6D;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACf,EAAE,EAAE,MAAM,CAAK;IAEtB;;;OAGG;IACI,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAExC,qCAAqC;IACrC,SAAgB,MAAM,EAAE,YAAY,CAAsB;IAE1D;;;OAGG;IACI,MAAM,EAAE,OAAO,CAAS;IAC/B,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAkB;IAClC,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAY;gBAEd,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;WAMrD,SAAS,CAAC,KAAK,EAAE,sBAAsB,GAAG,eAAe;IAIvE;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;IAiBvC,uDAAuD;IAChD,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC;IAMxC;;OAEG;IACI,WAAW;IAIlB;;;;OAIG;IACI,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE;IAK1B;;;;OAIG;IACI,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE;IAM1B;;OAEG;IACH,SAAS,CAAC,eAAe;IAMzB;;;OAGG;IACI,UAAU,IAAI,sBAAsB;CAM5C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GasDimensions } from './
|
|
1
|
+
import { GasDimensions } from './avm_gas.js';
|
|
2
2
|
import { TaggedMemory } from './avm_memory_types.js';
|
|
3
3
|
import { AvmContractCallResults } from './avm_message_call_result.js';
|
|
4
4
|
import { OutOfGasError } from './errors.js';
|
|
@@ -51,6 +51,12 @@ export class AvmMachineState {
|
|
|
51
51
|
this[`${dimension}Left`] -= gasCost[dimension] ?? 0;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
/** Increases the gas left by the amounts specified. */
|
|
55
|
+
refundGas(gasRefund) {
|
|
56
|
+
for (const dimension of GasDimensions) {
|
|
57
|
+
this[`${dimension}Left`] += gasRefund[dimension] ?? 0;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
54
60
|
/**
|
|
55
61
|
* Most instructions just increment PC before they complete
|
|
56
62
|
*/
|
|
@@ -95,4 +101,4 @@ export class AvmMachineState {
|
|
|
95
101
|
return new AvmContractCallResults(this.reverted, this.output);
|
|
96
102
|
}
|
|
97
103
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21hY2hpbmVfc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9tYWNoaW5lX3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBWSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFXNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQTJCMUIsWUFBWSxTQUFpQixFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUF0Qm5FLHNCQUFzQjtRQUNmLE9BQUUsR0FBVyxDQUFDLENBQUM7UUFFdEI7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBRXhDLHFDQUFxQztRQUNyQixXQUFNLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQ7OztXQUdHO1FBQ0ksV0FBTSxHQUFZLEtBQUssQ0FBQztRQUMvQiwyRkFBMkY7UUFDbkYsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNsQyxzREFBc0Q7UUFDOUMsV0FBTSxHQUFTLEVBQUUsQ0FBQztRQUd4QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUE2QjtRQUNuRCxPQUFPLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsT0FBcUI7UUFDckMsaURBQWlEO1FBQ2pELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdEUsQ0FBQztRQUNGLHVDQUF1QztRQUN2QyxvRkFBb0Y7UUFDcEYsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsMENBQTBDO1FBQzFDLEtBQUssTUFBTSxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsdURBQXVEO0lBQ2hELFNBQVMsQ0FBQyxTQUF1QjtRQUN0QyxLQUFLLE1BQU0sU0FBUyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxHQUFHLFNBQVMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFZO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQVk7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ08sZUFBZTtRQUN2QixhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7Q0FDRiJ9
|
|
@@ -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);
|
|
@@ -158,14 +167,18 @@ export class TaggedMemory {
|
|
|
158
167
|
getAs(offset) {
|
|
159
168
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
160
169
|
const word = this._mem[offset];
|
|
161
|
-
TaggedMemory.log(`get(${offset}) = ${word}`);
|
|
170
|
+
TaggedMemory.log.debug(`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) {
|
|
165
177
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
166
178
|
assert(offset + size < TaggedMemory.MAX_MEMORY_SIZE);
|
|
167
179
|
const value = this._mem.slice(offset, offset + size);
|
|
168
|
-
TaggedMemory.log(`getSlice(${offset}, ${size}) = ${value}`);
|
|
180
|
+
TaggedMemory.log.debug(`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
|
}
|
|
@@ -182,7 +195,7 @@ export class TaggedMemory {
|
|
|
182
195
|
set(offset, v) {
|
|
183
196
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
184
197
|
this._mem[offset] = v;
|
|
185
|
-
TaggedMemory.log(`set(${offset}, ${v})`);
|
|
198
|
+
TaggedMemory.log.debug(`set(${offset}, ${v})`);
|
|
186
199
|
}
|
|
187
200
|
setSlice(offset, vs) {
|
|
188
201
|
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
@@ -192,7 +205,7 @@ export class TaggedMemory {
|
|
|
192
205
|
this._mem.length = offset + vs.length;
|
|
193
206
|
}
|
|
194
207
|
this._mem.splice(offset, vs.length, ...vs);
|
|
195
|
-
TaggedMemory.log(`setSlice(${offset}, ${vs})`);
|
|
208
|
+
TaggedMemory.log.debug(`setSlice(${offset}, ${vs})`);
|
|
196
209
|
}
|
|
197
210
|
getTag(offset) {
|
|
198
211
|
return TaggedMemory.getTag(this._mem[offset]);
|
|
@@ -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"}
|