import { FormatTypes } from '@ethersproject/abi' import { Contract } from '@ethersproject/contracts' import { ContractMethodName, UseQueryContractKey, UseQueryContractSerializeKeys } from './types' export const getContractKey = = any>( key?: UseQueryContractKey | null, ) => { if (Array.isArray(key)) { const [contract, methodName, variables] = key || [] return { contract, methodName, variables, } } return key } export const serializesContractKey = ( key?: UseQueryContractKey | null, ): UseQueryContractSerializeKeys | null => { const { contract, methodName, variables } = getContractKey(key) || {} const serializedKeys = key && contract && methodName ? { address: contract.address, interfaceFormat: contract?.interface?.format(FormatTypes.full) as string[], methodName, callData: 'allowance' in contract // ERC20 ? JSON.stringify(variables) : contract.interface?.encodeFunctionData(methodName, variables), } : null return serializedKeys }