UNPKG

@swapper-finance/sdk

Version:
52 lines (48 loc) 1.32 kB
import { ERC20Abi } from "@src/contractAbis"; import { ethers } from "ethers"; import { Chain, TokenWithChain } from "@src/models"; export const getCustomTokenData = async ( chain: Chain, tokenAddress: string, ): Promise<TokenWithChain> => { const rpcUrl = chain.publicRpcUrls[0]; const customTokenContract = new ethers.Contract( tokenAddress.toLowerCase(), ERC20Abi, ethers.getDefaultProvider(rpcUrl), ); try { const query = async ( contract: ethers.Contract | null, method: string, args: unknown[] = [], ) => { if (contract?.provider) { const response = await contract[method](...args); return response; } return null; }; const responses = await Promise.all([ query(customTokenContract, "decimals"), query(customTokenContract, "name"), query(customTokenContract, "symbol"), ]); const [decimals, name, symbol] = responses; return { address: tokenAddress, symbol: symbol, tokenId: tokenAddress, chainId: chain.chainId, name: name, decimals: decimals, quickPick: false, supported: true, priority: 0, }; } catch (_) { throw new Error( `Provided token ${tokenAddress} does not exists on chain ${chain.displayName}`, ); } };