import { type ReadContract, type Address, type Drift, type ReadWriteContract, type ReadWriteAdapter, type HexString } from "@delvtech/drift";
import { FlaunchZapV1_1_6Abi } from "../abi/FlaunchZapV1_1_6";
import { IPFSParams, Permissions } from "../types";
import { ReadFlaunchPositionManagerV1_1 } from "./FlaunchPositionManagerV1_1Client";
export type FlaunchZapABI = typeof FlaunchZapV1_1_6Abi;
export interface FlaunchParams {
    name: string;
    symbol: string;
    tokenUri: string;
    /** @deprecated FairLaunch has been deprecated. Please set fairLaunchPercent to 0. */
    fairLaunchPercent: number;
    fairLaunchDuration: number;
    initialMarketCapUSD: number;
    creator: Address;
    creatorFeeAllocationPercent: number;
    flaunchAt?: bigint;
    premineAmount?: bigint;
    treasuryManagerParams?: {
        manager?: Address;
        permissions?: Permissions;
        initializeData?: HexString;
        depositData?: HexString;
    };
    trustedSignerSettings?: {
        enabled: boolean;
        walletCap?: bigint;
        txCap?: bigint;
        trustedFeeSigner?: Address;
        premineSignedMessage?: {
            deadline: number;
            signature: HexString;
        };
    };
}
export interface FlaunchIPFSParams extends Omit<FlaunchParams, "tokenUri">, IPFSParams {
}
export interface FlaunchWithRevenueManagerParams extends Omit<FlaunchParams, "treasuryManagerParams"> {
    revenueManagerInstanceAddress: Address;
    treasuryManagerParams?: {
        permissions?: Permissions;
    };
}
export interface FlaunchWithRevenueManagerIPFSParams extends Omit<FlaunchWithRevenueManagerParams, "tokenUri">, IPFSParams {
}
export interface FlaunchWithSplitManagerParams extends Omit<FlaunchParams, "treasuryManagerParams"> {
    creatorSplitPercent: number;
    managerOwnerSplitPercent: number;
    splitReceivers: {
        address: Address;
        percent: number;
    }[];
    treasuryManagerParams?: {
        permissions?: Permissions;
    };
}
export interface FlaunchWithSplitManagerIPFSParams extends Omit<FlaunchWithSplitManagerParams, "tokenUri">, IPFSParams {
}
export interface FlaunchWithDynamicSplitManagerParams extends Omit<FlaunchParams, "treasuryManagerParams"> {
    creatorShare: bigint;
    managerOwnerShare: bigint;
    moderator: Address;
    splitReceivers: {
        address: Address;
        share: bigint;
    }[];
    treasuryManagerParams?: {
        permissions?: Permissions;
    };
}
export interface FlaunchWithDynamicSplitManagerIPFSParams extends Omit<FlaunchWithDynamicSplitManagerParams, "tokenUri">, IPFSParams {
}
export interface DeployRevenueManagerParams {
    protocolRecipient: Address;
    protocolFeePercent: number;
    permissions?: Permissions;
}
export interface DeployStakingManagerParams {
    managerOwner: Address;
    stakingToken: Address;
    minEscrowDuration: bigint;
    minStakeDuration: bigint;
    creatorSharePercent: number;
    ownerSharePercent: number;
    permissions?: Permissions;
}
export interface DeployBuyBackManagerParams {
    managerOwner: Address;
    creatorSharePercent: number;
    ownerSharePercent: number;
    buyBackPoolKey: {
        currency0: Address;
        currency1: Address;
        fee: number;
        tickSpacing: number;
        hooks: Address;
    };
    permissions?: Permissions;
}
/**
 * Base client for interacting with the FlaunchZap contract in read-only mode
 * Provides basic contract initialization
 */
