37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
// keeps a list of known tokens
|
|
|
|
// todo load standard known tokens
|
|
|
|
import {ethers} from "ethers";
|
|
import {erc20Abi} from "./abi.js";
|
|
import {provider} from "./blockchain.js";
|
|
|
|
const tokens = {
|
|
42161: {}
|
|
}
|
|
|
|
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, provider(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
|
|
}
|
|
}
|