import { ISubmittableResult } from '@polkadot/types/types';
import BigNumber from 'bignumber.js';
import { Asset, Context, DefaultPortfolio, Instruction, NumberedPortfolio, PostTransactionValue, Procedure, Venue } from "../../internal";
import { PortfolioLike } from "../../types";
import { ProcedureAuthorization } from "../../types/internal";
export interface AddInstructionParams {
    /**
     * array of Asset movements (amount, from, to, asset)
     */
    legs: {
        amount: BigNumber;
        from: PortfolioLike;
        to: PortfolioLike;
        asset: string | Asset;
    }[];
    /**
     * date at which the trade was agreed upon (optional, for off chain trades)
     */
    tradeDate?: Date;
    /**
     * date at which the trade was executed (optional, for off chain trades)
     */
    valueDate?: Date;
    /**
     * block at which the Instruction will be executed automatically (optional, the Instruction will be executed when all participants have authorized it if not supplied)
     */
    endBlock?: BigNumber;
}
export interface AddInstructionsParams {
    /**
     * array of Instructions to be added in the Venue
     */
    instructions: AddInstructionParams[];
}
/**
 * @hidden
 */
export declare type Params = AddInstructionsParams & {
    venue: Venue;
};
/**
 * @hidden
 */
export interface Storage {
    portfoliosToAffirm: (DefaultPortfolio | NumberedPortfolio)[][];
}
/**
 * @hidden
 */
export declare const createAddInstructionResolver: (context: Context, previousInstructions?: PostTransactionValue<Instruction[]> | undefined) => (receipt: ISubmittableResult) => Instruction[];
/**
 * @hidden
 */
export declare function prepareAddInstruction(this: Procedure<Params, Instruction[], Storage>, args: Params): Promise<PostTransactionValue<Instruction[]>>;
/**
 * @hidden
 */
export declare function getAuthorization(this: Procedure<Params, Instruction[], Storage>, { venue: { id: venueId } }: Params): Promise<ProcedureAuthorization>;
/**
 * @hidden
 */
export declare function prepareStorage(this: Procedure<Params, Instruction[], Storage>, { instructions }: Params): Promise<Storage>;
/**
 * @hidden
 */
export declare const addInstruction: () => Procedure<Params, Instruction[], Storage>;
//# sourceMappingURL=addInstruction.d.ts.map