Files
server/token.js

39 lines
1.2 KiB
JavaScript

// 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,
}
export async function lookupToken(chainId, address) {
console.log('lookupToken', chainId, address)
const chainTokens = tokens[chainId]
if( chainTokens === undefined )
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 = new ethers.Contract(addr, erc20Abi, getProvider(chainId))
const symbol = await token.symbol()
console.log('symbol', symbol)
const decimals = Number(await token.decimals())
result = {name: `${symbol} (${addr})`, symbol, decimals, address: addr}
chainTokens[addr] = result
return result
}
} catch {
return null
}
}