import type { Abi, AbiParametersToPrimitiveTypes, Address, ExtractAbiFunction, ExtractAbiFunctionNames, FormatAbi, } from 'abitype' export type ValueOf = T[keyof T] export type Read< TName extends string, TAddresses extends Record, TAbi extends Abi, > = (options?: { chainId?: TChainId | number | undefined }) => { [TFunctionName in ExtractAbiFunctionNames]: < TArgs extends AbiParametersToPrimitiveTypes< ExtractAbiFunction['inputs'] > & any[] = AbiParametersToPrimitiveTypes< ExtractAbiFunction['inputs'] > & any[], >( ...args: TArgs ) => TArgs['length'] extends 0 ? { evmtsContractName: TName address: ValueOf abi: [ExtractAbiFunction] humanReadableAbi: FormatAbi<[ExtractAbiFunction]> functionName: TFunctionName } : { evmtsContractName: TName address: ValueOf abi: [ExtractAbiFunction] humanReadableAbi: FormatAbi<[ExtractAbiFunction]> functionName: TFunctionName args: TArgs } }