UNPKG

bnbchain-mcp

Version:

---

78 lines (77 loc) 2.87 kB
import { createPublicClient, getContract, http, isAddress, } from "viem"; import { fetchPancakeswapTokens } from "../util.js"; import { bsc } from "viem/chains"; import { bep20abi } from "../lib/bep20Abi.js"; /** * Get token address and information from symbol or address * @param chainId - Chain ID (e.g., 56 for BSC) * @param token - Token symbol or address * @param rpcUrl - RPC URL for the chain * @returns TokenInfo object with address and decimals */ export async function getEVMTokenAddress(chainId, token, rpcUrl = "https://bsc-dataseed.binance.org") { if (isAddress(token)) { try { const tokenList = await fetchPancakeswapTokens(); const foundToken = tokenList.find((t) => t.chainId === chainId && t.address.toLowerCase() === token.toLowerCase()); if (foundToken) { return { address: foundToken.address, decimals: foundToken.decimals, symbol: foundToken.symbol, name: foundToken.name, }; } } catch (error) { console.warn("Error searching PancakeSwap token list:", error); } const publicClient = createPublicClient({ chain: bsc, transport: http(rpcUrl), }); const contract = getContract({ address: token, abi: bep20abi, client: { public: publicClient, }, }); try { // Get token details from the contract const decimals = await contract.read.decimals(); const symbol = await contract.read.symbol(); const name = await contract.read.name(); return { address: token, decimals, symbol, name, }; } catch (error) { console.error("Error fetching token info from contract:", error); throw new Error(`Could not fetch info for token at address ${token}`); } } else { try { const tokenList = await fetchPancakeswapTokens(); const uppercaseSymbol = token.toUpperCase(); const foundToken = tokenList.find((t) => t.chainId === chainId && t.symbol.toUpperCase() === uppercaseSymbol); if (foundToken) { return { address: foundToken.address, decimals: foundToken.decimals, symbol: foundToken.symbol, name: foundToken.name, }; } } catch (error) { console.error("Error searching PancakeSwap token list:", error); } throw new Error(`Token with symbol ${token} not found in PancakeSwap token list.`); } }