@aztec/simulator 0.81.0 → 0.82.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/common/db_interfaces.d.ts +6 -12
- package/dest/common/db_interfaces.d.ts.map +1 -1
- package/dest/common/db_interfaces.js +1 -1
- package/dest/common/message_load_oracle_inputs.d.ts +4 -0
- package/dest/common/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/common/message_load_oracle_inputs.js +9 -0
- package/dest/private/acvm/acvm.d.ts +6 -1
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +7 -13
- package/dest/private/acvm/deserialize.d.ts +0 -18
- package/dest/private/acvm/deserialize.d.ts.map +1 -1
- package/dest/private/acvm/deserialize.js +3 -24
- package/dest/private/acvm/oracle/oracle.d.ts +34 -34
- package/dest/private/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/private/acvm/oracle/oracle.js +119 -79
- package/dest/private/acvm/oracle/typed_oracle.d.ts +1 -1
- package/dest/private/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/private/acvm/oracle/typed_oracle.js +2 -2
- package/dest/private/execution_data_provider.d.ts +3 -9
- package/dest/private/execution_data_provider.d.ts.map +1 -1
- package/dest/private/private_execution.d.ts +2 -2
- package/dest/private/private_execution.d.ts.map +1 -1
- package/dest/private/private_execution.js +4 -5
- package/dest/private/providers/acvm_native.d.ts +6 -4
- package/dest/private/providers/acvm_native.d.ts.map +1 -1
- package/dest/private/providers/acvm_native.js +6 -3
- package/dest/private/providers/acvm_wasm.d.ts +6 -7
- package/dest/private/providers/acvm_wasm.d.ts.map +1 -1
- package/dest/private/providers/acvm_wasm.js +13 -15
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts +5 -5
- package/dest/private/providers/acvm_wasm_with_blobs.d.ts.map +1 -1
- package/dest/private/providers/acvm_wasm_with_blobs.js +7 -9
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts +90 -0
- package/dest/private/providers/circuit_recording/circuit_recorder.d.ts.map +1 -0
- package/dest/private/providers/circuit_recording/circuit_recorder.js +246 -0
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts +18 -0
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.d.ts.map +1 -0
- package/dest/private/providers/circuit_recording/simulation_provider_recorder_wrapper.js +39 -0
- package/dest/private/providers/simulation_provider.d.ts +21 -7
- package/dest/private/providers/simulation_provider.d.ts.map +1 -1
- package/dest/private/simulator.d.ts +3 -2
- package/dest/private/simulator.d.ts.map +1 -1
- package/dest/private/simulator.js +2 -2
- package/dest/private/unconstrained_execution.d.ts +2 -2
- package/dest/private/unconstrained_execution.d.ts.map +1 -1
- package/dest/private/unconstrained_execution.js +1 -2
- package/dest/private/unconstrained_execution_oracle.d.ts +1 -1
- package/dest/private/unconstrained_execution_oracle.d.ts.map +1 -1
- package/dest/private/unconstrained_execution_oracle.js +3 -3
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +0 -2
- package/dest/public/avm/journal/journal.js +1 -1
- package/dest/public/avm/test_utils.js +1 -1
- package/dest/public/public_db_sources.d.ts +1 -1
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +3 -3
- package/dest/testing.d.ts +2 -0
- package/dest/testing.d.ts.map +1 -0
- package/dest/testing.js +1 -0
- package/package.json +15 -14
- package/src/common/db_interfaces.ts +6 -13
- package/src/common/message_load_oracle_inputs.ts +8 -0
- package/src/private/acvm/acvm.ts +8 -24
- package/src/private/acvm/deserialize.ts +3 -30
- package/src/private/acvm/oracle/oracle.ts +144 -136
- package/src/private/acvm/oracle/typed_oracle.ts +2 -2
- package/src/private/execution_data_provider.ts +6 -10
- package/src/private/private_execution.ts +11 -7
- package/src/private/providers/acvm_native.ts +17 -6
- package/src/private/providers/acvm_wasm.ts +27 -20
- package/src/private/providers/acvm_wasm_with_blobs.ts +15 -12
- package/src/private/providers/circuit_recording/circuit_recorder.ts +283 -0
- package/src/private/providers/circuit_recording/simulation_provider_recorder_wrapper.ts +82 -0
- package/src/private/providers/simulation_provider.ts +30 -5
- package/src/private/simulator.ts +5 -3
- package/src/private/unconstrained_execution.ts +8 -4
- package/src/private/unconstrained_execution_oracle.ts +3 -6
- package/src/public/avm/avm_simulator.ts +0 -2
- package/src/public/avm/journal/journal.ts +1 -1
- package/src/public/avm/test_utils.ts +1 -1
- package/src/public/public_db_sources.ts +3 -3
- package/src/testing.ts +1 -0
- package/dest/public/avm/bytecode_utils.d.ts +0 -5
- package/dest/public/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/public/avm/bytecode_utils.js +0 -17
- package/src/public/avm/bytecode_utils.ts +0 -17
|
@@ -103,11 +103,11 @@ export class UnconstrainedExecutionOracle extends TypedOracle {
|
|
|
103
103
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
104
104
|
* @returns - The witness
|
|
105
105
|
*/
|
|
106
|
-
public override async
|
|
106
|
+
public override async getPublicDataWitness(
|
|
107
107
|
blockNumber: number,
|
|
108
108
|
leafSlot: Fr,
|
|
109
109
|
): Promise<PublicDataWitness | undefined> {
|
|
110
|
-
return await this.executionDataProvider.
|
|
110
|
+
return await this.executionDataProvider.getPublicDataWitness(blockNumber, leafSlot);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
@@ -149,10 +149,7 @@ export class UnconstrainedExecutionOracle extends TypedOracle {
|
|
|
149
149
|
* @returns Authentication witness for the requested message hash.
|
|
150
150
|
*/
|
|
151
151
|
public override getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined> {
|
|
152
|
-
return Promise.resolve(
|
|
153
|
-
this.authWitnesses.find(w => w.requestHash.equals(messageHash))?.witness ??
|
|
154
|
-
this.executionDataProvider.getAuthWitness(messageHash),
|
|
155
|
-
);
|
|
152
|
+
return Promise.resolve(this.authWitnesses.find(w => w.requestHash.equals(messageHash))?.witness);
|
|
156
153
|
}
|
|
157
154
|
|
|
158
155
|
/**
|
|
@@ -12,7 +12,6 @@ import { AvmContractCallResult } from './avm_contract_call_result.js';
|
|
|
12
12
|
import { AvmExecutionEnvironment } from './avm_execution_environment.js';
|
|
13
13
|
import type { Gas } from './avm_gas.js';
|
|
14
14
|
import { AvmMachineState } from './avm_machine_state.js';
|
|
15
|
-
import { isAvmBytecode } from './bytecode_utils.js';
|
|
16
15
|
import {
|
|
17
16
|
AvmExecutionError,
|
|
18
17
|
AvmRevertReason,
|
|
@@ -139,7 +138,6 @@ export class AvmSimulator {
|
|
|
139
138
|
*/
|
|
140
139
|
public async executeBytecode(bytecode: Buffer): Promise<AvmContractCallResult> {
|
|
141
140
|
const startTotalTime = performance.now();
|
|
142
|
-
assert(isAvmBytecode(bytecode), "AVM simulator can't execute non-AVM bytecode");
|
|
143
141
|
assert(bytecode.length > 0, "AVM simulator can't execute empty bytecode");
|
|
144
142
|
|
|
145
143
|
this.bytecode = bytecode;
|
|
@@ -194,7 +194,7 @@ export class AvmPersistableStateManager {
|
|
|
194
194
|
* @returns true if the note hash exists at the given leaf index, false otherwise
|
|
195
195
|
*/
|
|
196
196
|
public async checkNoteHashExists(contractAddress: AztecAddress, noteHash: Fr, leafIndex: Fr): Promise<boolean> {
|
|
197
|
-
const gotLeafValue = (await this.treesDB.
|
|
197
|
+
const gotLeafValue = (await this.treesDB.getNoteHash(leafIndex.toBigInt())) ?? Fr.ZERO;
|
|
198
198
|
const exists = gotLeafValue.equals(noteHash);
|
|
199
199
|
this.log.trace(
|
|
200
200
|
`noteHashes(${contractAddress})@${noteHash} ?? leafIndex: ${leafIndex} | gotLeafValue: ${gotLeafValue}, exists: ${exists}.`,
|
|
@@ -28,7 +28,7 @@ export function mockStorageReadWithMap(worldStateDB: PublicTreesDB, mockedStorag
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export function mockNoteHashExists(worldStateDB: PublicTreesDB, _leafIndex: Fr, value?: Fr) {
|
|
31
|
-
(worldStateDB as jest.Mocked<PublicTreesDB>).
|
|
31
|
+
(worldStateDB as jest.Mocked<PublicTreesDB>).getNoteHash.mockImplementation((index: bigint) => {
|
|
32
32
|
if (index == _leafIndex.toBigInt()) {
|
|
33
33
|
return Promise.resolve(value);
|
|
34
34
|
} else {
|
|
@@ -431,13 +431,13 @@ export class PublicTreesDB extends ForwardMerkleTree implements PublicStateDBInt
|
|
|
431
431
|
return leafValue;
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
-
public async
|
|
434
|
+
public async getNoteHash(leafIndex: bigint): Promise<Fr | undefined> {
|
|
435
435
|
const timer = new Timer();
|
|
436
436
|
const leafValue = await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE, leafIndex);
|
|
437
|
-
this.logger.debug(`[DB] Fetched
|
|
437
|
+
this.logger.debug(`[DB] Fetched note hash leaf value`, {
|
|
438
438
|
eventName: 'public-db-access',
|
|
439
439
|
duration: timer.ms(),
|
|
440
|
-
operation: 'get-
|
|
440
|
+
operation: 'get-note-hash',
|
|
441
441
|
} satisfies PublicDBAccessStats);
|
|
442
442
|
return leafValue;
|
|
443
443
|
}
|
package/src/testing.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SimulationProviderRecorderWrapper } from './private/providers/circuit_recording/simulation_provider_recorder_wrapper.js';
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
export declare function markBytecodeAsAvm(bytecode: Buffer): Buffer;
|
|
4
|
-
export declare function isAvmBytecode(bytecode: Buffer): boolean;
|
|
5
|
-
//# sourceMappingURL=bytecode_utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bytecode_utils.d.ts","sourceRoot":"","sources":["../../../src/public/avm/bytecode_utils.ts"],"names":[],"mappings":";;AASA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Opcode } from './serialization/instruction_serialization.js';
|
|
2
|
-
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
3
|
-
Opcode.MOV_16,
|
|
4
|
-
0x00,
|
|
5
|
-
...Buffer.from('18ca', 'hex'),
|
|
6
|
-
...Buffer.from('18ca', 'hex')
|
|
7
|
-
]);
|
|
8
|
-
export function markBytecodeAsAvm(bytecode) {
|
|
9
|
-
return Buffer.concat([
|
|
10
|
-
bytecode,
|
|
11
|
-
AVM_MAGIC_SUFFIX
|
|
12
|
-
]);
|
|
13
|
-
}
|
|
14
|
-
export function isAvmBytecode(bytecode) {
|
|
15
|
-
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
16
|
-
return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
17
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Opcode } from './serialization/instruction_serialization.js';
|
|
2
|
-
|
|
3
|
-
const AVM_MAGIC_SUFFIX = Buffer.from([
|
|
4
|
-
Opcode.MOV_16, // opcode
|
|
5
|
-
0x00, // indirect
|
|
6
|
-
...Buffer.from('18ca', 'hex'), // srcOffset
|
|
7
|
-
...Buffer.from('18ca', 'hex'), // dstOffset
|
|
8
|
-
]);
|
|
9
|
-
|
|
10
|
-
export function markBytecodeAsAvm(bytecode: Buffer): Buffer {
|
|
11
|
-
return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function isAvmBytecode(bytecode: Buffer): boolean {
|
|
15
|
-
const magicSize = AVM_MAGIC_SUFFIX.length;
|
|
16
|
-
return bytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
|
|
17
|
-
}
|