import { getEnv } from '@aztec-labs/foundation/config/env'; import type { LoggerBindings } from '@aztec-labs/foundation/log'; import { PublicSimulatorConfig } from '@aztec-labs/stdlib/avm'; import type { GlobalVariables } from '@aztec-labs/stdlib/tx'; import type { TelemetryClient } from '@aztec-labs/telemetry-client'; import type { AvmSimulator } from '../avm_simulator.js'; import type { PublicContractsDB } from '../public_db_sources.js'; import { DumpingPublicTxSimulator } from './dumping_public_tx_simulator.js'; import { TelemetryPublicTxSimulator } from './public_tx_simulator.js'; /** * Creates an IPC-based public tx simulator for block building. * Uses DumpingPublicTxSimulator if DUMP_AVM_INPUTS_TO_DIR env var is set (for CI/testing the AVM circuit), * otherwise uses TelemetryPublicTxSimulator (for production). */ export function createPublicTxSimulatorForBlockBuilding( avmSimulator: AvmSimulator, globalVariables: GlobalVariables, contractsDB: PublicContractsDB, forkId: number, telemetryClient: TelemetryClient, bindings?: LoggerBindings, collectDebugLogs = false, ) { const config = PublicSimulatorConfig.from({ skipFeeEnforcement: false, collectDebugLogs, collectHints: false, collectPublicInputs: false, collectStatistics: false, collectCallMetadata: false, }); const dumpDir = getEnv().DUMP_AVM_INPUTS_TO_DIR; if (dumpDir) { // must collect hints and PIs for dumping const dumpingConfig = { ...config, collectHints: true, collectPublicInputs: true, }; return new DumpingPublicTxSimulator( avmSimulator, globalVariables, contractsDB, forkId, dumpingConfig, dumpDir, bindings, ); } return new TelemetryPublicTxSimulator( avmSimulator, globalVariables, contractsDB, forkId, telemetryClient, config, bindings, ); }