Files
server/token.js

49 lines
1.4 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,
1337: {},
}
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)
const token = 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
}
}