@aztec/simulator 0.40.1 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/acvm/acvm.d.ts +2 -2
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/acvm.js +3 -3
- package/dest/acvm/oracle/oracle.d.ts +6 -2
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +31 -19
- package/dest/acvm/oracle/typed_oracle.d.ts +8 -11
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +17 -5
- package/dest/acvm/serialize.js +2 -2
- 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 +7 -5
- package/dest/avm/avm_gas.d.ts +1 -5
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +67 -73
- package/dest/avm/avm_simulator.d.ts +5 -0
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +12 -4
- package/dest/avm/errors.d.ts +6 -0
- package/dest/avm/errors.d.ts.map +1 -1
- package/dest/avm/errors.js +10 -1
- package/dest/avm/fixtures/index.d.ts +3 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +15 -3
- package/dest/avm/index.d.ts +2 -0
- package/dest/avm/index.d.ts.map +1 -0
- package/dest/avm/index.js +2 -0
- package/dest/avm/journal/host_storage.d.ts +1 -1
- package/dest/avm/journal/host_storage.d.ts.map +1 -1
- package/dest/avm/journal/journal.d.ts +4 -3
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +10 -11
- package/dest/avm/journal/nullifiers.d.ts +17 -5
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +27 -10
- package/dest/avm/journal/public_storage.d.ts +19 -6
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +30 -12
- package/dest/avm/journal/trace.d.ts +2 -0
- package/dest/avm/journal/trace.d.ts.map +1 -1
- package/dest/avm/journal/trace.js +7 -1
- package/dest/avm/journal/trace_types.d.ts +1 -0
- package/dest/avm/journal/trace_types.d.ts.map +1 -1
- package/dest/avm/journal/trace_types.js +1 -1
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +6 -7
- package/dest/avm/opcodes/arithmetic.d.ts +1 -7
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +1 -12
- package/dest/avm/opcodes/conversion.js +2 -2
- package/dest/avm/opcodes/external_calls.d.ts +2 -2
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +25 -13
- package/dest/avm/opcodes/instruction.d.ts +1 -1
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/instruction.js +6 -4
- package/dest/avm/opcodes/memory.d.ts +0 -4
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +1 -7
- package/dest/avm/opcodes/storage.d.ts +0 -12
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +3 -18
- package/dest/avm/serialization/bytecode_serialization.js +2 -2
- package/dest/client/client_execution_context.d.ts +30 -20
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +59 -39
- package/dest/client/db_oracle.d.ts +17 -12
- package/dest/client/db_oracle.d.ts.map +1 -1
- package/dest/client/execution_note_cache.js +2 -2
- package/dest/client/execution_result.d.ts +17 -2
- package/dest/client/execution_result.d.ts.map +1 -1
- package/dest/client/execution_result.js +32 -4
- package/dest/client/private_execution.d.ts +2 -3
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +22 -8
- package/dest/client/simulator.d.ts +0 -16
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +13 -30
- package/dest/client/unconstrained_execution.d.ts +2 -3
- package/dest/client/unconstrained_execution.d.ts.map +1 -1
- package/dest/client/unconstrained_execution.js +5 -7
- package/dest/client/view_data_oracle.d.ts +12 -10
- package/dest/client/view_data_oracle.d.ts.map +1 -1
- package/dest/client/view_data_oracle.js +17 -11
- package/dest/common/index.d.ts +1 -0
- package/dest/common/index.d.ts.map +1 -1
- package/dest/common/index.js +2 -1
- package/dest/common/return_values.d.ts +11 -0
- package/dest/common/return_values.d.ts.map +1 -0
- package/dest/common/return_values.js +13 -0
- package/dest/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +4 -2
- package/dest/mocks/fixtures.d.ts +15 -10
- package/dest/mocks/fixtures.d.ts.map +1 -1
- package/dest/mocks/fixtures.js +22 -17
- package/dest/{simulator → providers}/acvm_native.d.ts.map +1 -1
- package/dest/{simulator → providers}/acvm_native.js +13 -14
- package/dest/providers/acvm_wasm.d.ts.map +1 -0
- package/dest/providers/acvm_wasm.js +15 -0
- package/dest/providers/index.d.ts.map +1 -0
- package/dest/{simulator → providers}/index.js +1 -1
- package/dest/{simulator → providers}/simulation_provider.d.ts.map +1 -1
- package/dest/{simulator → providers}/simulation_provider.js +1 -1
- package/dest/public/abstract_phase_manager.d.ts +43 -42
- package/dest/public/abstract_phase_manager.d.ts.map +1 -1
- package/dest/public/abstract_phase_manager.js +81 -103
- package/dest/public/app_logic_phase_manager.d.ts +7 -8
- package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
- package/dest/public/app_logic_phase_manager.js +14 -14
- package/dest/public/{db.d.ts → db_interfaces.d.ts} +3 -3
- package/dest/public/db_interfaces.d.ts.map +1 -0
- package/dest/public/db_interfaces.js +2 -0
- package/dest/public/execution.d.ts +17 -14
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +1 -1
- package/dest/public/executor.d.ts +3 -30
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +32 -279
- package/dest/public/fee_payment.d.ts +11 -0
- package/dest/public/fee_payment.d.ts.map +1 -0
- package/dest/public/fee_payment.js +24 -0
- package/dest/public/hints_builder.d.ts +3 -2
- package/dest/public/hints_builder.d.ts.map +1 -1
- package/dest/public/hints_builder.js +8 -4
- package/dest/public/index.d.ts +4 -2
- package/dest/public/index.d.ts.map +1 -1
- package/dest/public/index.js +5 -3
- package/dest/public/phase_manager_factory.d.ts +1 -1
- package/dest/public/phase_manager_factory.d.ts.map +1 -1
- package/dest/public/{public_executor.d.ts → public_db_sources.d.ts} +3 -2
- package/dest/public/public_db_sources.d.ts.map +1 -0
- package/dest/public/public_db_sources.js +198 -0
- package/dest/public/public_kernel.js +14 -14
- package/dest/public/public_processor.d.ts +8 -6
- package/dest/public/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor.js +48 -29
- package/dest/public/setup_phase_manager.d.ts +7 -9
- package/dest/public/setup_phase_manager.d.ts.map +1 -1
- package/dest/public/setup_phase_manager.js +11 -20
- package/dest/public/tail_phase_manager.d.ts +5 -11
- package/dest/public/tail_phase_manager.d.ts.map +1 -1
- package/dest/public/tail_phase_manager.js +16 -36
- package/dest/public/teardown_phase_manager.d.ts +7 -9
- package/dest/public/teardown_phase_manager.d.ts.map +1 -1
- package/dest/public/teardown_phase_manager.js +15 -21
- package/dest/public/transitional_adaptors.d.ts +3 -2
- package/dest/public/transitional_adaptors.d.ts.map +1 -1
- package/dest/public/transitional_adaptors.js +24 -8
- package/dest/public/utils.d.ts +2 -2
- package/dest/public/utils.d.ts.map +1 -1
- package/dest/public/utils.js +21 -14
- package/package.json +12 -9
- package/src/acvm/acvm.ts +0 -3
- package/src/acvm/oracle/oracle.ts +53 -27
- package/src/acvm/oracle/typed_oracle.ts +25 -16
- package/src/acvm/serialize.ts +1 -1
- package/src/avm/avm_execution_environment.ts +9 -5
- package/src/avm/avm_gas.ts +66 -73
- package/src/avm/avm_simulator.ts +14 -3
- package/src/avm/errors.ts +10 -0
- package/src/avm/fixtures/index.ts +22 -2
- package/src/avm/index.ts +1 -0
- package/src/avm/journal/host_storage.ts +1 -1
- package/src/avm/journal/journal.ts +15 -14
- package/src/avm/journal/nullifiers.ts +27 -14
- package/src/avm/journal/public_storage.ts +30 -16
- package/src/avm/journal/trace.ts +12 -0
- package/src/avm/journal/trace_types.ts +1 -0
- package/src/avm/opcodes/accrued_substate.ts +5 -6
- package/src/avm/opcodes/arithmetic.ts +1 -14
- package/src/avm/opcodes/conversion.ts +1 -1
- package/src/avm/opcodes/external_calls.ts +26 -10
- package/src/avm/opcodes/instruction.ts +5 -3
- package/src/avm/opcodes/memory.ts +1 -8
- package/src/avm/opcodes/storage.ts +3 -20
- package/src/avm/serialization/bytecode_serialization.ts +1 -1
- package/src/client/client_execution_context.ts +70 -44
- package/src/client/db_oracle.ts +18 -12
- package/src/client/execution_note_cache.ts +1 -1
- package/src/client/execution_result.ts +41 -3
- package/src/client/private_execution.ts +38 -20
- package/src/client/simulator.ts +11 -32
- package/src/client/unconstrained_execution.ts +9 -12
- package/src/client/view_data_oracle.ts +20 -12
- package/src/common/index.ts +1 -0
- package/src/common/return_values.ts +18 -0
- package/src/index.ts +3 -1
- package/src/mocks/fixtures.ts +31 -33
- package/src/{simulator → providers}/acvm_native.ts +21 -19
- package/src/{simulator → providers}/acvm_wasm.ts +2 -16
- package/src/public/abstract_phase_manager.ts +146 -207
- package/src/public/app_logic_phase_manager.ts +23 -39
- package/src/public/{db.ts → db_interfaces.ts} +2 -2
- package/src/public/execution.ts +17 -14
- package/src/public/executor.ts +51 -391
- package/src/public/fee_payment.ts +26 -0
- package/src/public/hints_builder.ts +17 -3
- package/src/public/index.ts +4 -2
- package/src/public/phase_manager_factory.ts +1 -1
- package/src/public/{public_executor.ts → public_db_sources.ts} +3 -2
- package/src/public/public_kernel.ts +24 -24
- package/src/public/public_processor.ts +82 -38
- package/src/public/setup_phase_manager.ts +20 -45
- package/src/public/tail_phase_manager.ts +18 -68
- package/src/public/teardown_phase_manager.ts +22 -41
- package/src/public/transitional_adaptors.ts +24 -13
- package/src/public/utils.ts +20 -14
- package/dest/client/logs_cache.d.ts +0 -33
- package/dest/client/logs_cache.d.ts.map +0 -1
- package/dest/client/logs_cache.js +0 -59
- package/dest/public/db.d.ts.map +0 -1
- package/dest/public/db.js +0 -2
- package/dest/public/public_execution_context.d.ts +0 -121
- package/dest/public/public_execution_context.d.ts.map +0 -1
- package/dest/public/public_execution_context.js +0 -214
- package/dest/public/public_executor.d.ts.map +0 -1
- package/dest/public/public_executor.js +0 -197
- package/dest/public/state_actions.d.ts +0 -39
- package/dest/public/state_actions.d.ts.map +0 -1
- package/dest/public/state_actions.js +0 -80
- package/dest/simulator/acvm_wasm.d.ts.map +0 -1
- package/dest/simulator/acvm_wasm.js +0 -22
- package/dest/simulator/index.d.ts.map +0 -1
- package/src/client/logs_cache.ts +0 -65
- package/src/public/public_execution_context.ts +0 -289
- package/src/public/state_actions.ts +0 -102
- /package/dest/{simulator → providers}/acvm_native.d.ts +0 -0
- /package/dest/{simulator → providers}/acvm_wasm.d.ts +0 -0
- /package/dest/{simulator → providers}/index.d.ts +0 -0
- /package/dest/{simulator → providers}/simulation_provider.d.ts +0 -0
- /package/src/{simulator → providers}/index.ts +0 -0
- /package/src/{simulator → providers}/simulation_provider.ts +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
|
|
2
|
+
import { KeyValidationRequest } from '@aztec/circuits.js';
|
|
2
3
|
import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
3
4
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
5
|
import { Fr, Point } from '@aztec/foundation/fields';
|
|
@@ -40,15 +41,18 @@ export class Oracle {
|
|
|
40
41
|
return unpacked.map(toACVMField);
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
async
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
async getBlockNumber(): Promise<ACVMField> {
|
|
45
|
+
return toACVMField(await this.typedOracle.getBlockNumber());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async getContractAddress(): Promise<ACVMField> {
|
|
49
|
+
return toACVMField(await this.typedOracle.getContractAddress());
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async getKeyValidationRequest([pkMHash]: ACVMField[]): Promise<ACVMField[]> {
|
|
53
|
+
const { pkM, skApp } = await this.typedOracle.getKeyValidationRequest(fromACVMField(pkMHash));
|
|
54
|
+
|
|
55
|
+
return [toACVMField(pkM.x), toACVMField(pkM.y), toACVMField(skApp)];
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
async getContractInstance([address]: ACVMField[]) {
|
|
@@ -286,32 +290,54 @@ export class Oracle {
|
|
|
286
290
|
}
|
|
287
291
|
|
|
288
292
|
emitEncryptedLog(
|
|
293
|
+
[contractAddress]: ACVMField[],
|
|
294
|
+
[randomness]: ACVMField[],
|
|
295
|
+
encryptedLog: ACVMField[],
|
|
296
|
+
[counter]: ACVMField[],
|
|
297
|
+
): void {
|
|
298
|
+
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
299
|
+
const processedInput = Buffer.from(encryptedLog.map(fromACVMField).map(f => f.toNumber()));
|
|
300
|
+
this.typedOracle.emitEncryptedLog(
|
|
301
|
+
AztecAddress.fromString(contractAddress),
|
|
302
|
+
Fr.fromString(randomness),
|
|
303
|
+
processedInput,
|
|
304
|
+
+counter,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
emitEncryptedNoteLog([noteHashCounter]: ACVMField[], encryptedNote: ACVMField[], [counter]: ACVMField[]): void {
|
|
309
|
+
// Convert each field to a number and then to a buffer (1 byte is stored in 1 field)
|
|
310
|
+
const processedInput = Buffer.from(encryptedNote.map(fromACVMField).map(f => f.toNumber()));
|
|
311
|
+
this.typedOracle.emitEncryptedNoteLog(+noteHashCounter, processedInput, +counter);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
computeEncryptedLog(
|
|
289
315
|
[contractAddress]: ACVMField[],
|
|
290
316
|
[storageSlot]: ACVMField[],
|
|
291
317
|
[noteTypeId]: ACVMField[],
|
|
292
|
-
[
|
|
293
|
-
[
|
|
294
|
-
|
|
295
|
-
[
|
|
318
|
+
[ovskApp]: ACVMField[],
|
|
319
|
+
[ovpkMX]: ACVMField[],
|
|
320
|
+
[ovpkMY]: ACVMField[],
|
|
321
|
+
[ivpkMX]: ACVMField[],
|
|
322
|
+
[ivpkMY]: ACVMField[],
|
|
323
|
+
preimage: ACVMField[],
|
|
296
324
|
): ACVMField[] {
|
|
297
|
-
const
|
|
298
|
-
const
|
|
325
|
+
const ovpkM = new Point(fromACVMField(ovpkMX), fromACVMField(ovpkMY));
|
|
326
|
+
const ovKeys = new KeyValidationRequest(ovpkM, Fr.fromString(ovskApp));
|
|
327
|
+
const ivpkM = new Point(fromACVMField(ivpkMX), fromACVMField(ivpkMY));
|
|
328
|
+
const encLog = this.typedOracle.computeEncryptedLog(
|
|
299
329
|
AztecAddress.fromString(contractAddress),
|
|
300
330
|
Fr.fromString(storageSlot),
|
|
301
331
|
Fr.fromString(noteTypeId),
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
332
|
+
ovKeys,
|
|
333
|
+
ivpkM,
|
|
334
|
+
preimage.map(fromACVMField),
|
|
305
335
|
);
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
encLogFields.push(toACVMField(encLog.subarray(31 * i, Math.min(31 * (i + 1), encLog.length))));
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return encLogFields;
|
|
336
|
+
const bytes: ACVMField[] = [];
|
|
337
|
+
encLog.forEach(v => {
|
|
338
|
+
bytes.push(toACVMField(v));
|
|
339
|
+
});
|
|
340
|
+
return bytes;
|
|
315
341
|
}
|
|
316
342
|
|
|
317
343
|
emitUnencryptedLog(
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from '@aztec/circuit-types';
|
|
12
12
|
import {
|
|
13
13
|
type Header,
|
|
14
|
+
type KeyValidationRequest,
|
|
14
15
|
type L1_TO_L2_MSG_TREE_HEIGHT,
|
|
15
16
|
type PrivateCallStackItem,
|
|
16
17
|
type PublicCallRequest,
|
|
@@ -20,14 +21,6 @@ import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
20
21
|
import { Fr } from '@aztec/foundation/fields';
|
|
21
22
|
import { type ContractInstance } from '@aztec/types/contracts';
|
|
22
23
|
|
|
23
|
-
/** Nullifier keys which both correspond to the same master nullifier secret key. */
|
|
24
|
-
export interface NullifierKeys {
|
|
25
|
-
/** Master nullifier public key. */
|
|
26
|
-
masterNullifierPublicKey: PublicKey;
|
|
27
|
-
/** App nullifier secret key. */
|
|
28
|
-
appNullifierSecretKey: Fr;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
24
|
/**
|
|
32
25
|
* Information about a note needed during execution.
|
|
33
26
|
*/
|
|
@@ -89,8 +82,16 @@ export abstract class TypedOracle {
|
|
|
89
82
|
throw new OracleMethodNotAvailableError('unpackReturns');
|
|
90
83
|
}
|
|
91
84
|
|
|
92
|
-
|
|
93
|
-
throw new OracleMethodNotAvailableError('
|
|
85
|
+
getBlockNumber(): Promise<number> {
|
|
86
|
+
throw new OracleMethodNotAvailableError('getBlockNumber');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
getContractAddress(): Promise<AztecAddress> {
|
|
90
|
+
throw new OracleMethodNotAvailableError('getContractAddress');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
getKeyValidationRequest(_pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
94
|
+
throw new OracleMethodNotAvailableError('getKeyValidationRequest');
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
getContractInstance(_address: AztecAddress): Promise<ContractInstance> {
|
|
@@ -124,7 +125,7 @@ export abstract class TypedOracle {
|
|
|
124
125
|
throw new OracleMethodNotAvailableError('getHeader');
|
|
125
126
|
}
|
|
126
127
|
|
|
127
|
-
getCompleteAddress(
|
|
128
|
+
getCompleteAddress(_account: AztecAddress): Promise<CompleteAddress> {
|
|
128
129
|
throw new OracleMethodNotAvailableError('getCompleteAddress');
|
|
129
130
|
}
|
|
130
131
|
|
|
@@ -183,15 +184,23 @@ export abstract class TypedOracle {
|
|
|
183
184
|
throw new OracleMethodNotAvailableError('storageWrite');
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
emitEncryptedLog(
|
|
187
|
+
emitEncryptedLog(_contractAddress: AztecAddress, _randomness: Fr, _encryptedNote: Buffer, _counter: number): void {
|
|
188
|
+
throw new OracleMethodNotAvailableError('emitEncryptedLog');
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
emitEncryptedNoteLog(_noteHashCounter: number, _encryptedNote: Buffer, _counter: number): void {
|
|
192
|
+
throw new OracleMethodNotAvailableError('emitEncryptedNoteLog');
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
computeEncryptedLog(
|
|
187
196
|
_contractAddress: AztecAddress,
|
|
188
197
|
_storageSlot: Fr,
|
|
189
198
|
_noteTypeId: Fr,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
199
|
+
_ovKeys: KeyValidationRequest,
|
|
200
|
+
_ivpkM: PublicKey,
|
|
201
|
+
_preimage: Fr[],
|
|
193
202
|
): Buffer {
|
|
194
|
-
throw new OracleMethodNotAvailableError('
|
|
203
|
+
throw new OracleMethodNotAvailableError('computeEncryptedLog');
|
|
195
204
|
}
|
|
196
205
|
|
|
197
206
|
emitUnencryptedLog(_log: UnencryptedL2Log, _counter: number): void {
|
package/src/acvm/serialize.ts
CHANGED
|
@@ -55,7 +55,7 @@ export function toACVMField(
|
|
|
55
55
|
export function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[] {
|
|
56
56
|
const fields = [
|
|
57
57
|
item.contractAddress.toField(),
|
|
58
|
-
|
|
58
|
+
item.functionSelector.toField(),
|
|
59
59
|
...item.callContext.toFields(),
|
|
60
60
|
item.getArgsHash(),
|
|
61
61
|
];
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { FunctionSelector, type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
|
|
2
2
|
import { computeVarArgsHash } from '@aztec/circuits.js/hash';
|
|
3
3
|
import { type AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
|
-
import {
|
|
4
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
|
|
6
6
|
export class AvmContextInputs {
|
|
7
|
-
static readonly SIZE =
|
|
7
|
+
static readonly SIZE = 3;
|
|
8
8
|
|
|
9
|
-
constructor(private selector: Fr, private argsHash: Fr) {}
|
|
9
|
+
constructor(private selector: Fr, private argsHash: Fr, private isStaticCall: boolean) {}
|
|
10
10
|
|
|
11
11
|
public toFields(): Fr[] {
|
|
12
|
-
return [this.selector, this.argsHash];
|
|
12
|
+
return [this.selector, this.argsHash, new Fr(this.isStaticCall)];
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -41,7 +41,11 @@ export class AvmExecutionEnvironment {
|
|
|
41
41
|
) {
|
|
42
42
|
// We encode some extra inputs (AvmContextInputs) in calldata.
|
|
43
43
|
// This will have to go once we move away from one proof per call.
|
|
44
|
-
const inputs = new AvmContextInputs(
|
|
44
|
+
const inputs = new AvmContextInputs(
|
|
45
|
+
temporaryFunctionSelector.toField(),
|
|
46
|
+
computeVarArgsHash(calldata),
|
|
47
|
+
isStaticCall,
|
|
48
|
+
);
|
|
45
49
|
this.calldata = [...inputs.toFields(), ...calldata];
|
|
46
50
|
}
|
|
47
51
|
|
package/src/avm/avm_gas.ts
CHANGED
|
@@ -49,93 +49,86 @@ export const EmptyGas: Gas = {
|
|
|
49
49
|
/** Dimensions of gas usage: L1, L2, and DA. */
|
|
50
50
|
export const GasDimensions = ['l2Gas', 'daGas'] as const;
|
|
51
51
|
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
/** Temporary default gas cost. We should eventually remove all usage of this variable in favor of actual gas for each opcode. */
|
|
56
|
-
const TemporaryDefaultGasCost = { l2Gas: 10, daGas: 0 };
|
|
52
|
+
/** Default gas cost for an opcode. */
|
|
53
|
+
const DefaultBaseGasCost: Gas = { l2Gas: 10, daGas: 0 };
|
|
57
54
|
|
|
58
55
|
/** Base gas costs for each instruction. Additional gas cost may be added on top due to memory or storage accesses, etc. */
|
|
59
|
-
|
|
60
|
-
[Opcode.ADD]:
|
|
61
|
-
[Opcode.SUB]:
|
|
62
|
-
[Opcode.MUL]:
|
|
63
|
-
[Opcode.DIV]:
|
|
64
|
-
[Opcode.FDIV]:
|
|
65
|
-
[Opcode.EQ]:
|
|
66
|
-
[Opcode.LT]:
|
|
67
|
-
[Opcode.LTE]:
|
|
68
|
-
[Opcode.AND]:
|
|
69
|
-
[Opcode.OR]:
|
|
70
|
-
[Opcode.XOR]:
|
|
71
|
-
[Opcode.NOT]:
|
|
72
|
-
[Opcode.SHL]:
|
|
73
|
-
[Opcode.SHR]:
|
|
74
|
-
[Opcode.CAST]:
|
|
56
|
+
const BaseGasCosts: Record<Opcode, Gas> = {
|
|
57
|
+
[Opcode.ADD]: DefaultBaseGasCost,
|
|
58
|
+
[Opcode.SUB]: DefaultBaseGasCost,
|
|
59
|
+
[Opcode.MUL]: DefaultBaseGasCost,
|
|
60
|
+
[Opcode.DIV]: DefaultBaseGasCost,
|
|
61
|
+
[Opcode.FDIV]: DefaultBaseGasCost,
|
|
62
|
+
[Opcode.EQ]: DefaultBaseGasCost,
|
|
63
|
+
[Opcode.LT]: DefaultBaseGasCost,
|
|
64
|
+
[Opcode.LTE]: DefaultBaseGasCost,
|
|
65
|
+
[Opcode.AND]: DefaultBaseGasCost,
|
|
66
|
+
[Opcode.OR]: DefaultBaseGasCost,
|
|
67
|
+
[Opcode.XOR]: DefaultBaseGasCost,
|
|
68
|
+
[Opcode.NOT]: DefaultBaseGasCost,
|
|
69
|
+
[Opcode.SHL]: DefaultBaseGasCost,
|
|
70
|
+
[Opcode.SHR]: DefaultBaseGasCost,
|
|
71
|
+
[Opcode.CAST]: DefaultBaseGasCost,
|
|
75
72
|
// Execution environment
|
|
76
|
-
[Opcode.ADDRESS]:
|
|
77
|
-
[Opcode.STORAGEADDRESS]:
|
|
78
|
-
[Opcode.SENDER]:
|
|
79
|
-
[Opcode.FEEPERL2GAS]:
|
|
80
|
-
[Opcode.FEEPERDAGAS]:
|
|
81
|
-
[Opcode.TRANSACTIONFEE]:
|
|
82
|
-
[Opcode.CONTRACTCALLDEPTH]:
|
|
83
|
-
[Opcode.CHAINID]:
|
|
84
|
-
[Opcode.VERSION]:
|
|
85
|
-
[Opcode.BLOCKNUMBER]:
|
|
86
|
-
[Opcode.TIMESTAMP]:
|
|
87
|
-
[Opcode.COINBASE]:
|
|
88
|
-
[Opcode.BLOCKL2GASLIMIT]:
|
|
89
|
-
[Opcode.BLOCKDAGASLIMIT]:
|
|
90
|
-
[Opcode.CALLDATACOPY]:
|
|
73
|
+
[Opcode.ADDRESS]: DefaultBaseGasCost,
|
|
74
|
+
[Opcode.STORAGEADDRESS]: DefaultBaseGasCost,
|
|
75
|
+
[Opcode.SENDER]: DefaultBaseGasCost,
|
|
76
|
+
[Opcode.FEEPERL2GAS]: DefaultBaseGasCost,
|
|
77
|
+
[Opcode.FEEPERDAGAS]: DefaultBaseGasCost,
|
|
78
|
+
[Opcode.TRANSACTIONFEE]: DefaultBaseGasCost,
|
|
79
|
+
[Opcode.CONTRACTCALLDEPTH]: DefaultBaseGasCost,
|
|
80
|
+
[Opcode.CHAINID]: DefaultBaseGasCost,
|
|
81
|
+
[Opcode.VERSION]: DefaultBaseGasCost,
|
|
82
|
+
[Opcode.BLOCKNUMBER]: DefaultBaseGasCost,
|
|
83
|
+
[Opcode.TIMESTAMP]: DefaultBaseGasCost,
|
|
84
|
+
[Opcode.COINBASE]: DefaultBaseGasCost,
|
|
85
|
+
[Opcode.BLOCKL2GASLIMIT]: DefaultBaseGasCost,
|
|
86
|
+
[Opcode.BLOCKDAGASLIMIT]: DefaultBaseGasCost,
|
|
87
|
+
[Opcode.CALLDATACOPY]: DefaultBaseGasCost,
|
|
91
88
|
// Gas
|
|
92
|
-
[Opcode.L2GASLEFT]:
|
|
93
|
-
[Opcode.DAGASLEFT]:
|
|
89
|
+
[Opcode.L2GASLEFT]: DefaultBaseGasCost,
|
|
90
|
+
[Opcode.DAGASLEFT]: DefaultBaseGasCost,
|
|
94
91
|
// Control flow
|
|
95
|
-
[Opcode.JUMP]:
|
|
96
|
-
[Opcode.JUMPI]:
|
|
97
|
-
[Opcode.INTERNALCALL]:
|
|
98
|
-
[Opcode.INTERNALRETURN]:
|
|
92
|
+
[Opcode.JUMP]: DefaultBaseGasCost,
|
|
93
|
+
[Opcode.JUMPI]: DefaultBaseGasCost,
|
|
94
|
+
[Opcode.INTERNALCALL]: DefaultBaseGasCost,
|
|
95
|
+
[Opcode.INTERNALRETURN]: DefaultBaseGasCost,
|
|
99
96
|
// Memory
|
|
100
|
-
[Opcode.SET]:
|
|
101
|
-
[Opcode.MOV]:
|
|
102
|
-
[Opcode.CMOV]:
|
|
97
|
+
[Opcode.SET]: DefaultBaseGasCost,
|
|
98
|
+
[Opcode.MOV]: DefaultBaseGasCost,
|
|
99
|
+
[Opcode.CMOV]: DefaultBaseGasCost,
|
|
103
100
|
// World state
|
|
104
|
-
[Opcode.SLOAD]:
|
|
105
|
-
[Opcode.SSTORE]:
|
|
106
|
-
[Opcode.NOTEHASHEXISTS]:
|
|
107
|
-
[Opcode.EMITNOTEHASH]:
|
|
108
|
-
[Opcode.NULLIFIEREXISTS]:
|
|
109
|
-
[Opcode.EMITNULLIFIER]:
|
|
110
|
-
[Opcode.L1TOL2MSGEXISTS]:
|
|
111
|
-
[Opcode.HEADERMEMBER]:
|
|
112
|
-
[Opcode.EMITUNENCRYPTEDLOG]:
|
|
113
|
-
[Opcode.SENDL2TOL1MSG]:
|
|
114
|
-
[Opcode.GETCONTRACTINSTANCE]:
|
|
101
|
+
[Opcode.SLOAD]: DefaultBaseGasCost,
|
|
102
|
+
[Opcode.SSTORE]: DefaultBaseGasCost,
|
|
103
|
+
[Opcode.NOTEHASHEXISTS]: DefaultBaseGasCost,
|
|
104
|
+
[Opcode.EMITNOTEHASH]: DefaultBaseGasCost,
|
|
105
|
+
[Opcode.NULLIFIEREXISTS]: DefaultBaseGasCost,
|
|
106
|
+
[Opcode.EMITNULLIFIER]: DefaultBaseGasCost,
|
|
107
|
+
[Opcode.L1TOL2MSGEXISTS]: DefaultBaseGasCost,
|
|
108
|
+
[Opcode.HEADERMEMBER]: DefaultBaseGasCost,
|
|
109
|
+
[Opcode.EMITUNENCRYPTEDLOG]: DefaultBaseGasCost,
|
|
110
|
+
[Opcode.SENDL2TOL1MSG]: DefaultBaseGasCost,
|
|
111
|
+
[Opcode.GETCONTRACTINSTANCE]: DefaultBaseGasCost,
|
|
115
112
|
// External calls
|
|
116
|
-
[Opcode.CALL]:
|
|
117
|
-
[Opcode.STATICCALL]:
|
|
118
|
-
[Opcode.DELEGATECALL]:
|
|
119
|
-
[Opcode.RETURN]:
|
|
120
|
-
[Opcode.REVERT]:
|
|
113
|
+
[Opcode.CALL]: DefaultBaseGasCost,
|
|
114
|
+
[Opcode.STATICCALL]: DefaultBaseGasCost,
|
|
115
|
+
[Opcode.DELEGATECALL]: DefaultBaseGasCost,
|
|
116
|
+
[Opcode.RETURN]: DefaultBaseGasCost,
|
|
117
|
+
[Opcode.REVERT]: DefaultBaseGasCost,
|
|
121
118
|
// Misc
|
|
122
|
-
[Opcode.DEBUGLOG]:
|
|
119
|
+
[Opcode.DEBUGLOG]: DefaultBaseGasCost,
|
|
123
120
|
// Gadgets
|
|
124
|
-
[Opcode.KECCAK]:
|
|
125
|
-
[Opcode.POSEIDON2]:
|
|
126
|
-
[Opcode.SHA256]:
|
|
127
|
-
[Opcode.PEDERSEN]:
|
|
121
|
+
[Opcode.KECCAK]: DefaultBaseGasCost,
|
|
122
|
+
[Opcode.POSEIDON2]: DefaultBaseGasCost,
|
|
123
|
+
[Opcode.SHA256]: DefaultBaseGasCost,
|
|
124
|
+
[Opcode.PEDERSEN]: DefaultBaseGasCost,
|
|
128
125
|
// Conversions
|
|
129
|
-
[Opcode.TORADIXLE]:
|
|
126
|
+
[Opcode.TORADIXLE]: DefaultBaseGasCost,
|
|
130
127
|
};
|
|
131
128
|
|
|
132
|
-
/** Returns the fixed base gas cost for a given opcode
|
|
129
|
+
/** Returns the fixed base gas cost for a given opcode. */
|
|
133
130
|
export function getBaseGasCost(opcode: Opcode): Gas {
|
|
134
|
-
|
|
135
|
-
if (cost === DynamicGasCost) {
|
|
136
|
-
throw new Error(`Opcode ${Opcode[opcode]} has dynamic gas cost`);
|
|
137
|
-
}
|
|
138
|
-
return cost;
|
|
131
|
+
return BaseGasCosts[opcode];
|
|
139
132
|
}
|
|
140
133
|
|
|
141
134
|
/** Returns the gas cost associated with the memory operations performed. */
|
package/src/avm/avm_simulator.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
|
|
3
3
|
import { strict as assert } from 'assert';
|
|
4
4
|
|
|
5
|
-
import { isAvmBytecode } from '../public/transitional_adaptors.js';
|
|
5
|
+
import { decompressBytecodeIfCompressed, isAvmBytecode } from '../public/transitional_adaptors.js';
|
|
6
6
|
import type { AvmContext } from './avm_context.js';
|
|
7
7
|
import { AvmContractCallResults } from './avm_message_call_result.js';
|
|
8
8
|
import {
|
|
@@ -17,6 +17,7 @@ import { decodeFromBytecode } from './serialization/bytecode_serialization.js';
|
|
|
17
17
|
|
|
18
18
|
export class AvmSimulator {
|
|
19
19
|
private log: DebugLogger;
|
|
20
|
+
private bytecode: Buffer | undefined;
|
|
20
21
|
|
|
21
22
|
constructor(private context: AvmContext) {
|
|
22
23
|
this.log = createDebugLogger(
|
|
@@ -39,17 +40,27 @@ export class AvmSimulator {
|
|
|
39
40
|
if (!bytecode) {
|
|
40
41
|
throw new NoBytecodeForContractError(this.context.environment.address);
|
|
41
42
|
}
|
|
42
|
-
assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode");
|
|
43
43
|
|
|
44
44
|
return await this.executeBytecode(bytecode);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Return the bytecode used for execution, if any.
|
|
49
|
+
*/
|
|
50
|
+
public getBytecode(): Buffer | undefined {
|
|
51
|
+
return this.bytecode;
|
|
52
|
+
}
|
|
53
|
+
|
|
47
54
|
/**
|
|
48
55
|
* Executes the provided bytecode in the current context.
|
|
49
56
|
* This method is useful for testing and debugging.
|
|
50
57
|
*/
|
|
51
58
|
public async executeBytecode(bytecode: Buffer): Promise<AvmContractCallResults> {
|
|
52
|
-
|
|
59
|
+
const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
|
|
60
|
+
assert(isAvmBytecode(decompressedBytecode), "AVM simulator can't execute non-AVM bytecode");
|
|
61
|
+
|
|
62
|
+
this.bytecode = decompressedBytecode;
|
|
63
|
+
return await this.executeInstructions(decodeFromBytecode(decompressedBytecode));
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
/**
|
package/src/avm/errors.ts
CHANGED
|
@@ -68,6 +68,16 @@ export class OutOfGasError extends AvmExecutionError {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Error is thrown when a static call attempts to alter some state
|
|
73
|
+
*/
|
|
74
|
+
export class StaticCallAlterationError extends InstructionExecutionError {
|
|
75
|
+
constructor() {
|
|
76
|
+
super('Static call cannot update the state, emit L2->L1 messages or generate logs');
|
|
77
|
+
this.name = 'StaticCallAlterationError';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
71
81
|
/**
|
|
72
82
|
* Error thrown to propagate a nested call's revert.
|
|
73
83
|
* @param message - the error's message
|
|
@@ -3,7 +3,9 @@ import { FunctionSelector } from '@aztec/foundation/abi';
|
|
|
3
3
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
5
|
import { Fr } from '@aztec/foundation/fields';
|
|
6
|
+
import { AvmNestedCallsTestContractArtifact, AvmTestContractArtifact } from '@aztec/noir-contracts.js';
|
|
6
7
|
|
|
8
|
+
import { strict as assert } from 'assert';
|
|
7
9
|
import { mock } from 'jest-mock-extended';
|
|
8
10
|
import merge from 'lodash.merge';
|
|
9
11
|
|
|
@@ -90,8 +92,8 @@ export function initGlobalVariables(overrides?: Partial<GlobalVariables>): Globa
|
|
|
90
92
|
*/
|
|
91
93
|
export function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState {
|
|
92
94
|
return AvmMachineState.fromState({
|
|
93
|
-
l2GasLeft: overrides?.l2GasLeft ??
|
|
94
|
-
daGasLeft: overrides?.daGasLeft ??
|
|
95
|
+
l2GasLeft: overrides?.l2GasLeft ?? 1e8,
|
|
96
|
+
daGasLeft: overrides?.daGasLeft ?? 1e8,
|
|
95
97
|
});
|
|
96
98
|
}
|
|
97
99
|
|
|
@@ -125,3 +127,21 @@ export function randomMemoryBytes(length: number): Uint8[] {
|
|
|
125
127
|
export function randomMemoryFields(length: number): Field[] {
|
|
126
128
|
return [...Array(length)].map(_ => new Field(Fr.random()));
|
|
127
129
|
}
|
|
130
|
+
|
|
131
|
+
export function getAvmTestContractBytecode(functionName: string): Buffer {
|
|
132
|
+
const artifact = AvmTestContractArtifact.functions.find(f => f.name === functionName)!;
|
|
133
|
+
assert(
|
|
134
|
+
!!artifact?.bytecode,
|
|
135
|
+
`No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
|
|
136
|
+
);
|
|
137
|
+
return artifact.bytecode;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function getAvmNestedCallsTestContractBytecode(functionName: string): Buffer {
|
|
141
|
+
const artifact = AvmNestedCallsTestContractArtifact.functions.find(f => f.name === functionName)!;
|
|
142
|
+
assert(
|
|
143
|
+
!!artifact?.bytecode,
|
|
144
|
+
`No bytecode found for function ${functionName}. Try re-running bootstrap.sh on the repository root.`,
|
|
145
|
+
);
|
|
146
|
+
return artifact.bytecode;
|
|
147
|
+
}
|
package/src/avm/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './avm_simulator.js';
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
ContractStorageUpdateRequest,
|
|
7
7
|
EthAddress,
|
|
8
8
|
L2ToL1Message,
|
|
9
|
+
LogHash,
|
|
9
10
|
NoteHash,
|
|
10
11
|
Nullifier,
|
|
11
12
|
ReadRequest,
|
|
12
|
-
SideEffect,
|
|
13
13
|
} from '@aztec/circuits.js';
|
|
14
14
|
import { EventSelector } from '@aztec/foundation/abi';
|
|
15
15
|
import { Fr } from '@aztec/foundation/fields';
|
|
@@ -56,17 +56,18 @@ export type JournalData = {
|
|
|
56
56
|
|
|
57
57
|
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
58
58
|
type PartialPublicExecutionResult = {
|
|
59
|
+
noteHashReadRequests: ReadRequest[];
|
|
59
60
|
nullifierReadRequests: ReadRequest[];
|
|
60
61
|
nullifierNonExistentReadRequests: ReadRequest[];
|
|
62
|
+
l1ToL2MsgReadRequests: ReadRequest[];
|
|
61
63
|
newNoteHashes: NoteHash[];
|
|
62
64
|
newL2ToL1Messages: L2ToL1Message[];
|
|
63
65
|
startSideEffectCounter: number;
|
|
64
66
|
newNullifiers: Nullifier[];
|
|
65
67
|
contractStorageReads: ContractStorageRead[];
|
|
66
68
|
contractStorageUpdateRequests: ContractStorageUpdateRequest[];
|
|
67
|
-
unencryptedLogsHashes:
|
|
69
|
+
unencryptedLogsHashes: LogHash[];
|
|
68
70
|
unencryptedLogs: UnencryptedL2Log[];
|
|
69
|
-
unencryptedLogPreimagesLength: Fr;
|
|
70
71
|
allUnencryptedLogs: UnencryptedL2Log[];
|
|
71
72
|
nestedExecutions: PublicExecutionResult[];
|
|
72
73
|
};
|
|
@@ -109,8 +110,10 @@ export class AvmPersistableStateManager {
|
|
|
109
110
|
this.trace = new WorldStateAccessTrace(parent?.trace);
|
|
110
111
|
|
|
111
112
|
this.transitionalExecutionResult = {
|
|
113
|
+
noteHashReadRequests: [],
|
|
112
114
|
nullifierReadRequests: [],
|
|
113
115
|
nullifierNonExistentReadRequests: [],
|
|
116
|
+
l1ToL2MsgReadRequests: [],
|
|
114
117
|
newNoteHashes: [],
|
|
115
118
|
newL2ToL1Messages: [],
|
|
116
119
|
startSideEffectCounter: this.trace.accessCounter,
|
|
@@ -119,8 +122,6 @@ export class AvmPersistableStateManager {
|
|
|
119
122
|
contractStorageUpdateRequests: [],
|
|
120
123
|
unencryptedLogsHashes: [],
|
|
121
124
|
unencryptedLogs: [],
|
|
122
|
-
// The length starts at 4 because it will always include the size.
|
|
123
|
-
unencryptedLogPreimagesLength: new Fr(4),
|
|
124
125
|
allUnencryptedLogs: [],
|
|
125
126
|
nestedExecutions: [],
|
|
126
127
|
};
|
|
@@ -141,7 +142,7 @@ export class AvmPersistableStateManager {
|
|
|
141
142
|
* @param value - the value being written to the slot
|
|
142
143
|
*/
|
|
143
144
|
public writeStorage(storageAddress: Fr, slot: Fr, value: Fr) {
|
|
144
|
-
this.log.debug(`
|
|
145
|
+
this.log.debug(`Storage write (address=${storageAddress}, slot=${slot}): value=${value}`);
|
|
145
146
|
// Cache storage writes for later reference/reads
|
|
146
147
|
this.publicStorage.write(storageAddress, slot, value);
|
|
147
148
|
|
|
@@ -172,7 +173,9 @@ export class AvmPersistableStateManager {
|
|
|
172
173
|
*/
|
|
173
174
|
public async readStorage(storageAddress: Fr, slot: Fr): Promise<Fr> {
|
|
174
175
|
const { value, exists, cached } = await this.publicStorage.read(storageAddress, slot);
|
|
175
|
-
this.log.debug(
|
|
176
|
+
this.log.debug(
|
|
177
|
+
`Storage read (address=${storageAddress}, slot=${slot}): value=${value}, exists=${exists}, cached=${cached}`,
|
|
178
|
+
);
|
|
176
179
|
|
|
177
180
|
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
178
181
|
// The current info to the kernel kernel does not consider cached reads.
|
|
@@ -253,7 +256,9 @@ export class AvmPersistableStateManager {
|
|
|
253
256
|
*/
|
|
254
257
|
public async writeNullifier(storageAddress: Fr, nullifier: Fr) {
|
|
255
258
|
// TRANSITIONAL: This should be removed once the kernel handles and entire enqueued call per circuit
|
|
256
|
-
this.transitionalExecutionResult.newNullifiers.push(
|
|
259
|
+
this.transitionalExecutionResult.newNullifiers.push(
|
|
260
|
+
new Nullifier(nullifier, this.trace.accessCounter, /*noteHash=*/ Fr.ZERO),
|
|
261
|
+
);
|
|
257
262
|
|
|
258
263
|
this.log.debug(`nullifiers(${storageAddress}) += ${nullifier}.`);
|
|
259
264
|
// Cache pending nullifiers for later access
|
|
@@ -307,12 +312,8 @@ export class AvmPersistableStateManager {
|
|
|
307
312
|
this.transitionalExecutionResult.allUnencryptedLogs.push(ulog);
|
|
308
313
|
// this duplicates exactly what happens in the trace just for the purpose of transitional integration with the kernel
|
|
309
314
|
this.transitionalExecutionResult.unencryptedLogsHashes.push(
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
// Duplicates computation performed in public_context.nr::emit_unencrypted_log
|
|
313
|
-
// 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4).
|
|
314
|
-
this.transitionalExecutionResult.unencryptedLogPreimagesLength = new Fr(
|
|
315
|
-
this.transitionalExecutionResult.unencryptedLogPreimagesLength.toNumber() + 44 + log.length * Fr.SIZE_IN_BYTES,
|
|
315
|
+
// TODO(6578): explain magic number 4 here
|
|
316
|
+
new LogHash(logHash, this.trace.accessCounter, new Fr(ulog.length + 4)),
|
|
316
317
|
);
|
|
317
318
|
// TODO(6206): likely need to track this here and not just in the transitional logic.
|
|
318
319
|
|