/**
 * @file order.ts
 * @author astra <astra@volare.com>
 * @date 2022
 */
import { Address, BigNumber, EIP712TypedData, Hash } from '@volare.finance/utils.js';
import { Wallet } from 'ethers';
export declare const DOMAIN_DEFAULT: {
    chainId: number;
    verifyingContract: string;
    name: string;
    version: string;
};
export interface EIP712LimitOrderData extends EIP712TypedData {
    message: {
        makerToken: Address;
        takerToken: Address;
        makerAmount: string;
        takerAmount: string;
        takerTokenFeeAmount: string;
        maker: Address;
        taker: Address;
        sender: Address;
        feeRecipient: Address;
        pool: Address;
        expiry: string;
        salt: string;
    };
}
export declare enum OrderStatus {
    Invalid = 0,
    Fillable = 1,
    Filled = 2,
    Cancelled = 3,
    Expired = 4
}
export interface OrderInfo {
    orderHash: Hash;
    isSignatureValid: boolean;
    status: OrderStatus;
    actualFillableTakerTokenAmount: string;
}
export declare enum SignatureType {
    Illegal = 0,
    Invalid = 1,
    EIP712 = 2,
    EthSign = 3
}
declare const COMMON_ORDER_DEFAULT_VALUES: {
    makerToken: string;
    takerToken: string;
    makerAmount: BigNumber;
    takerAmount: BigNumber;
    maker: string;
    taker: string;
    pool: string;
    expiry: number;
    salt: number;
    chainId: number;
    verifyingContract: string;
};
declare const LIMIT_ORDER_DEFAULT_VALUES: {
    takerTokenFeeAmount: BigNumber;
    sender: string;
    feeRecipient: string;
    makerToken: string;
    takerToken: string;
    makerAmount: BigNumber;
    takerAmount: BigNumber;
    maker: string;
    taker: string;
    pool: string;
    expiry: number;
    salt: number;
    chainId: number;
    verifyingContract: string;
};
export type CommonOrderFields = typeof COMMON_ORDER_DEFAULT_VALUES;
export type LimitOrderFields = typeof LIMIT_ORDER_DEFAULT_VALUES;
export interface ECSignature {
    v: number;
    r: string;
    s: string;
}
export interface Signature extends ECSignature {
    signatureType: SignatureType;
}
export interface INativeOrder {
    orderHash: Hash;
    limitOrder: LimitOrderFields;
    signature: Signature;
}
export declare abstract class OrderBase {
    makerToken: Address;
    takerToken: Address;
    makerAmount: BigNumber;
    takerAmount: BigNumber;
    maker: Address;
    taker: Address;
    pool: Hash;
    expiry: number;
    salt: number;
    chainId: number;
    verifyingContract: Address;
    protected constructor(fields?: Partial<CommonOrderFields>);
    abstract getEIP712TypedData(): EIP712TypedData;
    getHash(): Hash;
    getSignature(signer: Wallet, type?: SignatureType): Promise<Signature>;
    recoverAddress(signature: Signature | string): Address;
}
export declare class LimitOrder extends OrderBase {
    static readonly STRUCT_NAME = "LimitOrder";
    static readonly STRUCT_ABI: {
        type: string;
        name: string;
    }[];
    takerTokenFeeAmount: BigNumber;
    sender: Address;
    feeRecipient: Address;
    constructor(fields?: Partial<LimitOrderFields>);
    clone(fields?: Partial<LimitOrderFields>): LimitOrder;
    getEIP712TypedData(): EIP712TypedData;
}
export {};
