@aztec/simulator 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263
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 +2 -0
- package/dest/common/errors.d.ts +7 -1
- package/dest/common/errors.d.ts.map +1 -1
- package/dest/private/acvm/acvm.d.ts +4 -2
- package/dest/private/acvm/acvm.d.ts.map +1 -1
- package/dest/private/acvm/acvm.js +4 -3
- package/dest/private/acvm_native.d.ts +5 -3
- package/dest/private/acvm_native.d.ts.map +1 -1
- package/dest/private/acvm_native.js +8 -6
- package/dest/private/acvm_wasm.d.ts +4 -3
- package/dest/private/acvm_wasm.d.ts.map +1 -1
- package/dest/private/acvm_wasm.js +4 -4
- package/dest/private/circuit_recording/circuit_recorder.d.ts +4 -3
- package/dest/private/circuit_recording/circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/circuit_recorder.js +20 -17
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts +3 -2
- package/dest/private/circuit_recording/file_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/file_circuit_recorder.js +2 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts +7 -2
- package/dest/private/circuit_recording/memory_circuit_recorder.d.ts.map +1 -1
- package/dest/private/circuit_recording/memory_circuit_recorder.js +4 -4
- package/dest/private/factory.d.ts +3 -3
- package/dest/private/factory.d.ts.map +1 -1
- package/dest/private/factory.js +7 -4
- package/dest/public/avm/avm_context.d.ts +3 -3
- package/dest/public/avm/avm_context.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.d.ts +6 -6
- package/dest/public/avm/avm_contract_call_result.d.ts.map +1 -1
- package/dest/public/avm/avm_contract_call_result.js +3 -3
- package/dest/public/avm/avm_execution_environment.d.ts +6 -5
- package/dest/public/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.d.ts +6 -5
- package/dest/public/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/public/avm/avm_machine_state.js +3 -2
- package/dest/public/avm/avm_memory_types.d.ts +1 -1
- package/dest/public/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/public/avm/avm_memory_types.js +3 -0
- package/dest/public/avm/avm_simulator.d.ts +3 -2
- package/dest/public/avm/avm_simulator.d.ts.map +1 -1
- package/dest/public/avm/avm_simulator.js +5 -4
- package/dest/public/avm/calldata.d.ts +51 -0
- package/dest/public/avm/calldata.d.ts.map +1 -0
- package/dest/public/avm/calldata.js +63 -0
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.d.ts.map +1 -1
- package/dest/public/avm/fixtures/avm_simulation_tester.js +3 -2
- package/dest/public/avm/fixtures/initializers.d.ts +1 -1
- package/dest/public/avm/fixtures/initializers.d.ts.map +1 -1
- package/dest/public/avm/fixtures/initializers.js +2 -1
- package/dest/public/avm/opcodes/accrued_substate.d.ts +16 -17
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +39 -39
- package/dest/public/avm/opcodes/arithmetic.d.ts +8 -8
- 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 +7 -7
- package/dest/public/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/public/avm/opcodes/bitwise.js +5 -5
- package/dest/public/avm/opcodes/comparators.d.ts +4 -4
- 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 +3 -3
- package/dest/public/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/public/avm/opcodes/contract.js +8 -8
- package/dest/public/avm/opcodes/control_flow.d.ts +3 -3
- package/dest/public/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/public/avm/opcodes/control_flow.js +4 -4
- package/dest/public/avm/opcodes/conversion.d.ts +3 -3
- package/dest/public/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/public/avm/opcodes/conversion.js +4 -4
- package/dest/public/avm/opcodes/ec_add.d.ts +4 -4
- package/dest/public/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/public/avm/opcodes/ec_add.js +15 -6
- package/dest/public/avm/opcodes/environment_getters.d.ts +5 -5
- package/dest/public/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/public/avm/opcodes/environment_getters.js +6 -6
- package/dest/public/avm/opcodes/external_calls.d.ts +9 -9
- package/dest/public/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/public/avm/opcodes/external_calls.js +23 -22
- package/dest/public/avm/opcodes/hashing.d.ts +8 -8
- package/dest/public/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/public/avm/opcodes/hashing.js +12 -12
- package/dest/public/avm/opcodes/instruction_impl.d.ts +4 -4
- package/dest/public/avm/opcodes/instruction_impl.d.ts.map +1 -1
- package/dest/public/avm/opcodes/instruction_impl.js +4 -4
- package/dest/public/avm/opcodes/memory.d.ts +14 -14
- package/dest/public/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/public/avm/opcodes/memory.js +25 -25
- package/dest/public/avm/opcodes/misc.d.ts +3 -3
- package/dest/public/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/public/avm/opcodes/misc.js +4 -4
- package/dest/public/avm/opcodes/storage.d.ts +16 -15
- package/dest/public/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/public/avm/opcodes/storage.js +34 -24
- package/dest/public/debug_fn_name.d.ts +4 -4
- package/dest/public/debug_fn_name.d.ts.map +1 -1
- package/dest/public/debug_fn_name.js +7 -5
- package/dest/public/executor_metrics.d.ts +1 -1
- package/dest/public/executor_metrics.d.ts.map +1 -1
- package/dest/public/executor_metrics.js +12 -33
- package/dest/public/fixtures/bulk_test.d.ts +3 -3
- package/dest/public/fixtures/bulk_test.d.ts.map +1 -1
- package/dest/public/fixtures/bulk_test.js +1 -17
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -11
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +18 -18
- package/dest/public/fixtures/minimal_public_tx.js +2 -2
- package/dest/public/fixtures/opcode_spammer.d.ts +3 -4
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -1
- package/dest/public/fixtures/opcode_spammer.js +95 -123
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts +21 -7
- package/dest/public/fuzzing/avm_fuzzer_simulator.d.ts.map +1 -1
- package/dest/public/fuzzing/avm_fuzzer_simulator.js +42 -10
- package/dest/public/fuzzing/avm_simulator_bin.js +29 -11
- package/dest/public/hinting_db_sources.js +3 -1
- package/dest/public/public_db_sources.d.ts +4 -3
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/public_db_sources.js +4 -4
- package/dest/public/public_processor/guarded_merkle_tree.js +3 -1
- package/dest/public/public_processor/public_processor.d.ts +6 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +410 -26
- package/dest/public/public_processor/public_processor_metrics.d.ts +2 -2
- package/dest/public/public_processor/public_processor_metrics.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor_metrics.js +28 -45
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts +3 -2
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/contract_provider_for_cpp.js +2 -2
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +5 -5
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.js +10 -9
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts +4 -4
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.js +5 -5
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts +4 -4
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.js +6 -6
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts +3 -2
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/dumping_cpp_public_tx_simulator.js +2 -2
- package/dest/public/public_tx_simulator/factories.d.ts +3 -2
- package/dest/public/public_tx_simulator/factories.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/factories.js +3 -3
- package/dest/public/public_tx_simulator/measured_public_tx_simulator.d.ts +1 -1
- package/dest/public/public_tx_simulator/public_tx_context.d.ts +4 -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 +8 -8
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts +6 -4
- package/dest/public/public_tx_simulator/public_tx_simulator.d.ts.map +1 -1
- package/dest/public/public_tx_simulator/public_tx_simulator.js +12 -7
- package/dest/public/public_tx_simulator/telemetry_public_tx_simulator.js +395 -19
- package/dest/public/side_effect_trace.d.ts +5 -4
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +3 -3
- package/dest/public/state_manager/state_manager.d.ts +10 -4
- package/dest/public/state_manager/state_manager.d.ts.map +1 -1
- package/dest/public/state_manager/state_manager.js +14 -7
- package/dest/public/test_executor_metrics.d.ts +3 -2
- package/dest/public/test_executor_metrics.d.ts.map +1 -1
- package/dest/public/test_executor_metrics.js +2 -2
- package/package.json +17 -17
- package/src/private/acvm/acvm.ts +4 -3
- package/src/private/acvm_native.ts +11 -5
- package/src/private/acvm_wasm.ts +7 -3
- package/src/private/circuit_recording/circuit_recorder.ts +21 -18
- package/src/private/circuit_recording/file_circuit_recorder.ts +7 -2
- package/src/private/circuit_recording/memory_circuit_recorder.ts +6 -4
- package/src/private/factory.ts +7 -4
- package/src/public/avm/avm_context.ts +2 -2
- package/src/public/avm/avm_contract_call_result.ts +8 -6
- package/src/public/avm/avm_execution_environment.ts +9 -4
- package/src/public/avm/avm_machine_state.ts +6 -5
- package/src/public/avm/avm_memory_types.ts +4 -0
- package/src/public/avm/avm_simulator.ts +8 -5
- package/src/public/avm/calldata.ts +100 -0
- package/src/public/avm/fixtures/avm_simulation_tester.ts +8 -2
- package/src/public/avm/fixtures/initializers.ts +2 -1
- package/src/public/avm/opcodes/accrued_substate.ts +28 -30
- package/src/public/avm/opcodes/arithmetic.ts +1 -1
- package/src/public/avm/opcodes/bitwise.ts +3 -3
- package/src/public/avm/opcodes/comparators.ts +1 -1
- package/src/public/avm/opcodes/contract.ts +4 -7
- package/src/public/avm/opcodes/control_flow.ts +2 -2
- package/src/public/avm/opcodes/conversion.ts +3 -3
- package/src/public/avm/opcodes/ec_add.ts +13 -4
- package/src/public/avm/opcodes/environment_getters.ts +7 -7
- package/src/public/avm/opcodes/external_calls.ts +17 -15
- package/src/public/avm/opcodes/hashing.ts +6 -6
- package/src/public/avm/opcodes/instruction_impl.ts +2 -2
- package/src/public/avm/opcodes/memory.ts +19 -19
- package/src/public/avm/opcodes/misc.ts +2 -2
- package/src/public/avm/opcodes/storage.ts +30 -22
- package/src/public/debug_fn_name.ts +10 -8
- package/src/public/executor_metrics.ts +9 -33
- package/src/public/fixtures/bulk_test.ts +2 -2
- package/src/public/fixtures/custom_bytecode_tests.ts +27 -18
- package/src/public/fixtures/minimal_public_tx.ts +2 -2
- package/src/public/fixtures/opcode_spammer.ts +196 -113
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +60 -12
- package/src/public/fuzzing/avm_simulator_bin.ts +43 -8
- package/src/public/public_db_sources.ts +15 -5
- package/src/public/public_processor/public_processor.ts +21 -7
- package/src/public/public_processor/public_processor_metrics.ts +16 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +6 -3
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +18 -7
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +6 -4
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +7 -5
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +3 -1
- package/src/public/public_tx_simulator/factories.ts +4 -2
- package/src/public/public_tx_simulator/public_tx_context.ts +13 -6
- package/src/public/public_tx_simulator/public_tx_simulator.ts +18 -7
- package/src/public/side_effect_trace.ts +5 -2
- package/src/public/state_manager/state_manager.ts +29 -20
- package/src/public/test_executor_metrics.ts +3 -3
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
MAX_NOTE_HASHES_PER_TX,
|
|
5
5
|
MAX_NULLIFIERS_PER_TX,
|
|
6
6
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
7
|
+
MAX_PROTOCOL_CONTRACTS,
|
|
7
8
|
} from '@aztec/constants';
|
|
8
9
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
9
10
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -19,8 +20,17 @@ import {
|
|
|
19
20
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
20
21
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
21
22
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
22
|
-
import type
|
|
23
|
-
import {
|
|
23
|
+
import { MerkleTreeId, type MerkleTreeWriteOperations, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
24
|
+
import {
|
|
25
|
+
BlockHeader,
|
|
26
|
+
GlobalVariables,
|
|
27
|
+
HashedValues,
|
|
28
|
+
ProtocolContracts,
|
|
29
|
+
Tx,
|
|
30
|
+
TxConstantData,
|
|
31
|
+
TxContext,
|
|
32
|
+
TxHash,
|
|
33
|
+
} from '@aztec/stdlib/tx';
|
|
24
34
|
import type { NativeWorldStateService } from '@aztec/world-state';
|
|
25
35
|
|
|
26
36
|
import { BaseAvmSimulationTester } from '../avm/fixtures/base_avm_simulation_tester.js';
|
|
@@ -40,6 +50,9 @@ export class FuzzerSimulationRequest {
|
|
|
40
50
|
public readonly globals: GlobalVariables,
|
|
41
51
|
public readonly contractClasses: any[], // Raw, processed by addContractClassFromCpp
|
|
42
52
|
public readonly contractInstances: [any, any][], // Raw pairs [address, instance]
|
|
53
|
+
public readonly publicDataWrites: any[], // Raw public data tree writes to apply before simulation
|
|
54
|
+
public readonly noteHashes: any[], // Raw note hashes to apply before simulation
|
|
55
|
+
public readonly protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
|
|
43
56
|
) {}
|
|
44
57
|
|
|
45
58
|
static fromPlainObject(obj: any): FuzzerSimulationRequest {
|
|
@@ -53,6 +66,9 @@ export class FuzzerSimulationRequest {
|
|
|
53
66
|
GlobalVariables.fromPlainObject(obj.globals),
|
|
54
67
|
obj.contractClasses,
|
|
55
68
|
obj.contractInstances,
|
|
69
|
+
obj.publicDataWrites ?? [],
|
|
70
|
+
obj.noteHashes ?? [],
|
|
71
|
+
ProtocolContracts.fromPlainObject(obj.protocolContracts),
|
|
56
72
|
);
|
|
57
73
|
}
|
|
58
74
|
}
|
|
@@ -181,16 +197,23 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
181
197
|
merkleTrees: MerkleTreeWriteOperations,
|
|
182
198
|
contractDataSource: SimpleContractDataSource,
|
|
183
199
|
globals: GlobalVariables,
|
|
200
|
+
protocolContracts: ProtocolContracts,
|
|
184
201
|
) {
|
|
185
202
|
super(contractDataSource, merkleTrees);
|
|
186
203
|
const contractsDb = new PublicContractsDB(contractDataSource);
|
|
187
|
-
this.simulator = new PublicTxSimulator(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
204
|
+
this.simulator = new PublicTxSimulator(
|
|
205
|
+
merkleTrees,
|
|
206
|
+
contractsDb,
|
|
207
|
+
globals,
|
|
208
|
+
{
|
|
209
|
+
skipFeeEnforcement: false,
|
|
210
|
+
collectDebugLogs: false,
|
|
211
|
+
collectHints: false,
|
|
212
|
+
collectStatistics: false,
|
|
213
|
+
collectCallMetadata: false,
|
|
214
|
+
},
|
|
215
|
+
protocolContracts,
|
|
216
|
+
);
|
|
194
217
|
}
|
|
195
218
|
|
|
196
219
|
/**
|
|
@@ -199,10 +222,11 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
199
222
|
public static async create(
|
|
200
223
|
worldStateService: NativeWorldStateService,
|
|
201
224
|
globals: GlobalVariables,
|
|
225
|
+
protocolContracts: ProtocolContracts,
|
|
202
226
|
): Promise<AvmFuzzerSimulator> {
|
|
203
227
|
const contractDataSource = new SimpleContractDataSource();
|
|
204
228
|
const merkleTrees = await worldStateService.fork();
|
|
205
|
-
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals);
|
|
229
|
+
return new AvmFuzzerSimulator(merkleTrees, contractDataSource, globals, protocolContracts);
|
|
206
230
|
}
|
|
207
231
|
|
|
208
232
|
/**
|
|
@@ -230,11 +254,35 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
230
254
|
|
|
231
255
|
/**
|
|
232
256
|
* Add a contract instance from C++ raw msgpack data.
|
|
233
|
-
* This also inserts the contract address nullifier into the nullifier tree
|
|
257
|
+
* This also inserts the contract address nullifier into the nullifier tree,
|
|
258
|
+
* unless the address is a protocol canonical address (1-11).
|
|
234
259
|
*/
|
|
235
260
|
public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
|
|
236
261
|
const address = AztecAddress.fromPlainObject(rawAddress);
|
|
237
262
|
const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
|
|
238
|
-
|
|
263
|
+
// Protocol canonical addresses (1-11) should not have nullifiers inserted
|
|
264
|
+
const isProtocolCanonicalAddress = address.toBigInt() <= MAX_PROTOCOL_CONTRACTS && address.toBigInt() >= 1n;
|
|
265
|
+
await this.addContractInstance(instance, /* skipNullifierInsertion */ isProtocolCanonicalAddress);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Apply public data tree writes from C++ raw msgpack data.
|
|
270
|
+
* This is used to pre-populate the public data tree before simulation (e.g., for bytecode upgrades).
|
|
271
|
+
*/
|
|
272
|
+
public async applyPublicDataWrites(rawWrites: any[]): Promise<void> {
|
|
273
|
+
for (const rawWrite of rawWrites) {
|
|
274
|
+
const leaf = PublicDataTreeLeaf.fromPlainObject(rawWrite);
|
|
275
|
+
await this.merkleTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [leaf.toBuffer()]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Apply note hashes from C++ raw msgpack data.
|
|
281
|
+
* This is used to pre-populate the note hash tree before simulation.
|
|
282
|
+
*/
|
|
283
|
+
public async applyNoteHashes(rawNoteHashes: any[]): Promise<void> {
|
|
284
|
+
const paddingLeaves = MAX_NOTE_HASHES_PER_TX - (rawNoteHashes.length % MAX_NOTE_HASHES_PER_TX);
|
|
285
|
+
const paddedNoteHashes = [...rawNoteHashes, ...Array(paddingLeaves).fill(Fr.ZERO)];
|
|
286
|
+
await this.merkleTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, paddedNoteHashes);
|
|
239
287
|
}
|
|
240
288
|
}
|
|
@@ -3,17 +3,30 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
3
3
|
import {
|
|
4
4
|
AvmCircuitPublicInputs,
|
|
5
5
|
type AvmTxHint,
|
|
6
|
+
PublicTxEffect,
|
|
6
7
|
deserializeFromMessagePack,
|
|
7
8
|
serializeWithMessagePack,
|
|
8
9
|
} from '@aztec/stdlib/avm';
|
|
9
|
-
import { GlobalVariables, TreeSnapshots } from '@aztec/stdlib/tx';
|
|
10
|
+
import { GlobalVariables, ProtocolContracts, TreeSnapshots } from '@aztec/stdlib/tx';
|
|
10
11
|
import { NativeWorldStateService } from '@aztec/world-state';
|
|
11
12
|
|
|
12
|
-
import { writeSync } from 'fs';
|
|
13
13
|
import { createInterface } from 'readline';
|
|
14
14
|
|
|
15
15
|
import { AvmFuzzerSimulator, FuzzerSimulationRequest } from './avm_fuzzer_simulator.js';
|
|
16
16
|
|
|
17
|
+
/** Write data to stdout, letting Node handle buffering. */
|
|
18
|
+
function writeOutput(data: string): Promise<void> {
|
|
19
|
+
return new Promise<void>((resolve, reject) => {
|
|
20
|
+
process.stdout.write(data, err => {
|
|
21
|
+
if (err) {
|
|
22
|
+
reject(err);
|
|
23
|
+
} else {
|
|
24
|
+
resolve();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
17
30
|
// This cache holds opened world states to avoid reopening them for each invocation.
|
|
18
31
|
// It's a map so that in the future we could support multiple world states (if we had multiple fuzzers).
|
|
19
32
|
const worldStateCache = new Map<string, NativeWorldStateService>();
|
|
@@ -43,12 +56,23 @@ async function simulateWithFuzzer(
|
|
|
43
56
|
globals: GlobalVariables,
|
|
44
57
|
rawContractClasses: any[], // Replace these when we are moving contract classes to TS
|
|
45
58
|
rawContractInstances: [any, any][], // Replace these when we are moving contract instances to TS
|
|
46
|
-
|
|
59
|
+
rawPublicDataWrites: any[], // Public data tree writes to apply before simulation
|
|
60
|
+
rawNoteHashes: any[], // Note hashes to apply before simulation
|
|
61
|
+
protocolContracts: ProtocolContracts, // Protocol contracts mapping from C++
|
|
62
|
+
): Promise<{
|
|
63
|
+
reverted: boolean;
|
|
64
|
+
output: Fr[];
|
|
65
|
+
revertReason?: string;
|
|
66
|
+
publicInputs: AvmCircuitPublicInputs;
|
|
67
|
+
publicTxEffect: PublicTxEffect;
|
|
68
|
+
}> {
|
|
47
69
|
const worldStateService = await openExistingWorldState(dataDir, mapSizeKb);
|
|
48
70
|
|
|
49
|
-
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals);
|
|
71
|
+
const simulator = await AvmFuzzerSimulator.create(worldStateService, globals, protocolContracts);
|
|
72
|
+
|
|
73
|
+
await simulator.applyNoteHashes(rawNoteHashes);
|
|
50
74
|
|
|
51
|
-
// Register contract classes from C++
|
|
75
|
+
// Register contract classes from C++ (must happen before public data writes to match C++ order)
|
|
52
76
|
for (const rawClass of rawContractClasses) {
|
|
53
77
|
await simulator.addContractClassFromCpp(rawClass);
|
|
54
78
|
}
|
|
@@ -58,6 +82,10 @@ async function simulateWithFuzzer(
|
|
|
58
82
|
await simulator.addContractInstanceFromCpp(rawAddress, rawInstance);
|
|
59
83
|
}
|
|
60
84
|
|
|
85
|
+
// Apply public data writes after contract registration (e.g., for bytecode upgrades)
|
|
86
|
+
// This must happen last to match C++ setup_fuzzer_state ordering
|
|
87
|
+
await simulator.applyPublicDataWrites(rawPublicDataWrites);
|
|
88
|
+
|
|
61
89
|
const result = await simulator.simulate(txHint);
|
|
62
90
|
|
|
63
91
|
const output = result
|
|
@@ -69,6 +97,7 @@ async function simulateWithFuzzer(
|
|
|
69
97
|
output,
|
|
70
98
|
revertReason: result.findRevertReason()?.message,
|
|
71
99
|
publicInputs: result.publicInputs!,
|
|
100
|
+
publicTxEffect: result.publicTxEffect,
|
|
72
101
|
};
|
|
73
102
|
}
|
|
74
103
|
|
|
@@ -87,6 +116,9 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
87
116
|
request.globals,
|
|
88
117
|
request.contractClasses,
|
|
89
118
|
request.contractInstances,
|
|
119
|
+
request.publicDataWrites,
|
|
120
|
+
request.noteHashes,
|
|
121
|
+
request.protocolContracts,
|
|
90
122
|
);
|
|
91
123
|
|
|
92
124
|
// Serialize the result to msgpack and encode it in base64 for output
|
|
@@ -95,17 +127,20 @@ async function execute(base64Line: string): Promise<void> {
|
|
|
95
127
|
output: result.output,
|
|
96
128
|
revertReason: result.revertReason ?? '',
|
|
97
129
|
endTreeSnapshots: result.publicInputs.endTreeSnapshots,
|
|
130
|
+
publicTxEffect: result.publicTxEffect,
|
|
98
131
|
});
|
|
99
|
-
|
|
132
|
+
const base64Response = resultBuffer.toString('base64') + '\n';
|
|
133
|
+
await writeOutput(base64Response);
|
|
100
134
|
} catch (error: any) {
|
|
101
135
|
// If we error, treat as reverted
|
|
102
136
|
const errorResult = serializeWithMessagePack({
|
|
103
137
|
reverted: true,
|
|
104
|
-
output: [] as
|
|
138
|
+
output: [] as Fr[],
|
|
105
139
|
revertReason: `Unexpected Error ${error.message}`,
|
|
106
140
|
endTreeSnapshots: TreeSnapshots.empty(),
|
|
141
|
+
publicTxEffect: PublicTxEffect.empty(),
|
|
107
142
|
});
|
|
108
|
-
|
|
143
|
+
await writeOutput(errorResult.toString('base64') + '\n');
|
|
109
144
|
}
|
|
110
145
|
}
|
|
111
146
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
PUBLIC_DATA_SUBTREE_HEIGHT,
|
|
6
6
|
} from '@aztec/constants';
|
|
7
7
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
9
9
|
import { Timer } from '@aztec/foundation/timer';
|
|
10
10
|
import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
11
11
|
import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
|
|
@@ -46,9 +46,14 @@ import { L1ToL2MessageIndexOutOfRangeError, NoteHashIndexOutOfRangeError } from
|
|
|
46
46
|
export class PublicContractsDB implements PublicContractsDBInterface {
|
|
47
47
|
private contractStateStack: ContractsDbCheckpoint[] = [new ContractsDbCheckpoint()];
|
|
48
48
|
|
|
49
|
-
private log
|
|
49
|
+
private log: Logger;
|
|
50
50
|
|
|
51
|
-
constructor(
|
|
51
|
+
constructor(
|
|
52
|
+
private dataSource: ContractDataSource,
|
|
53
|
+
bindings?: LoggerBindings,
|
|
54
|
+
) {
|
|
55
|
+
this.log = createLogger('simulator:contracts-data-source', bindings);
|
|
56
|
+
}
|
|
52
57
|
|
|
53
58
|
public async addContracts(contractDeploymentData: ContractDeploymentData): Promise<void> {
|
|
54
59
|
const currentState = this.getCurrentState();
|
|
@@ -208,9 +213,14 @@ export class PublicContractsDB implements PublicContractsDBInterface {
|
|
|
208
213
|
* to decide whether to use hints or not (same with tracing, etc).
|
|
209
214
|
*/
|
|
210
215
|
export class PublicTreesDB implements PublicStateDBInterface {
|
|
211
|
-
private logger
|
|
216
|
+
private logger: Logger;
|
|
212
217
|
|
|
213
|
-
constructor(
|
|
218
|
+
constructor(
|
|
219
|
+
private readonly db: MerkleTreeWriteOperations,
|
|
220
|
+
bindings?: LoggerBindings,
|
|
221
|
+
) {
|
|
222
|
+
this.logger = createLogger('simulator:public-trees-db', bindings);
|
|
223
|
+
}
|
|
214
224
|
|
|
215
225
|
public async storageRead(contract: AztecAddress, slot: Fr): Promise<Fr> {
|
|
216
226
|
const timer = new Timer();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { sleep } from '@aztec/foundation/sleep';
|
|
6
6
|
import { DateProvider, Timer, elapsed, executeTimeout } from '@aztec/foundation/timer';
|
|
7
7
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
@@ -62,11 +62,15 @@ import { PublicProcessorMetrics } from './public_processor_metrics.js';
|
|
|
62
62
|
* Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
|
|
63
63
|
*/
|
|
64
64
|
export class PublicProcessorFactory {
|
|
65
|
+
private log: Logger;
|
|
65
66
|
constructor(
|
|
66
67
|
private contractDataSource: ContractDataSource,
|
|
67
68
|
private dateProvider: DateProvider = new DateProvider(),
|
|
68
69
|
protected telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
69
|
-
|
|
70
|
+
bindings?: LoggerBindings,
|
|
71
|
+
) {
|
|
72
|
+
this.log = createLogger('simulator:public-processor-factory', bindings);
|
|
73
|
+
}
|
|
70
74
|
|
|
71
75
|
/**
|
|
72
76
|
* Creates a new instance of a PublicProcessor.
|
|
@@ -79,7 +83,8 @@ export class PublicProcessorFactory {
|
|
|
79
83
|
globalVariables: GlobalVariables,
|
|
80
84
|
config: PublicSimulatorConfig,
|
|
81
85
|
): PublicProcessor {
|
|
82
|
-
const
|
|
86
|
+
const bindings = this.log.getBindings();
|
|
87
|
+
const contractsDB = new PublicContractsDB(this.contractDataSource, bindings);
|
|
83
88
|
|
|
84
89
|
const guardedFork = new GuardedMerkleTreeOperations(merkleTree);
|
|
85
90
|
const publicTxSimulator = this.createPublicTxSimulator(guardedFork, contractsDB, globalVariables, config);
|
|
@@ -91,6 +96,7 @@ export class PublicProcessorFactory {
|
|
|
91
96
|
publicTxSimulator,
|
|
92
97
|
this.dateProvider,
|
|
93
98
|
this.telemetryClient,
|
|
99
|
+
createLogger('simulator:public-processor', bindings),
|
|
94
100
|
);
|
|
95
101
|
}
|
|
96
102
|
|
|
@@ -100,7 +106,14 @@ export class PublicProcessorFactory {
|
|
|
100
106
|
globalVariables: GlobalVariables,
|
|
101
107
|
config?: Partial<PublicTxSimulatorConfig>,
|
|
102
108
|
): PublicTxSimulatorInterface {
|
|
103
|
-
return new TelemetryCppPublicTxSimulator(
|
|
109
|
+
return new TelemetryCppPublicTxSimulator(
|
|
110
|
+
merkleTree,
|
|
111
|
+
contractsDB,
|
|
112
|
+
globalVariables,
|
|
113
|
+
this.telemetryClient,
|
|
114
|
+
config,
|
|
115
|
+
this.log.getBindings(),
|
|
116
|
+
);
|
|
104
117
|
}
|
|
105
118
|
}
|
|
106
119
|
|
|
@@ -125,7 +138,7 @@ export class PublicProcessor implements Traceable {
|
|
|
125
138
|
protected publicTxSimulator: PublicTxSimulatorInterface,
|
|
126
139
|
private dateProvider: DateProvider,
|
|
127
140
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
128
|
-
private log
|
|
141
|
+
private log: Logger,
|
|
129
142
|
private opts: Pick<SequencerConfig, 'fakeProcessingDelayPerTxMs' | 'fakeThrowAfterProcessingTxCount'> = {},
|
|
130
143
|
) {
|
|
131
144
|
this.metrics = new PublicProcessorMetrics(telemetryClient, 'PublicProcessor');
|
|
@@ -146,7 +159,7 @@ export class PublicProcessor implements Traceable {
|
|
|
146
159
|
txs: Iterable<Tx> | AsyncIterable<Tx>,
|
|
147
160
|
limits: PublicProcessorLimits = {},
|
|
148
161
|
validator: PublicProcessorValidator = {},
|
|
149
|
-
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[]]> {
|
|
162
|
+
): Promise<[ProcessedTx[], FailedTx[], Tx[], NestedProcessReturnValues[], number]> {
|
|
150
163
|
const { maxTransactions, maxBlockSize, deadline, maxBlockGas, maxBlobFields } = limits;
|
|
151
164
|
const { preprocessValidator, nullifierCache } = validator;
|
|
152
165
|
const result: ProcessedTx[] = [];
|
|
@@ -254,6 +267,7 @@ export class PublicProcessor implements Traceable {
|
|
|
254
267
|
}
|
|
255
268
|
|
|
256
269
|
// If the actual blob fields of this tx would exceed the limit, skip it
|
|
270
|
+
// Note: maxBlobFields already accounts for block end blob fields and previous blocks in checkpoint.
|
|
257
271
|
if (maxBlobFields !== undefined && totalBlobFields + txBlobFields > maxBlobFields) {
|
|
258
272
|
this.log.debug(
|
|
259
273
|
`Skipping processed tx ${txHash} with ${txBlobFields} blob fields due to max blob fields limit.`,
|
|
@@ -349,7 +363,7 @@ export class PublicProcessor implements Traceable {
|
|
|
349
363
|
totalSizeInBytes,
|
|
350
364
|
});
|
|
351
365
|
|
|
352
|
-
return [result, failed, usedTxs, returns];
|
|
366
|
+
return [result, failed, usedTxs, returns, totalBlobFields];
|
|
353
367
|
}
|
|
354
368
|
|
|
355
369
|
private async checkWorldStateUnchanged(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
2
2
|
import type { Gas } from '@aztec/stdlib/gas';
|
|
3
|
-
import
|
|
3
|
+
import { TxExecutionPhase } from '@aztec/stdlib/tx';
|
|
4
4
|
import {
|
|
5
5
|
Attributes,
|
|
6
6
|
type Gauge,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
type TelemetryClient,
|
|
10
10
|
type Tracer,
|
|
11
11
|
type UpDownCounter,
|
|
12
|
-
|
|
12
|
+
createUpDownCounterWithDefault,
|
|
13
13
|
} from '@aztec/telemetry-client';
|
|
14
14
|
|
|
15
15
|
export class PublicProcessorMetrics {
|
|
@@ -34,60 +34,32 @@ export class PublicProcessorMetrics {
|
|
|
34
34
|
this.tracer = client.getTracer(name);
|
|
35
35
|
const meter = client.getMeter(name);
|
|
36
36
|
|
|
37
|
-
this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION
|
|
38
|
-
description: 'How long it takes to process a transaction',
|
|
39
|
-
unit: 'ms',
|
|
40
|
-
valueType: ValueType.INT,
|
|
41
|
-
});
|
|
37
|
+
this.txDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION);
|
|
42
38
|
|
|
43
|
-
this.txCount = meter
|
|
44
|
-
|
|
39
|
+
this.txCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_COUNT, {
|
|
40
|
+
[Attributes.OK]: [true, false],
|
|
45
41
|
});
|
|
46
42
|
|
|
47
|
-
this.txPhaseCount = meter
|
|
48
|
-
description: 'Number of phases processed',
|
|
49
|
-
});
|
|
43
|
+
this.txPhaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT);
|
|
50
44
|
|
|
51
|
-
this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION
|
|
52
|
-
description: 'How long it takes to process a phase',
|
|
53
|
-
unit: 'ms',
|
|
54
|
-
valueType: ValueType.INT,
|
|
55
|
-
});
|
|
45
|
+
this.phaseDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION);
|
|
56
46
|
|
|
57
|
-
this.phaseCount = meter
|
|
58
|
-
|
|
47
|
+
this.phaseCount = createUpDownCounterWithDefault(meter, Metrics.PUBLIC_PROCESSOR_PHASE_COUNT, {
|
|
48
|
+
[Attributes.TX_PHASE_NAME]: [TxExecutionPhase.SETUP, TxExecutionPhase.APP_LOGIC, TxExecutionPhase.TEARDOWN],
|
|
49
|
+
[Attributes.OK]: [true, false],
|
|
59
50
|
});
|
|
60
51
|
|
|
61
|
-
this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE
|
|
62
|
-
description: 'Size of deployed bytecode',
|
|
63
|
-
unit: 'By',
|
|
64
|
-
});
|
|
52
|
+
this.bytecodeDeployed = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE);
|
|
65
53
|
|
|
66
|
-
this.totalGas = meter.createGauge(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS
|
|
67
|
-
description: 'Total gas used in block',
|
|
68
|
-
unit: 'gas',
|
|
69
|
-
});
|
|
54
|
+
this.totalGas = meter.createGauge(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS);
|
|
70
55
|
|
|
71
|
-
this.totalGasHistogram = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM
|
|
72
|
-
description: 'Total gas used in block as histogram',
|
|
73
|
-
unit: 'gas/block',
|
|
74
|
-
});
|
|
56
|
+
this.totalGasHistogram = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM);
|
|
75
57
|
|
|
76
|
-
this.txGas = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS
|
|
77
|
-
description: 'Gas used in transaction',
|
|
78
|
-
unit: 'gas/tx',
|
|
79
|
-
});
|
|
58
|
+
this.txGas = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS);
|
|
80
59
|
|
|
81
|
-
this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE
|
|
82
|
-
description: 'L2 gas per second for complete block',
|
|
83
|
-
unit: 'gas/s',
|
|
84
|
-
});
|
|
60
|
+
this.gasRate = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE);
|
|
85
61
|
|
|
86
|
-
this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION
|
|
87
|
-
description: 'How long it takes for tree insertion',
|
|
88
|
-
unit: 'us',
|
|
89
|
-
valueType: ValueType.INT,
|
|
90
|
-
});
|
|
62
|
+
this.treeInsertionDuration = meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION);
|
|
91
63
|
}
|
|
92
64
|
|
|
93
65
|
recordPhaseDuration(phaseName: TxExecutionPhase, durationMs: number) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import type { ContractProvider } from '@aztec/native';
|
|
4
4
|
import { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import { deserializeFromMessagePack, serializeWithMessagePack } from '@aztec/stdlib/avm';
|
|
@@ -10,12 +10,15 @@ import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
|
10
10
|
import type { PublicContractsDB } from '../public_db_sources.js';
|
|
11
11
|
|
|
12
12
|
export class ContractProviderForCpp implements ContractProvider {
|
|
13
|
-
private log: Logger
|
|
13
|
+
private log: Logger;
|
|
14
14
|
|
|
15
15
|
constructor(
|
|
16
16
|
private contractsDB: PublicContractsDB,
|
|
17
17
|
private globalVariables: GlobalVariables,
|
|
18
|
-
|
|
18
|
+
bindings?: LoggerBindings,
|
|
19
|
+
) {
|
|
20
|
+
this.log = createLogger('simulator:contract_provider_for_cpp', bindings);
|
|
21
|
+
}
|
|
19
22
|
|
|
20
23
|
public getContractInstance = async (address: string): Promise<Buffer | undefined> => {
|
|
21
24
|
this.log.trace(`Contract provider callback: getContractInstance(${address})`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Logger, createLogger, logLevel } from '@aztec/foundation/log';
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger, logLevel } from '@aztec/foundation/log';
|
|
2
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
3
|
import { type CancellationToken, avmSimulate, cancelSimulation, createCancellationToken } from '@aztec/native';
|
|
4
4
|
import { ProtocolContractsList } from '@aztec/protocol-contracts';
|
|
@@ -44,9 +44,10 @@ export class CppPublicTxSimulator extends PublicTxSimulator implements PublicTxS
|
|
|
44
44
|
contractsDB: PublicContractsDB,
|
|
45
45
|
globalVariables: GlobalVariables,
|
|
46
46
|
config?: Partial<PublicSimulatorConfig>,
|
|
47
|
+
bindings?: LoggerBindings,
|
|
47
48
|
) {
|
|
48
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
49
|
-
this.log = createLogger(`simulator:cpp_public_tx_simulator
|
|
49
|
+
super(merkleTree, contractsDB, globalVariables, config, undefined, bindings);
|
|
50
|
+
this.log = createLogger(`simulator:cpp_public_tx_simulator`, bindings);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
/**
|
|
@@ -84,7 +85,7 @@ export class CppPublicTxSimulator extends PublicTxSimulator implements PublicTxS
|
|
|
84
85
|
);
|
|
85
86
|
|
|
86
87
|
// Create contract provider for callbacks to TypeScript PublicContractsDB from C++
|
|
87
|
-
const contractProvider = new ContractProviderForCpp(this.contractsDB, this.globalVariables);
|
|
88
|
+
const contractProvider = new ContractProviderForCpp(this.contractsDB, this.globalVariables, this.bindings);
|
|
88
89
|
|
|
89
90
|
// Serialize to msgpack and call the C++ simulator
|
|
90
91
|
this.log.trace(`Serializing fast simulation inputs to msgpack...`);
|
|
@@ -95,7 +96,15 @@ export class CppPublicTxSimulator extends PublicTxSimulator implements PublicTxS
|
|
|
95
96
|
|
|
96
97
|
// Store the promise so cancel() can wait for it
|
|
97
98
|
this.log.debug(`Calling C++ simulator for tx ${txHash}`);
|
|
98
|
-
this.simulationPromise = avmSimulate(
|
|
99
|
+
this.simulationPromise = avmSimulate(
|
|
100
|
+
inputBuffer,
|
|
101
|
+
contractProvider,
|
|
102
|
+
wsCppHandle,
|
|
103
|
+
logLevel,
|
|
104
|
+
// TODO: re-enable logging
|
|
105
|
+
undefined,
|
|
106
|
+
this.cancellationToken,
|
|
107
|
+
);
|
|
99
108
|
|
|
100
109
|
let resultBuffer: Buffer;
|
|
101
110
|
try {
|
|
@@ -163,8 +172,9 @@ export class MeasuredCppPublicTxSimulator extends CppPublicTxSimulator implement
|
|
|
163
172
|
globalVariables: GlobalVariables,
|
|
164
173
|
protected readonly metrics: ExecutorMetricsInterface,
|
|
165
174
|
config?: Partial<PublicSimulatorConfig>,
|
|
175
|
+
bindings?: LoggerBindings,
|
|
166
176
|
) {
|
|
167
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
177
|
+
super(merkleTree, contractsDB, globalVariables, config, bindings);
|
|
168
178
|
}
|
|
169
179
|
|
|
170
180
|
public override async simulate(tx: Tx, txLabel: string = 'unlabeledTx'): Promise<PublicTxResult> {
|
|
@@ -192,9 +202,10 @@ export class TelemetryCppPublicTxSimulator extends MeasuredCppPublicTxSimulator
|
|
|
192
202
|
globalVariables: GlobalVariables,
|
|
193
203
|
telemetryClient: TelemetryClient = getTelemetryClient(),
|
|
194
204
|
config?: Partial<PublicSimulatorConfig>,
|
|
205
|
+
bindings?: LoggerBindings,
|
|
195
206
|
) {
|
|
196
207
|
const metrics = new ExecutorMetrics(telemetryClient, 'CppPublicTxSimulator');
|
|
197
|
-
super(merkleTree, contractsDB, globalVariables, metrics, config);
|
|
208
|
+
super(merkleTree, contractsDB, globalVariables, metrics, config, bindings);
|
|
198
209
|
this.tracer = metrics.tracer;
|
|
199
210
|
}
|
|
200
211
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Logger, createLogger, logLevel } from '@aztec/foundation/log';
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger, logLevel } from '@aztec/foundation/log';
|
|
2
2
|
import { avmSimulateWithHintedDbs } from '@aztec/native';
|
|
3
3
|
import {
|
|
4
4
|
AvmCircuitInputs,
|
|
@@ -34,9 +34,10 @@ export class CppPublicTxSimulatorHintedDbs extends PublicTxSimulator implements
|
|
|
34
34
|
contractsDB: PublicContractsDB,
|
|
35
35
|
globalVariables: GlobalVariables,
|
|
36
36
|
config?: Partial<PublicSimulatorConfig>,
|
|
37
|
+
bindings?: LoggerBindings,
|
|
37
38
|
) {
|
|
38
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
39
|
-
this.log = createLogger(`simulator:cpp_public_tx_simulator_hinted_dbs
|
|
39
|
+
super(merkleTree, contractsDB, globalVariables, config, undefined, bindings);
|
|
40
|
+
this.log = createLogger(`simulator:cpp_public_tx_simulator_hinted_dbs`, bindings);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
/**
|
|
@@ -115,8 +116,9 @@ export class MeasuredCppPublicTxSimulatorHintedDbs
|
|
|
115
116
|
globalVariables: GlobalVariables,
|
|
116
117
|
protected readonly metrics: ExecutorMetricsInterface,
|
|
117
118
|
config?: Partial<PublicSimulatorConfig>,
|
|
119
|
+
bindings?: LoggerBindings,
|
|
118
120
|
) {
|
|
119
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
121
|
+
super(merkleTree, contractsDB, globalVariables, config, bindings);
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
public override async simulate(tx: Tx, txLabel: string = 'unlabeledTx'): Promise<PublicTxResult> {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Logger, createLogger, logLevel } from '@aztec/foundation/log';
|
|
1
|
+
import { type Logger, type LoggerBindings, createLogger, logLevel } from '@aztec/foundation/log';
|
|
2
2
|
import { avmSimulate } from '@aztec/native';
|
|
3
3
|
import { ProtocolContractsList } from '@aztec/protocol-contracts';
|
|
4
4
|
import {
|
|
@@ -37,9 +37,10 @@ export class CppVsTsPublicTxSimulator extends PublicTxSimulator implements Publi
|
|
|
37
37
|
contractsDB: PublicContractsDB,
|
|
38
38
|
globalVariables: GlobalVariables,
|
|
39
39
|
config?: Partial<PublicSimulatorConfig>,
|
|
40
|
+
bindings?: LoggerBindings,
|
|
40
41
|
) {
|
|
41
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
42
|
-
this.log = createLogger(`simulator:cpp_vs_public_tx_simulator
|
|
42
|
+
super(merkleTree, contractsDB, globalVariables, config, undefined, bindings);
|
|
43
|
+
this.log = createLogger(`simulator:cpp_vs_public_tx_simulator`, bindings);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
@@ -103,7 +104,7 @@ export class CppVsTsPublicTxSimulator extends PublicTxSimulator implements Publi
|
|
|
103
104
|
);
|
|
104
105
|
|
|
105
106
|
// Create contract provider for callbacks to TypeScript PublicContractsDB from C++
|
|
106
|
-
const contractProvider = new ContractProviderForCpp(this.contractsDB, this.globalVariables);
|
|
107
|
+
const contractProvider = new ContractProviderForCpp(this.contractsDB, this.globalVariables, this.bindings);
|
|
107
108
|
|
|
108
109
|
// Serialize to msgpack and call the C++ simulator
|
|
109
110
|
this.log.debug(`Serializing fast simulation inputs to msgpack...`);
|
|
@@ -220,8 +221,9 @@ export class MeasuredCppVsTsPublicTxSimulator
|
|
|
220
221
|
globalVariables: GlobalVariables,
|
|
221
222
|
protected readonly metrics: ExecutorMetricsInterface,
|
|
222
223
|
config?: Partial<PublicSimulatorConfig>,
|
|
224
|
+
bindings?: LoggerBindings,
|
|
223
225
|
) {
|
|
224
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
226
|
+
super(merkleTree, contractsDB, globalVariables, config, bindings);
|
|
225
227
|
}
|
|
226
228
|
|
|
227
229
|
public override async simulate(tx: Tx, txLabel: string = 'unlabeledTx'): Promise<PublicTxResult> {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import {
|
|
2
3
|
AvmCircuitInputs,
|
|
3
4
|
AvmCircuitPublicInputs,
|
|
@@ -29,8 +30,9 @@ export class DumpingCppPublicTxSimulator extends CppPublicTxSimulator {
|
|
|
29
30
|
globalVariables: GlobalVariables,
|
|
30
31
|
config: Partial<PublicSimulatorConfig>,
|
|
31
32
|
outputDir: string,
|
|
33
|
+
bindings?: LoggerBindings,
|
|
32
34
|
) {
|
|
33
|
-
super(merkleTree, contractsDB, globalVariables, config);
|
|
35
|
+
super(merkleTree, contractsDB, globalVariables, config, bindings);
|
|
34
36
|
assert(config.collectHints === true, 'collectHints must be enabled to dump AVM circuit inputs');
|
|
35
37
|
assert(config.collectPublicInputs === true, 'collectPublicInputs must be enabled to dump AVM circuit inputs');
|
|
36
38
|
this.outputDir = outputDir;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LoggerBindings } from '@aztec/foundation/log';
|
|
1
2
|
import { PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
2
3
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
3
4
|
import type { GlobalVariables } from '@aztec/stdlib/tx';
|
|
@@ -17,6 +18,7 @@ export function createPublicTxSimulatorForBlockBuilding(
|
|
|
17
18
|
contractsDB: PublicContractsDB,
|
|
18
19
|
globalVariables: GlobalVariables,
|
|
19
20
|
telemetryClient: TelemetryClient,
|
|
21
|
+
bindings?: LoggerBindings,
|
|
20
22
|
) {
|
|
21
23
|
const config = PublicSimulatorConfig.from({
|
|
22
24
|
skipFeeEnforcement: false,
|
|
@@ -35,7 +37,7 @@ export function createPublicTxSimulatorForBlockBuilding(
|
|
|
35
37
|
collectHints: true,
|
|
36
38
|
collectPublicInputs: true,
|
|
37
39
|
};
|
|
38
|
-
return new DumpingCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, dumpingConfig, dumpDir);
|
|
40
|
+
return new DumpingCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, dumpingConfig, dumpDir, bindings);
|
|
39
41
|
}
|
|
40
|
-
return new TelemetryCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, telemetryClient, config);
|
|
42
|
+
return new TelemetryCppPublicTxSimulator(merkleTree, contractsDB, globalVariables, telemetryClient, config, bindings);
|
|
41
43
|
}
|