import type { Abi, AbiConstructor, AbiError, AbiEvent, AbiFunction, AbiParameter, AbiParameterToPrimitiveType, AbiParametersToPrimitiveTypes, AbiStateMutability, Address, ExtractAbiError, ExtractAbiErrorNames, ExtractAbiEvent, ExtractAbiEventNames, ExtractAbiFunction, ExtractAbiFunctionNames, Narrow } from 'abitype'; import type { Hex, LogTopic } from './misc.js'; import type { TransactionRequest } from './transaction.js'; import type { Filter, IsNarrowable, MaybeRequired, NoUndefined, Prettify } from './utils.js'; export type AbiItem = Abi[number]; export type EventDefinition = `${string}(${string})`; export type ContractFunctionConfig = { /** Contract ABI */ abi: Narrow; /** Contract address */ address: Address; /** Function to invoke on the contract */ functionName: InferFunctionName; } & GetFunctionArgs; export type ContractFunctionResult : AbiFunction, TArgs = AbiParametersToPrimitiveTypes, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? unknown : TArgs extends readonly [] ? void : TArgs extends readonly [infer Arg] ? Arg : TArgs; export type GetValue : AbiFunction, _Narrowable extends boolean = IsNarrowable> = _Narrowable extends true ? TAbiFunction['stateMutability'] extends 'payable' ? { value?: NoUndefined; } : TAbiFunction['payable'] extends true ? { value?: NoUndefined; } : { value?: never; } : { value?: TValueType; }; export type MaybeAbiEventName = TAbiEvent extends AbiEvent ? TAbiEvent['name'] : undefined; export type MaybeExtractEventArgsFromAbi = TAbi extends Abi | readonly unknown[] ? TEventName extends string ? GetEventArgs : undefined : undefined; export type InferErrorName = TAbi extends Abi ? ExtractAbiErrorNames extends infer AbiErrorNames ? AbiErrorNames | (TErrorName extends AbiErrorNames ? TErrorName : never) | (Abi extends TAbi ? string : never) : never : TErrorName; export type InferEventName = TAbi extends Abi ? ExtractAbiEventNames extends infer AbiEventNames ? AbiEventNames | (TEventName extends AbiEventNames ? TEventName : never) : never : TEventName; export type InferFunctionName = TAbi extends Abi ? ExtractAbiFunctionNames extends infer AbiFunctionNames ? AbiFunctionNames | (TFunctionName extends AbiFunctionNames ? TFunctionName : never) | (Abi extends TAbi ? string : never) : never : TFunctionName; export type InferItemName = TAbi extends Abi ? ExtractAbiItemNames extends infer AbiNames ? AbiNames | (TName extends AbiNames ? TName : never) | (Abi extends TAbi ? string : never) : never : TName; type ExtractAbiItemNames = ExtractAbiFunctionNames | ExtractAbiEventNames | ExtractAbiErrorNames; export type GetFunctionArgs : AbiFunction, TArgs = AbiParametersToPrimitiveTypes, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? { /** * Arguments to pass contract method * * Use a [const assertion](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions) on {@link abi} for type inference. */ args?: readonly unknown[]; } : TArgs extends readonly [] ? { args?: never; } : { /** Arguments to pass contract method */ args: TArgs; }; export type GetConstructorArgs : AbiConstructor, TArgs = AbiParametersToPrimitiveTypes, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? { /** * Arguments to pass contract constructor * * Use a [const assertion](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions) on {@link abi} for type inference. */ args?: readonly unknown[]; } : TArgs extends readonly [] ? { args?: never; } : { /** Arguments to pass contract constructor */ args: TArgs; }; export type GetErrorArgs : AbiError, TArgs = AbiParametersToPrimitiveTypes, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? { /** * Arguments to pass contract method * * Use a [const assertion](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions) on {@link abi} for type inference. */ args?: readonly unknown[]; } : TArgs extends readonly [] ? { args?: never; } : { /** Arguments to pass contract method */ args: TArgs; }; export type GetEventArgs : AbiEvent & { type: 'event'; }, TArgs = AbiEventParametersToPrimitiveTypes, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? readonly unknown[] | Record : TArgs; export type GetEventArgsFromTopics : AbiEvent & { type: 'event'; }, TArgs = AbiEventParametersToPrimitiveTypes> = TTopics extends readonly [] ? TData extends undefined ? { args?: never; } : { args?: TArgs; } : { args: TArgs; }; type EventParameterOptions = { EnableUnion?: boolean; IndexedOnly?: boolean; Required?: boolean; }; type DefaultEventParameterOptions = { EnableUnion: true; IndexedOnly: true; Required: false; }; type HashedEventTypes = 'bytes' | 'string' | 'tuple' | `${string}[${string}]`; type _HasUnnamedAbiParameter = TAbiParameters extends readonly [ infer Head extends AbiParameter, ...infer Tail extends readonly AbiParameter[] ] ? Head extends { name: string; } ? Head['name'] extends '' ? true : _HasUnnamedAbiParameter : true : false; /** * @internal */ export type LogTopicType = TTopic extends Hex ? TPrimitiveType : TTopic extends Hex[] ? TPrimitiveType[] : TTopic extends null ? null : never; /** * @internal */ export type AbiEventParameterToPrimitiveType> = Options['EnableUnion'] extends true ? LogTopicType<_Type> : _Type; /** * @internal */ export type AbiEventTopicToPrimitiveType> = LogTopicType; export type AbiEventParametersToPrimitiveTypes = TAbiParameters extends readonly [] ? readonly [] : Filter extends infer Filtered extends readonly AbiParameter[] ? _HasUnnamedAbiParameter extends true ? readonly [ ...{ [K in keyof Filtered]: AbiEventParameterToPrimitiveType; } ] | (Options['Required'] extends true ? never : Filtered extends readonly [ ...infer Head extends readonly AbiParameter[], infer _ ] ? AbiEventParametersToPrimitiveTypes; }], Options> : never) : { [Parameter in Filtered[number] as Parameter extends { name: infer Name extends string; } ? Name : never]?: AbiEventParameterToPrimitiveType; } extends infer Mapped ? Prettify> : never : never; export {}; //# sourceMappingURL=contract.d.ts.map