import { Contract, ethers, Signer } from "ethers";
import { Interface } from "ethers/lib/utils";
import { GenerateContractTransactionData, Subscription } from "../common/interfaces";
export declare abstract class ContractModel {
    address: string;
    signer: Signer;
    contract: Contract;
    abi: Interface;
    protected _signerList: Signer[];
    constructor(address: string, abi: any, signer: Signer);
    setDefaultSigner(signer: Signer): void;
    registerBackupSigner(signers: Signer[]): void;
    get signerList(): Signer[];
    removeSigner(signer: Signer): void;
    get provider(): ethers.providers.Provider;
    generateTransaction(data: GenerateContractTransactionData, options?: {
        signer?: Signer;
        gasPrice?: string;
    }): Promise<{
        txHash: string;
        signedTransaction: string;
    }>;
    populateTransaction(functionName: string, data: any[], options: {
        gasPrice: string;
        signer?: Signer;
    }): Promise<ethers.PopulatedTransaction>;
    queryForEvents(eventFilter: string | ethers.EventFilter, startingBlock: number | string, endingBlock?: number | string): Promise<ethers.Event[]>;
    subscribeForEvent(eventFilter: string | ethers.EventFilter, callback: ethers.providers.Listener): Subscription;
}
