Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save fragosti/53a2e8be15de7103f82a0bdb1c58080b to your computer and use it in GitHub Desktop.
Save fragosti/53a2e8be15de7103f82a0bdb1c58080b to your computer and use it in GitHub Desktop.
const axios = require('axios');
const Bottleneck = require('bottleneck');
const fs = require('fs');
const limiter = new Bottleneck({ minTime: 333, maxConcurrent: 4 });
const rankedTokens = [
'ETH',
'DAI',
'WETH',
'USDT',
'USDC',
'DAI',
'MKR',
'HAV',
'WBTC',
'LINK',
'sETH',
'KNC',
'CNCC',
'REP',
'HEX',
'BAT',
'sUSD',
'imBTC',
'PA',
'ZRX',
'SNX',
'CBIX7',
'RLC',
'ENJ',
'PNK',
'ENG',
'REN',
'CARD',
'TUSD',
'UBT',
'DGX',
'TUSD',
'MANA',
'VEOS',
'HT',
'ANT',
'LRC',
'TKN',
'sUSD',
'OMG',
'BNT',
'LEND',
'DGD',
'GEN',
'MLN',
'NMR',
'DZAR',
'cDAI',
'SNT',
'CMME',
'OXT',
'POWR',
'LPT',
'TT',
'UPP',
'SPANK',
'RCN',
'RDN',
'NEXO',
'FUN',
'MCO',
'GNO',
'XCHF',
'HOT',
'AMPL',
'EXMR',
'EXMR',
'ST',
'cDAI',
'SAN',
'ABYSS',
'BLT',
'VATOM',
'FOAM',
'RPL',
'TMV',
'RAE',
'EDO',
'SBT',
'RING',
'EBASE',
'CVC',
'NEXXO',
'XAZ',
'REQ',
'ELF',
'BLZ',
'0xBTC',
'JRT',
'GLC',
'CND',
'XIO',
'CHAI',
'BTU',
'KEY',
'AMN',
'SLP',
'DATA',
];
const pairs = rankedTokens.map(token => ['USD', token])
.concat(rankedTokens.map(token => ['ETH', token]))
.concat(rankedTokens.map(token => ['DAI', token]));
// https://min-api.cryptocompare.com/data/v2/histohour?fsym=ETH&tsym=USD&limit=10
const OHLCV_URL = 'https://min-api.cryptocompare.com/data/v2/histohour?limit=10';
const getAvailabilityCSV = async () => {
const results = [];
let availableCount = 0;
for (const [quoteAsset, baseAsset] of pairs) {
try {
const isAvailable = await limiter.schedule(() => checkAvailability(baseAsset, quoteAsset));
results.push([baseAsset, quoteAsset, isAvailable]);
isAvailable && availableCount++;
results.length % 10 === 0 && console.log(`Processed ${results.length} pairs, ${availableCount} available`);
} catch (e) {
console.log(e);
break;
}
}
return [['baseAsset', 'quoteAsset', `isAvailable`], ...results]
.map(assetsAndAvailability => assetsAndAvailability.join(','))
.join('\n');
};
const checkAvailability = async (baseAsset, quoteAsset) => {
const url = `${OHLCV_URL}&fsym=${baseAsset}&tsym=${quoteAsset}`;
const resp = await axios(url);
const {
Response,
Message,
RateLimit,
} = resp.data;
if (Response === 'Error') {
return false;
}
return true;
}
const run = async () => {
const csv = await getAvailabilityCSV();
fs.writeFileSync(`${__dirname}/market_availability_results.csv`, csv);
}
run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment