def describe(self):
    return self.deep_extend(super(okex, self).describe(), {'id': 'okex', 'name': 'OKEX', 'countries': ['CN', 'US'], 'version': 'v3', 'rateLimit': 1000, 'pro': True, 'has': {'cancelOrder': True, 'CORS': False, 'createOrder': True, 'fetchBalance': True, 'fetchClosedOrders': True, 'fetchCurrencies': False, 'fetchDepositAddress': True, 'fetchDeposits': True, 'fetchLedger': True, 'fetchMarkets': True, 'fetchMyTrades': True, 'fetchOHLCV': True, 'fetchOpenOrders': True, 'fetchOrder': True, 'fetchOrderBook': True, 'fetchOrders': False, 'fetchOrderTrades': True, 'fetchTime': True, 'fetchTicker': True, 'fetchTickers': True, 'fetchTrades': True, 'fetchTransactions': False, 'fetchWithdrawals': True, 'futures': True, 'withdraw': True}, 'timeframes': {'1m': '60', '3m': '180', '5m': '300', '15m': '900', '30m': '1800', '1h': '3600', '2h': '7200', '4h': '14400', '6h': '21600', '12h': '43200', '1d': '86400', '1w': '604800', '1M': '2678400', '3M': '8035200', '6M': '16070400', '1y': '31536000'}, 'hostname': 'okex.com', 'urls': {'logo': 'https://user-images.githubusercontent.com/1294454/32552768-0d6dd3c6-c4a6-11e7-90f8-c043b64756a7.jpg', 'api': {'rest': 'https://www.{hostname}'}, 'www': 'https://www.okex.com', 'doc': 'https://www.okex.com/docs/en/', 'fees': 'https://www.okex.com/pages/products/fees.html', 'referral': 'https://www.okex.com/join/1888677', 'test': {'rest': 'https://testnet.okex.com'}}, 'api': {'general': {'get': ['time']}, 'account': {'get': ['wallet', 'sub-account', 'asset-valuation', 'wallet/{currency}', 'withdrawal/history', 'withdrawal/history/{currency}', 'ledger', 'deposit/address', 'deposit/history', 'deposit/history/{currency}', 'currencies', 'withdrawal/fee'], 'post': ['transfer', 'withdrawal']}, 'spot': {'get': ['accounts', 'accounts/{currency}', 'accounts/{currency}/ledger', 'orders', 'orders_pending', 'orders/{order_id}', 'orders/{client_oid}', 'trade_fee', 'fills', 'algo', 'instruments', 'instruments/{instrument_id}/book', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles'], 'post': ['order_algo', 'orders', 'batch_orders', 'cancel_orders/{order_id}', 'cancel_orders/{client_oid}', 'cancel_batch_algos', 'cancel_batch_orders']}, 'margin': {'get': ['accounts', 'accounts/{instrument_id}', 'accounts/{instrument_id}/ledger', 'accounts/availability', 'accounts/{instrument_id}/availability', 'accounts/borrowed', 'accounts/{instrument_id}/borrowed', 'orders', 'accounts/{instrument_id}/leverage', 'orders/{order_id}', 'orders/{client_oid}', 'orders_pending', 'fills', 'instruments/{instrument_id}/mark_price'], 'post': ['accounts/borrow', 'accounts/repayment', 'orders', 'batch_orders', 'cancel_orders', 'cancel_orders/{order_id}', 'cancel_orders/{client_oid}', 'cancel_batch_orders', 'accounts/{instrument_id}/leverage']}, 'futures': {'get': ['position', '{instrument_id}/position', 'accounts', 'accounts/{underlying}', 'accounts/{underlying}/leverage', 'accounts/{underlying}/ledger', 'order_algo/{instrument_id}', 'orders/{instrument_id}', 'orders/{instrument_id}/{order_id}', 'orders/{instrument_id}/{client_oid}', 'fills', 'trade_fee', 'accounts/{instrument_id}/holds', 'order_algo/{instrument_id}', 'instruments', 'instruments/{instrument_id}/book', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles', 'instruments/{instrument_id}/index', 'rate', 'instruments/{instrument_id}/estimated_price', 'instruments/{instrument_id}/open_interest', 'instruments/{instrument_id}/price_limit', 'instruments/{instrument_id}/mark_price', 'instruments/{instrument_id}/liquidation'], 'post': ['accounts/{underlying}/leverage', 'order', 'orders', 'cancel_order/{instrument_id}/{order_id}', 'cancel_order/{instrument_id}/{client_oid}', 'cancel_batch_orders/{instrument_id}', 'accounts/margin_mode', 'close_position', 'cancel_all', 'order_algo', 'cancel_algos']}, 'swap': {'get': ['position', '{instrument_id}/position', 'accounts', '{instrument_id}/accounts', 'accounts/{instrument_id}/settings', 'accounts/{instrument_id}/ledger', 'orders/{instrument_id}', 'orders/{instrument_id}/{order_id}', 'orders/{instrument_id}/{client_oid}', 'fills', 'accounts/{instrument_id}/holds', 'trade_fee', 'order_algo/{instrument_id}', 'instruments', 'instruments/{instrument_id}/depth', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles', 'instruments/{instrument_id}/index', 'rate', 'instruments/{instrument_id}/open_interest', 'instruments/{instrument_id}/price_limit', 'instruments/{instrument_id}/liquidation', 'instruments/{instrument_id}/funding_time', 'instruments/{instrument_id}/mark_price', 'instruments/{instrument_id}/historical_funding_rate'], 'post': ['accounts/{instrument_id}/leverage', 'order', 'orders', 'cancel_order/{instrument_id}/{order_id}', 'cancel_order/{instrument_id}/{client_oid}', 'cancel_batch_orders/{instrument_id}', 'order_algo', 'cancel_algos', 'close_position', 'cancel_all', 'order_algo', 'cancel_algos']}, 'option': {'get': ['accounts', 'position', '{underlying}/position', 'accounts/{underlying}', 'orders/{underlying}', 'fills/{underlying}', 'accounts/{underlying}/ledger', 'trade_fee', 'orders/{underlying}/{order_id}', 'orders/{underlying}/{client_oid}', 'underlying', 'instruments/{underlying}', 'instruments/{underlying}/summary', 'instruments/{underlying}/summary/{instrument_id}', 'instruments/{instrument_id}/book', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/candles'], 'post': ['order', 'orders', 'cancel_order/{underlying}/{order_id}', 'cancel_order/{underlying}/{client_oid}', 'cancel_batch_orders/{underlying}', 'amend_order/{underlying}', 'amend_batch_orders/{underlying}']}, 'index': {'get': ['{instrument_id}/constituents']}}, 'fees': {'trading': {'taker': 0.0015, 'maker': 0.001}, 'spot': {'taker': 0.0015, 'maker': 0.001}, 'futures': {'taker': 0.0005, 'maker': 0.0002}, 'swap': {'taker': 0.00075, 'maker': 0.0002}}, 'requiredCredentials': {'apiKey': True, 'secret': True, 'password': True}, 'exceptions': {'exact': {'1': ExchangeError, 'failure to get a peer from the ring-balancer': ExchangeNotAvailable, 'Server is busy, please try again.': ExchangeNotAvailable, 'An unexpected error occurred': ExchangeError, 'System error': ExchangeError, '4010': PermissionDenied, '4001': ExchangeError, '4002': ExchangeError, '30001': AuthenticationError, '30002': AuthenticationError, '30003': AuthenticationError, '30004': AuthenticationError, '30005': InvalidNonce, '30006': AuthenticationError, '30007': BadRequest, '30008': RequestTimeout, '30009': ExchangeError, '30010': AuthenticationError, '30011': PermissionDenied, '30012': AuthenticationError, '30013': AuthenticationError, '30014': DDoSProtection, '30015': AuthenticationError, '30016': ExchangeError, '30017': ExchangeError, '30018': ExchangeError, '30019': ExchangeNotAvailable, '30020': BadRequest, '30021': BadRequest, '30022': PermissionDenied, '30023': BadRequest, '30024': BadSymbol, '30025': BadRequest, '30026': DDoSProtection, '30027': AuthenticationError, '30028': PermissionDenied, '30029': AccountSuspended, '30030': ExchangeNotAvailable, '30031': BadRequest, '30032': BadSymbol, '30033': BadRequest, '30034': ExchangeError, '30035': ExchangeError, '30036': ExchangeError, '30037': ExchangeNotAvailable, '30038': OnMaintenance, '30044': RequestTimeout, '32001': AccountSuspended, '32002': PermissionDenied, '32003': CancelPending, '32004': ExchangeError, '32005': InvalidOrder, '32006': InvalidOrder, '32007': InvalidOrder, '32008': InvalidOrder, '32009': InvalidOrder, '32010': ExchangeError, '32011': ExchangeError, '32012': ExchangeError, '32013': ExchangeError, '32014': ExchangeError, '32015': ExchangeError, '32016': ExchangeError, '32017': ExchangeError, '32018': ExchangeError, '32019': ExchangeError, '32020': ExchangeError, '32021': ExchangeError, '32022': ExchangeError, '32023': ExchangeError, '32024': ExchangeError, '32025': ExchangeError, '32026': ExchangeError, '32027': ExchangeError, '32028': ExchangeError, '32029': ExchangeError, '32030': InvalidOrder, '32031': ArgumentsRequired, '32038': AuthenticationError, '32040': ExchangeError, '32044': ExchangeError, '32045': ExchangeError, '32046': ExchangeError, '32047': ExchangeError, '32048': InvalidOrder, '32049': ExchangeError, '32050': InvalidOrder, '32051': InvalidOrder, '32052': ExchangeError, '32053': ExchangeError, '32057': ExchangeError, '32054': ExchangeError, '32055': InvalidOrder, '32056': ExchangeError, '32058': ExchangeError, '32059': InvalidOrder, '32060': InvalidOrder, '32061': InvalidOrder, '32062': InvalidOrder, '32063': InvalidOrder, '32064': ExchangeError, '32065': ExchangeError, '32066': ExchangeError, '32067': ExchangeError, '32068': ExchangeError, '32069': ExchangeError, '32070': ExchangeError, '32071': ExchangeError, '32072': ExchangeError, '32073': ExchangeError, '32074': ExchangeError, '32075': ExchangeError, '32076': ExchangeError, '32077': ExchangeError, '32078': ExchangeError, '32079': ExchangeError, '32080': ExchangeError, '32083': ExchangeError, '33001': PermissionDenied, '33002': AccountSuspended, '33003': InsufficientFunds, '33004': ExchangeError, '33005': ExchangeError, '33006': ExchangeError, '33007': ExchangeError, '33008': InsufficientFunds, '33009': ExchangeError, '33010': ExchangeError, '33011': ExchangeError, '33012': ExchangeError, '33013': InvalidOrder, '33014': OrderNotFound, '33015': InvalidOrder, '33016': ExchangeError, '33017': InsufficientFunds, '33018': ExchangeError, '33020': ExchangeError, '33021': BadRequest, '33022': InvalidOrder, '33023': ExchangeError, '33024': InvalidOrder, '33025': InvalidOrder, '33026': ExchangeError, '33027': InvalidOrder, '33028': InvalidOrder, '33029': InvalidOrder, '33034': ExchangeError, '33035': ExchangeError, '33036': ExchangeError, '33037': ExchangeError, '33038': ExchangeError, '33039': ExchangeError, '33040': ExchangeError, '33041': ExchangeError, '33042': ExchangeError, '33043': ExchangeError, '33044': ExchangeError, '33045': ExchangeError, '33046': ExchangeError, '33047': ExchangeError, '33048': ExchangeError, '33049': ExchangeError, '33050': ExchangeError, '33051': ExchangeError, '33059': BadRequest, '33060': BadRequest, '33061': ExchangeError, '33062': ExchangeError, '33063': ExchangeError, '33064': ExchangeError, '33065': ExchangeError, '33085': InvalidOrder, '21009': ExchangeError, '34001': PermissionDenied, '34002': InvalidAddress, '34003': ExchangeError, '34004': ExchangeError, '34005': ExchangeError, '34006': ExchangeError, '34007': ExchangeError, '34008': InsufficientFunds, '34009': ExchangeError, '34010': ExchangeError, '34011': ExchangeError, '34012': ExchangeError, '34013': ExchangeError, '34014': ExchangeError, '34015': ExchangeError, '34016': PermissionDenied, '34017': AccountSuspended, '34018': AuthenticationError, '34019': PermissionDenied, '34020': PermissionDenied, '34021': InvalidAddress, '34022': ExchangeError, '34023': PermissionDenied, '34026': RateLimitExceeded, '34036': ExchangeError, '34037': ExchangeError, '34038': ExchangeError, '34039': ExchangeError, '35001': ExchangeError, '35002': ExchangeError, '35003': ExchangeError, '35004': ExchangeError, '35005': AuthenticationError, '35008': InvalidOrder, '35010': InvalidOrder, '35012': InvalidOrder, '35014': InvalidOrder, '35015': InvalidOrder, '35017': ExchangeError, '35019': InvalidOrder, '35020': InvalidOrder, '35021': InvalidOrder, '35022': BadRequest, '35024': BadRequest, '35025': InsufficientFunds, '35026': BadRequest, '35029': OrderNotFound, '35030': InvalidOrder, '35031': InvalidOrder, '35032': ExchangeError, '35037': ExchangeError, '35039': ExchangeError, '35040': InvalidOrder, '35044': ExchangeError, '35046': InsufficientFunds, '35047': InsufficientFunds, '35048': ExchangeError, '35049': InvalidOrder, '35050': InvalidOrder, '35052': InsufficientFunds, '35053': ExchangeError, '35055': InsufficientFunds, '35057': ExchangeError, '35058': ExchangeError, '35059': BadRequest, '35060': BadRequest, '35061': BadRequest, '35062': InvalidOrder, '35063': InvalidOrder, '35064': InvalidOrder, '35066': InvalidOrder, '35067': InvalidOrder, '35068': InvalidOrder, '35069': InvalidOrder, '35070': InvalidOrder, '35071': InvalidOrder, '35072': InvalidOrder, '35073': InvalidOrder, '35074': InvalidOrder, '35075': InvalidOrder, '35076': InvalidOrder, '35077': InvalidOrder, '35078': InvalidOrder, '35079': InvalidOrder, '35080': InvalidOrder, '35081': InvalidOrder, '35082': InvalidOrder, '35083': InvalidOrder, '35084': InvalidOrder, '35085': InvalidOrder, '35086': InvalidOrder, '35087': InvalidOrder, '35088': InvalidOrder, '35089': InvalidOrder, '35090': ExchangeError, '35091': ExchangeError, '35092': ExchangeError, '35093': ExchangeError, '35094': ExchangeError, '35095': BadRequest, '35096': ExchangeError, '35097': ExchangeError, '35098': ExchangeError, '35099': ExchangeError, '35102': RateLimitExceeded, '36001': BadRequest, '36002': BadRequest, '36005': ExchangeError, '36101': AuthenticationError, '36102': PermissionDenied, '36103': PermissionDenied, '36104': PermissionDenied, '36105': PermissionDenied, '36106': PermissionDenied, '36107': PermissionDenied, '36108': InsufficientFunds, '36109': PermissionDenied, '36201': PermissionDenied, '36202': PermissionDenied, '36203': InvalidOrder, '36204': ExchangeError, '36205': BadRequest, '36206': BadRequest, '36207': InvalidOrder, '36208': InvalidOrder, '36209': InvalidOrder, '36210': InvalidOrder, '36211': InvalidOrder, '36212': InvalidOrder, '36213': InvalidOrder, '36214': ExchangeError, '36216': OrderNotFound, '36217': InvalidOrder, '36218': InvalidOrder, '36219': InvalidOrder, '36220': InvalidOrder, '36221': InvalidOrder, '36222': InvalidOrder, '36223': InvalidOrder, '36224': InvalidOrder, '36225': InvalidOrder, '36226': InvalidOrder, '36227': InvalidOrder, '36228': InvalidOrder, '36229': InvalidOrder, '36230': InvalidOrder}, 'broad': {}}, 'precisionMode': TICK_SIZE, 'options': {'fetchOHLCV': {'type': 'Candles'}, 'createMarketBuyOrderRequiresPrice': True, 'fetchMarkets': ['spot', 'futures', 'swap', 'option'], 'defaultType': 'spot', 'auth': {'time': 'public', 'currencies': 'private', 'instruments': 'public', 'rate': 'public', '{instrument_id}/constituents': 'public'}}, 'commonCurrencies': {'AE': 'AET', 'BOX': 'DefiBox', 'HOT': 'Hydro Protocol', 'HSR': 'HC', 'MAG': 'Maggie', 'SBTC': 'Super Bitcoin', 'YOYO': 'YOYOW', 'WIN': 'WinToken'}})
