import { Abi, AbiEvent, AbiFunction, AbiParameter, AbiParameterToPrimitiveType, AbiParametersToPrimitiveTypes, Address, ExtractAbiEvent, ExtractAbiEventNames, Narrow, ResolvedConfig } from 'abitype'; import { Contract as EthersContract, Signer, ethers, providers } from 'ethers'; import { AbiEventParametersToPrimitiveTypes, AbiItemName, Event, GetOverridesForAbiStateMutability } from '../../types/contracts'; import { CountOccurrences, IsUnknown, UnionToIntersection } from '../../types/utils'; export declare type GetContractArgs = { /** Contract address */ address: string; /** Contract ABI */ abi: Narrow; /** Signer or provider to attach to contract */ signerOrProvider?: Signer | providers.Provider; }; export declare type GetContractResult = TAbi extends Abi ? Contract & EthersContract : EthersContract; export declare function getContract({ address, abi, signerOrProvider, }: GetContractArgs): GetContractResult; declare type PropertyKeys = 'address' | 'attach' | 'connect' | 'deployed' | 'interface' | 'resolvedAddress'; declare type FunctionKeys = 'callStatic' | 'estimateGas' | 'functions' | 'populateTransaction'; declare type EventKeys = 'emit' | 'filters' | 'listenerCount' | 'listeners' | 'off' | 'on' | 'once' | 'queryFilter' | 'removeAllListeners' | 'removeListener'; declare type BaseContract, unknown>> = Omit & TContract; declare type InterfaceKeys = 'events' | 'functions'; declare type BaseInterface, unknown>> = Omit & Interface; export declare type Contract> = _Functions & BaseContract<{ address: Address; resolvedAddress: Promise
; attach(addressOrName: Address | string): Contract; connect(signerOrProvider: ethers.Signer | ethers.providers.Provider | string): Contract; deployed(): Promise>; interface: BaseInterface<{ events: InterfaceEvents; functions: InterfaceFunctions; }>; callStatic: _Functions; estimateGas: Functions; functions: Functions; populateTransaction: Functions; emit | ethers.EventFilter>(eventName: TEventName, ...args: AbiEventParametersToPrimitiveTypes>['inputs']> extends infer TArgs extends readonly unknown[] ? TArgs : never): boolean; filters: Filters; listenerCount(): number; listenerCount>(eventName: TEventName): number; listenerCount(eventFilter: ethers.EventFilter): number; listeners(): Array<(...args: any[]) => void>; listeners>(eventName: TEventName): Array>; listeners(eventFilter: ethers.EventFilter): Array>>; off: EventListener; on: EventListener; once: EventListener; queryFilter>(event: TEventName, fromBlockOrBlockhash?: string | number, toBlock?: string | number): Promise>; queryFilter(eventFilter: ethers.EventFilter, fromBlockOrBlockhash?: string | number, toBlock?: string | number): Promise>; removeAllListeners(eventName?: ExtractAbiEventNames): Contract; removeAllListeners(eventFilter: ethers.EventFilter): Contract; removeListener: EventListener; }>; declare type Functions = UnionToIntersection<{ [K in keyof TAbi]: TAbi[K] extends infer TAbiFunction extends AbiFunction & { type: 'function'; } ? { [K in CountOccurrences extends 1 ? AbiItemName : AbiItemName]: (...args: [ ...args: TAbiFunction['inputs'] extends infer TInputs extends readonly AbiParameter[] ? AbiParametersToPrimitiveTypes : never, overrides?: GetOverridesForAbiStateMutability ]) => Promise extends true ? AbiFunctionReturnType extends infer TAbiFunctionReturnType ? Options['ReturnTypeAsArray'] extends true ? [TAbiFunctionReturnType] : TAbiFunctionReturnType : never : Options['ReturnType']>; } : never; }[number]>; declare type AbiFunctionReturnType = ({ payable: ethers.ContractTransaction; nonpayable: ethers.ContractTransaction; } & { [_ in 'pure' | 'view']: TAbiFunction['outputs']['length'] extends infer TLength ? TLength extends 0 ? void : TLength extends 1 ? AbiParameterToPrimitiveType : { [Output in TAbiFunction['outputs'][number] as Output['name'] extends '' ? never : Output['name']]: AbiParameterToPrimitiveType; } & AbiParametersToPrimitiveTypes : never; })[TAbiFunction['stateMutability']]; declare type InterfaceFunctions = UnionToIntersection<{ [K in keyof TAbi]: TAbi[K] extends infer TAbiFunction extends AbiFunction & { type: 'function'; } ? { [K in AbiItemName]: ethers.utils.FunctionFragment; } : never; }[number]>; declare type InterfaceEvents = UnionToIntersection<{ [K in keyof TAbi]: TAbi[K] extends infer TAbiEvent extends AbiEvent ? { [K in AbiItemName]: ethers.utils.EventFragment; } : never; }[number]>; export interface EventListener { >(eventName: TEventName, listener: Listener): Contract; (eventFilter: ethers.EventFilter, listener: Listener>): Contract; } declare type Listener> = AbiEventParametersToPrimitiveTypes extends infer TArgs extends readonly unknown[] ? (...args: [...args: TArgs, event: Event]) => void : never; declare type Filters = UnionToIntersection<{ [K in keyof TAbi]: TAbi[K] extends infer TAbiEvent extends AbiEvent ? { [K in CountOccurrences extends 1 ? AbiItemName : AbiItemName]: (...args: TAbiEvent['inputs'] extends infer TAbiParameters extends readonly (AbiParameter & { indexed?: boolean; })[] ? AbiEventParametersToPrimitiveTypes : never) => ethers.EventFilter; } : never; }[number]>; export {};