import type { TypedDataDomain, TypedDataField } from "../hash/index.js";
import type { TransactionLike } from "../transaction/index.js";
import type { BlockTag, Provider, TransactionRequest, TransactionResponse } from "./provider.js";
import type { Signer } from "./signer.js";
/**
 *  An **AbstractSigner** includes most of teh functionality required
 *  to get a [[Signer]] working as expected, but requires a few
 *  Signer-specific methods be overridden.
 *
 */
export declare abstract class AbstractSigner
 implements Signer {
    /**
     *  The provider this signer is connected to.
     */
    readonly provider: P;
    /**
     *  Creates a new Signer connected to %%provider%%.
     */
    constructor(provider?: P);
    /**
     *  Resolves to the Signer address.
     */
    abstract getAddress(): Promise;
    /**
     *  Returns the signer connected to %%provider%%.
     *
     *  This may throw, for example, a Signer connected over a Socket or
     *  to a specific instance of a node may not be transferrable.
     */
    abstract connect(provider: null | Provider): Signer;
    getNonce(blockTag?: BlockTag): Promise;
    populateCall(tx: TransactionRequest): Promise>;
    populateTransaction(tx: TransactionRequest): Promise>;
    estimateGas(tx: TransactionRequest): Promise;
    call(tx: TransactionRequest): Promise;
    resolveName(name: string): Promise;
    sendTransaction(tx: TransactionRequest): Promise;
    abstract signTransaction(tx: TransactionRequest): Promise;
    abstract signMessage(message: string | Uint8Array): Promise;
    abstract signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise;
}
/**
 *  A **VoidSigner** is a class deisgned to allow an address to be used
 *  in any API which accepts a Signer, but for which there are no
 *  credentials available to perform any actual signing.
 *
 *  This for example allow impersonating an account for the purpose of
 *  static calls or estimating gas, but does not allow sending transactions.
 */
export declare class VoidSigner extends AbstractSigner {
    #private;
    /**
     *  The signer address.
     */
    readonly address: string;
    /**
     *  Creates a new **VoidSigner** with %%address%% attached to
     *  %%provider%%.
     */
    constructor(address: string, provider?: null | Provider);
    getAddress(): Promise;
    connect(provider: null | Provider): VoidSigner;
    signTransaction(tx: TransactionRequest): Promise;
    signMessage(message: string | Uint8Array): Promise;
    signTypedData(domain: TypedDataDomain, types: Record>, value: Record): Promise;
}
//# sourceMappingURL=abstract-signer.d.ts.map