UNPKG

@luffalab/luffa-evm-sdk

Version:

luffa evm ts sdk

140 lines (127 loc) 3.16 kB
export const isLuffa = () => { return ( (window && window?._evmWallet !== undefined) || window?.webkit?.messageHandlers?._evmWallet !== undefined || false ); }; export const isLuffaMiniProgramWebview = () => { const userAgent = (window && window?.navigator?.userAgent) || ''; return userAgent.includes('miniProgram'); }; export const isLuffaMiniProgram = () => { return Boolean(window?.wx && window?.wx?.getSystemInfoSync); }; export const networkMap: Partial<Record<string, string>> = { ['mainnet']: 'endless', ['testnet']: 'eds', }; export const getChain = (chainId: string) => { const chainIdNumber = parseInt(chainId, 16); let chain = ''; switch (chainIdNumber) { case 728126428: chain = 'tron'; break; case 3448148188: chain = 'tron_nile'; break; case 1: chain = 'eth'; break; case 11155111: chain = 'eth_sepolia'; break; case 56: chain = 'bsc'; break; case 97: chain = 'bsc_test'; break; case 220: chain = 'endless'; break; case 221: chain = 'eds'; break; } return chain; }; export const getChainIdByName = (chainName: string) => { let chainId; switch (chainName) { case 'eth': chainId = 1; break; case 'eth_sepolia': chainId = 11155111; break; case 'bsc': chainId = 56; break; case 'bsc_test': chainId = 97; break; case 'tron': chainId = 728126428; break; case 'tron_nile': chainId = 3448148188; break; case 'endless': chainId = 220; break; case 'eds': chainId = 221; break; } return chainId; }; export const isApproveTx = (data: string) => { console.log('data: ', data); if (!data || !data.startsWith('0x095ea7b3')) return { isApprove: false, spender: null, amount: null, }; try { const methodData = data.slice(10); const spenderHex = methodData.slice(0, 64); const amountHex = methodData.slice(64, 128); const spender = '0x' + spenderHex.slice(24); const amount = BigInt('0x' + amountHex); return { isApprove: true, spender, amount, }; } catch (e) { return { isApprove: false, spender: null, amount: null, }; } }; export const isHexString = (value: string): boolean => { return ( typeof value === 'string' && value.startsWith('0x') && value.length % 2 === 0 && /^[0-9a-fA-F]+$/.test(value.slice(2)) ); } export const hexToUtf8 = (hex: string): string => { const clean = hex.slice(2); const bytes = new Uint8Array(clean.length / 2); for (let i = 0; i < clean.length; i += 2) { bytes[i / 2] = parseInt(clean.slice(i, i + 2), 16); } const decoder = new TextDecoder('utf-8'); return decoder.decode(bytes); } export const normalizeMessageForDisplay = (message: string): string => { if (isHexString(message)) { return hexToUtf8(message); } return message; }