factory
Track dynamically created contracts.
factory(config: FactoryConfig): Factory
Parameters:
address: Factory contract address or array of addresses (required)
event: Factory creation event ABI or filtered event object (required)
- Simple format:
AbiEvent<T> - Capture all factory events
- Filtered format:
{ event: AbiEvent<T>, params: {...} } - Filter by indexed parameters
parameter: Extract child address (event) => string (required)
database: Factory database instance (required)
Example:
import { factory, factorySqliteDatabase } from "@subsquid/pipes/evm";
const factoryInstance = factory({
address: "0x1f98431c8ad98523631ae4a59f267346ea31f984",
event: factoryAbi.events.PoolCreated,
parameter: "pool",
database: factorySqliteDatabase({ path: "./pools.sqlite" }),
});
Multiple factories:
const factoryInstance = factory({
address: [
"0x1f98431c8ad98523631ae4a59f267346ea31f984", // Uniswap V3
"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", // Uniswap V2
],
event: factoryAbi.events.PoolCreated,
parameter: "pool",
database: factorySqliteDatabase({ path: "./pools.sqlite" }),
});
Filtered factory events:
Single Parameter
Multiple Parameters
Array Values
const factoryInstance = factory({
address: "0x1f98431c8ad98523631ae4a59f267346ea31f984",
event: {
event: factoryAbi.events.PoolCreated,
params: {
token0: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH
},
},
parameter: "pool",
database: factorySqliteDatabase({ path: "./weth-pools.sqlite" }),
});
const factoryInstance = factory({
address: "0x1f98431c8ad98523631ae4a59f267346ea31f984",
event: {
event: factoryAbi.events.PoolCreated,
params: {
token0: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH
token1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC
fee: 3000, // 0.3% fee tier
},
},
parameter: "pool",
database: factorySqliteDatabase({ path: "./weth-usdc-pools.sqlite" }),
});
const WETH = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";
const USDC = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48";
const USDT = "0xdac17f958d2ee523a2206206994597c13d831ec7";
const factoryInstance = factory({
address: "0x1f98431c8ad98523631ae4a59f267346ea31f984",
event: {
event: factoryAbi.events.PoolCreated,
params: {
token0: [WETH, USDC, USDT], // Match any of these as token0
},
},
parameter: "pool",
database: factorySqliteDatabase({ path: "./major-tokens.sqlite" }),
});
Filtering Benefits:
- Reduces data transfer from Portal API
- Minimizes factory database size
- Focuses processing on relevant contracts
Only indexed event parameters can be used in the params object. Parameter matching is case-insensitive for addresses.
The address parameter now supports arrays to track contracts from multiple factories simultaneously.
Bugfix: factory.address now correctly represents the factory contract address (not the child contract address). This ensures accurate identification of which factory created each contract.
factorySqliteDatabase
Create SQLite factory database.
factorySqliteDatabase(config: { path: string }): FactoryDatabase
Example:
import { factorySqliteDatabase } from "@subsquid/pipes/evm";
const db = factorySqliteDatabase({ path: "./factories.sqlite" });
No longer requires await - returns the database instance synchronously.
portalSqliteCache
Create SQLite cache for Portal responses.
portalSqliteCache(config: { path: string }): PortalCache
Example:
import { portalSqliteCache } from "@subsquid/pipes/portal-cache/node";
const cache = portalSqliteCache({ path: "./cache.sqlite" });
Import from @subsquid/pipes/portal-cache/node instead of @subsquid/pipes/portal-cache.
commonAbis
Pre-defined ABIs for standard contracts.
import { commonAbis } from "@subsquid/pipes/evm";
// ERC20 Events
commonAbis.erc20.events.Transfer;
commonAbis.erc20.events.Approval;
// ERC20 Functions
commonAbis.erc20.functions.transfer;
commonAbis.erc20.functions.approve;
commonAbis.erc20.functions.name;
commonAbis.erc20.functions.symbol;
commonAbis.erc20.functions.decimals;
commonAbis.erc20.functions.balanceOf;
commonAbis.erc20.functions.totalSupply;
commonAbis.erc20.functions.allowance;
Currently, only ERC20 ABIs are available in commonAbis. For ERC721 and other token standards, use @subsquid/evm-typegen to generate custom ABIs from your contract JSON files.
pipe-ui
Web-based monitoring dashboard for pipeline visualization and performance metrics. See the Pipe UI reference for complete documentation.
Next Steps