trustwallet-assets/script/generic/asset.ts
Adam R 88f26b09d1
[Internal] Retrieve trading pairs from PancakeSwap (#5355)
* Retrieve trading pairs from PancakeSwap.

* Retrieve trading pairs from Uniswap.

* Add doc link

* Lint fix

* Include decimals

* Move binance tokenlist generation to BinanceAction.

* Generate smartChain tokenlist, from base and pancakeswap pairs.

* Fix array types in tokenlists.ts

* Common writeToFile method, sort.

* Type fixes

* Revert tokenlist.json to master

* Include pairs with allowlisted coins only.

* Move assetID functions to common asset.ts

* Use common assetID functions.

* Use dynamic generation time.

* Keep constant generation time; Version in tokenlist.

* Count additions

* Update tokenlist version and timestamp if needed before save.

* No counting is needed in addXxxIfNeeded() functions.

* Tokenlist timestamp: take over if previous

* Update ethereum tokenlist with pairs from Uniswap.

* Increase query limit to 400 pairs.

* iDecimals always number, add decimal fields to Eth also.

* Include only pairs with primary tokens, add pair info to primary token only.

* Update base tokenlist (BSC) to current full list, in order not to remove any coins.

* Update base tokenlist (ETH) to current full list, in order not to remove any coins.

* Move out pair checks into common code.

* Add checks for volume and txCount.

* Assets tokenlist: Adjust token names for added tokens.

* Move parameters to central config.ts

* Nicer query string, compact

* Prevent change if subgraph API fails

* Reduce max limit in Pancakeswap query, with 400 often times out.

* Stricter error handling

* Reduce code duplication.

* Minor comment

* Display number of original tokens

* Lint fix

Co-authored-by: Catenocrypt <catenocrypt@users.noreply.github.com>
2021-01-29 07:45:43 +01:00

62 lines
2.0 KiB
TypeScript

import axios from "axios";
import { TokenType } from "../generic/tokentype";
import * as config from "../config";
// Asset ID from coin symbol (diff between native and token coins)
export function assetIdSymbol(tokenId: string, nativeCoinId: string, coinType: number): string {
if (tokenId == nativeCoinId) {
return assetID(coinType)
}
return assetID(coinType, tokenId)
}
// Asset ID from coin number and ID
export function assetID(coinType: number, tokenId = ``): string {
if (tokenId.length > 0) {
return `c${coinType}_t${tokenId}`
}
return `c${coinType}`
}
// Token type from token symbol (diff between native and token coins)
export function tokenType(symbol: string, nativeCoinSymbol: string, tokenType: string): string {
if (symbol == nativeCoinSymbol) {
return TokenType.COIN
}
return tokenType;
}
// Github logo URL for coin.
export function logoURI(id: string, githubChainFolder: string, nativeCoinSymbol: string): string {
if (id == nativeCoinSymbol) {
return `${config.assetsURL}/blockchains/${githubChainFolder}/info/logo.png`
}
return `${config.assetsURL}/blockchains/${githubChainFolder}/assets/${id}/logo.png`
}
// Token info from TW api
// e.g. {"name":"Binance-Peg Cosmos","symbol":"ATOM","type":"BEP20","decimals":18,"asset_id":"c20000714_t0x0Eb3..."}
export class TokenTwInfo {
name: string;
symbol: string;
type: string;
decimals: number;
asset_id: string;
}
export async function tokenInfoFromTwApi(assetID: string): Promise<TokenTwInfo> {
try {
const apiUrl = `https://api.trustwallet.com/v1/assets/${assetID}`;
const result = await axios.get(apiUrl).then(r => r.data);
if (!result || !result.asset_id) {
console.log("Unexpected result", result);
return undefined;
}
const info = result as TokenTwInfo;
return info;
} catch (err) {
console.log("Exception:", err);
return undefined;
}
}