import { Address, Provider } from "@project-serum/anchor";
import { PublicKey } from "@solana/web3.js";
import { ClosePositionQuote, ClosePositionQuoteParam, ClosePositionTxParam, FillTickArraysParam, OpenPositionQuote, OpenPositionQuoteParam, OpenPositionTxParam, SwapQuote, SwapQuoteParam, SwapTxParam } from "./public/types";
import { OrcaDAL } from "../dal/orca-dal";
import { MultiTransactionBuilder } from "../utils/public/multi-transaction-builder";
import { LiquidityDistribution } from "./ux/liquidity-distribution";
import { PDA, TransactionBuilder, InitTickArrayParams } from "@orca-so/whirlpool-client-sdk";
export declare class OrcaPool {
    private readonly dal;
    constructor(dal: OrcaDAL);
    /*** Utilities ***/
    /**
     * Create liquidity distribution across three tick-arrays for a pool.
     * Useful for visualizing the liquidity in the pool.
     *
     * @param poolAddress
     * @param tickLower
     * @param tickUpper
     * @param refresh
     * @returns liquidity distribution
     */
    getLiquidityDistribution(poolAddress: Address, tickLower: number, tickUpper: number, refresh?: boolean): Promise<LiquidityDistribution>;
    /**
     * Derive the pool pda given token mints and tick spacing
     *
     * @param tokenMintA
     * @param tokenMintB
     * @param stable
     * @returns
     */
    derivePDA(tokenMintA: Address, tokenMintB: Address, tickSpacing: number): PDA;
    /*** Transactions ***/
    /**
     * Construct a transaction for opening an new position
     */
    getOpenPositionTx(param: OpenPositionTxParam): Promise<{
        tx: MultiTransactionBuilder;
        mint: PublicKey;
    }>;
    /**
     * Construct a transaction for opening an new position
     */
    getOpenPositionWithMetadataTx(param: OpenPositionTxParam): Promise<{
        tx: MultiTransactionBuilder;
        mint: PublicKey;
    }>;
    /**
     * Construct a transaction for opening an new position with optional metadata
     */
    getOpenPositionWithOptMetadataTx(param: OpenPositionTxParam, withMetadata?: boolean): Promise<{
        tx: MultiTransactionBuilder;
        mint: PublicKey;
    }>;
    getInitTickArrayTx(provider: Provider, param: InitTickArrayParams): Promise<TransactionBuilder>;
    /**
     * Construct a transaction for closing an existing position
     */
    getClosePositionTx(param: ClosePositionTxParam): Promise<TransactionBuilder>;
    getLowestInitializedTickArrayTickIndex(poolAddress: Address, tickSpacing: number): Promise<number>;
    getHighestInitializedTickArrayTickIndex(poolAddress: Address, tickSpacing: number): Promise<number>;
    getInitializeGapTickArraysTx(param: FillTickArraysParam): Promise<MultiTransactionBuilder>;
    /**
     * Construct a transaction for a swap
     */
    getSwapTx(param: SwapTxParam): Promise<MultiTransactionBuilder>;
    private getDefaultSqrtPriceLimit;
    private getTickArrayPublicKeysForSwap;
    /*** Quotes ***/
    /**
     * Construct a quote for opening a new position
     */
    getOpenPositionQuote(param: OpenPositionQuoteParam): Promise<OpenPositionQuote>;
    /**
     * Construct a quote for closing an existing position
     */
    getClosePositionQuote(param: ClosePositionQuoteParam): Promise<ClosePositionQuote>;
    /**
     * Construct a quote for swap
     */
    getSwapQuote(param: SwapQuoteParam): Promise<SwapQuote>;
}
