Created
May 30, 2025 13:43
-
-
Save sogoiii/a705ed37343b868f4791bc8d2142df1d to your computer and use it in GitHub Desktop.
Doppler Ponder Config for Mainnet and Base
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { createConfig, factory } from "ponder"; | |
import { getAbiItem, http } from "viem"; | |
import { | |
UniswapV3InitializerABI, | |
UniswapV4InitializerABI, | |
UniswapV3PoolABI, | |
AirlockABI, | |
DERC20ABI, | |
DopplerABI, | |
PoolManagerABI, | |
UniswapV2PairABI, | |
ZoraFactoryABI, | |
ZoraCoinABI, | |
} from "./src/abis"; | |
import { | |
CHAIN_IDS, | |
configs, | |
zoraFactoryBase, | |
zoraStartBlock, | |
} from "./addresses"; | |
import { UniswapV2FactoryABI } from "@app/abis/UniswapV2Factory"; | |
const { unichain, mainnet, baseSepolia, ink, base } = configs; | |
export default createConfig({ | |
database: { | |
kind: "postgres", | |
connectionString: "postgresql://postgres:postgres@localhost:5442/default", | |
poolConfig: { | |
max: 100, | |
}, | |
}, | |
ordering: "multichain", | |
networks: { | |
mainnet: { | |
chainId: 1, | |
transport: http(process.env.PONDER_RPC_URL_1), | |
}, | |
// unichain: { | |
// chainId: CHAIN_IDS.unichain, | |
// transport: http(process.env.PONDER_RPC_URL_130), | |
// }, | |
baseSepolia: { | |
chainId: CHAIN_IDS.baseSepolia, | |
transport: http(process.env.PONDER_RPC_URL_84532), | |
}, | |
// ink: { | |
// chainId: CHAIN_IDS.ink, | |
// transport: http(process.env.PONDER_RPC_URL_57073), | |
// }, | |
// base: { | |
// chainId: CHAIN_IDS.base, | |
// transport: http(process.env.PONDER_RPC_URL_8453), | |
// }, | |
}, | |
blocks: { | |
ChainlinkEthPriceFeed: { | |
network: "mainnet", | |
startBlock: mainnet.startBlock, | |
interval: (60 * 5) / 12, // every 5 minutes | |
}, | |
BaseSepoliaV4PoolCheckpoints: { | |
network: "baseSepolia", | |
startBlock: baseSepolia.v4StartBlock, | |
interval: 50, // every 50 blocks | |
}, | |
BaseV4PoolCheckpoints: { | |
network: "base", | |
startBlock: base.v4StartBlock, | |
interval: 50, // every 50 blocks | |
}, | |
MetricRefresherUnichain: { | |
network: "unichain", | |
startBlock: unichain.startBlock, | |
interval: 1000, // every 1000 blocks | |
}, | |
MetricRefresherInk: { | |
network: "ink", | |
startBlock: ink.startBlock, | |
interval: 1000, // every 1000 blocks | |
}, | |
MetricRefresherBase: { | |
network: "base", | |
startBlock: base.startBlock, | |
interval: 1000, // every 1000 blocks | |
}, | |
MetricRefresherBaseSepolia: { | |
network: "baseSepolia", | |
startBlock: baseSepolia.startBlock, | |
interval: 1000, // every 1000 blocks | |
}, | |
}, | |
contracts: { | |
Airlock: { | |
abi: AirlockABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: unichain.shared.airlock, | |
// }, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: ink.shared.airlock, | |
// }, | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: baseSepolia.shared.airlock, | |
}, | |
// base: { | |
// startBlock: base.startBlock, | |
// address: base.shared.airlock, | |
// }, | |
}, | |
}, | |
UniswapV3Initializer: { | |
abi: UniswapV3InitializerABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: unichain.v3.v3Initializer, | |
// }, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: ink.v3.v3Initializer, | |
// }, | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: baseSepolia.v3.v3Initializer, | |
}, | |
// base: { | |
// startBlock: base.startBlock, | |
// address: base.v3.v3Initializer, | |
// }, | |
}, | |
}, | |
UniswapV4Initializer: { | |
abi: UniswapV4InitializerABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: unichain.v4.v4Initializer, | |
// }, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: ink.v4.v4Initializer, | |
// }, | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: baseSepolia.v4.v4Initializer, | |
}, | |
// base: { | |
// startBlock: base.v4StartBlock, | |
// address: base.v4.v4Initializer, | |
// }, | |
}, | |
}, | |
DERC20: { | |
abi: DERC20ABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: factory({ | |
// address: unichain.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "asset", | |
// }), | |
// }, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: factory({ | |
// address: ink.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "asset", | |
// }), | |
// }, | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: factory({ | |
address: baseSepolia.v3.v3Initializer, | |
event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
parameter: "asset", | |
}), | |
}, | |
// base: { | |
// startBlock: base.startBlock, | |
// address: factory({ | |
// address: base.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "asset", | |
// }), | |
// }, | |
}, | |
}, | |
V4DERC20: { | |
abi: DERC20ABI, | |
network: { | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: factory({ | |
address: baseSepolia.v4.v4Initializer, | |
event: getAbiItem({ abi: UniswapV4InitializerABI, name: "Create" }), | |
parameter: "asset", | |
}), | |
}, | |
// base: { | |
// startBlock: base.v4StartBlock, | |
// address: factory({ | |
// address: base.v4.v4Initializer, | |
// event: getAbiItem({ abi: UniswapV4InitializerABI, name: "Create" }), | |
// parameter: "asset", | |
// }), | |
// }, | |
}, | |
}, | |
UniswapV3Pool: { | |
abi: UniswapV3PoolABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: factory({ | |
// address: unichain.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "poolOrHook", | |
// }), | |
// }, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: factory({ | |
// address: ink.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "poolOrHook", | |
// }), | |
// }, | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: factory({ | |
address: baseSepolia.v3.v3Initializer, | |
event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
parameter: "poolOrHook", | |
}), | |
}, | |
// base: { | |
// startBlock: base.startBlock, | |
// address: factory({ | |
// address: base.v3.v3Initializer, | |
// event: getAbiItem({ abi: UniswapV3InitializerABI, name: "Create" }), | |
// parameter: "poolOrHook", | |
// }), | |
// }, | |
}, | |
}, | |
ZoraFactory: { | |
abi: ZoraFactoryABI, | |
network: { | |
base: { | |
startBlock: zoraStartBlock, | |
address: zoraFactoryBase, | |
}, | |
}, | |
}, | |
ZoraCoin: { | |
abi: ZoraCoinABI, | |
network: { | |
base: { | |
startBlock: zoraStartBlock, | |
address: factory({ | |
address: zoraFactoryBase, | |
event: getAbiItem({ abi: ZoraFactoryABI, name: "CoinCreated" }), | |
parameter: "coin", | |
}), | |
}, | |
}, | |
}, | |
ZoraUniswapV3Pool: { | |
abi: UniswapV3PoolABI, | |
network: { | |
base: { | |
startBlock: zoraStartBlock, | |
address: factory({ | |
address: zoraFactoryBase, | |
event: getAbiItem({ abi: ZoraFactoryABI, name: "CoinCreated" }), | |
parameter: "pool", | |
}), | |
}, | |
}, | |
}, | |
UniswapV2Pair: { | |
abi: UniswapV2PairABI, | |
network: { | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: factory({ | |
address: baseSepolia.shared.airlock, | |
event: getAbiItem({ | |
abi: AirlockABI, | |
name: "Migrate", | |
}), | |
parameter: "pool", | |
}), | |
}, | |
// ink: { | |
// startBlock: ink.startBlock, | |
// address: factory({ | |
// address: ink.shared.airlock, | |
// event: getAbiItem({ | |
// abi: AirlockABI, | |
// name: "Migrate", | |
// }), | |
// parameter: "pool", | |
// }), | |
// }, | |
// base: { | |
// startBlock: base.startBlock, | |
// address: factory({ | |
// address: base.shared.airlock, | |
// event: getAbiItem({ | |
// abi: AirlockABI, | |
// name: "Migrate", | |
// }), | |
// parameter: "pool", | |
// }), | |
// }, | |
}, | |
}, | |
UniswapV2PairUnichain: { | |
abi: UniswapV2PairABI, | |
network: { | |
// unichain: { | |
// startBlock: unichain.startBlock, | |
// address: factory({ | |
// address: unichain.v2.factory, | |
// event: getAbiItem({ | |
// abi: UniswapV2FactoryABI, | |
// name: "PairCreated", | |
// }), | |
// parameter: "pair", | |
// }), | |
// }, | |
}, | |
}, | |
PoolManager: { | |
abi: PoolManagerABI, | |
network: { | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: baseSepolia.v4.poolManager, | |
}, | |
// base: { | |
// startBlock: base.v4StartBlock, | |
// address: base.v4.poolManager, | |
// }, | |
}, | |
}, | |
UniswapV4Pool: { | |
abi: DopplerABI, | |
network: { | |
baseSepolia: { | |
startBlock: baseSepolia.v4StartBlock, | |
address: factory({ | |
address: baseSepolia.v4.v4Initializer, | |
event: getAbiItem({ abi: UniswapV4InitializerABI, name: "Create" }), | |
parameter: "poolOrHook", | |
}), | |
}, | |
// base: { | |
// startBlock: base.v4StartBlock, | |
// address: factory({ | |
// address: base.v4.v4Initializer, | |
// event: getAbiItem({ abi: UniswapV4InitializerABI, name: "Create" }), | |
// parameter: "poolOrHook", | |
// }), | |
// }, | |
}, | |
}, | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment