@aztec/simulator 0.86.0-starknet.1 → 0.87.0-nightly.20250521
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/common/errors.d.ts.map +1 -1
- package/dest/private/acvm/acvm.d.ts +0 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +1 -1
- package/dest/private/acvm/deserialize.d.ts +0 -2
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/oracle/oracle.d.ts +2 -2
- package/dest/private/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/private/acvm/oracle/oracle.js +30 -33
- package/dest/private/acvm/oracle/typed_oracle.d.ts +1 -3
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/private/acvm/serialize.d.ts +8 -2
- package/dest/private/acvm/serialize.d.ts.map +1 -1
- package/dest/private/acvm/serialize.js +26 -0
- package/dest/private/index.d.ts +3 -0
- package/dest/private/index.d.ts.map +1 -1
- package/dest/private/index.js +3 -0
- package/dest/private/providers/acvm_native.d.ts +0 -2
- package/dest/private/providers/acvm_native.d.ts.map +1 -1
- package/dest/private/providers/acvm_native.js +1 -1
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts +0 -2
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/providers/simulation_provider.js +2 -2
- package/dest/private/simulator.d.ts.map +1 -1
- package/dest/private/utility_execution_oracle.d.ts +0 -2
- package/dest/private/utility_execution_oracle.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +2 -2
- package/dest/public/avm/avm_execution_environment.d.ts +2 -1
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_execution_environment.js +4 -2
- package/dest/public/avm/avm_gas.d.ts +0 -15
- package/dest/public/avm/avm_gas.d.ts.map +1 -1
- package/dest/public/avm/avm_gas.js +0 -18
- package/dest/public/avm/avm_memory_types.d.ts +84 -86
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.d.ts +1 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +3 -3
- package/dest/public/avm/avm_simulator_interface.d.ts +0 -2
- package/dest/public/avm/avm_simulator_interface.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +1 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +7 -7
- package/dest/public/avm/opcodes/addressing_mode.d.ts +7 -6
- package/dest/public/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/public/avm/opcodes/addressing_mode.js +18 -15
- package/dest/public/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/public/avm/opcodes/arithmetic.js +1 -1
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +2 -2
- package/dest/public/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/public/avm/opcodes/comparators.js +1 -1
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +1 -1
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +1 -1
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +1 -1
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +1 -1
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +1 -1
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +4 -4
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +3 -3
- package/dest/public/avm/opcodes/instruction.d.ts +0 -2
- package/dest/public/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +6 -6
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +18 -11
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +2 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts +0 -2
- package/dest/public/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/public/avm/serialization/bytecode_serialization.d.ts +0 -2
- package/dest/public/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.d.ts +0 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +1 -1
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +19 -26
- package/dest/public/hinting_db_sources.d.ts +0 -2
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.d.ts +3 -5
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +8 -5
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.js +3 -3
- package/dest/public/public_tx_simulator/public_tx_context.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.js +5 -9
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +2 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +15 -3
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +2 -2
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +5 -5
- package/dest/public/state_manager/nullifiers.d.ts.map +1 -1
- package/dest/public/state_manager/public_storage.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.d.ts +6 -2
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +6 -0
- package/dest/public/unique_class_ids.d.ts.map +1 -1
- package/dest/test/utils.d.ts.map +1 -1
- package/package.json +18 -18
- package/src/private/acvm/acvm.ts +1 -1
- package/src/private/acvm/oracle/oracle.ts +38 -31
- package/src/private/acvm/oracle/typed_oracle.ts +1 -1
- package/src/private/acvm/serialize.ts +35 -0
- package/src/private/index.ts +3 -0
- package/src/private/pick_notes.ts +4 -4
- package/src/private/providers/acvm_native.ts +6 -2
- package/src/private/providers/simulation_provider.ts +2 -2
- package/src/private/simulator.ts +4 -1
- package/src/public/avm/avm_contract_call_result.ts +2 -2
- package/src/public/avm/avm_execution_environment.ts +7 -1
- package/src/public/avm/avm_gas.ts +0 -20
- package/src/public/avm/avm_simulator.ts +3 -1
- package/src/public/avm/fixtures/initializers.ts +1 -0
- package/src/public/avm/opcodes/accrued_substate.ts +31 -11
- package/src/public/avm/opcodes/addressing_mode.ts +23 -20
- package/src/public/avm/opcodes/arithmetic.ts +2 -1
- package/src/public/avm/opcodes/bitwise.ts +9 -3
- package/src/public/avm/opcodes/comparators.ts +2 -1
- package/src/public/avm/opcodes/contract.ts +2 -1
- package/src/public/avm/opcodes/control_flow.ts +7 -2
- package/src/public/avm/opcodes/conversion.ts +2 -1
- package/src/public/avm/opcodes/ec_add.ts +2 -1
- package/src/public/avm/opcodes/environment_getters.ts +7 -2
- package/src/public/avm/opcodes/external_calls.ts +19 -7
- package/src/public/avm/opcodes/hashing.ts +17 -5
- package/src/public/avm/opcodes/memory.ts +27 -9
- package/src/public/avm/opcodes/misc.ts +23 -15
- package/src/public/avm/opcodes/storage.ts +9 -3
- package/src/public/avm/serialization/buffer_cursor.ts +4 -1
- package/src/public/fixtures/public_tx_simulation_tester.ts +1 -0
- package/src/public/fixtures/utils.ts +21 -28
- package/src/public/hinting_db_sources.ts +8 -2
- package/src/public/public_processor/public_processor.ts +9 -3
- package/src/public/public_tx_simulator/measured_public_tx_simulator.ts +3 -2
- package/src/public/public_tx_simulator/public_tx_context.ts +4 -23
- package/src/public/public_tx_simulator/public_tx_simulator.ts +14 -1
- package/src/public/public_tx_simulator/telemetry_public_tx_simulator.ts +10 -1
- package/src/public/side_effect_trace.ts +5 -7
- package/src/public/state_manager/state_manager.ts +13 -0
- package/src/public/avm/opcodes/.eslintrc.cjs +0 -8
|
@@ -14,10 +14,11 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
14
14
|
export abstract class ThreeOperandArithmeticInstruction extends ThreeOperandInstruction {
|
|
15
15
|
public async execute(context: AvmContext): Promise<void> {
|
|
16
16
|
const memory = context.machineState.memory;
|
|
17
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
18
|
+
|
|
17
19
|
context.machineState.consumeGas(this.gasCost());
|
|
18
20
|
|
|
19
21
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
20
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
21
22
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
22
23
|
this.checkTags(memory, aOffset, bOffset);
|
|
23
24
|
|
|
@@ -8,10 +8,11 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
8
8
|
abstract class ThreeOperandBitwiseInstruction extends ThreeOperandInstruction {
|
|
9
9
|
public async execute(context: AvmContext): Promise<void> {
|
|
10
10
|
const memory = context.machineState.memory;
|
|
11
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
12
|
+
|
|
11
13
|
context.machineState.consumeGas(this.gasCost());
|
|
12
14
|
|
|
13
15
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
14
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
15
16
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
16
17
|
this.checkTags(memory, aOffset, bOffset);
|
|
17
18
|
|
|
@@ -89,16 +90,21 @@ export class Not extends Instruction {
|
|
|
89
90
|
static readonly wireFormat8 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT8, OperandType.UINT8];
|
|
90
91
|
static readonly wireFormat16 = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16, OperandType.UINT16];
|
|
91
92
|
|
|
92
|
-
constructor(
|
|
93
|
+
constructor(
|
|
94
|
+
private indirect: number,
|
|
95
|
+
private srcOffset: number,
|
|
96
|
+
private dstOffset: number,
|
|
97
|
+
) {
|
|
93
98
|
super();
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
public async execute(context: AvmContext): Promise<void> {
|
|
97
102
|
const memory = context.machineState.memory;
|
|
103
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
104
|
+
|
|
98
105
|
context.machineState.consumeGas(this.gasCost());
|
|
99
106
|
|
|
100
107
|
const operands = [this.srcOffset, this.dstOffset];
|
|
101
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
102
108
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
103
109
|
TaggedMemory.checkIsIntegralTag(memory.getTag(srcOffset));
|
|
104
110
|
const value = memory.getAs<IntegralValue>(srcOffset);
|
|
@@ -7,10 +7,11 @@ import { ThreeOperandInstruction } from './instruction_impl.js';
|
|
|
7
7
|
abstract class ComparatorInstruction extends ThreeOperandInstruction {
|
|
8
8
|
public async execute(context: AvmContext): Promise<void> {
|
|
9
9
|
const memory = context.machineState.memory;
|
|
10
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
11
|
+
|
|
10
12
|
context.machineState.consumeGas(this.gasCost());
|
|
11
13
|
|
|
12
14
|
const operands = [this.aOffset, this.bOffset, this.dstOffset];
|
|
13
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
14
15
|
const [aOffset, bOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
15
16
|
memory.checkTagsAreSame(aOffset, bOffset);
|
|
16
17
|
|
|
@@ -34,6 +34,8 @@ export class GetContractInstance extends Instruction {
|
|
|
34
34
|
|
|
35
35
|
async execute(context: AvmContext): Promise<void> {
|
|
36
36
|
const memory = context.machineState.memory;
|
|
37
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
38
|
+
|
|
37
39
|
context.machineState.consumeGas(this.gasCost());
|
|
38
40
|
|
|
39
41
|
if (!(this.memberEnum in ContractInstanceMember)) {
|
|
@@ -41,7 +43,6 @@ export class GetContractInstance extends Instruction {
|
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
const operands = [this.addressOffset, this.dstOffset];
|
|
44
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
45
46
|
const [addressOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
46
47
|
memory.checkTag(TypeTag.FIELD, addressOffset);
|
|
47
48
|
|
|
@@ -38,16 +38,21 @@ export class JumpI extends Instruction {
|
|
|
38
38
|
OperandType.UINT32,
|
|
39
39
|
];
|
|
40
40
|
|
|
41
|
-
constructor(
|
|
41
|
+
constructor(
|
|
42
|
+
private indirect: number,
|
|
43
|
+
private condOffset: number,
|
|
44
|
+
private loc: number,
|
|
45
|
+
) {
|
|
42
46
|
super();
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
public async execute(context: AvmContext): Promise<void> {
|
|
46
50
|
const memory = context.machineState.memory;
|
|
51
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
52
|
+
|
|
47
53
|
context.machineState.consumeGas(this.gasCost());
|
|
48
54
|
|
|
49
55
|
const operands = [this.condOffset];
|
|
50
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
51
56
|
const [condOffset] = addressing.resolve(operands, memory);
|
|
52
57
|
const condition = memory.getAs<IntegralValue>(condOffset);
|
|
53
58
|
|
|
@@ -33,8 +33,9 @@ export class ToRadixBE extends Instruction {
|
|
|
33
33
|
|
|
34
34
|
public async execute(context: AvmContext): Promise<void> {
|
|
35
35
|
const memory = context.machineState.memory;
|
|
36
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
37
|
+
|
|
36
38
|
const operands = [this.srcOffset, this.radixOffset, this.numLimbsOffset, this.outputBitsOffset, this.dstOffset];
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
38
39
|
const [srcOffset, radixOffset, numLimbsOffset, outputBitsOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
39
40
|
|
|
40
41
|
// The radix gadget only takes in a Field
|
|
@@ -39,6 +39,8 @@ export class EcAdd extends Instruction {
|
|
|
39
39
|
|
|
40
40
|
public async execute(context: AvmContext): Promise<void> {
|
|
41
41
|
const memory = context.machineState.memory;
|
|
42
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
43
|
+
|
|
42
44
|
context.machineState.consumeGas(this.gasCost());
|
|
43
45
|
|
|
44
46
|
const operands = [
|
|
@@ -50,7 +52,6 @@ export class EcAdd extends Instruction {
|
|
|
50
52
|
this.p2IsInfiniteOffset,
|
|
51
53
|
this.dstOffset,
|
|
52
54
|
];
|
|
53
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
54
55
|
const [p1XOffset, p1YOffset, p1IsInfiniteOffset, p2XOffset, p2YOffset, p2IsInfiniteOffset, dstOffset] =
|
|
55
56
|
addressing.resolve(operands, memory);
|
|
56
57
|
|
|
@@ -61,12 +61,18 @@ export class GetEnvVar extends Instruction {
|
|
|
61
61
|
OperandType.UINT8, // variable enum (immediate)
|
|
62
62
|
];
|
|
63
63
|
|
|
64
|
-
constructor(
|
|
64
|
+
constructor(
|
|
65
|
+
private indirect: number,
|
|
66
|
+
private dstOffset: number,
|
|
67
|
+
private varEnum: number,
|
|
68
|
+
) {
|
|
65
69
|
super();
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
public async execute(context: AvmContext): Promise<void> {
|
|
69
73
|
const memory = context.machineState.memory;
|
|
74
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
75
|
+
|
|
70
76
|
context.machineState.consumeGas(this.gasCost());
|
|
71
77
|
|
|
72
78
|
if (!(this.varEnum in EnvironmentVariable)) {
|
|
@@ -74,7 +80,6 @@ export class GetEnvVar extends Instruction {
|
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
const operands = [this.dstOffset];
|
|
77
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
78
83
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
79
84
|
|
|
80
85
|
memory.set(dstOffset, getValue(this.varEnum as EnvironmentVariable, context));
|
|
@@ -30,8 +30,9 @@ abstract class ExternalCall extends Instruction {
|
|
|
30
30
|
|
|
31
31
|
public async execute(context: AvmContext) {
|
|
32
32
|
const memory = context.machineState.memory;
|
|
33
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
34
|
+
|
|
33
35
|
const operands = [this.l2GasOffset, this.daGasOffset, this.addrOffset, this.argsSizeOffset, this.argsOffset];
|
|
34
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
35
36
|
const [l2GasOffset, daGasOffset, addrOffset, argsSizeOffset, argsOffset] = addressing.resolve(operands, memory);
|
|
36
37
|
// TODO: Should be U32
|
|
37
38
|
memory.checkTags(TypeTag.FIELD, l2GasOffset);
|
|
@@ -133,15 +134,18 @@ export class SuccessCopy extends Instruction {
|
|
|
133
134
|
OperandType.UINT16, // dstOffset (16-bit)
|
|
134
135
|
];
|
|
135
136
|
|
|
136
|
-
constructor(
|
|
137
|
+
constructor(
|
|
138
|
+
private indirect: number,
|
|
139
|
+
private dstOffset: number,
|
|
140
|
+
) {
|
|
137
141
|
super();
|
|
138
142
|
}
|
|
139
143
|
|
|
140
144
|
public async execute(context: AvmContext): Promise<void> {
|
|
141
145
|
const memory = context.machineState.memory;
|
|
146
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
142
147
|
|
|
143
148
|
const operands = [this.dstOffset];
|
|
144
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
145
149
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
146
150
|
|
|
147
151
|
// Use the direct success tracking property
|
|
@@ -163,15 +167,19 @@ export class Return extends Instruction {
|
|
|
163
167
|
OperandType.UINT16,
|
|
164
168
|
];
|
|
165
169
|
|
|
166
|
-
constructor(
|
|
170
|
+
constructor(
|
|
171
|
+
private indirect: number,
|
|
172
|
+
private returnSizeOffset: number,
|
|
173
|
+
private returnOffset: number,
|
|
174
|
+
) {
|
|
167
175
|
super();
|
|
168
176
|
}
|
|
169
177
|
|
|
170
178
|
public async execute(context: AvmContext): Promise<void> {
|
|
171
179
|
const memory = context.machineState.memory;
|
|
180
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
172
181
|
|
|
173
182
|
const operands = [this.returnSizeOffset, this.returnOffset];
|
|
174
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
175
183
|
const [returnSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
176
184
|
|
|
177
185
|
memory.checkTag(TypeTag.UINT32, returnSizeOffset);
|
|
@@ -205,15 +213,19 @@ export class Revert extends Instruction {
|
|
|
205
213
|
OperandType.UINT16,
|
|
206
214
|
];
|
|
207
215
|
|
|
208
|
-
constructor(
|
|
216
|
+
constructor(
|
|
217
|
+
private indirect: number,
|
|
218
|
+
private retSizeOffset: number,
|
|
219
|
+
private returnOffset: number,
|
|
220
|
+
) {
|
|
209
221
|
super();
|
|
210
222
|
}
|
|
211
223
|
|
|
212
224
|
public async execute(context: AvmContext): Promise<void> {
|
|
213
225
|
const memory = context.machineState.memory;
|
|
226
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
214
227
|
|
|
215
228
|
const operands = [this.retSizeOffset, this.returnOffset];
|
|
216
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
217
229
|
const [retSizeOffset, returnOffset] = addressing.resolve(operands, memory);
|
|
218
230
|
|
|
219
231
|
memory.checkTag(TypeTag.UINT32, retSizeOffset);
|
|
@@ -19,16 +19,22 @@ export class Poseidon2 extends Instruction {
|
|
|
19
19
|
OperandType.UINT16,
|
|
20
20
|
];
|
|
21
21
|
|
|
22
|
-
constructor(
|
|
22
|
+
constructor(
|
|
23
|
+
private indirect: number,
|
|
24
|
+
private inputStateOffset: number,
|
|
25
|
+
private outputStateOffset: number,
|
|
26
|
+
) {
|
|
23
27
|
super();
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
public async execute(context: AvmContext): Promise<void> {
|
|
27
31
|
const memory = context.machineState.memory;
|
|
32
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
33
|
+
|
|
28
34
|
context.machineState.consumeGas(this.gasCost());
|
|
29
35
|
|
|
30
36
|
const operands = [this.inputStateOffset, this.outputStateOffset];
|
|
31
|
-
|
|
37
|
+
|
|
32
38
|
const [inputOffset, outputOffset] = addressing.resolve(operands, memory);
|
|
33
39
|
|
|
34
40
|
const inputState = memory.getSlice(inputOffset, Poseidon2.stateSize);
|
|
@@ -54,7 +60,11 @@ export class KeccakF1600 extends Instruction {
|
|
|
54
60
|
OperandType.UINT16,
|
|
55
61
|
];
|
|
56
62
|
|
|
57
|
-
constructor(
|
|
63
|
+
constructor(
|
|
64
|
+
private indirect: number,
|
|
65
|
+
private dstOffset: number,
|
|
66
|
+
private inputOffset: number,
|
|
67
|
+
) {
|
|
58
68
|
super();
|
|
59
69
|
}
|
|
60
70
|
|
|
@@ -62,8 +72,9 @@ export class KeccakF1600 extends Instruction {
|
|
|
62
72
|
public async execute(context: AvmContext): Promise<void> {
|
|
63
73
|
const inputSize = 25;
|
|
64
74
|
const memory = context.machineState.memory;
|
|
75
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
76
|
+
|
|
65
77
|
const operands = [this.dstOffset, this.inputOffset];
|
|
66
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
67
78
|
const [dstOffset, inputOffset] = addressing.resolve(operands, memory);
|
|
68
79
|
context.machineState.consumeGas(this.gasCost());
|
|
69
80
|
|
|
@@ -104,8 +115,9 @@ export class Sha256Compression extends Instruction {
|
|
|
104
115
|
const INPUTS_SIZE = 16;
|
|
105
116
|
|
|
106
117
|
const memory = context.machineState.memory;
|
|
118
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
119
|
+
|
|
107
120
|
const operands = [this.outputOffset, this.stateOffset, this.inputsOffset];
|
|
108
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
109
121
|
const [outputOffset, stateOffset, inputsOffset] = addressing.resolve(operands, memory);
|
|
110
122
|
|
|
111
123
|
// Note: size of output is same as size of state
|
|
@@ -66,10 +66,11 @@ export class Set extends Instruction {
|
|
|
66
66
|
const res = TaggedMemory.buildFromTagTruncating(this.value, this.inTag);
|
|
67
67
|
|
|
68
68
|
const memory = context.machineState.memory;
|
|
69
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
70
|
+
|
|
69
71
|
context.machineState.consumeGas(this.gasCost());
|
|
70
72
|
|
|
71
73
|
const operands = [this.dstOffset];
|
|
72
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
73
74
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
74
75
|
memory.set(dstOffset, res);
|
|
75
76
|
}
|
|
@@ -94,16 +95,22 @@ export class Cast extends Instruction {
|
|
|
94
95
|
OperandType.TAG,
|
|
95
96
|
];
|
|
96
97
|
|
|
97
|
-
constructor(
|
|
98
|
+
constructor(
|
|
99
|
+
private indirect: number,
|
|
100
|
+
private srcOffset: number,
|
|
101
|
+
private dstOffset: number,
|
|
102
|
+
private dstTag: number,
|
|
103
|
+
) {
|
|
98
104
|
super();
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
public async execute(context: AvmContext): Promise<void> {
|
|
102
108
|
const memory = context.machineState.memory;
|
|
109
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
110
|
+
|
|
103
111
|
context.machineState.consumeGas(this.gasCost());
|
|
104
112
|
|
|
105
113
|
const operands = [this.srcOffset, this.dstOffset];
|
|
106
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
107
114
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
108
115
|
|
|
109
116
|
const a = memory.get(srcOffset);
|
|
@@ -132,16 +139,21 @@ export class Mov extends Instruction {
|
|
|
132
139
|
OperandType.UINT16,
|
|
133
140
|
];
|
|
134
141
|
|
|
135
|
-
constructor(
|
|
142
|
+
constructor(
|
|
143
|
+
private indirect: number,
|
|
144
|
+
private srcOffset: number,
|
|
145
|
+
private dstOffset: number,
|
|
146
|
+
) {
|
|
136
147
|
super();
|
|
137
148
|
}
|
|
138
149
|
|
|
139
150
|
public async execute(context: AvmContext): Promise<void> {
|
|
140
151
|
const memory = context.machineState.memory;
|
|
152
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
153
|
+
|
|
141
154
|
context.machineState.consumeGas(this.gasCost());
|
|
142
155
|
|
|
143
156
|
const operands = [this.srcOffset, this.dstOffset];
|
|
144
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
145
157
|
const [srcOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
146
158
|
const a = memory.get(srcOffset);
|
|
147
159
|
memory.set(dstOffset, a);
|
|
@@ -171,8 +183,9 @@ export class CalldataCopy extends Instruction {
|
|
|
171
183
|
|
|
172
184
|
public async execute(context: AvmContext): Promise<void> {
|
|
173
185
|
const memory = context.machineState.memory;
|
|
186
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
187
|
+
|
|
174
188
|
const operands = [this.copySizeOffset, this.cdStartOffset, this.dstOffset];
|
|
175
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
176
189
|
const [copySizeOffset, cdStartOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
177
190
|
|
|
178
191
|
memory.checkTags(TypeTag.UINT32, cdStartOffset, copySizeOffset);
|
|
@@ -195,14 +208,18 @@ export class ReturndataSize extends Instruction {
|
|
|
195
208
|
// Informs (de)serialization. See Instruction.deserialize.
|
|
196
209
|
static readonly wireFormat: OperandType[] = [OperandType.UINT8, OperandType.UINT8, OperandType.UINT16];
|
|
197
210
|
|
|
198
|
-
constructor(
|
|
211
|
+
constructor(
|
|
212
|
+
private indirect: number,
|
|
213
|
+
private dstOffset: number,
|
|
214
|
+
) {
|
|
199
215
|
super();
|
|
200
216
|
}
|
|
201
217
|
|
|
202
218
|
public async execute(context: AvmContext): Promise<void> {
|
|
203
219
|
const memory = context.machineState.memory;
|
|
220
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
221
|
+
|
|
204
222
|
const operands = [this.dstOffset];
|
|
205
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
206
223
|
const [dstOffset] = addressing.resolve(operands, memory);
|
|
207
224
|
context.machineState.consumeGas(this.gasCost());
|
|
208
225
|
|
|
@@ -233,8 +250,9 @@ export class ReturndataCopy extends Instruction {
|
|
|
233
250
|
|
|
234
251
|
public async execute(context: AvmContext): Promise<void> {
|
|
235
252
|
const memory = context.machineState.memory;
|
|
253
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
254
|
+
|
|
236
255
|
const operands = [this.copySizeOffset, this.rdStartOffset, this.dstOffset];
|
|
237
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
238
256
|
const [copySizeOffset, rdStartOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
239
257
|
|
|
240
258
|
memory.checkTags(TypeTag.UINT32, rdStartOffset, copySizeOffset);
|
|
@@ -33,28 +33,36 @@ export class DebugLog extends Instruction {
|
|
|
33
33
|
|
|
34
34
|
public async execute(context: AvmContext): Promise<void> {
|
|
35
35
|
const memory = context.machineState.memory;
|
|
36
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
37
|
+
|
|
36
38
|
const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
38
39
|
const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
|
|
39
|
-
|
|
40
40
|
memory.checkTag(TypeTag.UINT32, fieldsSizeOffset);
|
|
41
|
-
const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
// DebugLog is a no-op except when doing client-initiated simulation with debug logging enabled.
|
|
43
|
+
// Note that we still do address resolution and basic tag-checking (above)
|
|
44
|
+
// To avoid a special-case in the witness generator and circuit.
|
|
45
|
+
if (context.environment.clientInitiatedSimulation && DebugLog.logger.isLevelEnabled('verbose')) {
|
|
46
|
+
const fieldsSize = memory.get(fieldsSizeOffset).toNumber();
|
|
47
|
+
|
|
48
|
+
const rawMessage = memory.getSlice(messageOffset, this.messageSize);
|
|
49
|
+
const fields = memory.getSlice(fieldsOffset, fieldsSize);
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
memory.checkTagsRange(TypeTag.UINT8, messageOffset, this.messageSize);
|
|
52
|
+
memory.checkTagsRange(TypeTag.FIELD, fieldsOffset, fieldsSize);
|
|
48
53
|
|
|
49
|
-
|
|
54
|
+
// Interpret str<N> = [u8; N] to string.
|
|
55
|
+
const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
|
|
56
|
+
const formattedStr = applyStringFormatting(
|
|
57
|
+
messageAsStr,
|
|
58
|
+
fields.map(field => field.toFr()),
|
|
59
|
+
);
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const formattedStr = applyStringFormatting(
|
|
54
|
-
messageAsStr,
|
|
55
|
-
fields.map(field => field.toFr()),
|
|
56
|
-
);
|
|
61
|
+
DebugLog.logger.verbose(formattedStr);
|
|
62
|
+
}
|
|
57
63
|
|
|
58
|
-
|
|
64
|
+
// Despite having dynamic "size" operands, the gas cost is fixed because
|
|
65
|
+
// this opcode is a no-op except during client-initiated simulation
|
|
66
|
+
context.machineState.consumeGas(this.gasCost());
|
|
59
67
|
}
|
|
60
68
|
}
|
|
@@ -14,7 +14,11 @@ abstract class BaseStorageInstruction extends Instruction {
|
|
|
14
14
|
OperandType.UINT16,
|
|
15
15
|
];
|
|
16
16
|
|
|
17
|
-
constructor(
|
|
17
|
+
constructor(
|
|
18
|
+
protected indirect: number,
|
|
19
|
+
protected aOffset: number,
|
|
20
|
+
protected bOffset: number,
|
|
21
|
+
) {
|
|
18
22
|
super();
|
|
19
23
|
}
|
|
20
24
|
}
|
|
@@ -33,10 +37,11 @@ export class SStore extends BaseStorageInstruction {
|
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
const memory = context.machineState.memory;
|
|
40
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
41
|
+
|
|
36
42
|
context.machineState.consumeGas(this.gasCost());
|
|
37
43
|
|
|
38
44
|
const operands = [this.aOffset, this.bOffset];
|
|
39
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
40
45
|
const [srcOffset, slotOffset] = addressing.resolve(operands, memory);
|
|
41
46
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
42
47
|
memory.checkTag(TypeTag.FIELD, srcOffset);
|
|
@@ -57,10 +62,11 @@ export class SLoad extends BaseStorageInstruction {
|
|
|
57
62
|
|
|
58
63
|
public async execute(context: AvmContext): Promise<void> {
|
|
59
64
|
const memory = context.machineState.memory;
|
|
65
|
+
const addressing = Addressing.fromWire(this.indirect);
|
|
66
|
+
|
|
60
67
|
context.machineState.consumeGas(this.gasCost());
|
|
61
68
|
|
|
62
69
|
const operands = [this.aOffset, this.bOffset];
|
|
63
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
64
70
|
const [slotOffset, dstOffset] = addressing.resolve(operands, memory);
|
|
65
71
|
memory.checkTag(TypeTag.FIELD, slotOffset);
|
|
66
72
|
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* A Buffer-like class that automatically advances the position.
|
|
3
3
|
*/
|
|
4
4
|
export class BufferCursor {
|
|
5
|
-
constructor(
|
|
5
|
+
constructor(
|
|
6
|
+
private _buffer: Buffer,
|
|
7
|
+
private _position: number = 0,
|
|
8
|
+
) {}
|
|
6
9
|
|
|
7
10
|
public position(): number {
|
|
8
11
|
return this._position;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
CONTRACT_CLASS_LOG_DATA_SIZE_IN_FIELDS,
|
|
3
2
|
DEFAULT_GAS_LIMIT,
|
|
4
3
|
DEPLOYER_CONTRACT_ADDRESS,
|
|
5
4
|
MAX_L2_GAS_PER_TX_PUBLIC_PORTION,
|
|
@@ -7,8 +6,8 @@ import {
|
|
|
7
6
|
REGISTERER_CONTRACT_ADDRESS,
|
|
8
7
|
REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE,
|
|
9
8
|
} from '@aztec/constants';
|
|
9
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
10
10
|
import { Fr } from '@aztec/foundation/fields';
|
|
11
|
-
import { assertLength } from '@aztec/foundation/serialize';
|
|
12
11
|
import { DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG } from '@aztec/protocol-contracts';
|
|
13
12
|
import { bufferAsFields } from '@aztec/stdlib/abi';
|
|
14
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -16,14 +15,14 @@ import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/st
|
|
|
16
15
|
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
17
16
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
18
17
|
import {
|
|
18
|
+
LogHash,
|
|
19
19
|
PartialPrivateTailPublicInputsForPublic,
|
|
20
20
|
PartialPrivateTailPublicInputsForRollup,
|
|
21
21
|
PrivateKernelTailCircuitPublicInputs,
|
|
22
22
|
RollupValidationRequests,
|
|
23
|
-
ScopedLogHash,
|
|
24
23
|
countAccumulatedItems,
|
|
25
24
|
} from '@aztec/stdlib/kernel';
|
|
26
|
-
import {
|
|
25
|
+
import { ContractClassLogFields, PrivateLog } from '@aztec/stdlib/logs';
|
|
27
26
|
import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
28
27
|
import {
|
|
29
28
|
BlockHeader,
|
|
@@ -58,13 +57,11 @@ export function createTxForPublicCalls(
|
|
|
58
57
|
// TODO(#9269): Remove this fake nullifier method as we move away from 1st nullifier as hash.
|
|
59
58
|
forPublic.nonRevertibleAccumulatedData.nullifiers[0] = firstNullifier;
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
forPublic.nonRevertibleAccumulatedData.publicCallRequests[setupCallRequests.length - i - 1] =
|
|
64
|
-
setupCallRequests[i].request;
|
|
60
|
+
for (let i = 0; i < setupCallRequests.length; i++) {
|
|
61
|
+
forPublic.nonRevertibleAccumulatedData.publicCallRequests[i] = setupCallRequests[i].request;
|
|
65
62
|
}
|
|
66
|
-
for (let i =
|
|
67
|
-
forPublic.revertibleAccumulatedData.publicCallRequests[
|
|
63
|
+
for (let i = 0; i < appCallRequests.length; i++) {
|
|
64
|
+
forPublic.revertibleAccumulatedData.publicCallRequests[i] = appCallRequests[i].request;
|
|
68
65
|
}
|
|
69
66
|
if (teardownCallRequest) {
|
|
70
67
|
forPublic.publicTeardownCallRequest = teardownCallRequest.request;
|
|
@@ -128,18 +125,14 @@ export async function addNewContractClassToTx(
|
|
|
128
125
|
new Fr(contractClass.privateFunctionsRoot),
|
|
129
126
|
...bufferAsFields(contractClass.packedBytecode, Math.ceil(contractClass.packedBytecode.length / 31) + 1),
|
|
130
127
|
];
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
new Fr(7),
|
|
140
|
-
new Fr(contractClassLog.getEmittedLength()),
|
|
141
|
-
new Fr(REGISTERER_CONTRACT_ADDRESS),
|
|
142
|
-
]);
|
|
128
|
+
const contractAddress = new AztecAddress(new Fr(REGISTERER_CONTRACT_ADDRESS));
|
|
129
|
+
const emittedLength = contractClassLogFields.length;
|
|
130
|
+
const log = ContractClassLogFields.fromEmittedFields(contractClassLogFields);
|
|
131
|
+
|
|
132
|
+
const contractClassLogHash = LogHash.from({
|
|
133
|
+
value: await log.hash(),
|
|
134
|
+
length: emittedLength,
|
|
135
|
+
}).scope(contractAddress);
|
|
143
136
|
|
|
144
137
|
const accumulatedData = tx.data.forPublic ? tx.data.forPublic!.revertibleAccumulatedData : tx.data.forRollup!.end;
|
|
145
138
|
if (!skipNullifierInsertion) {
|
|
@@ -150,7 +143,7 @@ export async function addNewContractClassToTx(
|
|
|
150
143
|
const nextLogIndex = countAccumulatedItems(accumulatedData.contractClassLogsHashes);
|
|
151
144
|
accumulatedData.contractClassLogsHashes[nextLogIndex] = contractClassLogHash;
|
|
152
145
|
|
|
153
|
-
tx.contractClassLogs.push(
|
|
146
|
+
tx.contractClassLogs.push(log);
|
|
154
147
|
}
|
|
155
148
|
|
|
156
149
|
export async function addNewContractInstanceToTx(
|
|
@@ -170,7 +163,7 @@ export async function addNewContractInstanceToTx(
|
|
|
170
163
|
contractInstance.publicKeys.masterTaggingPublicKey.x,
|
|
171
164
|
contractInstance.publicKeys.masterTaggingPublicKey.y,
|
|
172
165
|
];
|
|
173
|
-
const
|
|
166
|
+
const logFields = [
|
|
174
167
|
DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG,
|
|
175
168
|
contractInstance.address.toField(),
|
|
176
169
|
new Fr(contractInstance.version),
|
|
@@ -179,11 +172,11 @@ export async function addNewContractInstanceToTx(
|
|
|
179
172
|
contractInstance.initializationHash,
|
|
180
173
|
...publicKeysAsFields,
|
|
181
174
|
contractInstance.deployer.toField(),
|
|
182
|
-
new Fr(0),
|
|
183
|
-
new Fr(0),
|
|
184
|
-
new Fr(0),
|
|
185
175
|
];
|
|
186
|
-
const contractInstanceLog = new PrivateLog(
|
|
176
|
+
const contractInstanceLog = new PrivateLog(
|
|
177
|
+
padArrayEnd(logFields, Fr.ZERO, PRIVATE_LOG_SIZE_IN_FIELDS),
|
|
178
|
+
logFields.length,
|
|
179
|
+
);
|
|
187
180
|
|
|
188
181
|
const contractAddressNullifier = await siloNullifier(
|
|
189
182
|
AztecAddress.fromNumber(DEPLOYER_CONTRACT_ADDRESS),
|
|
@@ -47,7 +47,10 @@ import type { PublicContractsDBInterface } from './db_interfaces.js';
|
|
|
47
47
|
* A public contracts database that forwards requests and collects AVM hints.
|
|
48
48
|
*/
|
|
49
49
|
export class HintingPublicContractsDB implements PublicContractsDBInterface {
|
|
50
|
-
constructor(
|
|
50
|
+
constructor(
|
|
51
|
+
private readonly db: PublicContractsDBInterface,
|
|
52
|
+
private hints: AvmExecutionHints,
|
|
53
|
+
) {}
|
|
51
54
|
|
|
52
55
|
public async getContractInstance(
|
|
53
56
|
address: AztecAddress,
|
|
@@ -129,7 +132,10 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
|
|
|
129
132
|
}
|
|
130
133
|
|
|
131
134
|
// Use create() to instantiate.
|
|
132
|
-
private constructor(
|
|
135
|
+
private constructor(
|
|
136
|
+
private db: MerkleTreeWriteOperations,
|
|
137
|
+
private hints: AvmExecutionHints,
|
|
138
|
+
) {}
|
|
133
139
|
|
|
134
140
|
// Getters.
|
|
135
141
|
public async getSiblingPath<N extends number>(treeId: MerkleTreeId, index: bigint): Promise<SiblingPath<N>> {
|