import { Address, BN } from "@project-serum/anchor";
import { PublicKey } from "@solana/web3.js";
import { ClosePositionQuote, OpenPositionQuote, SwapQuote } from "./quotes/types";
import { MultiTransactionBuilder } from "./utils/public/multi-transaction-builder";
import { TransactionBuilder, WhirlpoolData, TickSpacing } from "@orca-so/whirlpool-client-sdk";
import { WhirlpoolContext } from "./context";
import { LiquidityDistribution } from "./impl/liquidity-distribution";
export declare type Whirlpool = {
    getAddress(): PublicKey;
    getAccount(refresh: boolean): Promise<WhirlpoolData | null>;
    getLiquidityDistribution(tickLower: number, tickUpper: number, refresh: boolean): Promise<LiquidityDistribution>;
    init(param: InitPoolTxParam): {
        tx: TransactionBuilder;
        address: PublicKey;
    };
    openPosition(quote: OpenPositionQuote): Promise<{
        tx: MultiTransactionBuilder;
        mint: PublicKey;
    }>;
    closePosition(quote: ClosePositionQuote): Promise<TransactionBuilder>;
    swap(quote: SwapQuote): Promise<MultiTransactionBuilder>;
    initTickArray(startTick: number): Promise<TransactionBuilder>;
    initTickArrayGap(): Promise<MultiTransactionBuilder>;
    setFeeRate(feeRate: number): Promise<TransactionBuilder>;
    setProtocolFeeRate(protocolFeeRate: number): Promise<TransactionBuilder>;
    collectProtocolFee(): Promise<TransactionBuilder>;
    initReward(param: InitRewardTxParam): {
        tx: TransactionBuilder;
        rewardVault: PublicKey;
    };
    setRewardAuthority(newRewardAuthority: Address, rewardIndex: number): TransactionBuilder;
    setRewardEmissions(rewardIndex: number, emissionsPerSecondX64: BN): Promise<TransactionBuilder>;
    setRewardAuthorityBySuperAuthority(newRewardAuthority: Address, rewardIndex: number): TransactionBuilder;
};
export declare class WhirlpoolInstance {
    static fromAddress(ctx: WhirlpoolContext, address: Address): Whirlpool;
    static fromTokens(ctx: WhirlpoolContext, tokenMintA: Address, tokenMintB: Address, tickSpacing: TickSpacing): Whirlpool;
}
export declare type InitPoolTxParam = {
    initSqrtPrice: BN;
    tokenMintA: Address;
    tokenMintB: Address;
    tickSpacing: TickSpacing;
};
export declare type InitRewardTxParam = {
    rewardAuthority: Address;
    rewardMint: Address;
    rewardIndex: number;
};
