import type { Logger } from '@ariestools/sdk';
import type { Provider } from 'ethers';
/**
 * Finds the first block where `address` has code via binary search on
 * `eth_getCode` — `getCode(address, block)` is empty before deployment and
 * non-empty forever after, so the flip point is the deployment block
 * (~log2(head) probes; ~23 on an 11M-block chain).
 *
 * Historical `getCode` needs an archive-capable RPC. Returns undefined when
 * the address has no code at head or any probe fails, so callers can fall
 * back to an estimate.
 */
export declare function findContractDeploymentBlock(provider: Provider, address: string): Promise<number | undefined>;
/**
 * Reads `chain.deploymentBlock` from a locator config, structurally — the
 * field ships in the SDK's ChainConfigZod but older SDK versions strip it.
 */
export declare function configuredDeploymentBlock(config: unknown): number | undefined;
/**
 * Resolves the deployment block for `address`: exact binary search first,
 * falling back to the date-based estimate (2025-06-01 heuristic) when the RPC
 * cannot answer historical `getCode` probes.
 */
export declare function resolveContractDeploymentBlock(provider: Provider, address: string, logger?: Logger): Promise<number>;
//# sourceMappingURL=findContractDeploymentBlock.d.ts.map