export declare class ReadFlaunchZap {
    drift: Drift;
    chainId: number;
    readonly contract: ReadContract<FlaunchZapABI>;
    readonly TOTAL_SUPPLY: bigint;
    readonly readPositionManagerV1_1: ReadFlaunchPositionManagerV1_1;
    /**
     * Creates a new ReadFlaunchZap instance
     * @param chainId - The chain ID of the contract
     * @param address - The address of the FlaunchZap contract
     * @param drift - Optional drift instance for contract interactions (creates new instance if not provided)
     * @throws Error if address is not provided
     */
    constructor(chainId: number, address: Address, drift?: Drift);
    getPremineCostInWei(params: {
        initialPriceParams: HexString;
        premineAmount: bigint;
        slippagePercent?: number;
    }): Promise<bigint>;
    getFlaunchingFee(params: {
        sender: Address;
        initialPriceParams: HexString;
        slippagePercent?: number;
    }): Promise<bigint>;
    /**
     * Calculates the ETH required to flaunch a token, takes into account the ETH for premine and the flaunching fee
     */
    ethRequiredToFlaunch(params: {
        premineAmount: bigint;
        initialPriceParams: HexString;
        slippagePercent?: number;
    }): Promise<bigint>;
}
/**
 * Extended client for interacting with the FlaunchZap contract with write capabilities
 */
