@aztec/simulator 3.0.3 → 3.9.9-nightly.20260312
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 +6 -4
- 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_gas.js +3 -3
- 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/account_proof_fetcher.d.ts +2 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.d.ts.map +1 -0
- package/dest/public/avm/fixtures/account_proof_fetcher.js +152 -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 +17 -18
- package/dest/public/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/public/avm/opcodes/accrued_substate.js +42 -43
- 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 +18 -15
- 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/avm/serialization/bytecode_serialization.js +3 -3
- package/dest/public/avm/serialization/instruction_serialization.d.ts +2 -2
- package/dest/public/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/public/avm/serialization/instruction_serialization.js +1 -1
- 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 +14 -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/amm_test.js +2 -2
- 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 +4 -68
- package/dest/public/fixtures/custom_bytecode_tester.d.ts +28 -6
- package/dest/public/fixtures/custom_bytecode_tester.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tester.js +36 -12
- package/dest/public/fixtures/custom_bytecode_tests.d.ts +11 -9
- package/dest/public/fixtures/custom_bytecode_tests.d.ts.map +1 -1
- package/dest/public/fixtures/custom_bytecode_tests.js +66 -22
- package/dest/public/fixtures/index.d.ts +4 -2
- package/dest/public/fixtures/index.d.ts.map +1 -1
- package/dest/public/fixtures/index.js +3 -1
- package/dest/public/fixtures/minimal_public_tx.d.ts +2 -7
- package/dest/public/fixtures/minimal_public_tx.d.ts.map +1 -1
- package/dest/public/fixtures/minimal_public_tx.js +4 -14
- package/dest/public/fixtures/opcode_spammer.d.ts +122 -0
- package/dest/public/fixtures/opcode_spammer.d.ts.map +1 -0
- package/dest/public/fixtures/opcode_spammer.js +1653 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +20 -6
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +43 -16
- package/dest/public/fixtures/utils.d.ts +2 -2
- package/dest/public/fixtures/utils.d.ts.map +1 -1
- package/dest/public/fixtures/utils.js +9 -8
- 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 +46 -11
- package/dest/public/fuzzing/avm_simulator_bin.js +47 -13
- package/dest/public/hinting_db_sources.d.ts +2 -1
- package/dest/public/hinting_db_sources.d.ts.map +1 -1
- package/dest/public/hinting_db_sources.js +5 -0
- 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.d.ts +2 -1
- package/dest/public/public_processor/guarded_merkle_tree.d.ts.map +1 -1
- package/dest/public/public_processor/guarded_merkle_tree.js +5 -0
- package/dest/public/public_processor/public_processor.d.ts +8 -4
- package/dest/public/public_processor/public_processor.d.ts.map +1 -1
- package/dest/public/public_processor/public_processor.js +468 -62
- 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 +17 -13
- package/dest/public/public_tx_simulator/cpp_public_tx_simulator.d.ts +20 -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 +50 -12
- 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 +7 -7
- 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 +8 -7
- 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 +4 -4
- 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 +14 -9
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts +24 -1
- package/dest/public/public_tx_simulator/public_tx_simulator_interface.d.ts.map +1 -1
- 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_gas.ts +2 -2
- 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/account_proof.json +553 -0
- package/src/public/avm/fixtures/account_proof_fetcher.ts +166 -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 +31 -34
- 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 +13 -9
- 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/avm/serialization/bytecode_serialization.ts +2 -2
- package/src/public/avm/serialization/instruction_serialization.ts +1 -1
- package/src/public/debug_fn_name.ts +17 -8
- package/src/public/executor_metrics.ts +9 -33
- package/src/public/fixtures/amm_test.ts +2 -2
- package/src/public/fixtures/bulk_test.ts +8 -8
- package/src/public/fixtures/custom_bytecode_tester.ts +53 -19
- package/src/public/fixtures/custom_bytecode_tests.ts +91 -22
- package/src/public/fixtures/index.ts +7 -1
- package/src/public/fixtures/minimal_public_tx.ts +5 -14
- package/src/public/fixtures/opcode_spammer.ts +1717 -0
- package/src/public/fixtures/public_tx_simulation_tester.ts +66 -10
- package/src/public/fixtures/utils.ts +7 -7
- package/src/public/fuzzing/avm_fuzzer_simulator.ts +68 -13
- package/src/public/fuzzing/avm_simulator_bin.ts +64 -10
- package/src/public/hinting_db_sources.ts +4 -0
- package/src/public/public_db_sources.ts +15 -5
- package/src/public/public_processor/guarded_merkle_tree.ts +4 -0
- package/src/public/public_processor/public_processor.ts +95 -55
- package/src/public/public_processor/public_processor_metrics.ts +16 -44
- package/src/public/public_tx_simulator/contract_provider_for_cpp.ts +22 -14
- package/src/public/public_tx_simulator/cpp_public_tx_simulator.ts +64 -9
- package/src/public/public_tx_simulator/cpp_public_tx_simulator_with_hinted_dbs.ts +7 -5
- package/src/public/public_tx_simulator/cpp_vs_ts_public_tx_simulator.ts +9 -6
- package/src/public/public_tx_simulator/dumping_cpp_public_tx_simulator.ts +3 -1
- package/src/public/public_tx_simulator/factories.ts +6 -3
- package/src/public/public_tx_simulator/public_tx_context.ts +13 -6
- package/src/public/public_tx_simulator/public_tx_simulator.ts +21 -10
- package/src/public/public_tx_simulator/public_tx_simulator_interface.ts +23 -0
- 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
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_TEARDOWN_DA_GAS_LIMIT,
|
|
3
|
+
DEFAULT_TEARDOWN_L2_GAS_LIMIT,
|
|
4
|
+
PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
5
|
+
TX_DA_GAS_OVERHEAD,
|
|
6
|
+
} from '@aztec/constants';
|
|
2
7
|
import { asyncMap } from '@aztec/foundation/async-map';
|
|
3
8
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
9
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -31,7 +36,7 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
31
36
|
export type TestEnqueuedCall = {
|
|
32
37
|
sender?: AztecAddress;
|
|
33
38
|
address: AztecAddress;
|
|
34
|
-
fnName
|
|
39
|
+
fnName?: string;
|
|
35
40
|
args: any[];
|
|
36
41
|
isStaticCall?: boolean;
|
|
37
42
|
contractArtifact?: ContractArtifact;
|
|
@@ -112,6 +117,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
112
117
|
feePayer: AztecAddress = sender,
|
|
113
118
|
/* need some unique first nullifier for note-nonce computations */
|
|
114
119
|
privateInsertions: TestPrivateInsertions = { nonRevertible: { nullifiers: [new Fr(420000 + this.txCount)] } },
|
|
120
|
+
gasLimits?: Gas,
|
|
115
121
|
): Promise<Tx> {
|
|
116
122
|
const setupCallRequests = await asyncMap(setupCalls, call =>
|
|
117
123
|
this.#createPubicCallRequestForCall(call, call.sender ?? sender),
|
|
@@ -131,9 +137,13 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
131
137
|
teardownCallRequest,
|
|
132
138
|
feePayer,
|
|
133
139
|
/*gasUsedByPrivate*/ teardownCall
|
|
134
|
-
? new Gas(
|
|
135
|
-
|
|
140
|
+
? new Gas(
|
|
141
|
+
DEFAULT_TEARDOWN_DA_GAS_LIMIT + TX_DA_GAS_OVERHEAD,
|
|
142
|
+
DEFAULT_TEARDOWN_L2_GAS_LIMIT + PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
143
|
+
)
|
|
144
|
+
: new Gas(TX_DA_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD),
|
|
136
145
|
defaultGlobals(),
|
|
146
|
+
gasLimits,
|
|
137
147
|
);
|
|
138
148
|
}
|
|
139
149
|
|
|
@@ -146,8 +156,9 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
146
156
|
/* need some unique first nullifier for note-nonce computations */
|
|
147
157
|
privateInsertions?: TestPrivateInsertions,
|
|
148
158
|
txLabel: string = 'unlabeledTx',
|
|
159
|
+
gasLimits?: Gas,
|
|
149
160
|
): Promise<PublicTxResult> {
|
|
150
|
-
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions);
|
|
161
|
+
const tx = await this.createTx(sender, setupCalls, appCalls, teardownCall, feePayer, privateInsertions, gasLimits);
|
|
151
162
|
|
|
152
163
|
await this.setFeePayerBalance(feePayer);
|
|
153
164
|
|
|
@@ -190,8 +201,18 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
190
201
|
teardownCall?: TestEnqueuedCall,
|
|
191
202
|
feePayer?: AztecAddress,
|
|
192
203
|
privateInsertions?: TestPrivateInsertions,
|
|
204
|
+
gasLimits?: Gas,
|
|
193
205
|
): Promise<PublicTxResult> {
|
|
194
|
-
return await this.simulateTx(
|
|
206
|
+
return await this.simulateTx(
|
|
207
|
+
sender,
|
|
208
|
+
setupCalls,
|
|
209
|
+
appCalls,
|
|
210
|
+
teardownCall,
|
|
211
|
+
feePayer,
|
|
212
|
+
privateInsertions,
|
|
213
|
+
txLabel,
|
|
214
|
+
gasLimits,
|
|
215
|
+
);
|
|
195
216
|
}
|
|
196
217
|
|
|
197
218
|
/**
|
|
@@ -209,6 +230,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
209
230
|
teardownCall?: TestEnqueuedCall,
|
|
210
231
|
feePayer?: AztecAddress,
|
|
211
232
|
privateInsertions?: TestPrivateInsertions,
|
|
233
|
+
gasLimits?: Gas,
|
|
212
234
|
): Promise<PublicTxResult> {
|
|
213
235
|
return await this.simulateTxWithLabel(
|
|
214
236
|
txLabel,
|
|
@@ -218,6 +240,7 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
218
240
|
teardownCall,
|
|
219
241
|
feePayer,
|
|
220
242
|
privateInsertions,
|
|
243
|
+
gasLimits,
|
|
221
244
|
);
|
|
222
245
|
}
|
|
223
246
|
|
|
@@ -225,6 +248,25 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
225
248
|
this.metrics.prettyPrint();
|
|
226
249
|
}
|
|
227
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Cancel the current simulation if one is in progress.
|
|
253
|
+
* This signals the underlying simulator (e.g., C++) to stop at the next safe point.
|
|
254
|
+
* Safe to call even if no simulation is in progress.
|
|
255
|
+
*
|
|
256
|
+
* @param waitTimeoutMs - If provided, wait up to this many ms for the simulation to actually stop.
|
|
257
|
+
*/
|
|
258
|
+
public async cancel(waitTimeoutMs?: number): Promise<void> {
|
|
259
|
+
await this.simulator.cancel?.(waitTimeoutMs);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Get the underlying simulator for advanced test scenarios.
|
|
264
|
+
* Use this when you need direct control over simulation (e.g., for testing cancellation).
|
|
265
|
+
*/
|
|
266
|
+
public getSimulator(): MeasuredPublicTxSimulatorInterface {
|
|
267
|
+
return this.simulator;
|
|
268
|
+
}
|
|
269
|
+
|
|
228
270
|
async #createPubicCallRequestForCall(
|
|
229
271
|
call: TestEnqueuedCall,
|
|
230
272
|
sender: AztecAddress,
|
|
@@ -235,10 +277,24 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
235
277
|
throw new Error(`Contract artifact not found for address: ${address}`);
|
|
236
278
|
}
|
|
237
279
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
280
|
+
let calldata: Fr[] = [];
|
|
281
|
+
if (!call.fnName) {
|
|
282
|
+
this.logger.debug(
|
|
283
|
+
`No function name specified for call to contract ${call.address.toString()}. Assuming this is a custom bytecode with no public_dispatch function.`,
|
|
284
|
+
);
|
|
285
|
+
this.logger.debug(`Not using ABI to encode arguments. Not prepending fn selector to calldata.`);
|
|
286
|
+
try {
|
|
287
|
+
calldata = call.args.map(arg => new Fr(arg));
|
|
288
|
+
} catch (error) {
|
|
289
|
+
this.logger.warn(`Tried assuming that all arguments are Field-like. Failed. Error: ${error}`);
|
|
290
|
+
throw error;
|
|
291
|
+
}
|
|
292
|
+
} else {
|
|
293
|
+
const fnSelector = await getFunctionSelector(call.fnName, contractArtifact);
|
|
294
|
+
const fnAbi = getContractFunctionAbi(call.fnName, contractArtifact)!;
|
|
295
|
+
const encodedArgs = encodeArguments(fnAbi, call.args);
|
|
296
|
+
calldata = [fnSelector.toField(), ...encodedArgs];
|
|
297
|
+
}
|
|
242
298
|
const isStaticCall = call.isStaticCall ?? false;
|
|
243
299
|
const request = await PublicCallRequest.fromCalldata(sender, address, isStaticCall, calldata);
|
|
244
300
|
|
|
@@ -62,13 +62,14 @@ export async function createTxForPublicCalls(
|
|
|
62
62
|
feePayer = AztecAddress.zero(),
|
|
63
63
|
gasUsedByPrivate: Gas = Gas.empty(),
|
|
64
64
|
globals: GlobalVariables = GlobalVariables.empty(),
|
|
65
|
+
gasLimits?: Gas,
|
|
65
66
|
): Promise<Tx> {
|
|
66
67
|
assert(
|
|
67
68
|
setupCallRequests.length > 0 || appCallRequests.length > 0 || teardownCallRequest !== undefined,
|
|
68
69
|
"Can't create public tx with no enqueued calls",
|
|
69
70
|
);
|
|
70
71
|
// use max limits
|
|
71
|
-
|
|
72
|
+
gasLimits = gasLimits ?? new Gas(DEFAULT_DA_GAS_LIMIT, DEFAULT_L2_GAS_LIMIT);
|
|
72
73
|
|
|
73
74
|
const forPublic = PartialPrivateTailPublicInputsForPublic.empty();
|
|
74
75
|
|
|
@@ -132,16 +133,15 @@ export async function createTxForPublicCalls(
|
|
|
132
133
|
: Gas.empty();
|
|
133
134
|
const gasSettings = new GasSettings(gasLimits, teardownGasLimits, maxFeesPerGas, GasFees.empty());
|
|
134
135
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
135
|
-
const header = BlockHeader.empty();
|
|
136
|
-
header.globalVariables = globals;
|
|
136
|
+
const header = BlockHeader.empty({ globalVariables: globals });
|
|
137
137
|
const constantData = new TxConstantData(header, txContext, Fr.zero(), Fr.zero());
|
|
138
|
-
const
|
|
138
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
139
139
|
|
|
140
140
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
141
141
|
constantData,
|
|
142
142
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
143
143
|
feePayer,
|
|
144
|
-
|
|
144
|
+
expirationTimestamp,
|
|
145
145
|
forPublic,
|
|
146
146
|
);
|
|
147
147
|
|
|
@@ -172,13 +172,13 @@ export async function createTxForPrivateOnly(
|
|
|
172
172
|
const gasSettings = new GasSettings(gasLimits, Gas.empty(), maxFeesPerGas, GasFees.empty());
|
|
173
173
|
const txContext = new TxContext(Fr.zero(), Fr.zero(), gasSettings);
|
|
174
174
|
const constantData = new TxConstantData(BlockHeader.empty(), txContext, Fr.zero(), Fr.zero());
|
|
175
|
-
const
|
|
175
|
+
const expirationTimestamp = 0n; // Not used in the simulator.
|
|
176
176
|
|
|
177
177
|
const txData = new PrivateKernelTailCircuitPublicInputs(
|
|
178
178
|
constantData,
|
|
179
179
|
/*gasUsed=*/ gasUsedByPrivate,
|
|
180
180
|
feePayer,
|
|
181
|
-
|
|
181
|
+
expirationTimestamp,
|
|
182
182
|
/*forPublic=*/ undefined,
|
|
183
183
|
forRollup,
|
|
184
184
|
);
|
|
@@ -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
|
}
|
|
@@ -130,7 +146,7 @@ async function createTxFromHint(cppTx: AvmTxHint): Promise<Tx> {
|
|
|
130
146
|
constants,
|
|
131
147
|
cppTx.gasUsedByPrivate,
|
|
132
148
|
cppTx.feePayer,
|
|
133
|
-
0n, //
|
|
149
|
+
0n, // expirationTimestamp
|
|
134
150
|
forPublic,
|
|
135
151
|
undefined, // forRollup - not needed for public simulation
|
|
136
152
|
);
|
|
@@ -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,16 +222,24 @@ 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
|
/**
|
|
209
233
|
* Simulate a transaction from a C++ AvmTxHint.
|
|
210
234
|
*/
|
|
211
235
|
public async simulate(txHint: AvmTxHint): Promise<PublicTxResult> {
|
|
236
|
+
// Compute fee from gas limits and max fees per gas (upper bound on fee)
|
|
237
|
+
const totalFee =
|
|
238
|
+
BigInt(txHint.gasSettings.gasLimits.daGas) * txHint.gasSettings.maxFeesPerGas.feePerDaGas +
|
|
239
|
+
BigInt(txHint.gasSettings.gasLimits.l2Gas) * txHint.gasSettings.maxFeesPerGas.feePerL2Gas;
|
|
240
|
+
|
|
241
|
+
await this.setFeePayerBalance(txHint.feePayer, new Fr(totalFee));
|
|
242
|
+
|
|
212
243
|
const tx = await createTxFromHint(txHint);
|
|
213
244
|
return await this.simulator.simulate(tx);
|
|
214
245
|
}
|
|
@@ -223,11 +254,35 @@ export class AvmFuzzerSimulator extends BaseAvmSimulationTester {
|
|
|
223
254
|
|
|
224
255
|
/**
|
|
225
256
|
* Add a contract instance from C++ raw msgpack data.
|
|
226
|
-
* 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).
|
|
227
259
|
*/
|
|
228
260
|
public async addContractInstanceFromCpp(rawAddress: any, rawInstance: any): Promise<void> {
|
|
229
261
|
const address = AztecAddress.fromPlainObject(rawAddress);
|
|
230
262
|
const instance = contractInstanceWithAddressFromPlainObject(address, rawInstance);
|
|
231
|
-
|
|
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);
|
|
232
287
|
}
|
|
233
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,27 +127,49 @@ 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) {
|
|
135
|
+
// If we error, treat as reverted
|
|
101
136
|
const errorResult = serializeWithMessagePack({
|
|
102
137
|
reverted: true,
|
|
103
|
-
output: [] as
|
|
138
|
+
output: [] as Fr[],
|
|
104
139
|
revertReason: `Unexpected Error ${error.message}`,
|
|
105
140
|
endTreeSnapshots: TreeSnapshots.empty(),
|
|
141
|
+
publicTxEffect: PublicTxEffect.empty(),
|
|
106
142
|
});
|
|
107
|
-
|
|
143
|
+
await writeOutput(errorResult.toString('base64') + '\n');
|
|
108
144
|
}
|
|
109
145
|
}
|
|
110
146
|
|
|
111
147
|
function mainLoop() {
|
|
112
148
|
const rl = createInterface({ input: process.stdin, terminal: false });
|
|
149
|
+
|
|
150
|
+
// Process lines sequentially to avoid race conditions in responses
|
|
151
|
+
const lineQueue: string[] = [];
|
|
152
|
+
let processing = false;
|
|
153
|
+
|
|
154
|
+
async function processQueue() {
|
|
155
|
+
if (processing || lineQueue.length === 0) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
processing = true;
|
|
159
|
+
while (lineQueue.length > 0) {
|
|
160
|
+
const line = lineQueue.shift()!;
|
|
161
|
+
await execute(line);
|
|
162
|
+
}
|
|
163
|
+
processing = false;
|
|
164
|
+
}
|
|
165
|
+
|
|
113
166
|
rl.on('line', (line: string) => {
|
|
114
167
|
if (line.trim()) {
|
|
115
|
-
|
|
168
|
+
lineQueue.push(line);
|
|
169
|
+
void processQueue();
|
|
116
170
|
}
|
|
117
171
|
});
|
|
118
172
|
rl.on('close', () => process.exit(0));
|
|
119
173
|
}
|
|
120
174
|
|
|
121
|
-
mainLoop();
|
|
175
|
+
void mainLoop();
|
|
@@ -572,6 +572,10 @@ export class HintingMerkleWriteOperations implements MerkleTreeWriteOperations {
|
|
|
572
572
|
return await this.db.close();
|
|
573
573
|
}
|
|
574
574
|
|
|
575
|
+
async [Symbol.asyncDispose](): Promise<void> {
|
|
576
|
+
await this.close();
|
|
577
|
+
}
|
|
578
|
+
|
|
575
579
|
public async findLeafIndices<ID extends MerkleTreeId>(
|
|
576
580
|
treeId: ID,
|
|
577
581
|
values: MerkleTreeLeafType<ID>[],
|
|
@@ -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();
|
|
@@ -81,6 +81,10 @@ export class GuardedMerkleTreeOperations implements MerkleTreeWriteOperations {
|
|
|
81
81
|
close(): Promise<void> {
|
|
82
82
|
return this.guardAndPush(() => this.target.close());
|
|
83
83
|
}
|
|
84
|
+
|
|
85
|
+
async [Symbol.asyncDispose](): Promise<void> {
|
|
86
|
+
await this.close();
|
|
87
|
+
}
|
|
84
88
|
getTreeInfo(treeId: MerkleTreeId): Promise<TreeInfo> {
|
|
85
89
|
return this.guardAndPush(() => this.target.getTreeInfo(treeId));
|
|
86
90
|
}
|