diff --git a/Pipfile b/Pipfile
index a686794..27f3cde 100644
--- a/Pipfile
+++ b/Pipfile
@@ -8,3 +8,7 @@ records = "*"
psycopg2 = "*"
maya = "*"
flask-sslify = "*"
+pyquery = "*"
+pandas = "*"
+html5lib = "*"
+bs4 = "*"
diff --git a/scraper.py b/scraper.py
new file mode 100644
index 0000000..1d1c2a9
--- /dev/null
+++ b/scraper.py
@@ -0,0 +1,68 @@
+import pandas
+import requests
+
+from pyquery import PyQuery as pq
+
+import time
+from collections import OrderedDict
+
+url = 'https://coinmarketcap.com/currencies/views/all/'
+session = requests.Session()
+
+
+class MWT(object):
+ """Memoize With Timeout"""
+ _caches = {}
+ _timeouts = {}
+
+ def __init__(self, timeout=2):
+ self.timeout = timeout
+
+ def collect(self):
+ """Clear cache of results which have timed out"""
+ for func in self._caches:
+ cache = {}
+ for key in self._caches[func]:
+ if (time.time() - self._caches[func][key][1]) < self._timeouts[func]:
+ cache[key] = self._caches[func][key]
+ self._caches[func] = cache
+
+ def __call__(self, f):
+ self.cache = self._caches[f] = {}
+ self._timeouts[f] = self.timeout
+
+ def func(*args, **kwargs):
+ kw = sorted(kwargs.items())
+ key = (args, tuple(kw))
+ try:
+ v = self.cache[key]
+ if (time.time() - v[1]) > self.timeout:
+ raise KeyError
+ except KeyError:
+ v = self.cache[key] = f(*args, **kwargs), time.time()
+ return v[0]
+ func.func_name = f.__name__
+
+ return func
+
+
+@MWT(timeout=300)
+def get_coins():
+ coins_db = OrderedDict()
+
+ r = session.get(url)
+ html = pq(pq(r.content)('table')[0]).html()
+ df = pandas.read_html("
".format(html))
+ df = pandas.concat(df)
+ for row in df.itertuples():
+
+ rank = int(row[1])
+ name = row[2]
+ ticker = row[3].lower()
+ usd = float(row[5][1:].replace(',', ''))
+
+ coins_db.update({ticker: {'rank': rank, 'name': name, 'ticker': ticker, 'usd': usd}})
+
+ return coins_db
+
+
diff --git a/server.py b/server.py
index 472aa8b..4818e0a 100644
--- a/server.py
+++ b/server.py
@@ -1,5 +1,8 @@
import os
+from scraper import get_coins
+from wallets import wallets
+
from flask import Flask, jsonify, render_template, request
from flask_sslify import SSLify
@@ -7,11 +10,6 @@ import maya
import requests
import records
-session = requests.Session()
-
-MARKETCAP_ALL_URL = 'https://coinmarketcap-nexuist.rhcloud.com/api/all'
-MARKETCAP_COIN_TEMPLATE = 'https://coinmarketcap-nexuist.rhcloud.com/api/{ticker}'
-
API_KEYS = os.environ.get('API_KEYS', '').split(':')
db = records.Database()
@@ -28,51 +26,46 @@ class Coin():
self.update()
- def _get(self):
- url = MARKETCAP_COIN_TEMPLATE.format(ticker=self.ticker)
- r = session.get(url)
- return r.json()
-
def update(self):
- j = self._get()
+ coins = get_coins()
print(f'Fetching data on {self.ticker}')
+
try:
- self.name = j['name']
- self.rank = j['position']
- self._value = j['price']['usd']
+ self.name = coins[self.ticker]['name']
+ self.rank = coins[self.ticker]['rank']
+ self._usd = coins[self.ticker]['usd']
+ # self._btc = j['price']['btc']
except KeyError:
print(j)
@property
def usd(self):
- return self._value
+ return self._usd
+
+ @property
+ def btc(self):
+ coins = get_coins()
+ rate = coins['btc']['usd']
+ return float(self.usd / rate)
def value(self, coin):
"""Example: BTC -> ETH"""
- return (self.usd / Coin(coin).usd)
+ return (self.btc / Coin(coin).btc)
def __repr__(self):
return f''
-def get_coins():
- r = session.get(MARKETCAP_ALL_URL)
- return [k for k in r.json().keys()]
-
-
def get_coin(ticker):
return Coin(ticker)
-all_coins = get_coins()
-
-print(get_coin('btc').value('eth'))
-
app = Flask(__name__)
+app.debug = True
+
sslify = SSLify(app)
@app.route('/')
-# @common.cache.cached(timeout=50)
def hello():
lbc = get_coin('lbc')
@@ -80,197 +73,28 @@ def hello():
lbc_sc = get_exchange('lbc', 'sc')
lbc_42_sc = get_exchange_value('lbc', 'sc', 42.01)
- return render_template('index.html', lbc=lbc, lbc_42=lbc_42, lbc_sc=lbc_sc, lbc_42_sc=lbc_42_sc, coins=all_coins)
+ return render_template('index.html', lbc=lbc, lbc_42=lbc_42, lbc_sc=lbc_sc, lbc_42_sc=lbc_42_sc, coins=get_coins().keys())
@app.route('/thanks')
def thanks():
- return jsonify(wallets={
- 'btc': '1PYZH8SCXQF7c2qgpsQ8kDgKixXeYvVsKv',
- 'ltc': 'LXPtxt68njDdTBdu1ZvHUbARhHsPm9T3Zq',
- 'doge': 'DRDjoTo3zg64QHpq3xgrVVJnerLAvVzMbc',
- 'vtc': 'VvNd9XoYKavHagE6VkLNPeAazFmpgMZgQ5',
- 'ppc': 'PMQWpq15QxT4dR6h6NrvrJMNtehcmRVxYW',
- 'ftc': '6zDLXZmoNBdz87ZMvtK2JF7C3NRuKu2nVr',
- 'rdd': 'RudBYrzAQeYmDXHhMXs7hPsYJc7n1C7Trt',
- 'dash': 'XvtKBmKUhiEPQyEgNxvSRt9hyHBCN8Mia7',
- 'pot': 'PTjS6cpqGoUUbEKyUWMqHk92ymvXMi84Ti',
- 'blk': 'BKNihHBXHy24q7wWM6A45xnDWTvcKrcmXN',
- 'emc2': 'EbMSP6TnLgfiJEnL1SUf4N8tjSHsY2L8zA',
- 'xmy': 'MQPjf1pCpKQDVabTXe3do4JTQ9A81oJyHp',
- 'aur': 'AVdVKHAvQij7QWmZ8p8P3qArK1eunrUukK',
- 'gld': 'E6UVrbrd4VnvspMuDqDw7FfMhGAqj26dZE',
- 'fair': 'fVkBYTPiQpcWCmFGSTtxhug2yW2nDZw6x7',
- 'slr': '8WUGQdSjo6XikocLF54KfHfBJ2HQqwtE3t',
- 'ptc': 'LJ7NefEUuJ9DC8qneEW2541p5iJzxNMqyQ',
- 'grs': 'FZg2ceLVCRFaV48C1BViKd1ersC9pxcHeb',
- 'nlg': 'GTEBkz4H73YJgTNhAVtwvwZwUgTsEezVjR',
- 'xwc': 'WXiGQuL7YNhDj93GMdRWJK3gdPMJfQWB8e',
- 'mona': 'MSE8zn8b7tdHnCL45em7nes5BtTQfPuSwc',
- 'enrg': 'eBzzqNtRCsxYLDyKkBT4CSiu2c6hFK8N5X',
- 'rby': 'RRcRzBTcz8HhfNncH9rbKM1hppwMB4EpPj',
- 'thc': 'HMemWrgjEfmgutjkM7C2zMqgpj97SJtW7g',
- 'erc': 'EWeL8eYZRJJZnMFrwMvhidxJsXDcfsELgL',
- 'vrc': 'VUmKQQdfVdsNfSzGtWZddWnv1gD1VuYPSa',
- 'cure': 'BE1rrjqnMPXnLbsTXdbhe13wuRRN1q5qTy',
- 'cloak': 'BtMtdrXRWBw6YMfSsxtkBiRP1wYeFH2Xrk',
- 'bsd': 'iPcwLWBxp2BYfDCyGYbvHbjRCzGL7rjE2U',
- 'start': 'sdvC9GSopsBmJ8VtVmNxKf1xwcGtY9bzwz',
- 'kore': 'K8iJwoL5ojPWw2kjhnWJrNwm1rsoWewErb',
- 'trust': 'TUFooWK6jqDYHKUggZyREvPAeK6nhSYHAX',
- 'nav': 'NUBRSjHJ8h52bqF2d2U4iXzEF3v6fgskw4',
- 'xst': 'S6L8FQGNLhpGEhcZzt4YMYNHq1H98QKkmK',
- 'btcd': 'RCJPmNM6BaNBTiomfJ83c2hEjMpnLjFghe',
- 'via': 'Vcd9Be6s1NePuci1LvC16K21kBytYmRf1t',
- 'uno': 'uZsGhq6VfNpYPUtNqg9fdushmsuc6B9GMA',
- 'pink': '2EjF3ACSNJqudSKZaEeSHvkGqVFg4JtUSA',
- 'ioc': 'iZmhHdNtPGfEVwswTkaLEDEuxrHQFDGD77',
- 'cann': 'CemM7gxYYJK9weV6Ed8sw4B7fvPQgY8hfW',
- 'sys': 'SUNH2SNQqaZvxqqPvuQcBVNdZshPRq2ZTv',
- 'neos': 'NTM232LiTUz8tgXmAWg8TxbrKtcAkDW9Mr',
- 'dgb': 'DA2eLVocFESdqVETtgVLP6k1m319o4g4Yq',
- 'excl': 'EPdycUjUzcYvFFGvTPC8z9NriZ8EgxLL7P',
- 'dope': 'D6NTRES89hzLNYx55AEuqWuAs8rUsR3sVc',
- 'block': 'Ba3yDhGLkiqN28YXoMYgBPuSjKht4a2ZGK',
- 'aby': 'AMbFZwYzjMJHtjJL3fHti2k2JtpfqrX7Ud',
- 'byc': 'BGD2TfaNbN6wq6CZXHMG9fSEWdniVZhJzn',
- 'blitz': 'oWZsQvU3T9FU25FdmRnAousz5CpzXjd6Eg',
- 'bay': 'BFDi3ZSZorDPX17iYrmhRFRSQK5DniqG4v',
- 'spr': 'SYeuSdejAg8jbhrC6pYmwMMPn99egVmyaP',
- 'vtr': 'xr14J4LzdL4jYfRNpP5WdPjtq5dC2YNXiZA27ZayWqC87o4B4UwibZFWr6U5B3B3T7gdjfCqsN5c3btYhFSzBCf2fDL9Bvj1LAPqYQ',
- 'game': 'GMn4k4jXVDjVbSMCWabNguczwADkQxnnRu',
- 'nxs': '2RQbTTGVYJB1qkghsoZunueS71EPfc6KfCbhJqXveLJFCCK4U35',
- 'bitb': '2UjoiH7RmYhvdzJRGXAt5SVeP1iw9MP3Ka',
- 'xvg': 'DAtQMkVj14Vs4jUww8EcnurUGz1c92pBV9',
- 'geo': 'GR7Zj1EsHWc7M3KU5BDhTCSx4y9QR9nEEo',
- 'flo': 'FMSEzFyS9dWhb69ch72VF1ETePnXnb2qxY',
- 'nbt': 'BBijzpMJo92pT4dp1NxwGXY1kBJGxz1QJr',
- 'grc': 'S1t5Jr2WwxZSeSNn8p5RkAAycHa2ZraShi',
- 'mue': '7bSsG2TBa4645qitQsfBPj9Gp7ZW8QTa87',
- 'xvc': 'VpYaBkNXNCtYg3HTP7onhdvhTqtvGBwBCo',
- 'clam': 'xVJ7ySQNPfN3XKmAykTYapuZzZun23xsr5',
- 'dmd': 'dGRJXSHNiF9SoAatLeuoKYxmCbKJ8aXkga',
- 'gam': 'GSqe2k3G2EQQy3QNPwGyyyW33m7eEr6Df6',
- 'sphr': 'BPpGQCDR63NcN6Po9Lvo2D8nqQbhpiSHcE',
- 'ok': 'PGuDs5iu3sEaeAr1kMnMSwNCwJW2xUMTwA',
- 'snrg': 'SYkCDBer4Kap91ftY4cdDfrjnTh3nRvNqk',
- 'pkb': 'PLvXxUE6NrJqvoP1imR8sS23hDCmXoWcxz',
- 'cpc': 'CYWUbfBTAVW9H4zAPRe6yckWWBVRXaznT1',
- 'eth': '0xcf4c939ccae5c0ecc8b63505cce1513e5ef0d567',
- 'gcr': 'GRxryTQ43RET8xfzm38L42wYchim9H3cHf',
- 'tx': 'TixtGQBFrzfFH5Z1ouKjM4UDGqkKXcyw8p',
- 'exp': '0xbc4ee321e752cdd8ca54e4405de71c5f4f5b5f24',
- 'infx': 'iBJzRkcQk6coYUE4UFFDzvfi8Y1URMzyyA',
- 'omni': '15rebjRT6mESSbHU9yyLTh8oADdC4x4RWg',
- 'usdt': '1Ne3DYc5tJSAjS3rwqDt3GSN1FYMrHLPWr',
- 'amp': '13f3KoRoFD5iJw1zdQBw5Hum5EYRs9pB3x',
- 'agrs': '16EPWtBErUnT6fEsKmJfB4gxnJx5qndMCJ',
- 'bta': 'BJD3NHuuiibB85FrxYULSHTgJmye25PRKF',
- 'club': 'Ce9MJXxjasVSbVPntihwote3SjMbfqnvDJ',
- 'vox': 'VV5QjvbWFC9rvWtLyxMvsJDT1FFk9jgbWa',
- 'emc': 'EgPN6YhGXqgTL7np3UtAM2UReMs7eWVD8K',
- 'fct': 'FA3EuMt78kTLHdJsfS65r15xE4acVRtARBfUnKTqfMmGUyTzcNtP',
- 'maid': '1gUbRQjyQX2uJkezY8WY7KSEGGEmD9Zme',
- 'egc': 'EZYWa2KKhzUstJnTZG1SA8zp7stiyrt2Up',
- 'sls': 'SZVpV5LtN9WXdafou3BoHsacDhMcmCjUzr',
- 'rads': 'XcML29TJXQihsV5JmphEVbTPcS6xPkcZFj',
- 'dcr': 'DsUcYM48ZravjWaLCoeAxYQvTcNigqYaQVf',
- 'safex': '1jTMyxf2iP9NxNzMDAZVhQVQskj7zvDj9',
- 'pivx': 'DU6uyNH7E5VPse3hh4RZr4A12VQtM2E3Ue',
- 'meme': 'PCXXZ3NKQUMA26GsX5cjozE48yvM5uUnrR',
- '2give': 'GpG7ygLvdd3GKsbAUvPRZbMR8GtXa7JizS',
- 'lsk': '3548326455915242856L',
- 'pdc': '12ZeM7mrPnZBM5rZWXh9QpNbe6eSTykxCr',
- 'dgd': '0x7e7cec0a54cbda02b44e6c24a298b2d89b8f3c31',
- 'brk': 'brfTVJS9JGtNX8prmKQBaQtWbtj1b1WJB7X',
- 'waves': '3P6H2V28Zzs9qX3U86Rs5hzTFkcCJrbDJEm',
- 'lbc': 'bVQKmE9tkLHxkjnu97SSe8eQHT9q4c69Zb',
- 'brx': 'bxVriVBdAZ1jXkKFvBAA3zQkS819kZFqWVd',
- 'etc': '0xb52c0534da8d758943e8604916b6be70071bc6d3',
- 'strat': 'Sf8iKKeaAFRX772JA5TWXDwZMJZkJNwmSZ',
- 'unb': '13izqwELn1jTt1j7umfoJKUPRUBBPmwpHv',
- 'ebst': 'e91xYCEFKh2J2VogvUraooeCFUUcCbrUnM',
- 'vrm': 'VXYWrM5h6YE7pU1zPjFpXYcGVoYnLAETyK',
- 'xaur': '0x1253295779080ec136551724a27143e4470073a2',
- 'seq': 'Se8Eg7u1k6izqAW3nmKAwuBewiJu1G2fbD',
- 'sngls': '0x6f4f433ff62347998785e4ed30f3048a2281fd98',
- 'rep': '0x16169642de5a4c43a5f3bcbc5eea36ca767ecc4d',
- 'shift': '3548326455915242856S',
- 'xzc': 'a3vmJpgzqDu4Yg6FPt9uj27m3sBAbMwtRs',
- 'neo': 'AG2dY41SYEMmZLLy5dS1gNwHkWEAshE3ft',
- 'zec': 't1fnCgLKXy7Q1ovFD5obWcH1Vmpp6ivVhJu',
- 'zcl': 't1bHV2hFD8mVoVH2S7KVSfAmdTX615xXGgy',
- 'iop': 'pEP4niYzA8eiPUfCcy5pnPxoETu7zx6n4G',
- 'ubq': '0x98b3ffb0a988308304b32077ba31e5b300be1567',
- 'hkg': '0x1567685a30ee1d1ace1f1e6291b727b1e2ca5eea',
- 'sib': 'Sicrwdsg9mVMCACVJJq23RfqSXiNfH7H2f',
- 'ion': 'ia2ts12ZrprJ9GjsuJChY1HmzeFnwy6k5x',
- 'lmc': 'LZFKYiQRjX3zLaBRMTzF6kaRReoAqsTGgX',
- 'qwark': '0xe4f1f6665f68489f6ff512194553918df13a1ae6',
- 'crw': '12rCC2LwBBuue46KELC9zE9H75Tq9ff492',
- 'swt': '0xaef9799c36cc1459d7876b56383a4a2107bc4b66',
- 'time': '0x1ddcfde92c5c82f5fc919b69478ce65db5446483',
- 'mln': '0x8c1d250c58133ff94b224390c3137d8dc4bf02bc',
- 'tks': '3PESLYrs1s5sNYGBHD8bZnqWvB3pW3BMcWd',
- 'ark': 'AJrDLieoPW46gg3XRANt3J8emDFdQPDUmq',
- 'music': '0x9248334cf30082b5e301bef6fa29642c3170e2e4',
- 'incnt': '3PEuNUJZpE4mjqhHZDCmisGabd4g1qzAeve',
- 'gbyte': 'RYLB7TCEBR4WK3ZEBMGOSLHOPU2COVMZ',
- 'gnt': '0x7da2d058575c81a0b5658878a3b3efed0de142d4',
- 'nxc': '0x06e1d5c1e7dded4b9e32f45845e1d352c0cf8bc5',
- 'edg': '0xdc8e6d7de95fb75774f2b3be2d03efd29d9242e8',
- 'lgd': '0xce7591232523f66b14189c4cec4679e3ab7b3d8e',
- 'trst': '0xa60ff29d26d373a88afbe74f6dbcab3aeca677e6',
- 'wings': '0xb4466e1575882d28388820a719516d1dff412961',
- 'rlc': '0xab916ef71e19c56c98de93d0dba99469b1283db1',
- 'bcc': '1LVojXegSH5EhrNQncWfxg7ErVh4N9HCAL',
- 'qtum': '0x1646d7c096047756ab0b1cb636cf5dd5d36959d2',
- 'part': 'Ph9oGH1vwtsFTHmAwYh3iS9J1vcVhoLXFk',
- 'cvc': '0x584827cad4a2cb47582ebd5a5ee6e4fd5ea63255',
- 'omg': '0xef24cccdad02b96e8bd3c68757c1aab5547ecda7',
- 'adx': '0x36f8b284fa87405389e672d74898d0bf2930a5d9',
- 'storj': '0x05feda4008e2d9253bc339332a29a5a862c8c5d2',
- 'mtl': '0x7b610ddc59fd76c1e8a23ff69904e5d4898bbf78',
- 'pay': '0x3a957df561559587b43eb77b4266c8f0063ec948',
- 'fun': '0xd9a996f367802920aa7bb5bce48de183f45eeb54',
- 'adt': '0x7853d58160a73d538e89278bb036d2b80e00c351',
- 'mco': '0xf3959d90b9b880ee29e62f1210a37fe9b54ce0c1',
- 'snt': '0x3f6526ddd2e452ca6f93033653f0f39ace19f71e',
- 'nmr': '0xcb83ccdd55939de0653b455d7aebf21982357320',
- 'bnt': '0x3363f5a728901533511427d27f3151fe9df152a0',
- 'cfi': '0xa27c5edf5d5ca32a3f3926f7d46d4dcbea43241d',
- 'myst': '0x9dfe066e10215254e7e62c86a30fd0aea1884be3',
- 'ptoy': '0x5bc546675be2ea8b3a56eab0161e7f8c6615930a',
- 'crb': '0x3e12bb90fffebdab71dffca9557a81587d32862f',
- 'qrl': '0x7e4b07296fc5a54031ca133b98546d350c0cd293',
- '1st': '0x919865c75dd7949fb061e7a2102290b79e4d9150',
- 'bat': '0x04db9cf3de9183f8e5d5b7609c5793e4448c9bf6',
- 'sc': '6197b45062c2d75d8d94d7c7fe4a6530cc6fe6422e0edd9f285d237646b2392541c03005947d',
- 'zen': 'znmGXVrq1UcF3r59C8V75t6zqFkmqMzC4YY',
- 'ant': '0xd54c9c210d286e5bae0e5f59ca8817e9dc2378de',
- 'hmq': '0x0c3a58dc40e933b2031d0cbfe08cf0738f55a17d',
- 'tkn': '0x5a020b51b748b21274078e42b10a7eb3988e89e1',
- 'apx': '0x2c4588d7d92700966fc6101af9b1af4181ab5358',
- 'lun': '0x12c38554537d9677aef623cf7bd9b9460d51045b',
- 'gup': '0xf4b6b5fce73e455e93f80190b7f7e5999864a3de',
- 'gno': '0x8e2118d168713e639b624851958cc5fa46ebce2a',
- 'rlc': '0xab916ef71e19c56c98de93d0dba99469b1283db1'
- }, note='Your donations are greatly appreciated!')
+ return jsonify(wallets=wallets, note='Your donations are greatly appreciated!')
@app.route('/coins')
-def coins():
- return jsonify(coins=all_coins)
+def all_coins():
+ return jsonify(coins=[k for k in get_coins().keys()])
@app.route('/')
def get_coin(coin):
c = Coin(coin)
+
return jsonify(coin={
'name': c.name,
'ticker': c.ticker,
'rank': c.rank,
- 'value': c.usd,
- 'value.currency': 'USD'
+ 'usd': c.usd,
+ 'btc': c.btc
})
@@ -278,8 +102,7 @@ def get_coin(coin):
def get_value(coin, n):
c = Coin(coin)
return jsonify(coin={
- 'value': c.usd * n,
- 'value.currency': 'USD',
+ 'usd': c.usd * n,
'exchange_rate': c.usd
})
diff --git a/wallets.py b/wallets.py
new file mode 100644
index 0000000..af6baee
--- /dev/null
+++ b/wallets.py
@@ -0,0 +1,171 @@
+wallets = {
+ 'btc': '1PYZH8SCXQF7c2qgpsQ8kDgKixXeYvVsKv',
+ 'ltc': 'LXPtxt68njDdTBdu1ZvHUbARhHsPm9T3Zq',
+ 'doge': 'DRDjoTo3zg64QHpq3xgrVVJnerLAvVzMbc',
+ 'vtc': 'VvNd9XoYKavHagE6VkLNPeAazFmpgMZgQ5',
+ 'ppc': 'PMQWpq15QxT4dR6h6NrvrJMNtehcmRVxYW',
+ 'ftc': '6zDLXZmoNBdz87ZMvtK2JF7C3NRuKu2nVr',
+ 'rdd': 'RudBYrzAQeYmDXHhMXs7hPsYJc7n1C7Trt',
+ 'dash': 'XvtKBmKUhiEPQyEgNxvSRt9hyHBCN8Mia7',
+ 'pot': 'PTjS6cpqGoUUbEKyUWMqHk92ymvXMi84Ti',
+ 'blk': 'BKNihHBXHy24q7wWM6A45xnDWTvcKrcmXN',
+ 'emc2': 'EbMSP6TnLgfiJEnL1SUf4N8tjSHsY2L8zA',
+ 'xmy': 'MQPjf1pCpKQDVabTXe3do4JTQ9A81oJyHp',
+ 'aur': 'AVdVKHAvQij7QWmZ8p8P3qArK1eunrUukK',
+ 'gld': 'E6UVrbrd4VnvspMuDqDw7FfMhGAqj26dZE',
+ 'fair': 'fVkBYTPiQpcWCmFGSTtxhug2yW2nDZw6x7',
+ 'slr': '8WUGQdSjo6XikocLF54KfHfBJ2HQqwtE3t',
+ 'ptc': 'LJ7NefEUuJ9DC8qneEW2541p5iJzxNMqyQ',
+ 'grs': 'FZg2ceLVCRFaV48C1BViKd1ersC9pxcHeb',
+ 'nlg': 'GTEBkz4H73YJgTNhAVtwvwZwUgTsEezVjR',
+ 'xwc': 'WXiGQuL7YNhDj93GMdRWJK3gdPMJfQWB8e',
+ 'mona': 'MSE8zn8b7tdHnCL45em7nes5BtTQfPuSwc',
+ 'enrg': 'eBzzqNtRCsxYLDyKkBT4CSiu2c6hFK8N5X',
+ 'rby': 'RRcRzBTcz8HhfNncH9rbKM1hppwMB4EpPj',
+ 'thc': 'HMemWrgjEfmgutjkM7C2zMqgpj97SJtW7g',
+ 'erc': 'EWeL8eYZRJJZnMFrwMvhidxJsXDcfsELgL',
+ 'vrc': 'VUmKQQdfVdsNfSzGtWZddWnv1gD1VuYPSa',
+ 'cure': 'BE1rrjqnMPXnLbsTXdbhe13wuRRN1q5qTy',
+ 'cloak': 'BtMtdrXRWBw6YMfSsxtkBiRP1wYeFH2Xrk',
+ 'bsd': 'iPcwLWBxp2BYfDCyGYbvHbjRCzGL7rjE2U',
+ 'start': 'sdvC9GSopsBmJ8VtVmNxKf1xwcGtY9bzwz',
+ 'kore': 'K8iJwoL5ojPWw2kjhnWJrNwm1rsoWewErb',
+ 'trust': 'TUFooWK6jqDYHKUggZyREvPAeK6nhSYHAX',
+ 'nav': 'NUBRSjHJ8h52bqF2d2U4iXzEF3v6fgskw4',
+ 'xst': 'S6L8FQGNLhpGEhcZzt4YMYNHq1H98QKkmK',
+ 'btcd': 'RCJPmNM6BaNBTiomfJ83c2hEjMpnLjFghe',
+ 'via': 'Vcd9Be6s1NePuci1LvC16K21kBytYmRf1t',
+ 'uno': 'uZsGhq6VfNpYPUtNqg9fdushmsuc6B9GMA',
+ 'pink': '2EjF3ACSNJqudSKZaEeSHvkGqVFg4JtUSA',
+ 'ioc': 'iZmhHdNtPGfEVwswTkaLEDEuxrHQFDGD77',
+ 'cann': 'CemM7gxYYJK9weV6Ed8sw4B7fvPQgY8hfW',
+ 'sys': 'SUNH2SNQqaZvxqqPvuQcBVNdZshPRq2ZTv',
+ 'neos': 'NTM232LiTUz8tgXmAWg8TxbrKtcAkDW9Mr',
+ 'dgb': 'DA2eLVocFESdqVETtgVLP6k1m319o4g4Yq',
+ 'excl': 'EPdycUjUzcYvFFGvTPC8z9NriZ8EgxLL7P',
+ 'dope': 'D6NTRES89hzLNYx55AEuqWuAs8rUsR3sVc',
+ 'block': 'Ba3yDhGLkiqN28YXoMYgBPuSjKht4a2ZGK',
+ 'aby': 'AMbFZwYzjMJHtjJL3fHti2k2JtpfqrX7Ud',
+ 'byc': 'BGD2TfaNbN6wq6CZXHMG9fSEWdniVZhJzn',
+ 'blitz': 'oWZsQvU3T9FU25FdmRnAousz5CpzXjd6Eg',
+ 'bay': 'BFDi3ZSZorDPX17iYrmhRFRSQK5DniqG4v',
+ 'spr': 'SYeuSdejAg8jbhrC6pYmwMMPn99egVmyaP',
+ 'vtr': 'xr14J4LzdL4jYfRNpP5WdPjtq5dC2YNXiZA27ZayWqC87o4B4UwibZFWr6U5B3B3T7gdjfCqsN5c3btYhFSzBCf2fDL9Bvj1LAPqYQ',
+ 'game': 'GMn4k4jXVDjVbSMCWabNguczwADkQxnnRu',
+ 'nxs': '2RQbTTGVYJB1qkghsoZunueS71EPfc6KfCbhJqXveLJFCCK4U35',
+ 'bitb': '2UjoiH7RmYhvdzJRGXAt5SVeP1iw9MP3Ka',
+ 'xvg': 'DAtQMkVj14Vs4jUww8EcnurUGz1c92pBV9',
+ 'geo': 'GR7Zj1EsHWc7M3KU5BDhTCSx4y9QR9nEEo',
+ 'flo': 'FMSEzFyS9dWhb69ch72VF1ETePnXnb2qxY',
+ 'nbt': 'BBijzpMJo92pT4dp1NxwGXY1kBJGxz1QJr',
+ 'grc': 'S1t5Jr2WwxZSeSNn8p5RkAAycHa2ZraShi',
+ 'mue': '7bSsG2TBa4645qitQsfBPj9Gp7ZW8QTa87',
+ 'xvc': 'VpYaBkNXNCtYg3HTP7onhdvhTqtvGBwBCo',
+ 'clam': 'xVJ7ySQNPfN3XKmAykTYapuZzZun23xsr5',
+ 'dmd': 'dGRJXSHNiF9SoAatLeuoKYxmCbKJ8aXkga',
+ 'gam': 'GSqe2k3G2EQQy3QNPwGyyyW33m7eEr6Df6',
+ 'sphr': 'BPpGQCDR63NcN6Po9Lvo2D8nqQbhpiSHcE',
+ 'ok': 'PGuDs5iu3sEaeAr1kMnMSwNCwJW2xUMTwA',
+ 'snrg': 'SYkCDBer4Kap91ftY4cdDfrjnTh3nRvNqk',
+ 'pkb': 'PLvXxUE6NrJqvoP1imR8sS23hDCmXoWcxz',
+ 'cpc': 'CYWUbfBTAVW9H4zAPRe6yckWWBVRXaznT1',
+ 'eth': '0xcf4c939ccae5c0ecc8b63505cce1513e5ef0d567',
+ 'gcr': 'GRxryTQ43RET8xfzm38L42wYchim9H3cHf',
+ 'tx': 'TixtGQBFrzfFH5Z1ouKjM4UDGqkKXcyw8p',
+ 'exp': '0xbc4ee321e752cdd8ca54e4405de71c5f4f5b5f24',
+ 'infx': 'iBJzRkcQk6coYUE4UFFDzvfi8Y1URMzyyA',
+ 'omni': '15rebjRT6mESSbHU9yyLTh8oADdC4x4RWg',
+ 'usdt': '1Ne3DYc5tJSAjS3rwqDt3GSN1FYMrHLPWr',
+ 'amp': '13f3KoRoFD5iJw1zdQBw5Hum5EYRs9pB3x',
+ 'agrs': '16EPWtBErUnT6fEsKmJfB4gxnJx5qndMCJ',
+ 'bta': 'BJD3NHuuiibB85FrxYULSHTgJmye25PRKF',
+ 'club': 'Ce9MJXxjasVSbVPntihwote3SjMbfqnvDJ',
+ 'vox': 'VV5QjvbWFC9rvWtLyxMvsJDT1FFk9jgbWa',
+ 'emc': 'EgPN6YhGXqgTL7np3UtAM2UReMs7eWVD8K',
+ 'fct': 'FA3EuMt78kTLHdJsfS65r15xE4acVRtARBfUnKTqfMmGUyTzcNtP',
+ 'maid': '1gUbRQjyQX2uJkezY8WY7KSEGGEmD9Zme',
+ 'egc': 'EZYWa2KKhzUstJnTZG1SA8zp7stiyrt2Up',
+ 'sls': 'SZVpV5LtN9WXdafou3BoHsacDhMcmCjUzr',
+ 'rads': 'XcML29TJXQihsV5JmphEVbTPcS6xPkcZFj',
+ 'dcr': 'DsUcYM48ZravjWaLCoeAxYQvTcNigqYaQVf',
+ 'safex': '1jTMyxf2iP9NxNzMDAZVhQVQskj7zvDj9',
+ 'pivx': 'DU6uyNH7E5VPse3hh4RZr4A12VQtM2E3Ue',
+ 'meme': 'PCXXZ3NKQUMA26GsX5cjozE48yvM5uUnrR',
+ '2give': 'GpG7ygLvdd3GKsbAUvPRZbMR8GtXa7JizS',
+ 'lsk': '3548326455915242856L',
+ 'pdc': '12ZeM7mrPnZBM5rZWXh9QpNbe6eSTykxCr',
+ 'dgd': '0x7e7cec0a54cbda02b44e6c24a298b2d89b8f3c31',
+ 'brk': 'brfTVJS9JGtNX8prmKQBaQtWbtj1b1WJB7X',
+ 'waves': '3P6H2V28Zzs9qX3U86Rs5hzTFkcCJrbDJEm',
+ 'lbc': 'bVQKmE9tkLHxkjnu97SSe8eQHT9q4c69Zb',
+ 'brx': 'bxVriVBdAZ1jXkKFvBAA3zQkS819kZFqWVd',
+ 'etc': '0xb52c0534da8d758943e8604916b6be70071bc6d3',
+ 'strat': 'Sf8iKKeaAFRX772JA5TWXDwZMJZkJNwmSZ',
+ 'unb': '13izqwELn1jTt1j7umfoJKUPRUBBPmwpHv',
+ 'ebst': 'e91xYCEFKh2J2VogvUraooeCFUUcCbrUnM',
+ 'vrm': 'VXYWrM5h6YE7pU1zPjFpXYcGVoYnLAETyK',
+ 'xaur': '0x1253295779080ec136551724a27143e4470073a2',
+ 'seq': 'Se8Eg7u1k6izqAW3nmKAwuBewiJu1G2fbD',
+ 'sngls': '0x6f4f433ff62347998785e4ed30f3048a2281fd98',
+ 'rep': '0x16169642de5a4c43a5f3bcbc5eea36ca767ecc4d',
+ 'shift': '3548326455915242856S',
+ 'xzc': 'a3vmJpgzqDu4Yg6FPt9uj27m3sBAbMwtRs',
+ 'neo': 'AG2dY41SYEMmZLLy5dS1gNwHkWEAshE3ft',
+ 'zec': 't1fnCgLKXy7Q1ovFD5obWcH1Vmpp6ivVhJu',
+ 'zcl': 't1bHV2hFD8mVoVH2S7KVSfAmdTX615xXGgy',
+ 'iop': 'pEP4niYzA8eiPUfCcy5pnPxoETu7zx6n4G',
+ 'ubq': '0x98b3ffb0a988308304b32077ba31e5b300be1567',
+ 'hkg': '0x1567685a30ee1d1ace1f1e6291b727b1e2ca5eea',
+ 'sib': 'Sicrwdsg9mVMCACVJJq23RfqSXiNfH7H2f',
+ 'ion': 'ia2ts12ZrprJ9GjsuJChY1HmzeFnwy6k5x',
+ 'lmc': 'LZFKYiQRjX3zLaBRMTzF6kaRReoAqsTGgX',
+ 'qwark': '0xe4f1f6665f68489f6ff512194553918df13a1ae6',
+ 'crw': '12rCC2LwBBuue46KELC9zE9H75Tq9ff492',
+ 'swt': '0xaef9799c36cc1459d7876b56383a4a2107bc4b66',
+ 'time': '0x1ddcfde92c5c82f5fc919b69478ce65db5446483',
+ 'mln': '0x8c1d250c58133ff94b224390c3137d8dc4bf02bc',
+ 'tks': '3PESLYrs1s5sNYGBHD8bZnqWvB3pW3BMcWd',
+ 'ark': 'AJrDLieoPW46gg3XRANt3J8emDFdQPDUmq',
+ 'music': '0x9248334cf30082b5e301bef6fa29642c3170e2e4',
+ 'incnt': '3PEuNUJZpE4mjqhHZDCmisGabd4g1qzAeve',
+ 'gbyte': 'RYLB7TCEBR4WK3ZEBMGOSLHOPU2COVMZ',
+ 'gnt': '0x7da2d058575c81a0b5658878a3b3efed0de142d4',
+ 'nxc': '0x06e1d5c1e7dded4b9e32f45845e1d352c0cf8bc5',
+ 'edg': '0xdc8e6d7de95fb75774f2b3be2d03efd29d9242e8',
+ 'lgd': '0xce7591232523f66b14189c4cec4679e3ab7b3d8e',
+ 'trst': '0xa60ff29d26d373a88afbe74f6dbcab3aeca677e6',
+ 'wings': '0xb4466e1575882d28388820a719516d1dff412961',
+ 'rlc': '0xab916ef71e19c56c98de93d0dba99469b1283db1',
+ 'bcc': '1LVojXegSH5EhrNQncWfxg7ErVh4N9HCAL',
+ 'qtum': '0x1646d7c096047756ab0b1cb636cf5dd5d36959d2',
+ 'part': 'Ph9oGH1vwtsFTHmAwYh3iS9J1vcVhoLXFk',
+ 'cvc': '0x584827cad4a2cb47582ebd5a5ee6e4fd5ea63255',
+ 'omg': '0xef24cccdad02b96e8bd3c68757c1aab5547ecda7',
+ 'adx': '0x36f8b284fa87405389e672d74898d0bf2930a5d9',
+ 'storj': '0x05feda4008e2d9253bc339332a29a5a862c8c5d2',
+ 'mtl': '0x7b610ddc59fd76c1e8a23ff69904e5d4898bbf78',
+ 'pay': '0x3a957df561559587b43eb77b4266c8f0063ec948',
+ 'fun': '0xd9a996f367802920aa7bb5bce48de183f45eeb54',
+ 'adt': '0x7853d58160a73d538e89278bb036d2b80e00c351',
+ 'mco': '0xf3959d90b9b880ee29e62f1210a37fe9b54ce0c1',
+ 'snt': '0x3f6526ddd2e452ca6f93033653f0f39ace19f71e',
+ 'nmr': '0xcb83ccdd55939de0653b455d7aebf21982357320',
+ 'bnt': '0x3363f5a728901533511427d27f3151fe9df152a0',
+ 'cfi': '0xa27c5edf5d5ca32a3f3926f7d46d4dcbea43241d',
+ 'myst': '0x9dfe066e10215254e7e62c86a30fd0aea1884be3',
+ 'ptoy': '0x5bc546675be2ea8b3a56eab0161e7f8c6615930a',
+ 'crb': '0x3e12bb90fffebdab71dffca9557a81587d32862f',
+ 'qrl': '0x7e4b07296fc5a54031ca133b98546d350c0cd293',
+ '1st': '0x919865c75dd7949fb061e7a2102290b79e4d9150',
+ 'bat': '0x04db9cf3de9183f8e5d5b7609c5793e4448c9bf6',
+ 'sc': '6197b45062c2d75d8d94d7c7fe4a6530cc6fe6422e0edd9f285d237646b2392541c03005947d',
+ 'zen': 'znmGXVrq1UcF3r59C8V75t6zqFkmqMzC4YY',
+ 'ant': '0xd54c9c210d286e5bae0e5f59ca8817e9dc2378de',
+ 'hmq': '0x0c3a58dc40e933b2031d0cbfe08cf0738f55a17d',
+ 'tkn': '0x5a020b51b748b21274078e42b10a7eb3988e89e1',
+ 'apx': '0x2c4588d7d92700966fc6101af9b1af4181ab5358',
+ 'lun': '0x12c38554537d9677aef623cf7bd9b9460d51045b',
+ 'gup': '0xf4b6b5fce73e455e93f80190b7f7e5999864a3de',
+ 'gno': '0x8e2118d168713e639b624851958cc5fa46ebce2a',
+ 'rlc': '0xab916ef71e19c56c98de93d0dba99469b1283db1'
+}
\ No newline at end of file