/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumber,
  BigNumberish,
  BytesLike,
  CallOverrides,
  ContractTransaction,
  Overrides,
  PopulatedTransaction,
  Signer,
  utils,
} from "ethers";
import type {
  FunctionFragment,
  Result,
  EventFragment,
} from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
  TypedEventFilter,
  TypedEvent,
  TypedListener,
  OnEvent,
  PromiseOrValue,
} from "../common";

export declare namespace MetaLedgerContract {
  export type AddPointsBatchItemStruct = {
    recipient: PromiseOrValue<string>;
    amount: PromiseOrValue<BigNumberish>;
    eventId: PromiseOrValue<BigNumberish>;
  };

  export type AddPointsBatchItemStructOutput = [
    string,
    BigNumber,
    BigNumber
  ] & { recipient: string; amount: BigNumber; eventId: BigNumber };

  export type PointsLogItemStruct = {
    timestamp: PromiseOrValue<BigNumberish>;
    eventId: PromiseOrValue<BigNumberish>;
    pointsAmount: PromiseOrValue<BigNumberish>;
    meta: PromiseOrValue<string>;
  };

  export type PointsLogItemStructOutput = [
    BigNumber,
    BigNumber,
    BigNumber,
    string
  ] & {
    timestamp: BigNumber;
    eventId: BigNumber;
    pointsAmount: BigNumber;
    meta: string;
  };
}

export interface MetaLedgerContractInterface extends utils.Interface {
  functions: {
    "addAuthorizedPartner(address)": FunctionFragment;
    "addBatchPoints((address,int256,uint256)[])": FunctionFragment;
    "addMetaPoints(address,int256,uint256,string)": FunctionFragment;
    "addOwner(address)": FunctionFragment;
    "addPoints(address,int256,uint256)": FunctionFragment;
    "checkLifetimePoints(address)": FunctionFragment;
    "checkPoints(address)": FunctionFragment;
    "clearOwners()": FunctionFragment;
    "coinContract()": FunctionFragment;
    "convertPointsToCoins(address,int256)": FunctionFragment;
    "forfeitPoints(address,int256)": FunctionFragment;
    "getCoinTransferSourceAddress()": FunctionFragment;
    "getDescription()": FunctionFragment;
    "getGroupManager(uint256)": FunctionFragment;
    "getOwners()": FunctionFragment;
    "getPartners()": FunctionFragment;
    "getTrustedForwarder()": FunctionFragment;
    "getUserGroup(address)": FunctionFragment;
    "getVersion()": FunctionFragment;
    "isAuthorizedPartner(address)": FunctionFragment;
    "isBlocked(address,address)": FunctionFragment;
    "isOptOut(address)": FunctionFragment;
    "isOwner(address)": FunctionFragment;
    "isPartner(address)": FunctionFragment;
    "isPartnerOrOwner(address)": FunctionFragment;
    "isTrustedForwarder(address)": FunctionFragment;
    "optOut(address)": FunctionFragment;
    "redeemPoints(address,int256,uint256)": FunctionFragment;
    "removeAuthorizedPartner(address)": FunctionFragment;
    "removeOptOut(address)": FunctionFragment;
    "removeOwner(address)": FunctionFragment;
    "retrieveLogs(address)": FunctionFragment;
    "setBlock(address,bool)": FunctionFragment;
    "setCoinContractAddress(address)": FunctionFragment;
    "setCoinTransferSourceAddress(address)": FunctionFragment;
    "setDescription(string)": FunctionFragment;
    "setGroupManager(uint256,address)": FunctionFragment;
    "setTrustedForwarder(address)": FunctionFragment;
    "setUserGroup(address,uint256)": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "addAuthorizedPartner"
      | "addBatchPoints"
      | "addMetaPoints"
      | "addOwner"
      | "addPoints"
      | "checkLifetimePoints"
      | "checkPoints"
      | "clearOwners"
      | "coinContract"
      | "convertPointsToCoins"
      | "forfeitPoints"
      | "getCoinTransferSourceAddress"
      | "getDescription"
      | "getGroupManager"
      | "getOwners"
      | "getPartners"
      | "getTrustedForwarder"
      | "getUserGroup"
      | "getVersion"
      | "isAuthorizedPartner"
      | "isBlocked"
      | "isOptOut"
      | "isOwner"
      | "isPartner"
      | "isPartnerOrOwner"
      | "isTrustedForwarder"
      | "optOut"
      | "redeemPoints"
      | "removeAuthorizedPartner"
      | "removeOptOut"
      | "removeOwner"
      | "retrieveLogs"
      | "setBlock"
      | "setCoinContractAddress"
      | "setCoinTransferSourceAddress"
      | "setDescription"
      | "setGroupManager"
      | "setTrustedForwarder"
      | "setUserGroup"
  ): FunctionFragment;