export declare class ReadWriteFlaunchZap extends ReadFlaunchZap {
    contract: ReadWriteContract<FlaunchZapABI>;
    constructor(chainId: number, address: Address, drift?: Drift<ReadWriteAdapter>);
    /**
     * Flaunches a new token, supports premine
     * @param params - Parameters for the flaunch
     * @param params.fairLaunchPercent - @deprecated FairLaunch has been deprecated. Please set to 0.
     * @returns Transaction response for the flaunch creation
     */
    flaunch(params: FlaunchParams): Promise<`0x${string}`>;
    flaunchIPFS(params: FlaunchIPFSParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token for a revenue manager
     * @param params - Parameters for the flaunch with revenue manager
     * @param params.name - The name of the token
     * @param params.symbol - The symbol of the token
     * @param params.tokenUri - The URI containing the token metadata
     * @param params.fairLaunchPercent - @deprecated FairLaunch has been deprecated. Please set to 0.
     * @param params.fairLaunchDuration - Duration of fair launch in seconds
     * @param params.initialMarketCapUSD - Initial market cap in USD
     * @param params.creator - Address of the token creator
     * @param params.creatorFeeAllocationPercent - Percentage of fees allocated to creator (0-100)
     * @param params.protocolRecipient - Address to receive protocol fees
     * @param params.protocolFeePercent - Percentage of fees allocated to protocol (0-100)
     * @param params.flaunchAt - Optional timestamp when the flaunch should start
     * @param params.premineAmount - Optional amount of tokens to premine
     * @returns Transaction response for the flaunch creation
     */
    flaunchWithRevenueManager(params: FlaunchWithRevenueManagerParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token for a revenue manager, storing the token metadata on IPFS
     * @param params - Parameters for the flaunch including all revenue manager params and IPFS metadata
     * @returns Promise resolving to the transaction response for the flaunch creation
     */
    flaunchIPFSWithRevenueManager(params: FlaunchWithRevenueManagerIPFSParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token that splits the creator fees to the creator and a list of recipients
     * @param params - Parameters for the flaunch with split manager
     * @param params.name - The name of the token
     * @param params.symbol - The symbol of the token
     * @param params.tokenUri - The URI containing the token metadata
     * @param params.fairLaunchPercent - @deprecated FairLaunch has been deprecated. Please set to 0.
     * @param params.fairLaunchDuration - Duration of fair launch in seconds
     * @param params.initialMarketCapUSD - Initial market cap in USD
     * @param params.creator - Address of the token creator
     * @param params.creatorFeeAllocationPercent - Percentage of fees allocated to creator (0-100)
     * @param params.creatorSplitPercent - Split percentage of the fees for the creator (0-100)
     * @param params.managerOwnerSplitPercent - Split percentage of the fees for the manager owner (0-100)
     * @param params.splitReceivers - List of recipients and their percentage of the fees
     * @param params.flaunchAt - Optional timestamp when the flaunch should start
     * @param params.premineAmount - Optional amount of tokens to premine
     * @param params.treasuryManagerParams - Optional treasury manager configuration
     * @returns Transaction response for the flaunch creation
     */
    flaunchWithSplitManager(params: FlaunchWithSplitManagerParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token that splits the creator fees to the creator and a list of recipients, storing the token metadata on IPFS
     * @param params - Parameters for the flaunch with split manager including all IPFS metadata
     * @returns Promise resolving to the transaction response for the flaunch creation
     */
    flaunchIPFSWithSplitManager(params: FlaunchWithSplitManagerIPFSParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token with the Dynamic Address Fee Split manager.
     * Unlike static splits, recipient shares are mutable post-deployment.
     * @param params - Parameters for the flaunch with dynamic split manager
     * @returns Transaction response for the flaunch creation
     */
    flaunchWithDynamicSplitManager(params: FlaunchWithDynamicSplitManagerParams): Promise<`0x${string}`>;
    /**
     * Flaunches a new token with dynamic split manager and stores metadata on IPFS.
     * @param params - Parameters for dynamic split manager flow including IPFS metadata
     * @returns Transaction response for the flaunch creation
     */
    flaunchIPFSWithDynamicSplitManager(params: FlaunchWithDynamicSplitManagerIPFSParams): Promise<`0x${string}`>;
    /**
     * Deploys a new revenue manager
     * @param params - Parameters for deploying the revenue manager
     * @param params.protocolRecipient - The address of the protocol recipient
     * @param params.protocolFeePercent - The percentage of the protocol fee
     * @param params.permissions - The permissions for the revenue manager
     * @returns Transaction response
     */
    deployRevenueManager(params: DeployRevenueManagerParams): Promise<`0x${string}`>;
    /**
     * Deploys a new staking manager
     * @param params - Parameters for deploying the staking manager
     * @param params.managerOwner - The address of the manager owner
     * @param params.stakingToken - The address of the token to be staked
     * @param params.minEscrowDuration - The minimum duration (in seconds) that the creator's NFT is locked for
     * @param params.minStakeDuration - The minimum duration (in seconds) that the user's tokens are locked for
     * @param params.creatorSharePercent - The % share that a creator will earn from their token
     * @param params.ownerSharePercent - The % share that the manager owner will earn from their token
     * @param params.permissions - The permissions for the staking manager
     * @returns Transaction response
     */
    deployStakingManager(params: DeployStakingManagerParams): Promise<`0x${string}`>;
    /**
     * Deploys a new BuyBack manager
     * @param params - Parameters for deploying the BuyBack manager
     * @param params.managerOwner - The address of the manager owner
     * @param params.creatorSharePercent - The % share that a creator will earn from their token (0-100)
     * @param params.ownerSharePercent - The % share that the manager owner will earn from their token (0-100)
     * @param params.buyBackPoolKey - The Uniswap V4 pool key configuration for the buyback pool
     * @param params.buyBackPoolKey.currency0 - The lower currency of the pool (sorted numerically)
     * @param params.buyBackPoolKey.currency1 - The higher currency of the pool (sorted numerically)
     * @param params.buyBackPoolKey.fee - The pool LP fee, capped at 1_000_000
     * @param params.buyBackPoolKey.tickSpacing - Tick spacing for the pool
     * @param params.buyBackPoolKey.hooks - The hooks address of the pool
     * @param params.permissions - The permissions for the BuyBack manager
     * @returns Transaction response
     */
    deployBuyBackManager(params: DeployBuyBackManagerParams): Promise<`0x${string}`>;
}
//# sourceMappingURL=FlaunchZapClient.d.ts.map