import { BigNumber } from 'bignumber.js'; import { ContractAbi } from 'ethereum-types'; // HACK: Rather then extending from OrderWithoutExchangeAddress // we don't, because our docs don't expand inherited types, and it's unnecessarily // confusing to introduce the user to the OrderWithoutExchangeAddress type. export interface Order { senderAddress: string; makerAddress: string; takerAddress: string; makerFee: BigNumber; takerFee: BigNumber; makerAssetAmount: BigNumber; takerAssetAmount: BigNumber; makerAssetData: string; takerAssetData: string; salt: BigNumber; exchangeAddress: string; feeRecipientAddress: string; expirationTimeSeconds: BigNumber; } export interface OrderWithoutExchangeAddress { senderAddress: string; makerAddress: string; takerAddress: string; makerFee: BigNumber; takerFee: BigNumber; makerAssetAmount: BigNumber; takerAssetAmount: BigNumber; makerAssetData: string; takerAssetData: string; salt: BigNumber; feeRecipientAddress: string; expirationTimeSeconds: BigNumber; } export interface SignedOrder extends Order { signature: string; } /** * Elliptic Curve signature */ export interface ECSignature { v: number; r: string; s: string; } /** * Validator signature components */ export interface ValidatorSignature { validatorAddress: string; signature: string; } /** * Errors originating from the 0x exchange contract */ export enum ExchangeContractErrs { OrderFillExpired = 'ORDER_FILL_EXPIRED', OrderCancelExpired = 'ORDER_CANCEL_EXPIRED', OrderCancelAmountZero = 'ORDER_CANCEL_AMOUNT_ZERO', OrderAlreadyCancelledOrFilled = 'ORDER_ALREADY_CANCELLED_OR_FILLED', OrderFillAmountZero = 'ORDER_FILL_AMOUNT_ZERO', OrderRemainingFillAmountZero = 'ORDER_REMAINING_FILL_AMOUNT_ZERO', OrderFillRoundingError = 'ORDER_FILL_ROUNDING_ERROR', FillBalanceAllowanceError = 'FILL_BALANCE_ALLOWANCE_ERROR', InsufficientTakerBalance = 'INSUFFICIENT_TAKER_BALANCE', InsufficientTakerAllowance = 'INSUFFICIENT_TAKER_ALLOWANCE', InsufficientMakerBalance = 'INSUFFICIENT_MAKER_BALANCE', InsufficientMakerAllowance = 'INSUFFICIENT_MAKER_ALLOWANCE', InsufficientTakerFeeBalance = 'INSUFFICIENT_TAKER_FEE_BALANCE', InsufficientTakerFeeAllowance = 'INSUFFICIENT_TAKER_FEE_ALLOWANCE', InsufficientMakerFeeBalance = 'INSUFFICIENT_MAKER_FEE_BALANCE', InsufficientMakerFeeAllowance = 'INSUFFICIENT_MAKER_FEE_ALLOWANCE', TransactionSenderIsNotFillOrderTaker = 'TRANSACTION_SENDER_IS_NOT_FILL_ORDER_TAKER', MultipleMakersInSingleCancelBatchDisallowed = 'MULTIPLE_MAKERS_IN_SINGLE_CANCEL_BATCH_DISALLOWED', InsufficientRemainingFillAmount = 'INSUFFICIENT_REMAINING_FILL_AMOUNT', MultipleTakerTokensInFillUpToDisallowed = 'MULTIPLE_TAKER_TOKENS_IN_FILL_UP_TO_DISALLOWED', BatchOrdersMustHaveSameExchangeAddress = 'BATCH_ORDERS_MUST_HAVE_SAME_EXCHANGE_ADDRESS', BatchOrdersMustHaveAtLeastOneItem = 'BATCH_ORDERS_MUST_HAVE_AT_LEAST_ONE_ITEM', } export type ArtifactContractName = 'ZRX' | 'TokenTransferProxy' | 'TokenRegistry' | 'Token' | 'Exchange' | 'EtherToken'; export interface Artifact { contract_name: ArtifactContractName; abi: ContractAbi; networks: { [networkId: number]: { address: string; }; }; } export type DoneCallback = (err?: Error) => void; export interface OrderRelevantState { makerBalance: BigNumber; makerProxyAllowance: BigNumber; makerFeeBalance: BigNumber; makerFeeProxyAllowance: BigNumber; filledTakerAssetAmount: BigNumber; remainingFillableMakerAssetAmount: BigNumber; remainingFillableTakerAssetAmount: BigNumber; } export interface OrderStateValid { isValid: true; orderHash: string; orderRelevantState: OrderRelevantState; } export interface OrderStateInvalid { isValid: false; orderHash: string; error: ExchangeContractErrs; } export type OrderState = OrderStateValid | OrderStateInvalid; export interface Token { name: string; address: string; symbol: string; decimals: number; } export enum SignatureType { Illegal, Invalid, EIP712, EthSign, Caller, Wallet, Validator, PreSigned, Trezor, } /** * Elliptic Curve signature */ export interface ECSignature { v: number; r: string; s: string; } export enum AssetProxyId { INVALID, ERC20, ERC721, } export interface ERC20AssetData { assetProxyId: AssetProxyId; tokenAddress: string; } export interface ERC721AssetData { assetProxyId: AssetProxyId; tokenAddress: string; tokenId: BigNumber; receiverData: string; } export interface AssetData { assetProxyId: AssetProxyId; tokenAddress?: string; data?: any; }