import type { BaseContract, ContractTransaction, ContractTransactionResponse, DeferredTopicFilter, EventFragment, FunctionFragment, Result, Overrides } from 'ethers'; import type { Abi, AbiParametersToPrimitiveTypes, ExtractAbiEvent, ExtractAbiEventNames, ExtractAbiEvents, ExtractAbiFunction, ExtractAbiFunctionNames, ExtractAbiFunctions } from 'abitype'; type AsArray = T extends readonly unknown[] ? T : never; export type TypedContractFunctionResult['outputs']>> = TOutputArgs extends readonly [] ? void : TOutputArgs extends readonly [infer Arg] ? Arg : TOutputArgs; export type TypedFragment = ExtractAbiFunction> = Omit & { name: TFunction['name']; type: TFunction['type']; inputs: TFunction['inputs']; outputs: TFunction['outputs']; stateMutability: TFunction['stateMutability']; }; export interface TypedContractFunction = ExtractAbiFunction, TInputArgs extends readonly unknown[] = AsArray>, TResult = TypedContractFunctionResult, TFragment = TypedFragment> { (...args: [...TInputArgs, overrides?: Overrides]): Promise; name: TFunctionName; fragment: TFragment; getFragment(...args: [...TInputArgs]): TFragment; populateTransaction(...args: [...TInputArgs, overrides?: Overrides]): Promise; staticCall(...args: [...TInputArgs, overrides?: Overrides]): Promise; send(...args: [...TInputArgs, overrides?: Overrides]): Promise; estimateGas(...args: [...TInputArgs, overrides?: Overrides]): Promise; staticCallResult(...args: [...TInputArgs, overrides?: Overrides]): Promise; } export interface TypedContractEvent = ExtractAbiEvent, TEventArgs extends readonly unknown[] = AsArray>>> { (...args: [...TEventArgs]): DeferredTopicFilter; name: TEventName; fragment: EventFragment; getFragment(...args: [...TEventArgs]): EventFragment; } export type TypedContract = Omit & { [Method in ExtractAbiFunctionNames]: TypedContractFunction; } & { getFunction>(key: T | TypedFragment): TypedContractFunction; getEvent>(key: T | EventFragment): TypedContractEvent; filters: { [EventName in ExtractAbiEventNames]: TypedContractEvent; }; }; export {};