/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import BN from "bn.js";
import { ContractOptions } from "web3-eth-contract";
import { EventLog } from "web3-core";
import { EventEmitter } from "events";
import {
  Callback,
  PayableTransactionObject,
  NonPayableTransactionObject,
  BlockType,
  ContractEventLog,
  BaseContract,
} from "./types";

interface EventOptions {
  filter?: object;
  fromBlock?: BlockType;
  topics?: string[];
}

export type OwnershipTransferred = ContractEventLog<{
  previousOwner: string;
  newOwner: string;
  0: string;
  1: string;
}>;

export interface EPQFIMembership extends BaseContract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  ): EPQFIMembership;
  clone(): EPQFIMembership;
  methods: {
    addMember(_exp: string): NonPayableTransactionObject<void>;

    expertLimitKey(): NonPayableTransactionObject<string>;

    expertVotingKey(): NonPayableTransactionObject<string>;

    experts(): NonPayableTransactionObject<string>;

    getLimit(): NonPayableTransactionObject<string>;

    getMembers(): NonPayableTransactionObject<string[]>;

    getSize(): NonPayableTransactionObject<string>;

    isMember(_exp: string): NonPayableTransactionObject<boolean>;

    owner(): NonPayableTransactionObject<string>;

    removeMember(_exp: string): NonPayableTransactionObject<void>;

    renounceOwnership(): NonPayableTransactionObject<void>;

    swapMember(
      _oldExp: string,
      _newExp: string
    ): NonPayableTransactionObject<void>;

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

    initialize(
      _registry: string,
      _experts: string[]
    ): NonPayableTransactionObject<void>;
  };
  events: {
    OwnershipTransferred(cb?: Callback<OwnershipTransferred>): EventEmitter;
    OwnershipTransferred(
      options?: EventOptions,
      cb?: Callback<OwnershipTransferred>
    ): EventEmitter;

    allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
  };

  once(event: "OwnershipTransferred", cb: Callback<OwnershipTransferred>): void;
  once(
    event: "OwnershipTransferred",
    options: EventOptions,
    cb: Callback<OwnershipTransferred>
  ): void;
}
