import BigNumber from 'bignumber.js';
import { Authorizations, Context, Entity, Identity } from "../../internal";
import { TransactionOrderByInput } from "../../middleware/types";
import { AccountBalance, ExtrinsicData, Permissions, ProcedureMethod, ResultSet, SimplePermissions, SubCallback, Subsidy, TxTag, UnsubCallback } from "../../types";
export interface UniqueIdentifiers {
    address: string;
}
/**
 * Represents an account in the Polymesh blockchain. Accounts can hold POLYX, control Identities and vote on proposals (among other things)
 */
export declare class Account extends Entity<UniqueIdentifiers, string> {
    /**
     * @hidden
     * Check if a value is of type [[UniqueIdentifiers]]
     */
    static isUniqueIdentifiers(identifier: unknown): identifier is UniqueIdentifiers;
    /**
     * Polymesh-specific address of the account. Serves as an identifier
     */
    address: string;
    /**
     * public key of the account. This is a hex representation of the address that is transversal to any Substrate chain
     */
    key: string;
    authorizations: Authorizations<Account>;
    /**
     * @hidden
     */
    constructor(identifiers: UniqueIdentifiers, context: Context);
    /**
     * Leave the Account's Identity. This operation can only be done if the Account is a secondary key for the Identity
     */
    leaveIdentity: ProcedureMethod<void, void>;
    /**
     * Get the free/locked POLYX balance of the account
     *
     * @note can be subscribed to
     */
    getBalance(): Promise<AccountBalance>;
    getBalance(callback: SubCallback<AccountBalance>): Promise<UnsubCallback>;
    /**
     * Get the subsidized balance of this Account and the subsidizer Account. If
     *   this Account isn't being subsidized, return null
     *
     * @note can be subscribed to
     */
    getSubsidy(): Promise<Omit<Subsidy, 'beneficiary'> | null>;
    getSubsidy(callback: SubCallback<Omit<Subsidy, 'beneficiary'> | null>): Promise<UnsubCallback>;
    /**
     * Retrieve the Identity associated to this Account (null if there is none)
     */
    getIdentity(): Promise<Identity | null>;
    /**
     * Retrieve a list of transactions signed by this account. Can be filtered using parameters
     *
     * @param filters.tag - tag associated with the transaction
     * @param filters.success - whether the transaction was successful or not
     * @param filters.size - page size
     * @param filters.start - page offset
     *
     * @note uses the middleware
     */
    getTransactionHistory(filters?: {
        blockNumber?: BigNumber;
        tag?: TxTag;
        success?: boolean;
        size?: number;
        start?: number;
        orderBy?: TransactionOrderByInput;
    }): Promise<ResultSet<ExtrinsicData>>;
    /**
     * Check whether this Account is frozen. If frozen, it cannot perform any action until the primary key of the Identity unfreezes all secondary keys
     */
    isFrozen(): Promise<boolean>;
    /**
     * Retrieve the Permissions this Signer has as a Signing Key for its corresponding Identity
     */
    getPermissions(): Promise<Permissions>;
    /**
     * Check if this Account possesses certain Permissions for its corresponding Identity
     */
    hasPermissions(permissions: SimplePermissions): Promise<boolean>;
    /**
     * Determine whether this Account exists on chain
     */
    exists(): Promise<boolean>;
    /**
     * Return the Account's address
     */
    toJson(): string;
}
//# sourceMappingURL=Account.d.ts.map