import { Address } from './qrl_types.js'; import { Bytes, Numbers } from './primitives_types.js'; import { FixedSizeArray } from './utility_types.js'; type _HyperionIndexRange = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 25 | 26 | 27 | 28 | 29 | 30; export type ConvertToNumber = Range extends unknown ? (`${Range}` extends T ? Range : never) : never; export type Components = { name: string; type: string; indexed?: boolean; components?: Components[]; }; export interface AbiStruct { [key: string]: unknown; name?: string; type: string; } export interface AbiCoderStruct extends AbiStruct { [key: string]: unknown; components?: Array; } export type AbiParameter = { readonly name: string; readonly type: string; readonly baseType?: string; readonly indexed?: boolean; readonly components?: ReadonlyArray; readonly arrayLength?: number; readonly arrayChildren?: ReadonlyArray; readonly internalType?: string; }; type FragmentTypes = 'constructor' | 'event' | 'function' | 'fallback' | 'receive'; export type AbiBaseFragment = { readonly type: string | FragmentTypes; }; export type AbiConstructorFragment = AbiBaseFragment & { readonly type: string | 'constructor'; readonly stateMutability: string | 'nonpayable' | 'payable'; readonly inputs?: ReadonlyArray; }; export type AbiFunctionFragment = AbiBaseFragment & { readonly name: string; readonly type: string | 'function'; readonly stateMutability?: string | 'nonpayable' | 'payable' | 'pure' | 'view'; readonly inputs?: ReadonlyArray; readonly outputs?: ReadonlyArray; readonly constant?: boolean; readonly payable?: boolean; }; export type AbiFallbackFragment = AbiBaseFragment & { readonly name: never; readonly type: string | 'fallback'; readonly stateMutability: string | 'nonpayable' | 'payable' | 'pure' | 'view'; readonly inputs: never; readonly outputs: never; readonly constant?: boolean; readonly payable?: boolean; }; export type AbiEventFragment = AbiBaseFragment & { readonly name: string; readonly type: string | 'event'; readonly inputs?: ReadonlyArray; readonly anonymous?: boolean; }; export type AbiErrorFragment = AbiBaseFragment & { readonly name: string; readonly type: string | 'error'; readonly inputs?: ReadonlyArray; }; export type AbiFragment = AbiConstructorFragment | AbiFunctionFragment | AbiEventFragment | AbiErrorFragment | AbiFallbackFragment; export type ContractAbi = ReadonlyArray; export type AbiInput = string | AbiParameter | { name: string; type: string; components?: Components; index?: boolean; internalType?: string; } | { readonly [key: string]: unknown; }; export type JsonFunctionInterface = { type: 'function'; name: string; inputs: Components[]; outputs?: AbiInput[]; stateMutability?: string; }; export type JsonEventInterface = { type: 'event'; name: string; inputs: Components[]; indexed: boolean; anonymous: boolean; }; export type FilterAbis = Abi extends Filter ? Abi : never; type _TypedArray = Size extends '' ? Type[] : FixedSizeArray>; export type PrimitiveAddressType = Type extends `address[${infer Size}]` ? _TypedArray : Type extends 'address' ? Address : never; export type PrimitiveStringType = Type extends `string${string}[${infer Size}]` ? _TypedArray : Type extends 'string' | `string${string}` ? string : never; export type PrimitiveBooleanType = Type extends `bool[${infer Size}]` ? _TypedArray : Type extends 'bool' ? boolean : never; export type PrimitiveIntegerType = Type extends `uint${string}[${infer Size}]` | `int${string}[${infer Size}]` ? _TypedArray : Type extends 'uint' | 'int' | `int${string}` | `uint${string}` ? Numbers : never; export type PrimitiveBytesType = Type extends `bytes${string}[${infer Size}]` ? _TypedArray : Type extends 'bytes' | `bytes${string}` ? Bytes : never; export type PrimitiveTupleType | undefined | unknown = []> = TypeComponents extends ReadonlyArray ? Type extends 'tuple' ? { [Param in TypeComponents[number] as Param['name']]: MatchPrimitiveType; } : Type extends `tuple[${infer Size}]` ? _TypedArray<{ [Param in TypeComponents[number] as Param['name']]: MatchPrimitiveType; }, Size> : never : never; type ObjectToArray = T extends [...infer R, infer A] ? Record & ObjectToArray : T; type ArrToObjectWithFunctions = Array & ObjectToArray; export type MatchPrimitiveType | undefined | unknown> = PrimitiveAddressType | PrimitiveStringType | PrimitiveBooleanType | PrimitiveIntegerType | PrimitiveBytesType | PrimitiveTupleType | never; type ContractMethodOutputParametersRecursiveArray | undefined> = Params extends readonly [] ? [] : Params extends readonly [infer H, ...infer R] ? H extends AbiParameter ? [ MatchPrimitiveType, ...ContractMethodOutputParametersRecursiveArray ] : [] : []; type ContractMethodOutputParametersRecursiveRecord | undefined> = Params extends readonly [] ? [] : Params extends readonly [infer H, ...infer R] ? H extends AbiParameter ? H['name'] extends '' ? ContractMethodOutputParametersRecursiveRecord : Record> & // sets key-value pair of output param name and type ContractMethodOutputParametersRecursiveRecord : ContractMethodOutputParametersRecursiveRecord : Params extends undefined | unknown ? [] : Params; export type ContractMethodOutputParameters | undefined> = Params extends readonly [] ? void : Params extends readonly [infer H, ...infer R] ? R extends readonly [] ? H extends AbiParameter ? MatchPrimitiveType : [] : // if more than one output ArrToObjectWithFunctions<[...ContractMethodOutputParametersRecursiveArray]> & ContractMethodOutputParametersRecursiveRecord : []; export type ContractMethodInputParameters | undefined> = Params extends readonly [] ? [] : Params extends readonly [infer H, ...infer R] ? H extends AbiParameter ? [ MatchPrimitiveType, ...ContractMethodInputParameters ] : ContractMethodInputParameters : Params extends undefined | unknown ? [] : Params; export type ContractConstructor = { [Abi in FilterAbis as 'constructor']: { readonly Abi: Abi; readonly Inputs: ContractMethodInputParameters; }; }['constructor']; export type ContractConstructorArgs = { [Abi in FilterAbis as 'constructor']: ContractMethodInputParameters; }['constructor']; export type ContractMethod = { readonly Abi: Abi; readonly Inputs: ContractMethodInputParameters; readonly Outputs: ContractMethodOutputParameters; }; export type ContractMethods = { [Abi in FilterAbis as Abi['name']]: ContractMethod; }; export type ContractEvent = { readonly Abi: Abi; readonly Inputs: ContractMethodInputParameters; }; export type ContractEvents = { [Abi in FilterAbis as Abi['name']]: ContractEvent; }; export interface DecodedParams extends Record { __length__: number; } export {};