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

import BN from "bn.js";
import { Contract, ContractOptions, EventOptions } from "web3-eth-contract";
import { EventLog } from "web3-core";
import { EventEmitter } from "events";
import { Callback, ContractEvent, TransactionObject } from "./types";

export class KToken extends Contract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  );
  clone(): KToken;
  methods: {
    allowance(owner: string, spender: string): TransactionObject<BN>;

    approve(
      spender: string,
      amount: number | string
    ): TransactionObject<boolean>;

    balanceOf(account: string): TransactionObject<BN>;

    balanceOfUnderlying(owner: string): TransactionObject<BN>;

    decimals(): TransactionObject<BN>;

    decreaseAllowance(
      spender: string,
      subtractedValue: number | string
    ): TransactionObject<boolean>;

    increaseAllowance(
      spender: string,
      addedValue: number | string
    ): TransactionObject<boolean>;

    isUnderlyingEther(): TransactionObject<boolean>;

    name(): TransactionObject<string>;

    nativeAmountToUnderlyingAmount(
      nativeAmount: number | string
    ): TransactionObject<BN>;

    owner(): TransactionObject<string>;

    paused(): TransactionObject<boolean>;

    redeem(kTokenAmount: number | string): TransactionObject<boolean>;

    redeemUnderlying(tokenAmount: number | string): TransactionObject<boolean>;

    renounceOwnership(): TransactionObject<void>;

    symbol(): TransactionObject<string>;

    totalReserve(): TransactionObject<BN>;

    totalSupply(): TransactionObject<BN>;

    transfer(
      recipient: string,
      amount: number | string
    ): TransactionObject<boolean>;

    transferFrom(
      sender: string,
      recipient: string,
      amount: number | string
    ): TransactionObject<boolean>;

    transferOwnership(newOwner: string): TransactionObject<void>;

    underlying(): TransactionObject<string>;

    underlyingAmountToNativeAmount(
      underlyingAmount: number | string,
      ceil: boolean
    ): TransactionObject<BN>;

    invoke(
      invokeTo: string,
      invokeData: string | number[],
      underlyingAmount: number | string
    ): TransactionObject<void>;

    calculateRepaymentAmount(
      tokenAmount: number | string
    ): TransactionObject<BN>;

    poolReward(): TransactionObject<BN>;

    platformReward(): TransactionObject<BN>;

    platformVaultAddress(): TransactionObject<string>;

    isKToken(): TransactionObject<boolean>;

    currentSender(): TransactionObject<string>;

    currentTokenAddress(): TransactionObject<string>;

    currentTokenAmount(): TransactionObject<BN>;

    currentRepaymentAmount(): TransactionObject<BN>;

    setPoolReward(poolRewardBips: number | string): TransactionObject<void>;

    setPlatformReward(
      platformRewardBips: number | string
    ): TransactionObject<void>;

    setPlatformVaultAddress(
      newPlatformVaultAddress: string
    ): TransactionObject<void>;

    pause(): TransactionObject<void>;

    unpause(): TransactionObject<void>;
  };
  events: {
    Approval: ContractEvent<{
      owner: string;
      spender: string;
      value: BN;
      0: string;
      1: string;
      2: BN;
    }>;
    Invocation: ContractEvent<{
      invokeTo: string;
      invokeValue: BN;
      invokeDataHash: string;
      underlyingAmount: BN;
      0: string;
      1: BN;
      2: string;
      3: BN;
    }>;
    Mint: ContractEvent<{
      minter: string;
      tokenAmount: BN;
      kTokenAmount: BN;
      0: string;
      1: BN;
      2: BN;
    }>;
    OwnershipTransferred: ContractEvent<{
      previousOwner: string;
      newOwner: string;
      0: string;
      1: string;
    }>;
    Paused: ContractEvent<string>;
    Redeem: ContractEvent<{
      redeemer: string;
      tokenAmount: BN;
      kTokenAmount: BN;
      0: string;
      1: BN;
      2: BN;
    }>;
    Reward: ContractEvent<{
      poolReward: BN;
      platformReward: BN;
      tokenAddress: string;
      0: BN;
      1: BN;
      2: string;
    }>;
    Transfer: ContractEvent<{
      from: string;
      to: string;
      value: BN;
      0: string;
      1: string;
      2: BN;
    }>;
    Unpaused: ContractEvent<string>;
    allEvents: (
      options?: EventOptions,
      cb?: Callback<EventLog>
    ) => EventEmitter;
  };
}
