Getting a pool instance with the data fetched

Usually before work begins, the preparation includes the following steps:

  1. Using mainnet data to initialize a core pool

  2. Replaying events up to the specified block

SimulatorClient(clientInstance.initCorePoolFromMainnet and clientInstance.recoverFromMainnetEventDBFile) is designed to do that. See Fetching all the data of a certain pool from Ethereum.

If you have tried MainnetDataDownloader to download or update event logs(See Uniswap-v3-Events-Downloader), then you are supposed to get the pool instance in this way:

// the database name containing downloaded-and-pre-processed mainnet events
let mainnetEventDBFilePath =

let simulationDataManager: SimulationDataManager =
  await SQLiteSimulationDataManager.buildInstance(
    "Your file path to save the internal data"
let clientInstance: SimulatorClient = new SimulatorClient(

// Specify an endBlock number
// the SimulatorClient will replay events up to that block
let endBlock = 12374077;

let configurableCorePool: ConfigurableCorePool =
  await clientInstance.recoverFromMainnetEventDBFile(

// Now you can do whatever you want with the simulated pool
// here we simply print out the square root price of the pool at the specified block height

Last updated