import type { Address } from "viem";
import type { DispatchModel } from "./capabilities.js";
/**
 * Chains with a bundled Sail Protocol deployment.
 * Mainnets: Ethereum (1), Base (8453), Arbitrum (42161), Unichain (130).
 * Testnets: Base Sepolia (84532), Eth Sepolia (11155111).
 *
 * All six chains were redeployed via CREATE2 (global salt, gitCommit 1199b33)
 * so every core contract lands at the same address on every chain.
 */
export type SailChainId = 1 | 8453 | 42161 | 130 | 84532 | 11155111;
/** A pre-audited mandate template available on a chain. */
export type KnownTemplate = {
    kind: string;
    address: Address;
    chainId: SailChainId;
    label: string;
    description?: string;
};
/** One `initialize()` parameter of a clone template, for wizard/tooling display. */
export type CloneTemplateParam = {
    name: string;
    /** Solidity ABI type, e.g. "address[]", "uint256[]", "bytes4[]". */
    type: string;
    description?: string;
};
/**
 * Rich, self-describing metadata for an EIP-1167 clone permission template — the
 * wizard-/tooling-facing companion to the bare `standaloneTemplates` address map.
 * `address` mirrors `standaloneTemplates[key]` (the clone LOGIC). A clone is created
 * per account via `MandateFactory.deployAndAttach(account, address, salt,
 * initData)`, where `initData` ABI-encodes a call to `initialize(initParams…)`.
 */
export type CloneTemplateInfo = {
    /** Matching key in `standaloneTemplates`. */
    key: string;
    /** Clone LOGIC address (mirrors `standaloneTemplates[key]`). */
    address: Address;
    /** IPermission.discriminator() contract name. */
    kind: string;
    label: string;
    description?: string;
    /** ABI of the clone's `initialize(...)`, in order — what a wizard collects. */
    initParams: CloneTemplateParam[];
    /** Path (within this repo) to the canonical reference source. */
    sourceRef?: string;
};
/** Full on-chain deployment of the Sail Protocol on a given chain. */
export type SailDeployment = {
    chainId: SailChainId;
    blockNumber: number;
    deployer: Address;
    governance: Address;
    timelock: Address;
    kernel: Address;
    mandateFactory: Address;
    standardFeePolicy: Address;
    safeModuleEnabler: Address;
    treasury: Address;
    maxPermissionFeeWei: bigint;
    initialBaseFee: bigint;
    initialComplexityRate: bigint;
    /**
     * Dispatch model this kernel implements, as a static hint. Verified on-chain
     * against each kernel's DISPATCH_TYPEHASH. The SDK still prefers live detection
     * (detectKernelCapabilities) and uses this only as a fallback when the on-chain
     * read is unavailable. All deployed chains run the "selective" model, verified
     * on-chain against each kernel's DISPATCH_TYPEHASH.
     */
    dispatchModel?: DispatchModel;
    /** Pre-audited shared mandate templates available on this chain. */
    knownTemplates?: KnownTemplate[];
    /**
     * Standalone (EIP-1167 clone) permission template LOGIC addresses, keyed by a
     * short name. These are the `impl` argument to MandateFactory.deployAndAttach.
     */
    standaloneTemplates?: Record<string, Address>;
    /**
     * Self-describing metadata for selected `standaloneTemplates`, so a wizard can
     * present and configure them (label, description, `initialize()` params) without
     * authoring Solidity. Optional and incremental — not every standalone template
     * has an entry here yet.
     */
    cloneTemplates?: CloneTemplateInfo[];
};
export declare const sailDeployments: Record<SailChainId, SailDeployment>;
export declare function getSailDeployment(chainId: number): SailDeployment;
export declare function normalizeDeployment(input: Record<string, unknown>): SailDeployment;
//# sourceMappingURL=deployments.d.ts.map