Replace old 150-token list with 511-token tokenList.js
All checks were successful
check / check (push) Successful in 14s
All checks were successful
check / check (push) Successful in 14s
Delete src/shared/tokens.js and migrate all consumers to src/shared/tokenList.js which has 511 tokens (vs ~150) sourced from CoinGecko with on-chain verified decimals. - prices.js: getTopTokenPrices now from tokenList - transactions.js: KNOWN_SYMBOLS now from tokenList (3.4x more symbols for spoof detection) - send.js: KNOWN_SYMBOLS for token dropdown filtering - approval.js: uses pre-built TOKEN_BY_ADDRESS map instead of constructing its own from TOKENS array - addToken.js: uses getTopTokens(25) for quick-pick buttons (only top 25 shown, not all 511)
This commit is contained in:
@@ -5,6 +5,10 @@
|
||||
//
|
||||
// 511 tokens.
|
||||
|
||||
const { debugFetch } = require("./log");
|
||||
|
||||
const COINDESK_API = "https://data-api.coindesk.com/index/cc/v1/latest/tick";
|
||||
|
||||
const TOKENS = [
|
||||
{
|
||||
address: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
||||
@@ -2585,4 +2589,37 @@ for (const t of TOKENS) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { TOKENS, TOKEN_BY_ADDRESS, KNOWN_SYMBOLS, getTopTokens };
|
||||
// Fetch USD prices for the top N tokens from CoinDesk.
|
||||
// Also always includes ETH. Returns { ETH: 1234.56, LINK: 8.60, ... }.
|
||||
// n must be <= 30 (API and sanity limit).
|
||||
async function getTopTokenPrices(n) {
|
||||
if (n > 30) {
|
||||
throw new Error("getTopTokenPrices: n must be <= 30, got " + n);
|
||||
}
|
||||
const symbols = ["ETH", ...TOKENS.slice(0, n).map((t) => t.symbol)];
|
||||
const unique = [...new Set(symbols)];
|
||||
const instruments = unique.map((s) => s + "-USD").join(",");
|
||||
const url =
|
||||
COINDESK_API +
|
||||
"?market=cadli&instruments=" +
|
||||
instruments +
|
||||
"&apply_mapping=true";
|
||||
const resp = await debugFetch(url);
|
||||
const json = await resp.json();
|
||||
const prices = {};
|
||||
for (const [instrument, data] of Object.entries(json.Data || {})) {
|
||||
const symbol = instrument.split("-")[0];
|
||||
if (data.VALUE !== undefined) {
|
||||
prices[symbol] = data.VALUE;
|
||||
}
|
||||
}
|
||||
return prices;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
TOKENS,
|
||||
TOKEN_BY_ADDRESS,
|
||||
KNOWN_SYMBOLS,
|
||||
getTopTokens,
|
||||
getTopTokenPrices,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user