@swapper-finance/sdk
Version:
JavaScript SDK form Swapper
52 lines (48 loc) • 1.32 kB
text/typescript
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}`,
);
}
};