import BigNumber from "bignumber.js";
import ERC20 from "./erc20";
import Ethereum from "./ethereum";
import SmartContract from "./smartContract";
/**
 * Toolkit of Erc20Fingate
 *
 * @export
 * @class Erc20Fingate
 * @extends {EthereumFingate}
 */
declare class Fingate extends SmartContract {
    /**
     * ether gas limit
     *
     * @private
     * @type {number}
     * @memberof Fingate
     */
    private _etherGasLimit;
    private _erc20;
    /**
     * Creates an instance of ERC20
     * @memberof Fingate
     */
    constructor();
    /**
     * set & get _etherGasLimit
     *
     * @memberof EtherFingate
     */
    set etherGasLimit(v: number);
    get etherGasLimit(): number;
    /**
     * init erc20 contract
     *
     * @param {string} etherContractAddress ether fingate address
     * @param {string} tokenContractAddress contract address of erc20 token
     * @memberof Erc20Fingate
     */
    init(fingateAddress: string, ethereum: Ethereum): void;
    initErc20(erc20: ERC20): void;
    /**
     * destroy instance of contract
     *
     * @memberof Fingate
     */
    destroy(): void;
    /**
     * check state if pending
     *
     * @param {((BigNumber | string)[])} state
     * @returns {boolean} return true if state is pending
     * @memberof Fingate
     */
    isPending(state: (BigNumber | string)[]): boolean;
    /**
     * request deposit state
     *
     * @param {string} address ethereum address
     * @param {string} [contractAddress="0x0000000000000000000000000000000000000000"] contract address
     * @returns {(Promise<(BigNumber | string)[]>)}
     * @memberof Fingate
     */
    depositState(address: string, contractAddress?: string): Promise<(BigNumber | string)[]>;
    /**
     * deposit ether
     *
     * @param {string} secret ethereum secret
     * @param {string} jingtumAddress jingtum address
     * @param {string} amount deposit value
     * @param {string} [nonce] nonce
     * @returns {Promise<string>} resolve hash if success
     * @memberof Fingate
     */
    deposit(secret: string, jingtumAddress: string, amount: string, nonce?: number): Promise<string>;
    /**
     * deposit erc20 token
     *
     * @param {string} jtAddress swtc address
     * @param {string} tokenAddress erc20 contract address
     * @param {number} decimals token decimals
     * @param {string} amount amount of deposit
     * @param {string} hash generated by `transfer` api of ERC20
     * @param {string} secret ethereum secret
     * @param {string} [nonce] nonce
     * @returns {Promise<string>} reslove hash of transaction if success
     * @memberof Fingate
     */
    depositToken(jtAddress: string, tokenAddress: string, decimals: number, amount: string, hash: string, secret: string, nonce?: number): Promise<string>;
    /**
     * deposit erc20
     *
     * @param {string} secret ethereum secret
     * @param {string} jtAddress jingtum address
     * @param {string} amount deposit value
     * @param {string} [nonce] nonce
     * @returns {Promise<string[]>} resolve hashs if success
     * @memberof Fingate
     */
    depositErc20(secret: string, jtAddress: string, amount: string, nonce?: number): Promise<string[]>;
}
export default Fingate;
