// keeps a list of known tokens // todo load standard known tokens import {ethers} from "ethers"; import {erc20Abi} from "./abi.js"; import {getProvider} from "./blockchain.js"; const std_arbitrum_tokens = {} const tokens = { 42161: std_arbitrum_tokens, 31337: std_arbitrum_tokens, 53261: {}, } export function erc20(chainId, addr, provider=null) { return new ethers.Contract(addr, erc20Abi, 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) // console.log('addr', addr) const token = erc20(chainId, addr) const symbol = await token.symbol() // console.log('symbol', symbol) const decimals = Number(await token.decimals()) result = {name: null, symbol, decimals, address: addr} chainTokens[addr] = result } return result } catch { return null } }