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

import BN from "bn.js";

export type TxID = { transactionId: string };

export interface Challenges {
  ADMIN_ROLE(): Promise<string>;

  DEFAULT_ADMIN_ROLE(): Promise<string>;

  DOMAIN_SEPARATOR(): Promise<string>;

  ERC1155_INTERFACE(): Promise<string>;

  ERC20_INTERFACE(): Promise<string>;

  ERC721_INTERFACE(): Promise<string>;

  PAUSER_ROLE(): Promise<string>;

  _COMPLETE_TYPEHASH(): Promise<string>;

  addAuthorizedAddress: {
    ({
      _addr,
      _role,
    }: {
      _addr: string;
      _role: number | BN | string;
    }): Promise<TxID>;
  };

  addRecipe: {
    ({
      _supply,
      _expiry,
      _inputs,
      _output,
    }: {
      _supply: number | BN | string;
      _expiry: number | BN | string;
      _inputs: {
        addr: string;
        id: number | BN | string;
        amount: number | BN | string;
        tier: number | BN | string;
        traits: { key: string; value: number | BN | string }[];
      }[];
      _output: { addr: string; tier: number | BN | string };
    }): Promise<TxID>;
  };

  addRecipeBatch: {
    ({
      _recipes,
    }: {
      _recipes: {
        index: number | BN | string;
        supply: number | BN | string;
        expiry: number | BN | string;
        inputs: {
          addr: string;
          id: number | BN | string;
          amount: number | BN | string;
          tier: number | BN | string;
          traits: { key: string; value: number | BN | string }[];
        }[];
        output: { addr: string; tier: number | BN | string };
      }[];
    }): Promise<TxID>;
  };

  allRecipes(): Promise<
    {
      index: BN;
      supply: BN;
      expiry: BN;
      inputs: {
        addr: string;
        id: BN;
        amount: BN;
        tier: BN;
        traits: { key: string; value: BN }[];
      }[];
      output: { addr: string; tier: BN };
    }[]
  >;

  authorizationState({
    authorizer,
    authorization,
  }: {
    authorizer: string;
    authorization: string;
  }): Promise<boolean>;

  authorizedComplete: {
    ({
      _authorization,
      _signature,
    }: {
      _authorization: {
        index: number | BN | string;
        tokenId: number | BN | string;
        signer: string;
        authorization: string;
        deadline: number | BN | string;
      };
      _signature: { v: number | BN | string; r: string; s: string };
    }): Promise<TxID>;
  };

  complete: {
    ({
      _recipeId,
      _tokenId,
    }: {
      _recipeId: number | BN | string;
      _tokenId: number | BN | string;
    }): Promise<TxID>;
  };

  eip712Domain(): Promise<{
    fields: string;
    name: string;
    version: string;
    chainId: BN;
    verifyingContract: string;
    salt: string;
    extensions: BN[];
  }>;

  getRecipe({
    _id,
  }: {
    _id: number | BN | string;
  }): Promise<{
    index: BN;
    supply: BN;
    expiry: BN;
    inputs: {
      addr: string;
      id: BN;
      amount: BN;
      tier: BN;
      traits: { key: string; value: BN }[];
    }[];
    output: { addr: string; tier: BN };
  }>;

  getRoleAdmin({ role }: { role: string }): Promise<string>;

  getRoleMember({
    role,
    index,
  }: {
    role: string;
    index: number | BN | string;
  }): Promise<string>;

  getRoleMemberCount({ role }: { role: string }): Promise<BN>;

  grantRole: {
    ({ role, account }: { role: string; account: string }): Promise<TxID>;
  };

  hasRole({
    role,
    account,
  }: {
    role: string;
    account: string;
  }): Promise<boolean>;

  initialize: {
    ({
      _input,
      _output,
      _operator,
    }: {
      _input: string[];
      _output: string[];
      _operator: string;
    }): Promise<TxID>;
  };

  inputContracts({ arg0 }: { arg0: string }): Promise<string>;

  outputContracts({ arg0 }: { arg0: string }): Promise<string>;

  partialUpdateRecipe: {
    ({
      _id,
      _supply,
      _expiry,
    }: {
      _id: number | BN | string;
      _supply: number | BN | string;
      _expiry: number | BN | string;
    }): Promise<TxID>;
  };

  pause: {
    (): Promise<TxID>;
  };

  paused(): Promise<boolean>;

  recipes({
    arg0,
  }: {
    arg0: number | BN | string;
  }): Promise<{
    index: BN;
    supply: BN;
    expiry: BN;
    output: { addr: string; tier: BN };
  }>;

  removeAuthorizedAddress: {
    ({
      _addr,
      _role,
    }: {
      _addr: string;
      _role: number | BN | string;
    }): Promise<TxID>;
  };

  renounceRole: {
    ({ role, account }: { role: string; account: string }): Promise<TxID>;
  };

  revokeRole: {
    ({ role, account }: { role: string; account: string }): Promise<TxID>;
  };

  supportsInterface({ interfaceId }: { interfaceId: string }): Promise<boolean>;

  unpause: {
    (): Promise<TxID>;
  };

  updateRecipeBatch: {
    ({
      _recipes,
    }: {
      _recipes: {
        index: number | BN | string;
        supply: number | BN | string;
        expiry: number | BN | string;
        inputs: {
          addr: string;
          id: number | BN | string;
          amount: number | BN | string;
          tier: number | BN | string;
          traits: { key: string; value: number | BN | string }[];
        }[];
        output: { addr: string; tier: number | BN | string };
      }[];
    }): Promise<TxID>;
  };
}
