import { ApiTypes, DecorateMethod, DecoratedRpc, AugmentedSubmittables } from "../../api/types";
import { RpcInterface } from "../../rpc-core/types";
import { Registry } from "../../types/types";
import { ApiObject, ContractABIPre, ContractBase, ContractMessage } from '../types';
import Abi from '../Abi';
export declare abstract class Base<ApiType extends ApiTypes> implements ContractBase<ApiType> {
    readonly abi: Abi;
    readonly api: ApiObject<ApiType>;
    readonly decorateMethod: DecorateMethod<ApiType>;
    readonly registry: Registry;
    constructor(api: ApiObject<ApiType>, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod<ApiType>);
    get messages(): ContractMessage[];
    getMessage(nameOrIndex?: string | number): ContractMessage;
}
export declare abstract class BaseWithTx<ApiType extends ApiTypes> extends Base<ApiType> {
    protected get apiContracts(): AugmentedSubmittables<'rxjs'>['contracts'];
    constructor(api: ApiObject<ApiType>, abi: ContractABIPre | Abi, decorateMethod: DecorateMethod<ApiType>);
}
export declare abstract class BaseWithTxAndRpcCall<ApiType extends ApiTypes> extends BaseWithTx<ApiType> {
    get hasRpcContractsCall(): boolean;
    protected get rpcContractsCall(): DecoratedRpc<'rxjs', RpcInterface>['contracts']['call'];
}
