import { Web3SideChainClient } from "./web3_side_chain_client";
import { ITransactionConfig, ITransactionOption, IContractInitParam } from "../interfaces";
import { BaseContractMethod, BaseContract, BaseWeb3Client } from "../abstracts";
import { ContractWriteResult } from "../helpers";
import { TYPE_AMOUNT } from "../types";
export interface ITransactionConfigParam {
    txConfig: ITransactionConfig;
    method?: BaseContractMethod;
    isWrite?: boolean;
    isParent?: boolean;
}
export declare class BaseToken<T_CLIENT_CONFIG> {
    protected contractParam: IContractInitParam;
    protected client: Web3SideChainClient<T_CLIENT_CONFIG>;
    private contract_;
    constructor(contractParam: IContractInitParam, client: Web3SideChainClient<T_CLIENT_CONFIG>);
    getContract(): Promise<BaseContract>;
    protected processWrite(method: BaseContractMethod, option?: ITransactionOption): Promise<ContractWriteResult>;
    protected sendTransaction(option?: ITransactionOption): Promise<ContractWriteResult>;
    protected readTransaction(option?: ITransactionOption): Promise<ContractWriteResult>;
    private validateTxOption_;
    protected processRead<T>(method: BaseContractMethod, option?: ITransactionOption): Promise<T>;
    protected getClient(isParent: any): BaseWeb3Client;
    private getContract_;
    protected get parentDefaultConfig(): {
        from: string;
    };
    protected get childDefaultConfig(): {
        from: string;
    };
    protected createTransactionConfig({ txConfig, method, isParent, isWrite }: ITransactionConfigParam): Promise<ITransactionConfig>;
    protected transferERC20(to: string, amount: TYPE_AMOUNT, option?: ITransactionOption): Promise<ContractWriteResult>;
    protected transferERC721(from: string, to: string, tokenId: string, option: ITransactionOption): Promise<ContractWriteResult>;
    protected checkForRoot(methodName: any): void;
    protected checkForChild(methodName: any): void;
}