  encodeFunctionData(
    functionFragment: "addAuthorizedPartner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "addBatchPoints",
    values: [MetaLedgerContract.AddPointsBatchItemStruct[]]
  ): string;
  encodeFunctionData(
    functionFragment: "addMetaPoints",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<string>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "addOwner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "addPoints",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "checkLifetimePoints",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "checkPoints",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "clearOwners",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "coinContract",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "convertPointsToCoins",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "forfeitPoints",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "getCoinTransferSourceAddress",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getDescription",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getGroupManager",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(functionFragment: "getOwners", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "getPartners",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getTrustedForwarder",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getUserGroup",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "getVersion",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "isAuthorizedPartner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isBlocked",
    values: [PromiseOrValue<string>, PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isOptOut",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isOwner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isPartner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isPartnerOrOwner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "isTrustedForwarder",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "optOut",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "redeemPoints",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "removeAuthorizedPartner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "removeOptOut",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "removeOwner",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "retrieveLogs",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setBlock",
    values: [PromiseOrValue<string>, PromiseOrValue<boolean>]
  ): string;
  encodeFunctionData(
    functionFragment: "setCoinContractAddress",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setCoinTransferSourceAddress",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setDescription",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setGroupManager",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setTrustedForwarder",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setUserGroup",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;

  decodeFunctionResult(
    functionFragment: "addAuthorizedPartner",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addBatchPoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addMetaPoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "addOwner", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "addPoints", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "checkLifetimePoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "checkPoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "clearOwners",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "coinContract",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "convertPointsToCoins",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "forfeitPoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getCoinTransferSourceAddress",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDescription",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getGroupManager",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getOwners", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getPartners",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getTrustedForwarder",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getUserGroup",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "getVersion", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isAuthorizedPartner",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "isBlocked", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isOptOut", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isOwner", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isPartner", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isPartnerOrOwner",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "isTrustedForwarder",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "optOut", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "redeemPoints",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeAuthorizedPartner",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeOptOut",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeOwner",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "retrieveLogs",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "setBlock", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setCoinContractAddress",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setCoinTransferSourceAddress",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDescription",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setGroupManager",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setTrustedForwarder",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setUserGroup",
    data: BytesLike
  ): Result;

  events: {
    "AddPoints(address,int256,uint256,string)": EventFragment;
    "RedeemPoints(address,int256,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "AddPoints"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RedeemPoints"): EventFragment;
}

export interface AddPointsEventObject {
  recipient: string;
  amount: BigNumber;
  eventId: BigNumber;
  meta: string;
}
export type AddPointsEvent = TypedEvent<
  [string, BigNumber, BigNumber, string],
  AddPointsEventObject
>;

export type AddPointsEventFilter = TypedEventFilter<AddPointsEvent>;

export interface RedeemPointsEventObject {
  recipient: string;
  amount: BigNumber;
  eventId: BigNumber;
}
export type RedeemPointsEvent = TypedEvent<
  [string, BigNumber, BigNumber],
  RedeemPointsEventObject
>;

export type RedeemPointsEventFilter = TypedEventFilter<RedeemPointsEvent>;

export interface MetaLedgerContract extends BaseContract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  interface: MetaLedgerContractInterface;

  queryFilter<TEvent extends TypedEvent>(
    event: TypedEventFilter<TEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TEvent>>;

  listeners<TEvent extends TypedEvent>(
    eventFilter?: TypedEventFilter<TEvent>
  ): Array<TypedListener<TEvent>>;
  listeners(eventName?: string): Array<Listener>;
  removeAllListeners<TEvent extends TypedEvent>(
    eventFilter: TypedEventFilter<TEvent>
  ): this;
  removeAllListeners(eventName?: string): this;
  off: OnEvent<this>;
  on: OnEvent<this>;
  once: OnEvent<this>;
  removeListener: OnEvent<this>;

  functions: {
    addAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    addBatchPoints(
      items: MetaLedgerContract.AddPointsBatchItemStruct[],
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    addMetaPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      metadata: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    addOwner(
      newOwner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    addPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    checkLifetimePoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    checkPoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    clearOwners(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    coinContract(overrides?: CallOverrides): Promise<[string]>;

    convertPointsToCoins(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    forfeitPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    getCoinTransferSourceAddress(overrides?: CallOverrides): Promise<[string]>;

    getDescription(overrides?: CallOverrides): Promise<[string]>;

    getGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<[string]>;

    getOwners(overrides?: CallOverrides): Promise<[string[]]>;

    getPartners(overrides?: CallOverrides): Promise<[string[]]>;

    getTrustedForwarder(
      overrides?: CallOverrides
    ): Promise<[string] & { forwarder: string }>;

    getUserGroup(
      userAddr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    getVersion(
      overrides?: CallOverrides
    ): Promise<[string] & { version: string }>;

    isAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isBlocked(
      userAddress: PromiseOrValue<string>,
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isOwner(
      addr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isPartner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isPartnerOrOwner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isTrustedForwarder(
      forwarder: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    optOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    redeemPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    removeAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    removeOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    removeOwner(
      owner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    retrieveLogs(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[MetaLedgerContract.PointsLogItemStructOutput[]]>;

    setBlock(
      partnerAddress: PromiseOrValue<string>,
      isBlocked: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setCoinContractAddress(
      coinContractAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setCoinTransferSourceAddress(
      newAddr: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setDescription(
      description: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      manager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setTrustedForwarder(
      _forwarder: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setUserGroup(
      userAddr: PromiseOrValue<string>,
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;
  };

  addAuthorizedPartner(
    partnerAddress: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  addBatchPoints(
    items: MetaLedgerContract.AddPointsBatchItemStruct[],
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  addMetaPoints(
    recipient: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    eventId: PromiseOrValue<BigNumberish>,
    metadata: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  addOwner(
    newOwner: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  addPoints(
    recipient: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    eventId: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  checkLifetimePoints(
    recipient: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  checkPoints(
    recipient: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  clearOwners(
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  coinContract(overrides?: CallOverrides): Promise<string>;

  convertPointsToCoins(
    recipient: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  forfeitPoints(
    recipient: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  getCoinTransferSourceAddress(overrides?: CallOverrides): Promise<string>;

  getDescription(overrides?: CallOverrides): Promise<string>;

  getGroupManager(
    groupId: PromiseOrValue<BigNumberish>,
    overrides?: CallOverrides
  ): Promise<string>;

  getOwners(overrides?: CallOverrides): Promise<string[]>;

  getPartners(overrides?: CallOverrides): Promise<string[]>;

  getTrustedForwarder(overrides?: CallOverrides): Promise<string>;

  getUserGroup(
    userAddr: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  getVersion(overrides?: CallOverrides): Promise<string>;

  isAuthorizedPartner(
    partnerAddress: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isBlocked(
    userAddress: PromiseOrValue<string>,
    partnerAddress: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isOptOut(
    userAddress: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isOwner(
    addr: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isPartner(
    recipient: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isPartnerOrOwner(
    recipient: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isTrustedForwarder(
    forwarder: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<boolean>;

  optOut(
    userAddress: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  redeemPoints(
    recipient: PromiseOrValue<string>,
    amount: PromiseOrValue<BigNumberish>,
    eventId: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  removeAuthorizedPartner(
    partnerAddress: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  removeOptOut(
    userAddress: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  removeOwner(
    owner: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  retrieveLogs(
    recipient: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<MetaLedgerContract.PointsLogItemStructOutput[]>;

  setBlock(
    partnerAddress: PromiseOrValue<string>,
    isBlocked: PromiseOrValue<boolean>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setCoinContractAddress(
    coinContractAddress: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setCoinTransferSourceAddress(
    newAddr: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setDescription(
    description: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setGroupManager(
    groupId: PromiseOrValue<BigNumberish>,
    manager: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setTrustedForwarder(
    _forwarder: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setUserGroup(
    userAddr: PromiseOrValue<string>,
    groupId: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  callStatic: {
    addAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    addBatchPoints(
      items: MetaLedgerContract.AddPointsBatchItemStruct[],
      overrides?: CallOverrides
    ): Promise<void>;

    addMetaPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      metadata: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    addOwner(
      newOwner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    addPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    checkLifetimePoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    checkPoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    clearOwners(overrides?: CallOverrides): Promise<void>;

    coinContract(overrides?: CallOverrides): Promise<string>;

    convertPointsToCoins(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    forfeitPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    getCoinTransferSourceAddress(overrides?: CallOverrides): Promise<string>;

    getDescription(overrides?: CallOverrides): Promise<string>;

    getGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<string>;

    getOwners(overrides?: CallOverrides): Promise<string[]>;

    getPartners(overrides?: CallOverrides): Promise<string[]>;

    getTrustedForwarder(overrides?: CallOverrides): Promise<string>;

    getUserGroup(
      userAddr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVersion(overrides?: CallOverrides): Promise<string>;

    isAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isBlocked(
      userAddress: PromiseOrValue<string>,
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isOwner(
      addr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isPartner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isPartnerOrOwner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isTrustedForwarder(
      forwarder: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<boolean>;

    optOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    redeemPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    removeAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    removeOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    removeOwner(
      owner: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    retrieveLogs(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<MetaLedgerContract.PointsLogItemStructOutput[]>;

    setBlock(
      partnerAddress: PromiseOrValue<string>,
      isBlocked: PromiseOrValue<boolean>,
      overrides?: CallOverrides
    ): Promise<void>;

    setCoinContractAddress(
      coinContractAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setCoinTransferSourceAddress(
      newAddr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setDescription(
      description: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      manager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setTrustedForwarder(
      _forwarder: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setUserGroup(
      userAddr: PromiseOrValue<string>,
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;
  };

  filters: {
    "AddPoints(address,int256,uint256,string)"(
      recipient?: PromiseOrValue<string> | null,
      amount?: PromiseOrValue<BigNumberish> | null,
      eventId?: PromiseOrValue<BigNumberish> | null,
      meta?: null
    ): AddPointsEventFilter;
    AddPoints(
      recipient?: PromiseOrValue<string> | null,
      amount?: PromiseOrValue<BigNumberish> | null,
      eventId?: PromiseOrValue<BigNumberish> | null,
      meta?: null
    ): AddPointsEventFilter;

    "RedeemPoints(address,int256,uint256)"(
      recipient?: PromiseOrValue<string> | null,
      amount?: PromiseOrValue<BigNumberish> | null,
      eventId?: PromiseOrValue<BigNumberish> | null
    ): RedeemPointsEventFilter;
    RedeemPoints(
      recipient?: PromiseOrValue<string> | null,
      amount?: PromiseOrValue<BigNumberish> | null,
      eventId?: PromiseOrValue<BigNumberish> | null
    ): RedeemPointsEventFilter;
  };

  estimateGas: {
    addAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    addBatchPoints(
      items: MetaLedgerContract.AddPointsBatchItemStruct[],
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    addMetaPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      metadata: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    addOwner(
      newOwner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    addPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    checkLifetimePoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    checkPoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    clearOwners(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    coinContract(overrides?: CallOverrides): Promise<BigNumber>;

    convertPointsToCoins(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    forfeitPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    getCoinTransferSourceAddress(overrides?: CallOverrides): Promise<BigNumber>;

    getDescription(overrides?: CallOverrides): Promise<BigNumber>;

    getGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getOwners(overrides?: CallOverrides): Promise<BigNumber>;

    getPartners(overrides?: CallOverrides): Promise<BigNumber>;

    getTrustedForwarder(overrides?: CallOverrides): Promise<BigNumber>;

    getUserGroup(
      userAddr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    getVersion(overrides?: CallOverrides): Promise<BigNumber>;

    isAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isBlocked(
      userAddress: PromiseOrValue<string>,
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isOwner(
      addr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isPartner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isPartnerOrOwner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isTrustedForwarder(
      forwarder: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    optOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    redeemPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    removeAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    removeOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    removeOwner(
      owner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    retrieveLogs(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    setBlock(
      partnerAddress: PromiseOrValue<string>,
      isBlocked: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setCoinContractAddress(
      coinContractAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setCoinTransferSourceAddress(
      newAddr: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setDescription(
      description: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      manager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setTrustedForwarder(
      _forwarder: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setUserGroup(
      userAddr: PromiseOrValue<string>,
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    addAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    addBatchPoints(
      items: MetaLedgerContract.AddPointsBatchItemStruct[],
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    addMetaPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      metadata: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    addOwner(
      newOwner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    addPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    checkLifetimePoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    checkPoints(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    clearOwners(
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    coinContract(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    convertPointsToCoins(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    forfeitPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    getCoinTransferSourceAddress(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getDescription(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getOwners(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getPartners(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    getTrustedForwarder(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getUserGroup(
      userAddr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    getVersion(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    isAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isBlocked(
      userAddress: PromiseOrValue<string>,
      partnerAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isOwner(
      addr: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isPartner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isPartnerOrOwner(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isTrustedForwarder(
      forwarder: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    optOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    redeemPoints(
      recipient: PromiseOrValue<string>,
      amount: PromiseOrValue<BigNumberish>,
      eventId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    removeAuthorizedPartner(
      partnerAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    removeOptOut(
      userAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    removeOwner(
      owner: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    retrieveLogs(
      recipient: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    setBlock(
      partnerAddress: PromiseOrValue<string>,
      isBlocked: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setCoinContractAddress(
      coinContractAddress: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setCoinTransferSourceAddress(
      newAddr: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setDescription(
      description: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setGroupManager(
      groupId: PromiseOrValue<BigNumberish>,
      manager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setTrustedForwarder(
      _forwarder: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setUserGroup(
      userAddr: PromiseOrValue<string>,
      groupId: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;
  };
}
