@bitte-ai/agent-sdk
Version:
Agent SDK for Bitte Protocol
48 lines (47 loc) • 1.71 kB
JavaScript
import { isAddress } from "viem";
import { getTokenInfo } from "./erc20";
const TOKEN_MAP_BASE_URL = "https://raw.githubusercontent.com/BitteProtocol/core/main/public";
export async function loadSymbolMap(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Failed to load tokens at: ${response.statusText}`);
}
const loadedSymbolMap = await response.json();
return loadedSymbolMap;
}
catch (error) {
console.error("Error loading symbolMap:", error);
throw error;
}
}
const defaultChainList = [1, 10, 56, 100, 137, 1868, 8453, 4261, 43114];
function tokenMapUrl(chainId, baseUrl = TOKEN_MAP_BASE_URL) {
return `${baseUrl}/tokens_${chainId}.json`;
}
export async function loadTokenMap(chainIds = defaultChainList) {
const mapping = {};
await Promise.all(chainIds.map(async (chainId) => {
try {
mapping[chainId] = await loadSymbolMap(tokenMapUrl(chainId));
}
catch (error) {
console.error(`Error loading token map for chain ${chainId}:`, error);
mapping[chainId] = {};
}
}));
return mapping;
}
export async function getTokenDetails(chainId, symbolOrAddress, tokenMap,
// Optionally Provide your own RPC.
client) {
if (isAddress(symbolOrAddress, { strict: false })) {
return getTokenInfo(chainId, symbolOrAddress, client);
}
if (!tokenMap) {
const symbolMap = await loadSymbolMap(tokenMapUrl(chainId));
return symbolMap[symbolOrAddress.toLowerCase()];
}
// TokenMap has lower cased (sanitized) symbols
return tokenMap[chainId][symbolOrAddress.toLowerCase()];
}