import type { Address } from "./Trx"; import type { Method } from "../lib/contract/method"; import type { Contract } from "../lib/contract/index"; export type AbiParamsCommon = { readonly name: string; readonly type: string; readonly baseType?: string; readonly indexed?: boolean; readonly components?: ReadonlyArray; readonly arrayLength?: number; readonly arrayChildren?: ReadonlyArray; readonly internalType?: string; }; export type StateMutabilityTypes = string | 'nonpayable' | 'payable' | 'pure' | 'view'; export type FragmentTypes = string | 'constructor' | 'event' | 'function' | 'fallback' | 'receive'; export type AbiInputsType = ReadonlyArray | Record | []; export type AbiOutputsType = AbiInputsType; export type ConstructorFragment = { readonly type: string | 'constructor'; readonly stateMutability: StateMutabilityTypes & (string | 'nonpayable' | 'payable'); readonly inputs?: ReadonlyArray; }; export type FunctionFragment = { readonly name: string; readonly type: string | 'function'; readonly stateMutability?: StateMutabilityTypes; readonly inputs?: ReadonlyArray; readonly outputs?: ReadonlyArray; readonly constant?: boolean; readonly payable?: boolean; }; export type FallbackFragment = { readonly name: never; readonly type: string | 'fallback'; readonly stateMutability: StateMutabilityTypes; readonly inputs: never; readonly outputs: never; // legacy properties readonly constant?: boolean; readonly payable?: boolean; }; export type ReceiveFragment = { readonly name: never; readonly type: string | 'receive'; readonly stateMutability: StateMutabilityTypes; readonly inputs: never; readonly outputs: never; // legacy properties readonly constant?: boolean; readonly payable?: boolean; }; export type EventFragment = { readonly name: string; readonly type: string | 'event'; readonly inputs?: ReadonlyArray; readonly anonymous?: boolean; }; export type ErrorFragment = { readonly name: string; readonly type: string | 'error'; readonly inputs?: ReadonlyArray; }; export type AbiFragment = | ConstructorFragment | FunctionFragment | EventFragment | ErrorFragment | FallbackFragment | ReceiveFragment; export type ContractAbiInterface = ReadonlyArray; type _GrowArr = Arr['length'] extends Length ? Readonly : _GrowArr; type _RangeFrom0ToN = Arr['length'] extends N ? Arr['length'] : Arr['length'] | _RangeFrom0ToN]>; type Range = Exclude<_RangeFrom0ToN, _RangeFrom0ToN> | Min; export type BytesRange = Range<1, 32>; export type BitsRange = Range<8, 256, 8>; export type Numbers = bigint | number; type ConvertToNumber = T extends `${infer Num extends number}` ? Num : never; type FixedSizeArray = _GrowArr; type SolidityTypedArray = Length extends '' ? ReadonlyArray : FixedSizeArray>; type ReverseArray = T extends `[${infer P}]${infer L}` ? `${ReverseArray}[${P}]` : ''; type _SolidityAddressType = Type extends `address[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityAddressType<`address${Loop}`>, Length> : Type extends 'address' ? Address : never; export type SolidityAddressType = Type extends `address${infer Loop}` ? _SolidityAddressType<`address${ReverseArray}`> : never; type _SolidityStringType = Type extends `string${infer Size extends number | ''}[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityStringType<`string${Size}${Loop}`>, Length> : Type extends `string${number | ''}` ? string : never; export type SolidityStringType = Type extends `string${infer Loop}` ? _SolidityStringType<`string${ReverseArray}`> : never; type _SolidityBooleanType = Type extends `bool[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityBooleanType<`bool${Loop}`>, Length> : Type extends 'bool' ? boolean : never; export type SolidityBooleanType = Type extends `bool${infer Loop}` ? _SolidityBooleanType<`bool${ReverseArray}`> : never; type _SolidityUIntegerType = Type extends `uint${infer Bits extends BitsRange | ''}[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityUIntegerType<`uint${Bits}${Loop}`>, Length> : Type extends `uint${BitsRange | ''}` ? Numbers : never; export type SolidityUIntegerType = Type extends `uint${infer Bits extends BitsRange | ''}[${infer Length}]${infer Loop}` ? _SolidityUIntegerType<`uint${Bits}${ReverseArray<`[${Length}]${Loop}`>}`> : Type extends `uint${BitsRange | ''}` ? Numbers : never; type _SolidityIntegerType = Type extends `int${infer Bits extends BitsRange | ''}[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityIntegerType<`int${Bits}${Loop}`>, Length> : Type extends `int${BitsRange | ''}` ? Numbers : never; export type SolidityIntegerType = Type extends `int${infer Bits extends BitsRange | ''}[${infer Length}]${infer Loop}` ? _SolidityIntegerType<`int${Bits}${ReverseArray<`[${Length}]${Loop}`>}`> : Type extends `int${BitsRange | ''}` ? Numbers : never; type _SolidityTrcTokenType = Type extends `trcToken[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityTrcTokenType<`trcToken${Loop}`>, Length> : Type extends 'trcToken' ? Numbers : never; export type SolidityTrcTokenType = Type extends `trcToken${infer Loop}` ? _SolidityTrcTokenType<`trcToken${ReverseArray}`> : never; type _SolidityBytesType = Type extends `bytes${infer Size extends BytesRange | ''}[${infer Length}]${infer Loop}` ? SolidityTypedArray<_SolidityBytesType<`bytes${Size}${Loop}`>, Length> : Type extends `bytes${BytesRange | ''}` ? string | Uint8Array : never; export type SolidityBytesType = Type extends `bytes${infer Size extends BytesRange | ''}[${infer Length}]${infer Loop}` ? _SolidityBytesType<`bytes${Size}${ReverseArray<`[${Length}]${Loop}`>}`> : Type extends `bytes${BytesRange | ''}` ? string | Uint8Array : never; type _SolidityTupleType< Type extends string, TypeComponents extends ReadonlyArray | undefined, > = TypeComponents extends ReadonlyArray ? Type extends 'tuple' ? GetParamsType : Type extends `tuple[${infer Length}]${infer Loop}` ? Loop extends '' ? SolidityTypedArray, Length> : SolidityTypedArray<_SolidityTupleType<`tuple${Loop}`, TypeComponents>, Length> : never : never; export type SolidityTupleType< Type extends string, TypeComponents extends ReadonlyArray | undefined, > = Type extends `tuple${infer Loop}` ? _SolidityTupleType<`tuple${ReverseArray}`, TypeComponents> : never; export type SolidityValueType | undefined> = | SolidityAddressType | SolidityStringType | SolidityBooleanType | SolidityUIntegerType | SolidityIntegerType | SolidityTrcTokenType | SolidityBytesType | SolidityTupleType; type SimplifySolidityType = T extends infer U ? U : never; type Prettify = { [K in keyof T]: T[K]; } & {}; export type GetParamsType | undefined> = ParamsType extends readonly [infer T, ...infer P] ? T extends AbiParamsCommon ? P extends readonly [] ? [SimplifySolidityType>] : P extends ReadonlyArray ? [SimplifySolidityType>, ...GetParamsType

] : [SimplifySolidityType>] : [] : any[]; type GetTupleOutputType | undefined> = T extends 'tuple' ? Shape extends ReadonlyArray ? _GetOutputsType & Prettify : SimplifySolidityType> }, 'length'>> : never : T extends `tuple[${infer Length}]${infer Loop}` ? Loop extends '' ? SolidityTypedArray, Length> : SolidityTypedArray, Length> : never; type _GetOutputsType | undefined> = Outputs extends readonly [infer T,...infer P] ? T extends AbiParamsCommon ? P extends readonly [] ? T['type'] extends `tuple${string}` ? [GetTupleOutputType] : [SimplifySolidityType>] : P extends ReadonlyArray ? T['type'] extends `tuple${string}` ? [GetTupleOutputType, ..._GetOutputsType

] : [SimplifySolidityType>, ..._GetOutputsType

] : [] : [] : []; export type GetOutputsType | undefined> = GetTupleOutputType<'tuple', Outputs>; export type GetMethodsTypeFromAbi = Abi extends readonly [infer T, ...infer P] ? T extends { type: 'function', name: string } ? { [key in T['name']]: Method; } & (P extends ContractAbiInterface ? GetMethodsTypeFromAbi

: never ) : (P extends ContractAbiInterface ? GetMethodsTypeFromAbi

: never ) : { [key: string]: Method; }; export type GetOnMethodTypeFromAbi = { [key in keyof GetMethodsTypeFromAbi]: GetMethodsTypeFromAbi[key]['onMethod']; }; export type AnyOnMethodType = { [key: string]: Method['onMethod']; }; export type ContractInstance = Contract & GetOnMethodTypeFromAbi;