import { Signer, utils, providers, ContractReceipt, BigNumber } from 'ethers'; export interface SignerWithAddress extends Signer { address: string; getAddress(): Promise; signMessage(message: string | utils.Bytes): Promise; signTransaction(transaction: utils.Deferrable): Promise; sendTransaction(transaction: utils.Deferrable): Promise; connect(provider: providers.Provider): SignerWithAddress; toJSON(): string; } export interface ProcessedTx extends ContractReceipt { totalCost: BigNumber; } export interface MessagePayloadFactory { hash(message: M): string; sign(signer: SignerWithAddress, message: M): Promise; }