import BigNumber from 'bignumber.js';
import { Context, Entity, InvestInStoParams, ModifyStoTimesParams } from "../../../internal";
import { ProcedureMethod, ResultSet, SubCallback, UnsubCallback } from "../../../types";
import { Investment, StoDetails } from './types';
export interface UniqueIdentifiers {
    id: BigNumber;
    ticker: string;
}
interface HumanReadable {
    id: string;
    ticker: string;
}
/**
 * Represents a Security Token Offering in the Polymesh blockchain
 */
export declare class Sto extends Entity<UniqueIdentifiers, HumanReadable> {
    /**
     * @hidden
     * Check if a value is of type [[UniqueIdentifiers]]
     */
    static isUniqueIdentifiers(identifier: unknown): identifier is UniqueIdentifiers;
    /**
     * identifier number of the Offering
     */
    id: BigNumber;
    /**
     * ticker of the Security Token being offered
     */
    ticker: string;
    /**
     * @hidden
     */
    constructor(identifiers: UniqueIdentifiers, context: Context);
    /**
     * Retrieve the STO's details
     *
     * @note can be subscribed to
     */
    details(): Promise<StoDetails>;
    details(callback: SubCallback<StoDetails>): Promise<UnsubCallback>;
    /**
     * Close the STO
     */
    close: ProcedureMethod<void, void>;
    /**
     * Freeze the STO
     */
    freeze: ProcedureMethod<void, Sto>;
    /**
     * Unfreeze the STO
     */
    unfreeze: ProcedureMethod<void, Sto>;
    /**
     * Modify the start/end time of the STO
     *
     * @throws if:
     *   - Trying to modify the start time on an STO that already started
     *   - Trying to modify anything on an STO that already ended
     *   - Trying to change start or end time to a past date
     */
    modifyTimes: ProcedureMethod<ModifyStoTimesParams, void>;
    /**
     * Invest in the STO
     *
     * @note required roles:
     *   - Purchase Portfolio Custodian
     *   - Funding Portfolio Custodian
     */
    invest: ProcedureMethod<InvestInStoParams, void>;
    /**
     * Retrieve all investments made on this STO
     *
     * @param opts.size - page size
     * @param opts.start - page offset
     *
     * @note supports pagination
     * @note uses the middleware
     */
    getInvestments(opts?: {
        size?: number;
        start?: number;
    }): Promise<ResultSet<Investment>>;
    /**
     * Determine whether this STO exists on chain
     */
    exists(): Promise<boolean>;
    /**
     * Return the Sto's ID and Token ticker
     */
    toJson(): HumanReadable;
}
export {};
//# sourceMappingURL=index.d.ts.map