import { TransactionObjectArgument } from "@mysten/sui/transactions";
import { ZkPayload } from "../interfaces";
import { Address, BigNumber, BigNumberable, DryRunTransactionBlockResponse, ID, NumStr, OnChainCallResponse, SignatureWithBytes, Signer, SuiClient, SuiTransactionBlockResponse, TransactionBlock } from "../types";
import { CoinAmounts, LiquidityInput } from "./clmm";
import { IAddRewardParams, IBluefinSpotContracts, ICoinDetails, IFeeAndRewards, ILiquidityParams, IRewardAmounts, IRewardCoinsInPool, IShioFastModeCustomRange } from "./interfaces";
import { IOnChainCallOptionalParams, ISignerConfig, ISwapParams, ISwapRoute } from "./interfaces/IOnchainCalls";
import { Pool } from "./types";
import { QueryChain } from "./query-chain";
export declare class OnChainCalls {
    queryChain: QueryChain;
    suiClient: SuiClient;
    config: IBluefinSpotContracts;
    signerConfig: ISignerConfig;
    fastModeEnabled: boolean;
    constructor(_suiClient: SuiClient, _config: IBluefinSpotContracts, options?: {
        signer?: Signer;
        address?: Address;
        isUIWallet?: boolean;
        isZkLogin?: boolean;
        zkPayload?: ZkPayload;
        fastModeEnabled?: boolean;
    });
    /**
     * Signs and executes the given transaction block
     * @param txb Sui transaction block
     * @param options IOnChainCallOptionalParams
     * @returns Sui Transaction Block Response
     */
    signAndExecuteTxb(txb: TransactionBlock, options?: IOnChainCallOptionalParams): Promise<SuiTransactionBlockResponse>;
    /**
     * Signs the given transaction
     * @param txb Sui transaction block
     * @returns Sui Transaction Block Response
     */
    signTransaction(txb: TransactionBlock): Promise<SignatureWithBytes>;
    /**
     * Signs and executes the given transaction block
     * @param txb Sui transaction block
     * @returns Sui Transaction Block Response
     */
    dryRunTxb(txb: TransactionBlock): Promise<DryRunTransactionBlockResponse>;
    /**
     * Handles call execution
     * @param txb The transaction block
     * @param options IOnChainCallOptionalParams
     * @returns OnChainCallResponse
     */
    handleReturn(txb: TransactionBlock, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    private executeZkTransaction;
    /**
     * Allows admin to set pool creation fee
     * @param coinType The fee coin type
     * @param amount The amount of fee to be paid
     * @param options: OnChain params call
     * Returns OnChainCallResponse
     */
    setPoolCreationFee(coinType: string, amount: BigNumberable, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to create a pool for provided coins
     * @param coinA the type of coin A
     * @param coinB the type of coin B
     * @param poolName the name of pool
     * @param tickSpacing tick spacing
     * @param feeBps The fee rate of the pool in bps
     * @param price the starting price of the pool
     * @param feeCoinType The coin type to be used for payment of pool creation
     * @param options: OnChain params call
     * Returns OnChainCallResponse
     */
    createPool(coinA: ICoinDetails, coinB: ICoinDetails, poolName: string, tickSpacing: number, feeBps: NumStr, price: BigNumberable, feeCoinType: string, options?: IOnChainCallOptionalParams & {
        iconURl?: string;
    }): Promise<OnChainCallResponse>;
    /**
     * Allows caller to open a position for the provided pool for given ticks
     * @param pool Name or the pool or the pool for which to open the position
     * @param lowerTick signed lower tick number
     * @param upperTick signed upper tick number
     * @param options IOnChainCallOptionalParams & { owner: optional address of the position's owner }
     */
    openPosition(pool: Pool, lowerTick: number, upperTick: number, options?: IOnChainCallOptionalParams & {
        owner?: string;
    }): Promise<OnChainCallResponse>;
    /**
     * Allows caller to provide liquidity to the pool
     * @param pool Name or the pool itself to which liquidity is to be provided
     * @param position The ID fo the position for which liquidity is being provided
     * @param liquidity The amount of liquidity to provide
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    provideLiquidity(pool: Pool, position: ID, params: ILiquidityParams, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to provide liquidty to the pool by fixed amount of coins
     * @param pool Name or the pool itself to which liquidity is to be provided
     * @param position The ID fo the position for which liquidity is being provided
     * @param amount The amount of coins to be provided
     * @param isFixedA True if the amount being provided is coin A
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    provideLiquidityWithFixedAmount(pool: Pool, position: ID, liquidityInput: LiquidityInput, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to remove liquidity from the pool for provided position
     * @param pool Name or the pool itself from which liquidity will be removed
     * @param position The ID of the position for which liquidity is being removed from
     * @param params: LiquidityInput
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    removeLiquidity(pool: Pool, position: ID, params: LiquidityInput, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to open a position and provide liquidity to the pool in a single Tx
     * @param pool Name or the pool or the pool for which to open the position
     * @param params Liquidity params
     * @param options: IOnChainCallOptionalParams
     */
    openPositionWithLiquidity(pool: Pool, params: ILiquidityParams, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to open a position and provide liquidity to the pool by fixed amount
     * @param pool Name or the pool or the pool for which to open the position
     * @param lowerTick The lower tick unsigned bits
     * @param upperTick The upper tick unsigned bits
     * @param liquidity The amount of liquidity to be provided
     * @param options: IOnChainCallOptionalParams
     */
    openPositionWithFixedAmount(pool: Pool, lowerTick: number, upperTick: number, params: LiquidityInput, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to fully close the provided position. Any residual liquidity is withdrawn
     * @param pool The pool for which the position is providing liquidity
     * @param position The ID fo the position to be closed
     * @param options IOnChainCallOptionalParams & { transferCoinsTo: optional address to which removed liquidity will be sent to }
     * Returns OnChainCallResponse
     */
    closePosition(pool: Pool, position: ID, options?: IOnChainCallOptionalParams & {
        transferCoinsTo?: Address;
    }): Promise<OnChainCallResponse>;
    /**
     * Allows pool manager or rewards manager to initialize rewards in pool
     * @param pool The pool in which rewards are to be initialized
     * @param startTime start time in seconds for the rewards (must be in future).
     * @param activeForSeconds seconds for which the rewards are to remain active.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param rewardAmount reward coin amount which is to be assigned (caller must have coins of specified reward type)
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    addRewardCoinInPool(params: IAddRewardParams, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows admin of the protocol to add rewards manager in pool
     * @param address address of the reward manager
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    addRewardsManager(address: string, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows admin of the to pause/unpause a pool
     * @param pool The pool for which to update pause status
     * @param pause True/False the new status of the pool
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    updatePoolStatus(pool: Pool, pause: boolean, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows current pool manager to set a new pool manager
     * @param pool the pool for which to set the manger
     * @param address address of the new manager
     * @param options IOnChainCallOptionalParams
     */
    setPoolManager(pool: Pool, address: string, options?: IOnChainCallOptionalParams & {
        owner?: string;
    }): Promise<OnChainCallResponse>;
    /**
     * fetches pool manager of a given pool
     * @param pool the pool for which to set the manger
     * @param options IOnChainCallOptionalParams
     */
    getPoolManager(pool: Pool, options?: IOnChainCallOptionalParams & {
        owner?: string;
    }): Promise<string>;
    /**
     * fetches information of rewards given in a pool
     * @param pool the pool for which rewards are to be fetched
     * @param options IOnChainCallOptionalParams
     * Returns  IRewardCoinsInPool[]
     */
    getRewardCoinsInPool(pool: Pool): Promise<IRewardCoinsInPool[]>;
    /**
     * Allows pool manager or rewards manager to update reward emissions of initialized rewards in pool
     * @param pool The pool in which rewards are initialized
     * @param activeForSeconds seconds for which the rewards are to remain active.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param rewardAmount reward coin amount which is to be assigned (caller must have coins of specified reward type)
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    updateRewardCoinEmission(pool: Pool, activeForSeconds: number, rewardCoinType: string, rewardAmount: BigNumber, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows pool manager or rewards manager to add seconds to the reward emissions of initialized rewards in pool
     * @param pool The pool in which rewards are intialized
     * @param secondsToAdd seconds to increase in reward emission.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    addSecondsToRewardCoinEmission(pool: Pool, secondsToAdd: number, rewardCoinType: string, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows the current admin of the protocol to increase
     * the supported protocol version
     */
    updateSupportedVersion(options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Fetches the rewards accrued by the user
     * by dev inspecting `collect_reward` method with provided params
     * @param pool The pool for which the position is providing liquidity
     * @param position id of the position against which rewards are accrued.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param options IOnChainCallOptionalParams & { rewardCoinsType?: string[] }
     * Returns IRewardAmounts[]
     */
    getAccruedRewards(pool: Pool, position: ID, options?: IOnChainCallOptionalParams & {
        rewardCoinsType?: string[];
    }): Promise<IRewardAmounts[]>;
    /**
     * Fetches the fee and rewards accrued by the user in a given position
     * by dev inspecting `collect_reward` and `get_accrued_fee` method with provided params
     * @param pool The pool for which the position is providing liquidity
     * @param position id of the position against which rewards and fees are accrued.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param options IOnChainCallOptionalParams & { rewardCoinsType?: string[] }
     * Returns IFeeAndRewards
     */
    getAccruedFeeAndRewards(pool: Pool, position: ID, options?: IOnChainCallOptionalParams): Promise<IFeeAndRewards>;
    /**
     * Allows user to collect accrued rewards.
     * @param pool The pool for which the position is providing liquidity
     * @param position id of the position against which rewards are accrued.
     * @param options IOnChainCallOptionalParams & { rewardCoinsType?: string[] }
     * Returns OnChainCallResponse
     */
    collectRewards(pool: Pool, position: ID, options?: IOnChainCallOptionalParams & {
        rewardCoinsType?: string[];
    }): Promise<OnChainCallResponse>;
    /**
     * Allows user to collect accrued fees and rewards from the provided position
     * @param pool The pool for which the position is providing liquidity
     * @param position id of the position against which fees and rewards are accrued.
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    collectFeeAndRewards(pool: Pool, position: ID, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows user to collect accrued rewards from all the provided positions
     * @param userAddress The address of the user
     * @param positionData positions data required for claiming rewards
     * @param options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    collectRewardsForAllPositions(userAddress: string, positionsData?: {
        pool: Pool;
        positionId: ID;
    }[], options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to perform a swap on the pool
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    swapAssets(params: ISwapParams, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Dev inspects `calculate_swap_results` method with provided params
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    computeSwapResults(params: ISwapParams, options?: IOnChainCallOptionalParams): Promise<any>;
    /**
     * Returns the estimated amount (input or output) the user will get for the swap
     * by dev inspecting `calculate_swap_results` method with provided params
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    getEstimatedAmount(params: ISwapParams, options?: IOnChainCallOptionalParams): Promise<number>;
    /**
     * Allows the admin of the bluefin spot protocol to change the protocol fee share of a pool
     * @param pool The pool for which protocol fee share is being updated
     * @param protocolFeeShare the new protocol fee share, must be in 1e6 format. 100% is represented as 1e6
     * @param options
     */
    updateProtocolFeeShare(pool: Pool, protocolFeeShare: BigNumberable, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to execute the swap route to convert Asset A -> B -> C
     */
    executeSwapRoute(route: ISwapRoute, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Allows caller to claim accrued fee from the provided position
     * @param pool The name of the pool or the pool itself
     * @param position The position id from which to collect fee
     * @param options IOnChainCallOptionalParams
     */
    collectFee(pool: Pool, position: ID, options?: IOnChainCallOptionalParams): Promise<OnChainCallResponse>;
    /**
     * Returns the fee accrued by provided position
     * @param pool The complete state of the pool
     * @param position The id of the position for which to get accrued fee
     * @returns CoinAmounts: The fee accrued for coin A and B
     */
    getAccruedFee(pool: Pool, position: ID): Promise<CoinAmounts>;
    /**
     * Returns the fee accrued by provided position
     * @param pool The complete state of the pool
     * @param position The id of the position for which to get accrued fee
     * @returns CoinAmounts: The fee accrued for coin A and B
     */
    getAccruedFeeForPositions(args: Array<{
        pool: Pool;
        position: ID;
    }>): Promise<Array<CoinAmounts>>;
    /**
     * Returns true/false if the provided coin type is supported for pool creation along with the fee amount
     */
    getPoolCreationFeeInfoForCoin(coinType: string): Promise<{
        supported: boolean;
        amount: number;
    }>;
    /**
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    private _swap;
    /**
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns txBlock and coinOut
     */
    swapAssetsAndReturnCoin(params: ISwapParams, options?: IOnChainCallOptionalParams): Promise<{
        txb: TransactionBlock;
        coinOut: TransactionObjectArgument;
    }>;
    swapAssetsAndReturnCoinV2(params: ISwapParams, balanceToSwap: TransactionObjectArgument, options?: IOnChainCallOptionalParams): Promise<{
        txb: TransactionBlock;
        coinOut: TransactionObjectArgument;
    }>;
    /**
     * @param pool The pool to which liquidity is to be provided
     * @param position ID or the position object for which liquidity is being provided
     * @param params Liquidity params
     * @param options IOnChainCallOptionalParams
     * Returns Transaction Block
     */
    private _provideLiquidityInternal;
    /**
     * @param pool The pool to which liquidity is to be provided
     * @param position ID or the position object for which liquidity is being provided
     * @param params Liquidity params
     * @param options IOnChainCallOptionalParams
     * Returns Transaction Block
     */
    private _provideLiquidityInternalWithInputCoins;
    /**
     * @param pool The pool to which liquidity is to be provided
     * @param position ID or the position object for which liquidity is being provided
     * @param liquidityInput LiquidityInput
     * @param options IOnChainCallOptionalParams
     * Returns Transaction Block
     */
    private _provideLiquidityFixedAmountInternal;
    /**
     * Allows caller to remove liquidity from the pool for provided position
     * @param pool Name or the pool itself from which liquidity will be removed
     * @param position The ID fo the position for which liquidity is being removed from
     * @param position: liquidity Input params
     * @param options IOnChainCallOptionalParams & { transferCoinsTo: optional address to which removed liquidity will be sent to }
     * Returns Transaction Block
     */
    private _removeLiquidityInternal;
    /**
     * Internal method that Allows user to collect accrued rewards from the provided position
     * @param pool The pool for which the position is providing liquidity
     * @param position id of the position against which rewards are accrued.
     * @param rewardCoinType reward coin type (eg. 0x81650ac0868edf55349fa41d4323db5b8a4827bab3b672c16c14c7135abcc3df::usdc::USDC)
     * @param options IOnChainCallOptionalParams & { rewardCoinsType?: string[] }
     * Returns TransactionBlock
     */
    private _collectRewardInternal;
    /**
     * Internal method that allows caller to claim accrued fee from the provided position
     * @param pool The name of the pool or the pool itself
     * @param position The position id from which to collect fee
     * @param options IOnChainCallOptionalParams
     * Returns TransactionBlock
     */
    private _collectFeeInternal;
    /**
     * Allows caller to open a position for the provided pool for given ticks
     * @param pool Name or the pool or the pool for which to open the position
     * @param lowerTick The lower tick (signed)
     * @param upperTick The upper tick (signed)
     */
    private _openPositionInternal;
    /**
     * @param params The swap contract call parameters
     * @param  options IOnChainCallOptionalParams
     * Returns OnChainCallResponse
     */
    private _computeSwapResults;
    isBluePointsReward(coinType: any): boolean;
    /**
     * Handles the shio fast mode and appends the tip for the transaction block.
     * @param txb - The transaction block to be processed.
     * @param shioFastModeCustomRange - fast mode tip
     */
    appendTipToTransaction(txb: TransactionBlock, shioFastModeCustomRange?: IShioFastModeCustomRange): Promise<void>;
}
