/* Generated by ts-generator ver. 0.0.8 */
/* tslint:disable */

/// <reference types="truffle-typings" />
import { BigNumber } from 'bignumber.js';
import { Hex } from 'web3-utils';

export interface MigrationsContract extends Truffle.Contract<MigrationsInstance> {
  'new'(meta?: Truffle.TransactionDetails): Promise<MigrationsInstance>;
}

export interface SMT256Contract extends Truffle.Contract<SMT256Instance> {
  'new'(meta?: Truffle.TransactionDetails): Promise<SMT256Instance>;
}

export interface MigrationsInstance extends Truffle.ContractInstance {
  last_completed_migration(txDetails?: Truffle.TransactionDetails): Promise<BigNumber>;

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

  setCompleted: {
    (completed: number | BigNumber | string, txDetails?: Truffle.TransactionDetails): Promise<Truffle.TransactionResponse>;
    call(completed: number | BigNumber | string, txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(completed: number | BigNumber | string, txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(completed: number | BigNumber | string, txDetails?: Truffle.TransactionDetails): Promise<number>;
  };

  upgrade: {
    (new_address: string | BigNumber, txDetails?: Truffle.TransactionDetails): Promise<Truffle.TransactionResponse>;
    call(new_address: string | BigNumber, txDetails?: Truffle.TransactionDetails): Promise<void>;
    sendTransaction(new_address: string | BigNumber, txDetails?: Truffle.TransactionDetails): Promise<string>;
    estimateGas(new_address: string | BigNumber, txDetails?: Truffle.TransactionDetails): Promise<number>;
  };
}

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

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

  inclusionProof(
    root: string | BigNumber | Hex,
    leaf: string | BigNumber | Hex,
    siblings: (string | BigNumber | Hex)[],
    txDetails?: Truffle.TransactionDetails
  ): Promise<boolean>;

  nonInclusionProof(
    root: string | BigNumber | Hex,
    leaf: string | BigNumber | Hex,
    siblings: (string | BigNumber | Hex)[],
    txDetails?: Truffle.TransactionDetails
  ): Promise<boolean>;

  merkleProof(
    root: string | BigNumber | Hex,
    leaf: string | BigNumber | Hex,
    value: string | BigNumber | Hex,
    siblings: (string | BigNumber | Hex)[],
    txDetails?: Truffle.TransactionDetails
  ): Promise<boolean>;

  calculateRoot(
    leaf: string | BigNumber | Hex,
    value: string | BigNumber | Hex,
    siblings: (string | BigNumber | Hex)[],
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  append(
    root: string | BigNumber | Hex,
    leaf: string | BigNumber | Hex,
    siblings: (string | BigNumber | Hex)[],
    txDetails?: Truffle.TransactionDetails
  ): Promise<string>;

  rollUpProof(
    root: string | BigNumber | Hex,
    nextRoot: string | BigNumber | Hex,
    leaves: (string | BigNumber | Hex)[],
    siblings: (string | BigNumber | Hex)[][],
    txDetails?: Truffle.TransactionDetails
  ): Promise<boolean>;
}