def describe(self):
    return self.deep_extend(super(okex, self).describe(), {'id': 'okex', 'name': 'OKEX', 'countries': ['CN', 'US'], 'version': 'v3', 'rateLimit': 1000, 'pro': True, 'has': {'cancelOrder': True, 'CORS': False, 'createOrder': True, 'fetchBalance': True, 'fetchClosedOrders': True, 'fetchCurrencies': False, 'fetchDepositAddress': True, 'fetchDeposits': True, 'fetchLedger': True, 'fetchMarkets': True, 'fetchMyTrades': True, 'fetchOHLCV': True, 'fetchOpenOrders': True, 'fetchOrder': True, 'fetchOrderBook': True, 'fetchOrders': False, 'fetchOrderTrades': True, 'fetchTime': True, 'fetchTicker': True, 'fetchTickers': True, 'fetchTrades': True, 'fetchTransactions': False, 'fetchWithdrawals': True, 'futures': True, 'withdraw': True}, 'timeframes': {'1m': '60', '3m': '180', '5m': '300', '15m': '900', '30m': '1800', '1h': '3600', '2h': '7200', '4h': '14400', '6h': '21600', '12h': '43200', '1d': '86400', '1w': '604800', '1M': '2678400', '3M': '8035200', '6M': '16070400', '1y': '31536000'}, 'hostname': 'okex.com', 'urls': {'logo': 'https://user-images.githubusercontent.com/1294454/32552768-0d6dd3c6-c4a6-11e7-90f8-c043b64756a7.jpg', 'api': {'rest': 'https://www.{hostname}'}, 'www': 'https://www.okex.com', 'doc': 'https://www.okex.com/docs/en/', 'fees': 'https://www.okex.com/pages/products/fees.html', 'referral': 'https://www.okex.com/join/1888677', 'test': {'rest': 'https://testnet.okex.com'}}, 'api': {'general': {'get': ['time']}, 'account': {'get': ['wallet', 'sub-account', 'asset-valuation', 'wallet/{currency}', 'withdrawal/history', 'withdrawal/history/{currency}', 'ledger', 'deposit/address', 'deposit/history', 'deposit/history/{currency}', 'currencies', 'withdrawal/fee'], 'post': ['transfer', 'withdrawal']}, 'spot': {'get': ['accounts', 'accounts/{currency}', 'accounts/{currency}/ledger', 'orders', 'orders_pending', 'orders/{order_id}', 'orders/{client_oid}', 'trade_fee', 'fills', 'algo', 'instruments', 'instruments/{instrument_id}/book', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles'], 'post': ['order_algo', 'orders', 'batch_orders', 'cancel_orders/{order_id}', 'cancel_orders/{client_oid}', 'cancel_batch_algos', 'cancel_batch_orders']}, 'margin': {'get': ['accounts', 'accounts/{instrument_id}', 'accounts/{instrument_id}/ledger', 'accounts/availability', 'accounts/{instrument_id}/availability', 'accounts/borrowed', 'accounts/{instrument_id}/borrowed', 'orders', 'accounts/{instrument_id}/leverage', 'orders/{order_id}', 'orders/{client_oid}', 'orders_pending', 'fills', 'instruments/{instrument_id}/mark_price'], 'post': ['accounts/borrow', 'accounts/repayment', 'orders', 'batch_orders', 'cancel_orders', 'cancel_orders/{order_id}', 'cancel_orders/{client_oid}', 'cancel_batch_orders', 'accounts/{instrument_id}/leverage']}, 'futures': {'get': ['position', '{instrument_id}/position', 'accounts', 'accounts/{underlying}', 'accounts/{underlying}/leverage', 'accounts/{underlying}/ledger', 'order_algo/{instrument_id}', 'orders/{instrument_id}', 'orders/{instrument_id}/{order_id}', 'orders/{instrument_id}/{client_oid}', 'fills', 'trade_fee', 'accounts/{instrument_id}/holds', 'order_algo/{instrument_id}', 'instruments', 'instruments/{instrument_id}/book', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles', 'instruments/{instrument_id}/index', 'rate', 'instruments/{instrument_id}/estimated_price', 'instruments/{instrument_id}/open_interest', 'instruments/{instrument_id}/price_limit', 'instruments/{instrument_id}/mark_price', 'instruments/{instrument_id}/liquidation'], 'post': ['accounts/{underlying}/leverage', 'order', 'orders', 'cancel_order/{instrument_id}/{order_id}', 'cancel_order/{instrument_id}/{client_oid}', 'cancel_batch_orders/{instrument_id}', 'accounts/margin_mode', 'close_position', 'cancel_all', 'order_algo', 'cancel_algos']}, 'swap': {'get': ['position', '{instrument_id}/position', 'accounts', '{instrument_id}/accounts', 'accounts/{instrument_id}/settings', 'accounts/{instrument_id}/ledger', 'orders/{instrument_id}', 'orders/{instrument_id}/{order_id}', 'orders/{instrument_id}/{client_oid}', 'fills', 'accounts/{instrument_id}/holds', 'trade_fee', 'order_algo/{instrument_id}', 'instruments', 'instruments/{instrument_id}/depth', 'instruments/ticker', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/candles', 'instruments/{instrument_id}/history/candles', 'instruments/{instrument_id}/index', 'rate', 'instruments/{instrument_id}/open_interest', 'instruments/{instrument_id}/price_limit', 'instruments/{instrument_id}/liquidation', 'instruments/{instrument_id}/funding_time', 'instruments/{instrument_id}/mark_price', 'instruments/{instrument_id}/historical_funding_rate'], 'post': ['accounts/{instrument_id}/leverage', 'order', 'orders', 'cancel_order/{instrument_id}/{order_id}', 'cancel_order/{instrument_id}/{client_oid}', 'cancel_batch_orders/{instrument_id}', 'order_algo', 'cancel_algos', 'close_position', 'cancel_all', 'order_algo', 'cancel_algos']}, 'option': {'get': ['accounts', 'position', '{underlying}/position', 'accounts/{underlying}', 'orders/{underlying}', 'fills/{underlying}', 'accounts/{underlying}/ledger', 'trade_fee', 'orders/{underlying}/{order_id}', 'orders/{underlying}/{client_oid}', 'underlying', 'instruments/{underlying}', 'instruments/{underlying}/summary', 'instruments/{underlying}/summary/{instrument_id}', 'instruments/{instrument_id}/book', 'instruments/{instrument_id}/trades', 'instruments/{instrument_id}/ticker', 'instruments/{instrument_id}/candles'], 'post': ['order', 'orders', 'cancel_order/{underlying}/{order_id}', 'cancel_order/{underlying}/{client_oid}', 'cancel_batch_orders/{underlying}', 'amend_order/{underlying}', 'amend_batch_orders/{underlying}']}, 'index': {'get': ['{instrument_id}/constituents']}}, 'fees': {'trading': {'taker': 0.0015, 'maker': 0.001}, 'spot': {'taker': 0.0015, 'maker': 0.001}, 'futures': {'taker': 0.0005, 'maker': 0.0002}, 'swap': {'taker': 0.00075, 'maker': 0.0002}}, 'requiredCredentials': {'apiKey': True, 'secret': True, 'password': True}, 'exceptions': {'exact': {'1': ExchangeError, 'failure to get a peer from the ring-balancer': ExchangeNotAvailable, 'Server is busy, please try again.': ExchangeNotAvailable, 'An unexpected error occurred': ExchangeError, 'System error': ExchangeError, '4010': PermissionDenied, '4001': ExchangeError, '4002': ExchangeError, '30001': AuthenticationError, '30002': AuthenticationError, '30003': AuthenticationError, '30004': AuthenticationError, '30005': InvalidNonce, '30006': AuthenticationError, '30007': BadRequest, '30008': RequestTimeout, '30009': ExchangeError, '30010': AuthenticationError, '30011': PermissionDenied, '30012': AuthenticationError, '30013': AuthenticationError, '30014': DDoSProtection, '30015': AuthenticationError, '30016': ExchangeError, '30017': ExchangeError, '30018': ExchangeError, '30019': ExchangeNotAvailable, '30020': BadRequest, '30021': BadRequest, '30022': PermissionDenied, '30023': BadRequest, '30024': BadSymbol, '30025': BadRequest, '30026': DDoSProtection, '30027': AuthenticationError, '30028': PermissionDenied, '30029': AccountSuspended, '30030': ExchangeNotAvailable, '30031': BadRequest, '30032': BadSymbol, '30033': BadRequest, '30034': ExchangeError, '30035': ExchangeError, '30036': ExchangeError, '30037': ExchangeNotAvailable, '30038': OnMaintenance, '30044': RequestTimeout, '32001': AccountSuspended, '32002': PermissionDenied, '32003': CancelPending, '32004': ExchangeError, '32005': InvalidOrder, '32006': InvalidOrder, '32007': InvalidOrder, '32008': InvalidOrder, '32009': InvalidOrder, '32010': ExchangeError, '32011': ExchangeError, '32012': ExchangeError, '32013': ExchangeError, '32014': ExchangeError, '32015': ExchangeError, '32016': ExchangeError, '32017': ExchangeError, '32018': ExchangeError, '32019': ExchangeError, '32020': ExchangeError, '32021': ExchangeError, '32022': ExchangeError, '32023': ExchangeError, '32024': ExchangeError, '32025': ExchangeError, '32026': ExchangeError, '32027': ExchangeError, '32028': ExchangeError, '32029': ExchangeError, '32030': InvalidOrder, '32031': ArgumentsRequired, '32038': AuthenticationError, '32040': ExchangeError, '32044': ExchangeError, '32045': ExchangeError, '32046': ExchangeError, '32047': ExchangeError, '32048': InvalidOrder, '32049': ExchangeError, '32050': InvalidOrder, '32051': InvalidOrder, '32052': ExchangeError, '32053': ExchangeError, '32057': ExchangeError, '32054': ExchangeError, '32055': InvalidOrder, '32056': ExchangeError, '32058': ExchangeError, '32059': InvalidOrder, '32060': InvalidOrder, '32061': InvalidOrder, '32062': InvalidOrder, '32063': InvalidOrder, '32064': ExchangeError, '32065': ExchangeError, '32066': ExchangeError, '32067': ExchangeError, '32068': ExchangeError, '32069': ExchangeError, '32070': ExchangeError, '32071': ExchangeError, '32072': ExchangeError, '32073': ExchangeError, '32074': ExchangeError, '32075': ExchangeError, '32076': ExchangeError, '32077': ExchangeError, '32078': ExchangeError, '32079': ExchangeError, '32080': ExchangeError, '32083': ExchangeError, '33001': PermissionDenied, '33002': AccountSuspended, '33003': InsufficientFunds, '33004': ExchangeError, '33005': ExchangeError, '33006': ExchangeError, '33007': ExchangeError, '33008': InsufficientFunds, '33009': ExchangeError, '33010': ExchangeError, '33011': ExchangeError, '33012': ExchangeError, '33013': InvalidOrder, '33014': OrderNotFound, '33015': InvalidOrder, '33016': ExchangeError, '33017': InsufficientFunds, '33018': ExchangeError, '33020': ExchangeError, '33021': BadRequest, '33022': InvalidOrder, '33023': ExchangeError, '33024': InvalidOrder, '33025': InvalidOrder, '33026': ExchangeError, '33027': InvalidOrder, '33028': InvalidOrder, '33029': InvalidOrder, '33034': ExchangeError, '33035': ExchangeError, '33036': ExchangeError, '33037': ExchangeError, '33038': ExchangeError, '33039': ExchangeError, '33040': ExchangeError, '33041': ExchangeError, '33042': ExchangeError, '33043': ExchangeError, '33044': ExchangeError, '33045': ExchangeError, '33046': ExchangeError, '33047': ExchangeError, '33048': ExchangeError, '33049': ExchangeError, '33050': ExchangeError, '33051': ExchangeError, '33059': BadRequest, '33060': BadRequest, '33061': ExchangeError, '33062': ExchangeError, '33063': ExchangeError, '33064': ExchangeError, '33065': ExchangeError, '33085': InvalidOrder, '21009': ExchangeError, '34001': PermissionDenied, '34002': InvalidAddress, '34003': ExchangeError, '34004': ExchangeError, '34005': ExchangeError, '34006': ExchangeError, '34007': ExchangeError, '34008': InsufficientFunds, '34009': ExchangeError, '34010': ExchangeError, '34011': ExchangeError, '34012': ExchangeError, '34013': ExchangeError, '34014': ExchangeError, '34015': ExchangeError, '34016': PermissionDenied, '34017': AccountSuspended, '34018': AuthenticationError, '34019': PermissionDenied, '34020': PermissionDenied, '34021': InvalidAddress, '34022': ExchangeError, '34023': PermissionDenied, '34026': RateLimitExceeded, '34036': ExchangeError, '34037': ExchangeError, '34038': ExchangeError, '34039': ExchangeError, '35001': ExchangeError, '35002': ExchangeError, '35003': ExchangeError, '35004': ExchangeError, '35005': AuthenticationError, '35008': InvalidOrder, '35010': InvalidOrder, '35012': InvalidOrder, '35014': InvalidOrder, '35015': InvalidOrder, '35017': ExchangeError, '35019': InvalidOrder, '35020': InvalidOrder, '35021': InvalidOrder, '35022': BadRequest, '35024': BadRequest, '35025': InsufficientFunds, '35026': BadRequest, '35029': OrderNotFound, '35030': InvalidOrder, '35031': InvalidOrder, '35032': ExchangeError, '35037': ExchangeError, '35039': ExchangeError, '35040': InvalidOrder, '35044': ExchangeError, '35046': InsufficientFunds, '35047': InsufficientFunds, '35048': ExchangeError, '35049': InvalidOrder, '35050': InvalidOrder, '35052': InsufficientFunds, '35053': ExchangeError, '35055': InsufficientFunds, '35057': ExchangeError, '35058': ExchangeError, '35059': BadRequest, '35060': BadRequest, '35061': BadRequest, '35062': InvalidOrder, '35063': InvalidOrder, '35064': InvalidOrder, '35066': InvalidOrder, '35067': InvalidOrder, '35068': InvalidOrder, '35069': InvalidOrder, '35070': InvalidOrder, '35071': InvalidOrder, '35072': InvalidOrder, '35073': InvalidOrder, '35074': InvalidOrder, '35075': InvalidOrder, '35076': InvalidOrder, '35077': InvalidOrder, '35078': InvalidOrder, '35079': InvalidOrder, '35080': InvalidOrder, '35081': InvalidOrder, '35082': InvalidOrder, '35083': InvalidOrder, '35084': InvalidOrder, '35085': InvalidOrder, '35086': InvalidOrder, '35087': InvalidOrder, '35088': InvalidOrder, '35089': InvalidOrder, '35090': ExchangeError, '35091': ExchangeError, '35092': ExchangeError, '35093': ExchangeError, '35094': ExchangeError, '35095': BadRequest, '35096': ExchangeError, '35097': ExchangeError, '35098': ExchangeError, '35099': ExchangeError, '35102': RateLimitExceeded, '36001': BadRequest, '36002': BadRequest, '36005': ExchangeError, '36101': AuthenticationError, '36102': PermissionDenied, '36103': PermissionDenied, '36104': PermissionDenied, '36105': PermissionDenied, '36106': PermissionDenied, '36107': PermissionDenied, '36108': InsufficientFunds, '36109': PermissionDenied, '36201': PermissionDenied, '36202': PermissionDenied, '36203': InvalidOrder, '36204': ExchangeError, '36205': BadRequest, '36206': BadRequest, '36207': InvalidOrder, '36208': InvalidOrder, '36209': InvalidOrder, '36210': InvalidOrder, '36211': InvalidOrder, '36212': InvalidOrder, '36213': InvalidOrder, '36214': ExchangeError, '36216': OrderNotFound, '36217': InvalidOrder, '36218': InvalidOrder, '36219': InvalidOrder, '36220': InvalidOrder, '36221': InvalidOrder, '36222': InvalidOrder, '36223': InvalidOrder, '36224': InvalidOrder, '36225': InvalidOrder, '36226': InvalidOrder, '36227': InvalidOrder, '36228': InvalidOrder, '36229': InvalidOrder, '36230': InvalidOrder}, 'broad': {}}, 'precisionMode': TICK_SIZE, 'options': {'fetchOHLCV': {'type': 'Candles'}, 'createMarketBuyOrderRequiresPrice': True, 'fetchMarkets': ['spot', 'futures', 'swap', 'option'], 'defaultType': 'spot', 'auth': {'time': 'public', 'currencies': 'private', 'instruments': 'public', 'rate': 'public', '{instrument_id}/constituents': 'public'}}, 'commonCurrencies': {'AE': 'AET', 'BOX': 'DefiBox', 'HOT': 'Hydro Protocol', 'HSR': 'HC', 'MAG': 'Maggie', 'SBTC': 'Super Bitcoin', 'YOYO': 'YOYOW', 'WIN': 'WinToken'}})