UNPKG

zonder

Version:

Ergonomic multi-chain indexing framework with dual runtime support for Ponder and Envio.

48 lines (47 loc) 1.69 kB
export function resolveStartBlock(startBlocks, chainName, contractName) { // If no startBlocks config at all, default to 0 if (!startBlocks) { return 0; } const chainStartBlocks = startBlocks[chainName]; // If no config for this chain, default to 0 if (!chainStartBlocks) { return 0; } // Per-contract start blocks with default fallback (default to 0 if not specified) return chainStartBlocks[contractName] ?? chainStartBlocks.default ?? 0; } /** * Resolves the chain-level start blocks, returning a safe object with defaults */ export function resolveChainStartBlocks(startBlocks, chainName) { if (!startBlocks || !startBlocks[chainName]) { return { default: 0 }; } const chainStartBlocks = startBlocks[chainName]; return { ...chainStartBlocks, default: chainStartBlocks.default ?? 0, }; } /** * Gets the minimum start block for a chain across all contracts */ export function resolveMinStartBlock(startBlocks, chainName, addresses) { if (!startBlocks || !startBlocks[chainName] || !addresses) { return 0; } const chainStartBlocks = startBlocks[chainName]; const defaultStartBlock = chainStartBlocks.default ?? 0; let minStartBlock = defaultStartBlock; // Check all contracts that have addresses on this chain for (const [contractName, address] of Object.entries(addresses)) { if (address) { const contractStartBlock = chainStartBlocks[contractName] ?? defaultStartBlock; if (contractStartBlock < minStartBlock) { minStartBlock = contractStartBlock; } } } return minStartBlock; }