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

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

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

export type Approval = ContractEventLog<{
  owner: string;
  approved: string;
  tokenId: string;
  0: string;
  1: string;
  2: string;
}>;
export type ApprovalForAll = ContractEventLog<{
  owner: string;
  operator: string;
  approved: boolean;
  0: string;
  1: string;
  2: boolean;
}>;
export type ContractURIChanged = ContractEventLog<{
  contractURI: string;
  0: string;
}>;
export type Initialized = ContractEventLog<{
  version: string;
  0: string;
}>;
export type Transfer = ContractEventLog<{
  from: string;
  to: string;
  tokenId: string;
  0: string;
  1: string;
  2: string;
}>;

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

    CHANGE_METADATA_PERMISSION(): NonPayableTransactionObject<string>;

    MINT_PERMISSION(): NonPayableTransactionObject<string>;

    QRC721_RESOURCE(): NonPayableTransactionObject<string>;

    __QRC721_init(
      params_: [string, string, string, string, number | string | BN],
      resource_: string
    ): NonPayableTransactionObject<void>;

    approve(
      to: string,
      tokenId: number | string | BN
    ): NonPayableTransactionObject<void>;

    balanceOf(owner: string): NonPayableTransactionObject<string>;

    baseURI(): NonPayableTransactionObject<string>;

    burnFrom(
      payer_: string,
      tokenId_: number | string | BN
    ): NonPayableTransactionObject<void>;

    contractURI(): NonPayableTransactionObject<string>;

    getApproved(
      tokenId: number | string | BN
    ): NonPayableTransactionObject<string>;

    getInjector(): NonPayableTransactionObject<string>;

    isApprovedForAll(
      owner: string,
      operator: string
    ): NonPayableTransactionObject<boolean>;

    mintTo(
      receiver_: string,
      tokenId_: number | string | BN,
      tokenURI_: string
    ): NonPayableTransactionObject<void>;

    name(): NonPayableTransactionObject<string>;

    ownerOf(tokenId: number | string | BN): NonPayableTransactionObject<string>;

    permissionManager(): NonPayableTransactionObject<string>;

    "safeTransferFrom(address,address,uint256)"(
      from: string,
      to: string,
      tokenId: number | string | BN
    ): NonPayableTransactionObject<void>;

    "safeTransferFrom(address,address,uint256,bytes)"(
      from: string,
      to: string,
      tokenId: number | string | BN,
      data: string | number[]
    ): NonPayableTransactionObject<void>;

    setApprovalForAll(
      operator: string,
      approved: boolean
    ): NonPayableTransactionObject<void>;

    setBaseURI(baseURI_: string): NonPayableTransactionObject<void>;

    setContractMetadata(
      contractURI_: string
    ): NonPayableTransactionObject<void>;

    setDependencies(
      registryAddress_: string,
      arg1: string | number[]
    ): NonPayableTransactionObject<void>;

    setInjector(injector_: string): NonPayableTransactionObject<void>;

    setTokenURI(
      tokenId_: number | string | BN,
      tokenURI_: string
    ): NonPayableTransactionObject<void>;

    supportsInterface(
      interfaceId: string | number[]
    ): NonPayableTransactionObject<boolean>;

    symbol(): NonPayableTransactionObject<string>;

    tokenByIndex(
      index: number | string | BN
    ): NonPayableTransactionObject<string>;

    tokenOfOwnerByIndex(
      owner: string,
      index: number | string | BN
    ): NonPayableTransactionObject<string>;

    tokenURI(
      tokenId: number | string | BN
    ): NonPayableTransactionObject<string>;

    totalSupply(): NonPayableTransactionObject<string>;

    totalSupplyCap(): NonPayableTransactionObject<string>;

    transferFrom(
      from: string,
      to: string,
      tokenId: number | string | BN
    ): NonPayableTransactionObject<void>;
  };
  events: {
    Approval(cb?: Callback<Approval>): EventEmitter;
    Approval(options?: EventOptions, cb?: Callback<Approval>): EventEmitter;

    ApprovalForAll(cb?: Callback<ApprovalForAll>): EventEmitter;
    ApprovalForAll(
      options?: EventOptions,
      cb?: Callback<ApprovalForAll>
    ): EventEmitter;

    ContractURIChanged(cb?: Callback<ContractURIChanged>): EventEmitter;
    ContractURIChanged(
      options?: EventOptions,
      cb?: Callback<ContractURIChanged>
    ): EventEmitter;

    Initialized(cb?: Callback<Initialized>): EventEmitter;
    Initialized(
      options?: EventOptions,
      cb?: Callback<Initialized>
    ): EventEmitter;

    Transfer(cb?: Callback<Transfer>): EventEmitter;
    Transfer(options?: EventOptions, cb?: Callback<Transfer>): EventEmitter;

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

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

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

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

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

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