/* Generated by ts-generator ver. 0.0.8 */
/* tslint:disable */

import Contract, { CustomOptions, contractOptions } from "web3/eth/contract";
import { TransactionObject, BlockType } from "web3/eth/types";
import { Callback, EventLog } from "web3/types";
import { EventEmitter } from "events";
import { Provider } from "web3/providers";

export class GenericTraderProxyV1 {
  constructor(jsonInterface: any[], address?: string, options?: CustomOptions);
  _address: string;
  options: contractOptions;
  methods: {
    isIsolationModeMarket(
      _dolomiteMargin: string,
      _marketId: number | string
    ): TransactionObject<boolean>;

    ownerSetEventEmitterRegistry(
      _eventEmitterRegistry: string
    ): TransactionObject<void>;

    swapExactInputForOutput(
      _tradeAccountNumber: number | string,
      _marketIdsPath: (number | string)[],
      _inputAmountWei: number | string,
      _minOutputAmountWei: number | string,
      _tradersPath: {
        traderType: number | string;
        makerAccountIndex: number | string;
        trader: string;
        tradeData: (string | number[])[];
      }[],
      _makerAccounts: { owner: string; number: number | string }[],
      _userConfig: {
        deadline: number | string;
        balanceCheckFlag: number | string;
        eventType: number | string;
      }
    ): TransactionObject<void>;

    swapExactInputForOutputAndModifyPosition(
      _tradeAccountNumber: number | string,
      _marketIdsPath: (number | string)[],
      _inputAmountWei: number | string,
      _minOutputAmountWei: number | string,
      _tradersPath: {
        traderType: number | string;
        makerAccountIndex: number | string;
        trader: string;
        tradeData: (string | number[])[];
      }[],
      _makerAccounts: { owner: string; number: number | string }[],
      _transferCollateralParams: {
        fromAccountNumber: number | string;
        toAccountNumber: number | string;
        transferAmounts: {
          marketId: number | string;
          amountWei: number | string;
        }[];
      },
      _expiryParams: {
        marketId: number | string;
        expiryTimeDelta: number | string;
      },
      _userConfig: {
        deadline: number | string;
        balanceCheckFlag: number | string;
        eventType: number | string;
      }
    ): TransactionObject<void>;

    DOLOMITE_MARGIN(): TransactionObject<string>;
    EVENT_EMITTER_REGISTRY(): TransactionObject<string>;
    EXPIRY(): TransactionObject<string>;
    chainId(): TransactionObject<string>;
  };
  deploy(options: {
    data: string;
    arguments: any[];
  }): TransactionObject<Contract>;
  events: {
    allEvents: (
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ) => EventEmitter;
  };
  getPastEvents(
    event: string,
    options?: {
      filter?: object;
      fromBlock?: BlockType;
      toBlock?: BlockType;
      topics?: (null | string)[];
    },
    cb?: Callback<EventLog[]>
  ): Promise<EventLog[]>;
  setProvider(provider: Provider): void;
  clone(): GenericTraderProxyV1;
}
