import { Bytes } from '@polkadot/types';
import { ISubmittableResult } from '@polkadot/types/types';
import BigNumber from 'bignumber.js';
import { AssetType, CustomAssetTypeId } from "../../polkadot/types";
import { Context, Procedure, SecurityToken } from "../../internal";
import { TokenDocument, TokenIdentifier } from "../../types";
import { ProcedureAuthorization } from "../../types/internal";
/**
 * @hidden
 */
export declare const createRegisterCustomAssetTypeResolver: (context: Context) => (receipt: ISubmittableResult) => AssetType;
export interface CreateSecurityTokenParams {
    name: string;
    /**
     * amount of tokens that will be minted on creation (optional, default doesn't mint)
     */
    totalSupply?: BigNumber;
    /**
     * whether a single token can be divided into decimal parts
     */
    isDivisible: boolean;
    /**
     * type of security that the token represents (i.e. Equity, Debt, Commodity, etc). Common values are included in the
     *   [[KnownTokenType]] enum, but custom values can be used as well. Custom values must be registered on-chain the first time
     *   they're used, requiring an additional transaction. They aren't tied to a specific Security Token
     */
    tokenType: string;
    /**
     * array of domestic or international alphanumeric security identifiers for the token (ISIN, CUSIP, etc)
     */
    tokenIdentifiers?: TokenIdentifier[];
    /**
     * (optional) funding round in which the token currently is (Series A, Series B, etc)
     */
    fundingRound?: string;
    documents?: TokenDocument[];
    /**
     * whether this asset requires investors to have a Investor Uniqueness Claim in order
     *   to hold it. Optional, defaults to true. More information about Investor Uniqueness and PUIS [here](https://developers.polymesh.live/introduction/identity#polymesh-unique-identity-system-puis)
     */
    requireInvestorUniqueness?: boolean;
}
/**
 * @hidden
 */
export declare type Params = CreateSecurityTokenParams & {
    ticker: string;
};
/**
 * @hidden
 */
export interface Storage {
    /**
     * fetched custom asset type ID and raw value in bytes. If `id.isEmpty`, then the type should be registered. A
     *   null value means the type is not custom
     */
    customTypeData: {
        id: CustomAssetTypeId;
        rawValue: Bytes;
    } | null;
}
/**
 * @hidden
 */
export declare function prepareCreateSecurityToken(this: Procedure<Params, SecurityToken, Storage>, args: Params): Promise<SecurityToken>;
/**
 * @hidden
 */
export declare function getAuthorization(this: Procedure<Params, SecurityToken, Storage>, { ticker, documents }: Params): ProcedureAuthorization;
/**
 * @hidden
 */
export declare function prepareStorage(this: Procedure<Params, SecurityToken, Storage>, { tokenType }: Params): Promise<Storage>;
/**
 * @hidden
 */
export declare const createSecurityToken: () => Procedure<Params, SecurityToken, Storage>;
//# sourceMappingURL=createSecurityToken.d.ts.map