// keeps a list of known tokens // todo load standard known tokens import {ethers} from "ethers"; import {getProvider} from "./blockchain.js"; import {newContract} from "./contract.js"; const std_arbitrum_tokens = {} const tokens = { 42161: std_arbitrum_tokens, 31337: std_arbitrum_tokens, 1337: {}, } export async function erc20(chainId, addr, provider=null) { return await newContract(addr, 'IERC20Metadata', provider?provider:getProvider(chainId)); } let _loggedNoTokensForChain = false export async function lookupToken(chainId, address) { // console.log('lookupToken', chainId, address) const chainTokens = tokens[chainId] if( chainTokens === undefined ) { if( !_loggedNoTokensForChain ) { console.log('no tokens for chain', chainId) _loggedNoTokensForChain = true } return null } try { let result = chainTokens[address] // console.log('found', result) if (result === undefined) { // todo look in tokens project? const addr = ethers.getAddress(address) const token = await erc20(chainId, addr) let [name, symbol, decimals] = await Promise.all([token.name(), token.symbol(), token.decimals()]) name = Number(name) decimals = Number(decimals) result = {a: addr, n: name, s:symbol, d:decimals} chainTokens[addr] = result } return result } catch { return null } }