import { Network } from '../constants';
import { ConfirmOptions, Connection, PublicKey, TransactionInstruction } from '@solana/web3.js';
import * as anchor from '@project-serum/anchor';
import { Program, Wallet } from '@project-serum/anchor';
import { FeesCollected, GOFXUnstaked, GOFXVault, StakePool, UnstakeableTicket, UnstakeTicket, USDCRewardVault, UserMetadata, GfxStakeRewardsProgramTypes } from '../types';
import { Swap } from 'goosefx-ssl-sdk';
export interface SwapRouteParams {
    ammProgram: PublicKey;
    state: PublicKey;
    config: PublicKey;
    authority: PublicKey;
    inputVault: PublicKey;
    outputVault: PublicKey;
    inputTokenProgram: PublicKey;
    outputTokenProgram: PublicKey;
    observationState: PublicKey;
    inputMint: PublicKey;
    outputMint: PublicKey;
    amountIn?: anchor.BN;
    minOut?: anchor.BN;
    inputTokenAccount?: PublicKey;
}
type LSTRewardsAccount = anchor.IdlAccounts<GfxStakeRewardsProgramTypes>['lstRewards'];
type TokenCrankAccount = anchor.IdlAccounts<GfxStakeRewardsProgramTypes>['tokenCrank'];
export declare class GfxStakeRewards {
    connection: Connection;
    network: Network;
    wallet: Wallet;
    program: Program<GfxStakeRewardsProgramTypes>;
    swap: Swap;
    static programId: PublicKey;
    constructor(connection: Connection, network: Network, wallet: Wallet);
    setConnection(conn: Connection, network: Network, commitment?: ConfirmOptions): void;
    setWallet(wallet: Wallet, commitment?: ConfirmOptions): void;
    setNetwork(network: Network, commitment?: ConfirmOptions): void;
    newProgram(commitment?: ConfirmOptions): anchor.Program<GfxStakeRewardsProgramTypes>;
    newSwap(): Swap;
    initializeUserAccount(secondaryFunder?: PublicKey, walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    crank(mint: PublicKey): Promise<TransactionInstruction>;
    crankV2Single(swap: SwapRouteParams): Promise<TransactionInstruction>;
    crankV2TwoHop(swap1: SwapRouteParams, swap2: SwapRouteParams): Promise<TransactionInstruction[]>;
    crankUserRewardsHoldingAccount(user?: PublicKey): Promise<TransactionInstruction>;
    stake(amount: anchor.BN, walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    unstake(amount: anchor.BN, walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    initializeTokenCrank(tokenCrank: PublicKey, outputMint: PublicKey, destinationOwner: PublicKey, payer?: PublicKey): Promise<TransactionInstruction>;
    crankTokensViaGammaSwap(crank: PublicKey, swap: SwapRouteParams, output?: {
        owner: PublicKey;
        mint: PublicKey;
    }): Promise<TransactionInstruction[]>;
    initializeLstRewards(authority: PublicKey, destinationReserveAccount: PublicKey, payer?: PublicKey): Promise<TransactionInstruction>;
    updateLstRewards(newAuthority: PublicKey | null, newDestinationReserveAccount: PublicKey | null, authority?: PublicKey): Promise<TransactionInstruction>;
    transferLSTRewards(reserveAccount: PublicKey, outputMint?: PublicKey): Promise<TransactionInstruction>;
    isUnstakingTicketClaimable(createdAt: number): boolean;
    resolveUnstakingTicket(unstakeableTickets: number[], walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    claimFees(walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    closeUserAccount(rentRecipient?: PublicKey, walletPublicKey?: PublicKey): Promise<TransactionInstruction>;
    getStakePool(): Promise<StakePool>;
    getUSDCRewardVault(): Promise<USDCRewardVault>;
    getFeesCollected(mint?: PublicKey): Promise<FeesCollected>;
    getGoFxVault(): Promise<GOFXVault>;
    getGoFxUnstakedVault(): Promise<GOFXUnstaked>;
    getUserMetaData(walletPublicKey?: PublicKey): Promise<UserMetadata>;
    getUnstakingTickets(walletPublicKey?: PublicKey): Promise<UnstakeTicket[]>;
    getCrankSignerPDA(crank: PublicKey, programOverride?: PublicKey): {
        publicKey: PublicKey;
        nonce: number;
    };
    getLSTRewardsPDA(programOverride?: PublicKey): {
        publicKey: PublicKey;
        nonce: number;
    };
    getLSTRewardsAccount(address?: PublicKey): Promise<LSTRewardsAccount>;
    getTokenCrankAccount(address: PublicKey): Promise<TokenCrankAccount>;
    getUnstakeableTickets(unstakingTickets: UnstakeTicket[]): UnstakeableTicket[];
    getTotalUnstakeClaimable(unstakeableTickets: UnstakeableTicket[]): number;
    getUserRewardsHoldingAccount(walletPublicKey?: PublicKey): Promise<PublicKey>;
    getUserRewardsHoldingAmount(walletPublicKey?: PublicKey): Promise<string>;
}
export {};
