@@ -19,7 +19,7 @@ import {
1919} from '../avm/fixtures/utils.js' ;
2020import { PublicContractsDB } from '../public_db_sources.js' ;
2121import { MeasuredCppPublicTxSimulator } from '../public_tx_simulator/cpp_public_tx_simulator.js' ;
22- import { MeasuredPublicTxSimulator } from '../public_tx_simulator/measured_public_tx_simulator .js' ;
22+ import { MeasuredCppVsTsPublicTxSimulator } from '../public_tx_simulator/cpp_vs_ts_public_tx_simulator .js' ;
2323import type { MeasuredPublicTxSimulatorInterface } from '../public_tx_simulator/public_tx_simulator_interface.js' ;
2424import { TestExecutorMetrics } from '../test_executor_metrics.js' ;
2525import { SimpleContractDataSource } from './simple_contract_data_source.js' ;
@@ -44,30 +44,43 @@ const defaultConfig: PublicSimulatorConfig = PublicSimulatorConfig.from({
4444 collectStatistics : false ,
4545} ) ;
4646
47+ /**
48+ * Factory type for creating a MeasuredPublicTxSimulatorInterface.
49+ */
50+ export type MeasuredSimulatorFactory = (
51+ merkleTree : MerkleTreeWriteOperations ,
52+ contractsDB : PublicContractsDB ,
53+ globals : GlobalVariables ,
54+ metrics : TestExecutorMetrics ,
55+ config : PublicSimulatorConfig ,
56+ ) => MeasuredPublicTxSimulatorInterface ;
57+
4758/**
4859 * A test class that extends the BaseAvmSimulationTester to enable real-app testing of the PublicTxSimulator.
4960 * It provides an interface for simulating one transaction at a time and maintains state between subsequent
5061 * transactions.
5162 */
5263export class PublicTxSimulationTester extends BaseAvmSimulationTester {
5364 protected txCount : number = 0 ;
54- private simulator : MeasuredPublicTxSimulatorInterface ;
65+ private simulator ? : MeasuredPublicTxSimulatorInterface ;
5566 private metricsPrefix ?: string ;
5667
5768 constructor (
5869 merkleTree : MerkleTreeWriteOperations ,
5970 contractDataSource : SimpleContractDataSource ,
6071 globals : GlobalVariables = defaultGlobals ( ) ,
6172 private metrics : TestExecutorMetrics = new TestExecutorMetrics ( ) ,
62- useCppSimulator : boolean = false ,
73+ simulatorFactory ?: MeasuredSimulatorFactory ,
6374 config : PublicSimulatorConfig = defaultConfig ,
6475 ) {
6576 super ( contractDataSource , merkleTree ) ;
6677
6778 const contractsDB = new PublicContractsDB ( contractDataSource ) ;
68- this . simulator = useCppSimulator
69- ? new MeasuredCppPublicTxSimulator ( merkleTree , contractsDB , globals , this . metrics , config )
70- : new MeasuredPublicTxSimulator ( merkleTree , contractsDB , globals , this . metrics , config ) ;
79+ if ( simulatorFactory ) {
80+ this . simulator = simulatorFactory ( merkleTree , contractsDB , globals , this . metrics , config ) ;
81+ } else {
82+ this . simulator = new MeasuredCppPublicTxSimulator ( merkleTree , contractsDB , globals , this . metrics , config ) ;
83+ }
7184 }
7285
7386 public static async create (
@@ -79,7 +92,10 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
7992 ) : Promise < PublicTxSimulationTester > {
8093 const contractDataSource = new SimpleContractDataSource ( ) ;
8194 const merkleTree = await worldStateService . fork ( ) ;
82- return new PublicTxSimulationTester ( merkleTree , contractDataSource , globals , metrics , useCppSimulator , config ) ;
95+ const simulatorFactory : MeasuredSimulatorFactory = useCppSimulator
96+ ? ( mt , cdb , g , m , c ) => new MeasuredCppPublicTxSimulator ( mt , cdb , g , m , c )
97+ : ( mt , cdb , g , m , c ) => new MeasuredCppVsTsPublicTxSimulator ( mt , cdb , g , m , c ) ;
98+ return new PublicTxSimulationTester ( merkleTree , contractDataSource , globals , metrics , simulatorFactory , config ) ;
8399 }
84100
85101 public setMetricsPrefix ( prefix : string ) {
@@ -136,6 +152,11 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
136152 const txLabelWithCount = `${ txLabel } /${ this . txCount - 1 } ` ;
137153 const fullTxLabel = this . metricsPrefix ? `${ this . metricsPrefix } /${ txLabelWithCount } ` : txLabelWithCount ;
138154
155+ if ( ! this . simulator ) {
156+ throw new Error (
157+ 'No simulator configured. Pass a simulatorFactory to the constructor or use PublicTxSimulationTester.create()' ,
158+ ) ;
159+ }
139160 const avmResult = await this . simulator . simulate ( tx , fullTxLabel ) ;
140161
141162 // Something like this is often useful for debugging:
0 commit comments