/* 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 DolomiteMargin {
  constructor(jsonInterface: any[], address?: string, options?: CustomOptions);
  _address: string;
  options: contractOptions;
  methods: {
    getAccountBalances(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{
      0: string[];
      1: string[];
      2: { sign: boolean; value: string }[];
      3: { sign: boolean; value: string }[];
    }>;

    getAccountMarketWithBalanceAtIndex(
      account: { owner: string; number: number | string },
      index: number | string
    ): TransactionObject<string>;

    getAccountMarketsWithBalances(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<string[]>;

    getAccountNumberOfMarketsWithBalances(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<string>;

    getAccountNumberOfMarketsWithDebt(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<string>;

    getAccountPar(
      account: { owner: string; number: number | string },
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    getAccountRiskOverrideByAccount(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{
      marginRatioOverride: { value: string };
      liquidationSpreadOverride: { value: string };
      0: { value: string };
      1: { value: string };
    }>;

    getAccountRiskOverrideSetterByAccountOwner(
      accountOwner: string
    ): TransactionObject<string>;

    getAccountStatus(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<string>;

    getAccountValues(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{
      0: { value: string };
      1: { value: string };
    }>;

    getAccountWei(
      account: { owner: string; number: number | string },
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    getAdjustedAccountValues(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{
      0: { value: string };
      1: { value: string };
    }>;

    getIsAutoTraderSpecial(autoTrader: string): TransactionObject<boolean>;

    getIsGlobalOperator(operator: string): TransactionObject<boolean>;

    getIsLocalOperator(
      owner: string,
      operator: string
    ): TransactionObject<boolean>;

    getLiquidationSpreadForAccountAndPair(
      account: { owner: string; number: number | string },
      heldMarketId: number | string,
      owedMarketId: number | string
    ): TransactionObject<{ value: string }>;

    getLiquidationSpreadForPair(
      heldMarketId: number | string,
      owedMarketId: number | string
    ): TransactionObject<{ value: string }>;

    getLiquidationSpreadOverrideByAccount(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{ value: string }>;

    getMarginRatioForAccount(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{ value: string }>;

    getMarginRatioOverrideByAccount(account: {
      owner: string;
      number: number | string;
    }): TransactionObject<{ value: string }>;

    getMarket(
      marketId: number | string
    ): TransactionObject<{
      token: string;
      isClosing: boolean;
      totalPar: { borrow: string; supply: string };
      index: { borrow: string; supply: string; lastUpdate: string };
      priceOracle: string;
      interestSetter: string;
      marginPremium: { value: string };
      liquidationSpreadPremium: { value: string };
      maxSupplyWei: { sign: boolean; value: string };
      maxBorrowWei: { sign: boolean; value: string };
      earningsRateOverride: { value: string };
    }>;

    getMarketBorrowInterestRateApr(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketBorrowInterestRatePerSecond(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketCachedIndex(
      marketId: number | string
    ): TransactionObject<{
      borrow: string;
      supply: string;
      lastUpdate: string;
    }>;

    getMarketCurrentIndex(
      marketId: number | string
    ): TransactionObject<{
      borrow: string;
      supply: string;
      lastUpdate: string;
    }>;

    getMarketEarningsRateOverride(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketIdByTokenAddress(token: string): TransactionObject<string>;

    getMarketInterestRate(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketInterestSetter(
      marketId: number | string
    ): TransactionObject<string>;

    getMarketIsClosing(marketId: number | string): TransactionObject<boolean>;

    getMarketLiquidationSpreadPremium(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketMarginPremium(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketMaxBorrowWei(
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    getMarketMaxSupplyWei(
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    getMarketMaxWei(
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    getMarketPrice(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketPriceOracle(marketId: number | string): TransactionObject<string>;

    getMarketSpreadPremium(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketSupplyInterestRateApr(
      marketId: number | string
    ): TransactionObject<{ value: string }>;

    getMarketTokenAddress(marketId: number | string): TransactionObject<string>;

    getMarketTotalPar(
      marketId: number | string
    ): TransactionObject<{ borrow: string; supply: string }>;

    getMarketTotalWei(
      marketId: number | string
    ): TransactionObject<{ borrow: string; supply: string }>;

    getMarketWithInfo(
      marketId: number | string
    ): TransactionObject<{
      0: {
        token: string;
        isClosing: boolean;
        totalPar: { borrow: string; supply: string };
        index: { borrow: string; supply: string; lastUpdate: string };
        priceOracle: string;
        interestSetter: string;
        marginPremium: { value: string };
        liquidationSpreadPremium: { value: string };
        maxSupplyWei: { sign: boolean; value: string };
        maxBorrowWei: { sign: boolean; value: string };
        earningsRateOverride: { value: string };
      };
      1: { borrow: string; supply: string; lastUpdate: string };
      2: { value: string };
      3: { value: string };
    }>;

    getNumExcessTokens(
      marketId: number | string
    ): TransactionObject<{ sign: boolean; value: string }>;

    operate(
      accounts: { owner: string; number: number | string }[],
      actions: {
        actionType: number | string;
        accountId: number | string;
        amount: {
          sign: boolean;
          denomination: number | string;
          ref: number | string;
          value: number | string;
        };
        primaryMarketId: number | string;
        secondaryMarketId: number | string;
        otherAddress: string;
        otherAccountId: number | string;
        data: (string | number[])[];
      }[]
    ): TransactionObject<void>;

    ownerAddMarket(
      token: string,
      priceOracle: string,
      interestSetter: string,
      marginPremium: { value: number | string },
      spreadPremium: { value: number | string },
      maxSupplyWei: number | string,
      maxBorrowWei: number | string,
      earningsRateOverride: { value: number | string },
      isClosing: boolean
    ): TransactionObject<void>;

    ownerSetAccountMaxNumberOfMarketsWithBalances(
      accountMaxNumberOfMarketsWithBalances: number | string
    ): TransactionObject<void>;

    ownerSetAccountRiskOverride(
      accountOwner: string,
      accountRiskOverrideSetter: string
    ): TransactionObject<void>;

    ownerSetAutoTraderSpecial(
      autoTrader: string,
      special: boolean
    ): TransactionObject<void>;

    ownerSetCallbackGasLimit(
      callbackGasLimit: number | string
    ): TransactionObject<void>;

    ownerSetDefaultAccountRiskOverride(
      accountRiskOverrideSetter: string
    ): TransactionObject<void>;

    ownerSetEarningsRate(earningsRate: {
      value: number | string;
    }): TransactionObject<void>;

    ownerSetEarningsRateOverride(
      marketId: number | string,
      earningsRateOverride: { value: number | string }
    ): TransactionObject<void>;

    ownerSetGlobalOperator(
      operator: string,
      approved: boolean
    ): TransactionObject<void>;

    ownerSetInterestSetter(
      marketId: number | string,
      interestSetter: string
    ): TransactionObject<void>;

    ownerSetIsClosing(
      marketId: number | string,
      isClosing: boolean
    ): TransactionObject<void>;

    ownerSetLiquidationSpread(spread: {
      value: number | string;
    }): TransactionObject<void>;

    ownerSetLiquidationSpreadPremium(
      marketId: number | string,
      liquidationSpreadPremium: { value: number | string }
    ): TransactionObject<void>;

    ownerSetMarginPremium(
      marketId: number | string,
      marginPremium: { value: number | string }
    ): TransactionObject<void>;

    ownerSetMarginRatio(ratio: {
      value: number | string;
    }): TransactionObject<void>;

    ownerSetMaxBorrowWei(
      marketId: number | string,
      maxBorrowWei: number | string
    ): TransactionObject<void>;

    ownerSetMaxSupplyWei(
      marketId: number | string,
      maxSupplyWei: number | string
    ): TransactionObject<void>;

    ownerSetMinBorrowedValue(minBorrowedValue: {
      value: number | string;
    }): TransactionObject<void>;

    ownerSetOracleSentinel(oracleSentinel: string): TransactionObject<void>;

    ownerSetPriceOracle(
      marketId: number | string,
      priceOracle: string
    ): TransactionObject<void>;

    ownerWithdrawExcessTokens(
      marketId: number | string,
      recipient: string
    ): TransactionObject<string>;

    ownerWithdrawUnsupportedTokens(
      token: string,
      recipient: string
    ): TransactionObject<string>;

    renounceOwnership(): TransactionObject<void>;

    setOperators(
      args: { operator: string; trusted: boolean }[]
    ): TransactionObject<void>;

    transferOwnership(newOwner: string): TransactionObject<void>;

    getAccountMaxNumberOfMarketsWithBalances(): TransactionObject<string>;
    getCallbackGasLimit(): TransactionObject<string>;
    getDefaultAccountRiskOverrideSetter(): TransactionObject<string>;
    getEarningsRate(): TransactionObject<{ value: string }>;
    getIsBorrowAllowed(): TransactionObject<boolean>;
    getIsLiquidationAllowed(): TransactionObject<boolean>;
    getLiquidationSpread(): TransactionObject<{ value: string }>;
    getMarginRatio(): TransactionObject<{ value: string }>;
    getMinBorrowedValue(): TransactionObject<{ value: string }>;
    getNumMarkets(): TransactionObject<string>;
    getOracleSentinel(): TransactionObject<string>;
    getRiskLimits(): TransactionObject<{
      marginRatioMax: string;
      liquidationSpreadMax: string;
      earningsRateMax: string;
      marginPremiumMax: string;
      liquidationSpreadPremiumMax: string;
      interestRateMax: string;
      minBorrowedValueMax: string;
    }>;
    isOwner(): TransactionObject<boolean>;
    owner(): TransactionObject<string>;
  };
  deploy(options: {
    data: string;
    arguments: any[];
  }): TransactionObject<Contract>;
  events: {
    LogOperatorSet(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    OwnershipTransferred(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogBuy(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogCall(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogDeposit(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogIndexUpdate(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogInterestRate(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogLiquidate(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogOperation(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogOraclePrice(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSell(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogTrade(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogTransfer(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogVaporize(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogWithdraw(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogAddMarket(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetAccountMaxNumberOfMarketsWithBalances(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetAccountRiskOverrideSetter(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetAutoTraderIsSpecial(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetCallbackGasLimit(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetDefaultAccountRiskOverrideSetter(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetEarningsRate(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetEarningsRateOverride(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetGlobalOperator(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetInterestSetter(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetIsClosing(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetLiquidationSpread(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetLiquidationSpreadPremium(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetMarginPremium(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetMarginRatio(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetMaxBorrowWei(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetMaxSupplyWei(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetMinBorrowedValue(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetOracleSentinel(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogSetPriceOracle(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogWithdrawExcessTokens(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogWithdrawUnsupportedTokens(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogExternalCallbackFailure(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogExternalCallbackSuccess(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    LogOperatorSet(
      options?: {
        filter?: object;
        fromBlock?: BlockType;
        topics?: (null | string)[];
      },
      cb?: Callback<EventLog>
    ): EventEmitter;

    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(): DolomiteMargin;
}
