import type { AugmentedProvider, Provider, TransactionEnvelope } from "@saberhq/solana-contrib";
import type { Token, TokenAmount, u64 } from "@saberhq/token-utils";
import type { PublicKey, Signer } from "@solana/web3.js";
import type { YiPrograms } from ".";
/**
 * Yi SDK.
 */
export declare class YiSDK {
    readonly provider: AugmentedProvider;
    readonly programs: YiPrograms;
    constructor(provider: AugmentedProvider, programs: YiPrograms);
    /**
     * Creates a new instance of the SDK with the given keypair.
     */
    withSigner(signer: Signer): YiSDK;
    /**
     * Loads the SDK.
     * @returns
     */
    static load({ provider }: {
        provider: Provider;
    }): YiSDK;
    /**
     * Creates a new Yi Token.
     * @returns
     */
    createYiToken({ underlyingToken, stakeFeeMillibps, unstakeFeeMillibps, mintKP, payer, }: {
        underlyingToken: Token;
        stakeFeeMillibps?: number;
        unstakeFeeMillibps?: number;
        /**
         * Keypair of the mint of the YiToken.
         */
        mintKP?: Signer;
        payer?: PublicKey;
    }): Promise<{
        tx: TransactionEnvelope;
        mint: PublicKey;
        yiToken: PublicKey;
    }>;
    /**
     * Stakes underlying tokens for Yi tokens.
     * @returns
     */
    stake({ yiTokenMint, amount, authority, }: {
        /**
         * Mint of the Yi token.
         */
        yiTokenMint: PublicKey;
        /**
         * Amount of underlying tokens to stake.
         */
        amount: u64;
        /**
         * Authority staking tokens.
         */
        authority?: PublicKey;
    }): Promise<TransactionEnvelope>;
    /**
     * Unstakes Yi tokens.
     * @returns
     */
    unstake({ amount, authority, }: {
        /**
         * Yi Token Amount
         */
        amount: TokenAmount;
        /**
         * Authority unstaking tokens.
         */
        authority?: PublicKey;
    }): Promise<TransactionEnvelope>;
}
//# sourceMappingURL=sdk.d.ts.map