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

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

export interface TestRecipientContract
  extends Truffle.Contract<TestRecipientInstance> {
  "new"(
    forwarder: string,
    meta?: Truffle.TransactionDetails
  ): Promise<TestRecipientInstance>;
}

export interface Reverting {
  name: "Reverting";
  args: {
    message: string;
    0: string;
  };
}

export interface SampleRecipientEmitted {
  name: "SampleRecipientEmitted";
  args: {
    message: string;
    realSender: string;
    msgSender: string;
    origin: string;
    msgValue: BN;
    gasLeft: BN;
    balance: BN;
    0: string;
    1: string;
    2: string;
    3: string;
    4: BN;
    5: BN;
    6: BN;
  };
}

type AllEvents = Reverting | SampleRecipientEmitted;

export interface TestRecipientInstance extends Truffle.ContractInstance {
  /**
   * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder.Method is not a required method to allow Recipients to trust multiple Forwarders. Not recommended yet.
   */
  getTrustedForwarder(txDetails?: Truffle.TransactionDetails): Promise<string>;

  /**
   * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder.
   * @param forwarder The address of the Forwarder contract that is being used.
   */
  isTrustedForwarder(
    forwarder: string,
    txDetails?: Truffle.TransactionDetails
  ): Promise<boolean>;

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

  testRevert: {
    (txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
  };

  setWithdrawDuringRelayedCall: {
    (_paymaster: string, txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(
      _paymaster: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<void>;
    sendTransaction(
      _paymaster: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
    estimateGas(
      _paymaster: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<number>;
  };

  recipientRevert: {
    (txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
  };

  emitMessage: {
    (message: string, txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
    sendTransaction(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
    estimateGas(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<number>;
  };

  withdrawAllBalance: {
    (txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
  };

  dontEmitMessage: {
    (message: string, txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<void>;
    sendTransaction(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;
    estimateGas(
      message: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<number>;
  };

  emitMessageNoParams: {
    (txDetails?: Truffle.TransactionDetails): Promise<
      Truffle.TransactionResponse<AllEvents>
    >;
    call(txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
  };

  checkReturnValues(
    len: number | BN | string,
    doRevert: boolean,
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  checkNoReturnValues(
    doRevert: boolean,
    txDetails?: Truffle.TransactionDetails
  ): Promise<void>;

  methods: {
    /**
     * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder.Method is not a required method to allow Recipients to trust multiple Forwarders. Not recommended yet.
     */
    getTrustedForwarder(
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    /**
     * :warning: **Warning** :warning: The Forwarder can have a full control over your Recipient. Only trust verified Forwarder.
     * @param forwarder The address of the Forwarder contract that is being used.
     */
    isTrustedForwarder(
      forwarder: string,
      txDetails?: Truffle.TransactionDetails
    ): Promise<boolean>;

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

    testRevert: {
      (txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(txDetails?: Truffle.TransactionDetails): Promise<void>;
      sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
      estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
    };

    setWithdrawDuringRelayedCall: {
      (_paymaster: string, txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(
        _paymaster: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<void>;
      sendTransaction(
        _paymaster: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<string>;
      estimateGas(
        _paymaster: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<number>;
    };

    recipientRevert: {
      (txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(txDetails?: Truffle.TransactionDetails): Promise<void>;
      sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
      estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
    };

    emitMessage: {
      (message: string, txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<string>;
      sendTransaction(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<string>;
      estimateGas(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<number>;
    };

    withdrawAllBalance: {
      (txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(txDetails?: Truffle.TransactionDetails): Promise<void>;
      sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
      estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
    };

    dontEmitMessage: {
      (message: string, txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<void>;
      sendTransaction(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<string>;
      estimateGas(
        message: string,
        txDetails?: Truffle.TransactionDetails
      ): Promise<number>;
    };

    emitMessageNoParams: {
      (txDetails?: Truffle.TransactionDetails): Promise<
        Truffle.TransactionResponse<AllEvents>
      >;
      call(txDetails?: Truffle.TransactionDetails): Promise<void>;
      sendTransaction(txDetails?: Truffle.TransactionDetails): Promise<string>;
      estimateGas(txDetails?: Truffle.TransactionDetails): Promise<number>;
    };

    checkReturnValues(
      len: number | BN | string,
      doRevert: boolean,
      txDetails?: Truffle.TransactionDetails
    ): Promise<string>;

    checkNoReturnValues(
      doRevert: boolean,
      txDetails?: Truffle.TransactionDetails
    ): Promise<void>;
  };

  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[]>;
}
