import BigNumber from 'bignumber.js';
import { Procedure } from "../../internal";
import { PortfolioLike, Tier } from "../../types";
import { PortfolioId, ProcedureAuthorization } from "../../types/internal";
export interface InvestInStoParams {
    /**
     * portfolio in which the purchased Tokens will be stored
     */
    purchasePortfolio: PortfolioLike;
    /**
     * portfolio from which funds will be withdrawn to pay for the Tokens
     */
    fundingPortfolio: PortfolioLike;
    /**
     * amount of tokens to purchase
     */
    purchaseAmount: BigNumber;
    /**
     * maximum average price to pay per Token (optional)
     */
    maxPrice?: BigNumber;
}
/**
 * @hidden
 */
export declare type Params = InvestInStoParams & {
    id: BigNumber;
    ticker: string;
};
/**
 * @hidden
 */
export interface Storage {
    purchasePortfolioId: PortfolioId;
    fundingPortfolioId: PortfolioId;
}
/**
 * @hidden
 */
interface TierStats {
    remainingTotal: BigNumber;
    price: BigNumber;
    remainingToPurchase: BigNumber;
}
/**
 * @hidden
 */
export declare const calculateTierStats: (tiers: Tier[], purchaseAmount: BigNumber, maxPrice?: BigNumber | undefined) => Omit<TierStats, 'remainingToPurchase'>;
/**
 * @hidden
 */
export declare function prepareInvestInSto(this: Procedure<Params, void, Storage>, args: Params): Promise<void>;
/**
 * @hidden
 */
export declare function getAuthorization(this: Procedure<Params, void, Storage>): ProcedureAuthorization;
/**
 * @hidden
 */
export declare function prepareStorage(this: Procedure<Params, void, Storage>, { purchasePortfolio, fundingPortfolio }: Params): Storage;
/**
 * @hidden
 */
export declare const investInSto: () => Procedure<Params, void, Storage>;
export {};
//# sourceMappingURL=investInSto.d.ts.map