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

import BN from "bn.js";
import { EventData, PastEventOptions } from "web3-eth-contract";

export interface TestUtilContract extends Truffle.Contract<TestUtilInstance> {
  "new"(meta?: Truffle.TransactionDetails): Promise<TestUtilInstance>;
}

export interface Called {
  name: "Called";
  args: {
    success: boolean;
    error: string;
    0: boolean;
    1: string;
  };
}

type AllEvents = Called;

export interface TestUtilInstance extends Truffle.ContractInstance {
  libRelayRequestName(txDetails?: Truffle.TransactionDetails): Promise<string>;

  libRelayRequestType(txDetails?: Truffle.TransactionDetails): Promise<string>;

  libRelayRequestTypeHash(
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  libRelayRequestSuffix(
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  callForwarderVerify(
    relayRequest: {
      request: {
        from: string;
        to: string;
        value: number | BN | string;
        gas: number | BN | string;
        nonce: number | BN | string;
        data: string;
        validUntilTime: number | BN | string;
      };
      relayData: {
        maxFeePerGas: number | BN | string;
        maxPriorityFeePerGas: number | BN | string;
        transactionCalldataGasUsed: number | BN | string;
        relayWorker: string;
        paymaster: string;
        forwarder: string;
        paymasterData: string;
        clientId: number | BN | string;
      };
    },
    signature: string,
    txDetails?: Truffle.TransactionDetails
  ): Promise<void>;

  callForwarderVerifyAndCall: {
    (
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<Truffle.TransactionResponse<AllEvents>>;
    call(
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<{ 0: boolean; 1: string }>;
    sendTransaction(
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
    estimateGas(
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<number>;
  };

  splitRequest(
    relayRequest: {
      request: {
        from: string;
        to: string;
        value: number | BN | string;
        gas: number | BN | string;
        nonce: number | BN | string;
        data: string;
        validUntilTime: number | BN | string;
      };
      relayData: {
        maxFeePerGas: number | BN | string;
        maxPriorityFeePerGas: number | BN | string;
        transactionCalldataGasUsed: number | BN | string;
        relayWorker: string;
        paymaster: string;
        forwarder: string;
        paymasterData: string;
        clientId: number | BN | string;
      };
    },
    txDetails?: Truffle.TransactionDetails
  ): Promise<{ 0: string; 1: string }>;

  libDomainSeparator(
    forwarder: string,
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  libGetChainID(txDetails?: Truffle.TransactionDetails): Promise<BN>;

  _ecrecover(
    message: string,
    signature: string,
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  methods: {
    libRelayRequestName(
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    libRelayRequestType(
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    libRelayRequestTypeHash(
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    libRelayRequestSuffix(
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    callForwarderVerify(
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<void>;

    callForwarderVerifyAndCall: {
      (
        relayRequest: {
          request: {
            from: string;
            to: string;
            value: number | BN | string;
            gas: number | BN | string;
            nonce: number | BN | string;
            data: string;
            validUntilTime: number | BN | string;
          };
          relayData: {
            maxFeePerGas: number | BN | string;
            maxPriorityFeePerGas: number | BN | string;
            transactionCalldataGasUsed: number | BN | string;
            relayWorker: string;
            paymaster: string;
            forwarder: string;
            paymasterData: string;
            clientId: number | BN | string;
          };
        },
        signature: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<Truffle.TransactionResponse<AllEvents>>;
      call(
        relayRequest: {
          request: {
            from: string;
            to: string;
            value: number | BN | string;
            gas: number | BN | string;
            nonce: number | BN | string;
            data: string;
            validUntilTime: number | BN | string;
          };
          relayData: {
            maxFeePerGas: number | BN | string;
            maxPriorityFeePerGas: number | BN | string;
            transactionCalldataGasUsed: number | BN | string;
            relayWorker: string;
            paymaster: string;
            forwarder: string;
            paymasterData: string;
            clientId: number | BN | string;
          };
        },
        signature: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<{ 0: boolean; 1: string }>;
      sendTransaction(
        relayRequest: {
          request: {
            from: string;
            to: string;
            value: number | BN | string;
            gas: number | BN | string;
            nonce: number | BN | string;
            data: string;
            validUntilTime: number | BN | string;
          };
          relayData: {
            maxFeePerGas: number | BN | string;
            maxPriorityFeePerGas: number | BN | string;
            transactionCalldataGasUsed: number | BN | string;
            relayWorker: string;
            paymaster: string;
            forwarder: string;
            paymasterData: string;
            clientId: number | BN | string;
          };
        },
        signature: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<string>;
      estimateGas(
        relayRequest: {
          request: {
            from: string;
            to: string;
            value: number | BN | string;
            gas: number | BN | string;
            nonce: number | BN | string;
            data: string;
            validUntilTime: number | BN | string;
          };
          relayData: {
            maxFeePerGas: number | BN | string;
            maxPriorityFeePerGas: number | BN | string;
            transactionCalldataGasUsed: number | BN | string;
            relayWorker: string;
            paymaster: string;
            forwarder: string;
            paymasterData: string;
            clientId: number | BN | string;
          };
        },
        signature: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<number>;
    };

    splitRequest(
      relayRequest: {
        request: {
          from: string;
          to: string;
          value: number | BN | string;
          gas: number | BN | string;
          nonce: number | BN | string;
          data: string;
          validUntilTime: number | BN | string;
        };
        relayData: {
          maxFeePerGas: number | BN | string;
          maxPriorityFeePerGas: number | BN | string;
          transactionCalldataGasUsed: number | BN | string;
          relayWorker: string;
          paymaster: string;
          forwarder: string;
          paymasterData: string;
          clientId: number | BN | string;
        };
      },
      txDetails?: Truffle.TransactionDetails
    ): Promise<{ 0: string; 1: string }>;

    libDomainSeparator(
      forwarder: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    libGetChainID(txDetails?: Truffle.TransactionDetails): Promise<BN>;

    _ecrecover(
      message: string,
      signature: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
  };

  getPastEvents(event: string): Promise<EventData[]>;
  getPastEvents(
    event: string,
    options: PastEventOptions,
    callback: (error: Error, event: EventData) => void
  ): Promise<EventData[]>;
  getPastEvents(event: string, options: PastEventOptions): Promise<EventData[]>;
  getPastEvents(
    event: string,
    callback: (error: Error, event: EventData) => void
  ): Promise<EventData[]>;
}
