ccxt 4.2.79__py2.py3-none-any.whl → 4.2.81__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

@@ -39,7 +39,13 @@ def test_ticker(exchange, skipped_properties, method, entry, symbol):
39
39
  'quoteVolume': exchange.parse_number('1.234'),
40
40
  }
41
41
  # todo: atm, many exchanges fail, so temporarily decrease stict mode
42
- empty_allowed_for = ['timestamp', 'datetime', 'open', 'high', 'low', 'close', 'last', 'ask', 'bid', 'bidVolume', 'askVolume', 'baseVolume', 'quoteVolume', 'previousClose', 'vwap', 'change', 'percentage', 'average']
42
+ empty_allowed_for = ['timestamp', 'datetime', 'open', 'high', 'low', 'close', 'last', 'baseVolume', 'quoteVolume', 'previousClose', 'vwap', 'change', 'percentage', 'average']
43
+ # trick csharp-transpiler for string
44
+ if not 'BidsAsks' in str(method):
45
+ empty_allowed_for.append('bid')
46
+ empty_allowed_for.append('ask')
47
+ empty_allowed_for.append('bidVolume')
48
+ empty_allowed_for.append('askVolume')
43
49
  test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
44
50
  test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
45
51
  log_text = test_shared_methods.log_template(exchange, method, entry)
ccxt/test/test_async.py CHANGED
@@ -129,6 +129,7 @@ class baseMainTestClass():
129
129
  response_tests = False
130
130
  ws_tests = False
131
131
  load_keys = False
132
+ skipped_settings_for_exchange = {}
132
133
  skipped_methods = {}
133
134
  check_public_tests = {}
134
135
  test_files = {}
@@ -378,7 +379,8 @@ class testMainClass(baseMainTestClass):
378
379
  # skipped tests
379
380
  skipped_file = self.root_dir_for_skips + 'skip-tests.json'
380
381
  skipped_settings = io_file_read(skipped_file)
381
- skipped_settings_for_exchange = exchange.safe_value(skipped_settings, exchange_id, {})
382
+ self.skipped_settings_for_exchange = exchange.safe_value(skipped_settings, exchange_id, {})
383
+ skipped_settings_for_exchange = self.skipped_settings_for_exchange
382
384
  # others
383
385
  timeout = exchange.safe_value(skipped_settings_for_exchange, 'timeout')
384
386
  if timeout is not None:
@@ -569,6 +571,7 @@ class testMainClass(baseMainTestClass):
569
571
  'watchOHLCV': [symbol],
570
572
  'watchTicker': [symbol],
571
573
  'watchTickers': [symbol],
574
+ 'watchBidsAsks': [symbol],
572
575
  'watchOrderBook': [symbol],
573
576
  'watchTrades': [symbol],
574
577
  }
@@ -615,26 +618,18 @@ class testMainClass(baseMainTestClass):
615
618
  result = await self.test_safe('loadMarkets', exchange, [], True)
616
619
  if not result:
617
620
  return False
618
- symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/CNY', 'BTC/USD', 'BTC/EUR', 'BTC/ETH', 'ETH/BTC', 'BTC/JPY', 'ETH/EUR', 'ETH/JPY', 'ETH/CNY', 'ETH/USD', 'LTC/CNY', 'DASH/BTC', 'DOGE/BTC', 'BTC/AUD', 'BTC/PLN', 'USD/SLL', 'BTC/RUB', 'BTC/UAH', 'LTC/BTC', 'EUR/USD']
619
- result_symbols = []
620
- exchange_specific_symbols = exchange.symbols
621
- for i in range(0, len(exchange_specific_symbols)):
622
- symbol = exchange_specific_symbols[i]
623
- if exchange.in_array(symbol, symbols):
624
- result_symbols.append(symbol)
625
- result_msg = ''
626
- result_length = len(result_symbols)
627
621
  exchange_symbols_length = len(exchange.symbols)
628
- if result_length > 0:
629
- if exchange_symbols_length > result_length:
630
- result_msg = ', '.join(result_symbols) + ' + more...'
631
- else:
632
- result_msg = ', '.join(result_symbols)
633
- dump('[INFO:MAIN] Exchange loaded', exchange_symbols_length, 'symbols', result_msg)
622
+ dump('[INFO:MAIN] Exchange loaded', exchange_symbols_length, 'symbols')
634
623
  return True
635
624
 
636
625
  def get_test_symbol(self, exchange, is_spot, symbols):
637
626
  symbol = None
627
+ preferred_spot_symbol = exchange.safe_string(self.skipped_settings_for_exchange, 'preferredSpotSymbol')
628
+ preferred_swap_symbol = exchange.safe_string(self.skipped_settings_for_exchange, 'preferredSwapSymbol')
629
+ if is_spot and preferred_spot_symbol:
630
+ return preferred_spot_symbol
631
+ elif not is_spot and preferred_swap_symbol:
632
+ return preferred_swap_symbol
638
633
  for i in range(0, len(symbols)):
639
634
  s = symbols[i]
640
635
  market = exchange.safe_value(exchange.markets, s)
@@ -669,9 +664,9 @@ class testMainClass(baseMainTestClass):
669
664
 
670
665
  def get_valid_symbol(self, exchange, spot=True):
671
666
  current_type_markets = self.get_markets_from_exchange(exchange, spot)
672
- codes = ['BTC', 'ETH', 'XRP', 'LTC', 'BCH', 'EOS', 'BNB', 'BSV', 'USDT', 'ATOM', 'BAT', 'BTG', 'DASH', 'DOGE', 'ETC', 'IOTA', 'LSK', 'MKR', 'NEO', 'PAX', 'QTUM', 'TRX', 'TUSD', 'USD', 'USDC', 'WAVES', 'XEM', 'XMR', 'ZEC', 'ZRX']
673
- spot_symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/USD', 'BTC/CNY', 'BTC/EUR', 'BTC/ETH', 'ETH/BTC', 'ETH/USD', 'ETH/USDT', 'BTC/JPY', 'LTC/BTC', 'ZRX/WETH', 'EUR/USD']
674
- swap_symbols = ['BTC/USDT:USDT', 'BTC/USDC:USDC', 'BTC/USD:USD', 'ETH/USDT:USDT', 'ETH/USD:USD', 'LTC/USDT:USDT', 'DOGE/USDT:USDT', 'ADA/USDT:USDT', 'BTC/USD:BTC', 'ETH/USD:ETH']
667
+ codes = ['BTC', 'ETH', 'XRP', 'LTC', 'BNB', 'DASH', 'DOGE', 'ETC', 'TRX', 'USDT', 'USDC', 'USD', 'EUR', 'TUSD', 'CNY', 'JPY', 'BRL']
668
+ spot_symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/USD', 'BTC/CNY', 'BTC/EUR', 'BTC/AUD', 'BTC/BRL', 'BTC/JPY', 'ETH/USDT', 'ETH/USDC', 'ETH/USD', 'ETH/CNY', 'ETH/EUR', 'ETH/AUD', 'ETH/BRL', 'ETH/JPY', 'EUR/USDT', 'EUR/USD', 'EUR/USDC', 'USDT/EUR', 'USD/EUR', 'USDC/EUR', 'BTC/ETH', 'ETH/BTC']
669
+ swap_symbols = ['BTC/USDT:USDT', 'BTC/USDC:USDC', 'BTC/USD:USD', 'ETH/USDT:USDT', 'ETH/USDC:USDC', 'ETH/USD:USD', 'BTC/USD:BTC', 'ETH/USD:ETH']
675
670
  target_symbols = spot_symbols if spot else swap_symbols
676
671
  symbol = self.get_test_symbol(exchange, spot, target_symbols)
677
672
  # if symbols wasn't found from above hardcoded list, then try to locate any symbol which has our target hardcoded 'base' code
@@ -1121,7 +1116,8 @@ class testMainClass(baseMainTestClass):
1121
1116
  # instantiate the exchange and make sure that we sink the requests to avoid an actual request
1122
1117
  exchange = self.init_offline_exchange(exchange_name)
1123
1118
  global_options = exchange.safe_dict(exchange_data, 'options', {})
1124
- exchange.options = exchange.deep_extend(exchange.options, global_options) # custom options to be used in the tests
1119
+ # exchange.options = exchange.deepExtend (exchange.options, globalOptions); # custom options to be used in the tests
1120
+ exchange.extend_exchange_options(global_options)
1125
1121
  methods = exchange.safe_value(exchange_data, 'methods', {})
1126
1122
  methods_names = list(methods.keys())
1127
1123
  for i in range(0, len(methods_names)):
@@ -1131,7 +1127,8 @@ class testMainClass(baseMainTestClass):
1131
1127
  result = results[j]
1132
1128
  old_exchange_options = exchange.options # snapshot options;
1133
1129
  test_exchange_options = exchange.safe_value(result, 'options', {})
1134
- exchange.options = exchange.deep_extend(old_exchange_options, test_exchange_options) # custom options to be used in the tests
1130
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, testExchangeOptions); # custom options to be used in the tests
1131
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, test_exchange_options))
1135
1132
  description = exchange.safe_value(result, 'description')
1136
1133
  if (test_name is not None) and (test_name != description):
1137
1134
  continue
@@ -1142,7 +1139,8 @@ class testMainClass(baseMainTestClass):
1142
1139
  skip_keys = exchange.safe_value(exchange_data, 'skipKeys', [])
1143
1140
  await self.test_method_statically(exchange, method, result, type, skip_keys)
1144
1141
  # reset options
1145
- exchange.options = exchange.deep_extend(old_exchange_options, {})
1142
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, {});
1143
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, {}))
1146
1144
  await close(exchange)
1147
1145
  return True # in c# methods that will be used with promiseAll need to return something
1148
1146
 
@@ -1150,7 +1148,8 @@ class testMainClass(baseMainTestClass):
1150
1148
  exchange = self.init_offline_exchange(exchange_name)
1151
1149
  methods = exchange.safe_value(exchange_data, 'methods', {})
1152
1150
  options = exchange.safe_value(exchange_data, 'options', {})
1153
- exchange.options = exchange.deep_extend(exchange.options, options) # custom options to be used in the tests
1151
+ # exchange.options = exchange.deepExtend (exchange.options, options); # custom options to be used in the tests
1152
+ exchange.extend_exchange_options(options)
1154
1153
  methods_names = list(methods.keys())
1155
1154
  for i in range(0, len(methods_names)):
1156
1155
  method = methods_names[i]
@@ -1160,7 +1159,8 @@ class testMainClass(baseMainTestClass):
1160
1159
  description = exchange.safe_value(result, 'description')
1161
1160
  old_exchange_options = exchange.options # snapshot options;
1162
1161
  test_exchange_options = exchange.safe_value(result, 'options', {})
1163
- exchange.options = exchange.deep_extend(old_exchange_options, test_exchange_options) # custom options to be used in the tests
1162
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, testExchangeOptions); # custom options to be used in the tests
1163
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, test_exchange_options))
1164
1164
  is_disabled = exchange.safe_bool(result, 'disabled', False)
1165
1165
  if is_disabled:
1166
1166
  continue
@@ -1175,7 +1175,8 @@ class testMainClass(baseMainTestClass):
1175
1175
  skip_keys = exchange.safe_value(exchange_data, 'skipKeys', [])
1176
1176
  await self.test_response_statically(exchange, method, skip_keys, result)
1177
1177
  # reset options
1178
- exchange.options = exchange.deep_extend(old_exchange_options, {})
1178
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, {});
1179
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, {}))
1179
1180
  await close(exchange)
1180
1181
  return True # in c# methods that will be used with promiseAll need to return something
1181
1182
 
ccxt/test/test_sync.py CHANGED
@@ -128,6 +128,7 @@ class baseMainTestClass():
128
128
  response_tests = False
129
129
  ws_tests = False
130
130
  load_keys = False
131
+ skipped_settings_for_exchange = {}
131
132
  skipped_methods = {}
132
133
  check_public_tests = {}
133
134
  test_files = {}
@@ -377,7 +378,8 @@ class testMainClass(baseMainTestClass):
377
378
  # skipped tests
378
379
  skipped_file = self.root_dir_for_skips + 'skip-tests.json'
379
380
  skipped_settings = io_file_read(skipped_file)
380
- skipped_settings_for_exchange = exchange.safe_value(skipped_settings, exchange_id, {})
381
+ self.skipped_settings_for_exchange = exchange.safe_value(skipped_settings, exchange_id, {})
382
+ skipped_settings_for_exchange = self.skipped_settings_for_exchange
381
383
  # others
382
384
  timeout = exchange.safe_value(skipped_settings_for_exchange, 'timeout')
383
385
  if timeout is not None:
@@ -568,6 +570,7 @@ class testMainClass(baseMainTestClass):
568
570
  'watchOHLCV': [symbol],
569
571
  'watchTicker': [symbol],
570
572
  'watchTickers': [symbol],
573
+ 'watchBidsAsks': [symbol],
571
574
  'watchOrderBook': [symbol],
572
575
  'watchTrades': [symbol],
573
576
  }
@@ -614,26 +617,18 @@ class testMainClass(baseMainTestClass):
614
617
  result = self.test_safe('loadMarkets', exchange, [], True)
615
618
  if not result:
616
619
  return False
617
- symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/CNY', 'BTC/USD', 'BTC/EUR', 'BTC/ETH', 'ETH/BTC', 'BTC/JPY', 'ETH/EUR', 'ETH/JPY', 'ETH/CNY', 'ETH/USD', 'LTC/CNY', 'DASH/BTC', 'DOGE/BTC', 'BTC/AUD', 'BTC/PLN', 'USD/SLL', 'BTC/RUB', 'BTC/UAH', 'LTC/BTC', 'EUR/USD']
618
- result_symbols = []
619
- exchange_specific_symbols = exchange.symbols
620
- for i in range(0, len(exchange_specific_symbols)):
621
- symbol = exchange_specific_symbols[i]
622
- if exchange.in_array(symbol, symbols):
623
- result_symbols.append(symbol)
624
- result_msg = ''
625
- result_length = len(result_symbols)
626
620
  exchange_symbols_length = len(exchange.symbols)
627
- if result_length > 0:
628
- if exchange_symbols_length > result_length:
629
- result_msg = ', '.join(result_symbols) + ' + more...'
630
- else:
631
- result_msg = ', '.join(result_symbols)
632
- dump('[INFO:MAIN] Exchange loaded', exchange_symbols_length, 'symbols', result_msg)
621
+ dump('[INFO:MAIN] Exchange loaded', exchange_symbols_length, 'symbols')
633
622
  return True
634
623
 
635
624
  def get_test_symbol(self, exchange, is_spot, symbols):
636
625
  symbol = None
626
+ preferred_spot_symbol = exchange.safe_string(self.skipped_settings_for_exchange, 'preferredSpotSymbol')
627
+ preferred_swap_symbol = exchange.safe_string(self.skipped_settings_for_exchange, 'preferredSwapSymbol')
628
+ if is_spot and preferred_spot_symbol:
629
+ return preferred_spot_symbol
630
+ elif not is_spot and preferred_swap_symbol:
631
+ return preferred_swap_symbol
637
632
  for i in range(0, len(symbols)):
638
633
  s = symbols[i]
639
634
  market = exchange.safe_value(exchange.markets, s)
@@ -668,9 +663,9 @@ class testMainClass(baseMainTestClass):
668
663
 
669
664
  def get_valid_symbol(self, exchange, spot=True):
670
665
  current_type_markets = self.get_markets_from_exchange(exchange, spot)
671
- codes = ['BTC', 'ETH', 'XRP', 'LTC', 'BCH', 'EOS', 'BNB', 'BSV', 'USDT', 'ATOM', 'BAT', 'BTG', 'DASH', 'DOGE', 'ETC', 'IOTA', 'LSK', 'MKR', 'NEO', 'PAX', 'QTUM', 'TRX', 'TUSD', 'USD', 'USDC', 'WAVES', 'XEM', 'XMR', 'ZEC', 'ZRX']
672
- spot_symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/USD', 'BTC/CNY', 'BTC/EUR', 'BTC/ETH', 'ETH/BTC', 'ETH/USD', 'ETH/USDT', 'BTC/JPY', 'LTC/BTC', 'ZRX/WETH', 'EUR/USD']
673
- swap_symbols = ['BTC/USDT:USDT', 'BTC/USDC:USDC', 'BTC/USD:USD', 'ETH/USDT:USDT', 'ETH/USD:USD', 'LTC/USDT:USDT', 'DOGE/USDT:USDT', 'ADA/USDT:USDT', 'BTC/USD:BTC', 'ETH/USD:ETH']
666
+ codes = ['BTC', 'ETH', 'XRP', 'LTC', 'BNB', 'DASH', 'DOGE', 'ETC', 'TRX', 'USDT', 'USDC', 'USD', 'EUR', 'TUSD', 'CNY', 'JPY', 'BRL']
667
+ spot_symbols = ['BTC/USDT', 'BTC/USDC', 'BTC/USD', 'BTC/CNY', 'BTC/EUR', 'BTC/AUD', 'BTC/BRL', 'BTC/JPY', 'ETH/USDT', 'ETH/USDC', 'ETH/USD', 'ETH/CNY', 'ETH/EUR', 'ETH/AUD', 'ETH/BRL', 'ETH/JPY', 'EUR/USDT', 'EUR/USD', 'EUR/USDC', 'USDT/EUR', 'USD/EUR', 'USDC/EUR', 'BTC/ETH', 'ETH/BTC']
668
+ swap_symbols = ['BTC/USDT:USDT', 'BTC/USDC:USDC', 'BTC/USD:USD', 'ETH/USDT:USDT', 'ETH/USDC:USDC', 'ETH/USD:USD', 'BTC/USD:BTC', 'ETH/USD:ETH']
674
669
  target_symbols = spot_symbols if spot else swap_symbols
675
670
  symbol = self.get_test_symbol(exchange, spot, target_symbols)
676
671
  # if symbols wasn't found from above hardcoded list, then try to locate any symbol which has our target hardcoded 'base' code
@@ -1120,7 +1115,8 @@ class testMainClass(baseMainTestClass):
1120
1115
  # instantiate the exchange and make sure that we sink the requests to avoid an actual request
1121
1116
  exchange = self.init_offline_exchange(exchange_name)
1122
1117
  global_options = exchange.safe_dict(exchange_data, 'options', {})
1123
- exchange.options = exchange.deep_extend(exchange.options, global_options) # custom options to be used in the tests
1118
+ # exchange.options = exchange.deepExtend (exchange.options, globalOptions); # custom options to be used in the tests
1119
+ exchange.extend_exchange_options(global_options)
1124
1120
  methods = exchange.safe_value(exchange_data, 'methods', {})
1125
1121
  methods_names = list(methods.keys())
1126
1122
  for i in range(0, len(methods_names)):
@@ -1130,7 +1126,8 @@ class testMainClass(baseMainTestClass):
1130
1126
  result = results[j]
1131
1127
  old_exchange_options = exchange.options # snapshot options;
1132
1128
  test_exchange_options = exchange.safe_value(result, 'options', {})
1133
- exchange.options = exchange.deep_extend(old_exchange_options, test_exchange_options) # custom options to be used in the tests
1129
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, testExchangeOptions); # custom options to be used in the tests
1130
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, test_exchange_options))
1134
1131
  description = exchange.safe_value(result, 'description')
1135
1132
  if (test_name is not None) and (test_name != description):
1136
1133
  continue
@@ -1141,7 +1138,8 @@ class testMainClass(baseMainTestClass):
1141
1138
  skip_keys = exchange.safe_value(exchange_data, 'skipKeys', [])
1142
1139
  self.test_method_statically(exchange, method, result, type, skip_keys)
1143
1140
  # reset options
1144
- exchange.options = exchange.deep_extend(old_exchange_options, {})
1141
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, {});
1142
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, {}))
1145
1143
  close(exchange)
1146
1144
  return True # in c# methods that will be used with promiseAll need to return something
1147
1145
 
@@ -1149,7 +1147,8 @@ class testMainClass(baseMainTestClass):
1149
1147
  exchange = self.init_offline_exchange(exchange_name)
1150
1148
  methods = exchange.safe_value(exchange_data, 'methods', {})
1151
1149
  options = exchange.safe_value(exchange_data, 'options', {})
1152
- exchange.options = exchange.deep_extend(exchange.options, options) # custom options to be used in the tests
1150
+ # exchange.options = exchange.deepExtend (exchange.options, options); # custom options to be used in the tests
1151
+ exchange.extend_exchange_options(options)
1153
1152
  methods_names = list(methods.keys())
1154
1153
  for i in range(0, len(methods_names)):
1155
1154
  method = methods_names[i]
@@ -1159,7 +1158,8 @@ class testMainClass(baseMainTestClass):
1159
1158
  description = exchange.safe_value(result, 'description')
1160
1159
  old_exchange_options = exchange.options # snapshot options;
1161
1160
  test_exchange_options = exchange.safe_value(result, 'options', {})
1162
- exchange.options = exchange.deep_extend(old_exchange_options, test_exchange_options) # custom options to be used in the tests
1161
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, testExchangeOptions); # custom options to be used in the tests
1162
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, test_exchange_options))
1163
1163
  is_disabled = exchange.safe_bool(result, 'disabled', False)
1164
1164
  if is_disabled:
1165
1165
  continue
@@ -1174,7 +1174,8 @@ class testMainClass(baseMainTestClass):
1174
1174
  skip_keys = exchange.safe_value(exchange_data, 'skipKeys', [])
1175
1175
  self.test_response_statically(exchange, method, skip_keys, result)
1176
1176
  # reset options
1177
- exchange.options = exchange.deep_extend(old_exchange_options, {})
1177
+ # exchange.options = exchange.deepExtend (oldExchangeOptions, {});
1178
+ exchange.extend_exchange_options(exchange.deep_extend(old_exchange_options, {}))
1178
1179
  close(exchange)
1179
1180
  return True # in c# methods that will be used with promiseAll need to return something
1180
1181
 
ccxt/upbit.py CHANGED
@@ -85,6 +85,7 @@ class upbit(Exchange, ImplicitAPI):
85
85
  '1m': 'minutes',
86
86
  '3m': 'minutes',
87
87
  '5m': 'minutes',
88
+ '10m': 'minutes',
88
89
  '15m': 'minutes',
89
90
  '30m': 'minutes',
90
91
  '1h': 'minutes',
@@ -114,6 +115,7 @@ class upbit(Exchange, ImplicitAPI):
114
115
  'candles/minutes/1',
115
116
  'candles/minutes/3',
116
117
  'candles/minutes/5',
118
+ 'candles/minutes/10',
117
119
  'candles/minutes/15',
118
120
  'candles/minutes/30',
119
121
  'candles/minutes/60',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.79
3
+ Version: 4.2.81
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
262
262
 
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.79/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.2.79/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.81/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.2.81/dist/ccxt.browser.js
267
267
 
268
268
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
269
269
 
270
270
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.79/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.81/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=m9zKT0fml9swQHeS76Mh5TPpHEnOQjqfl9AFo7K82bo,15656
1
+ ccxt/__init__.py,sha256=vtDVaVFHBj3vbCHy7CTmndgVtWhnlKHGMSfD3RZJJHY,15656
2
2
  ccxt/ace.py,sha256=nK9SbduDWoKzecwoSK9VYwReNMscvJ_JWo5IZvFbcQo,41409
3
3
  ccxt/alpaca.py,sha256=dCp9cDDKAqaaOroIPfv3sMBsMcUM7TsSKNSYZ3LLTQg,46892
4
4
  ccxt/ascendex.py,sha256=Ma2iM3L3kyXf6d_iqushKWfN1BtunXcrDe-_BENaw5U,150809
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=I1ttsW3Iu0hGrb8e0_WMjyzb6utPdv8bV6qK6GtixIY,92155
7
- ccxt/binance.py,sha256=m-vmsN22thfQBn-bEXQ3r7c7EY3Ij1X8dVk3ohTHzh4,587268
7
+ ccxt/binance.py,sha256=RBlHa60MFkF8xLHp0TzMIc2B6yXJVzL0uQRjd1wn5m8,590756
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
@@ -35,7 +35,7 @@ ccxt/btcalpha.py,sha256=W8vwhmpLK72hiMJtEfpxHeNeWF6pX9Dvod3lhNvdNps,36534
35
35
  ccxt/btcbox.py,sha256=XBgl9nPQUr0eL_El9-K4AuFODEXbesU6F0euVbvUs04,23341
36
36
  ccxt/btcmarkets.py,sha256=YEmwNq-K-YAgLqNKagyQYKKqIJzpSCKzxXyUxDKSx8I,51302
37
37
  ccxt/btcturk.py,sha256=9ogBoc1AHHvl0sosm-q0rdHvOmE9zFNCdSTcSHl7VSI,36417
38
- ccxt/bybit.py,sha256=rDKzRdrZ1pi3QOYOncY2C64gvpLCXNRaLbZo1Rb9DM8,392371
38
+ ccxt/bybit.py,sha256=CHe5tm-6Bw3hrsyZ24a1zQig-dTXLsAlcufbhTbdKGk,399904
39
39
  ccxt/cex.py,sha256=1lEHtvkhsokdUwcMsA9K1tOJtzdnjf5ovYOmWQGL8-8,69583
40
40
  ccxt/coinbase.py,sha256=oze3sKjBPuVqv2I1pbmGkPbiI9en-Uc2qqV1IuAYtf8,177031
41
41
  ccxt/coinbaseinternational.py,sha256=8Ejile-YQdH8YQvz48p_93A3NXZw_bI7-DhHV-Aqkag,87033
@@ -51,12 +51,12 @@ ccxt/coinspot.py,sha256=8aCFFIp8jB5NDVQLwbZdS5BxW4ML3TqTFaLqQKikkl0,23465
51
51
  ccxt/cryptocom.py,sha256=cEqvh5Z19n1f-bAhfIdcB8-aFf2cepPpgcB5sgLMHnc,128088
52
52
  ccxt/currencycom.py,sha256=sk1-z8ZYEpastKUoi-iGuK_Z8HNhrafU-2QmKFZyQGk,86679
53
53
  ccxt/delta.py,sha256=E_wCRMh_rYURHG20xCHp88LrZQJlSgTYjSs13n0nzdU,144318
54
- ccxt/deribit.py,sha256=BAa1F_LHdZhp56znlxNhQM04ruZl-e5RrlwhOo4TH08,153404
54
+ ccxt/deribit.py,sha256=5LjRVie7LjnbLIsSyYMK3qJ39aM11gkZchmdKbrImtI,160080
55
55
  ccxt/digifinex.py,sha256=v5Kk702BABJj-ilooFZBSWYPW_IYLXnF1dy-ODzbQGs,169358
56
56
  ccxt/exmo.py,sha256=ln3Sd9brSMAIxtAqMOyD-Rq5h4TPeYAMAlNpXTAijvE,114222
57
57
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=Ht6-lWEvR8qictfi8fK188rU1dLrX1qA3X_W2pVQS_4,306286
59
+ ccxt/gate.py,sha256=vVar0U4Xy7PsJ3cHUhM_R1llN50C4Zx2UYaUiwztFoE,314396
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=SWw8Rm19sB48DoQbrSnK6gLQDLS4ZD2gviR60kpuA8k,79373
62
62
  ccxt/hitbtc.py,sha256=sjDwsBjyuVRp-0bbPgdhQWmMX3p1-BIH22Rh7rrqWmE,151471
@@ -65,7 +65,7 @@ ccxt/hollaex.py,sha256=biaF8aAMAqQQU2MHySgfipZHYvyq5Qhjd7JlSyETtPI,75830
65
65
  ccxt/htx.py,sha256=K6qHgIxPBqfEKTzE-U6_ZLKu6Rmi8NHU5xjbjTyvPHQ,418804
66
66
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
67
67
  ccxt/huobijp.py,sha256=0AcNDNAnWf-t9yFIE2FTVHm0xaBoBzX4gGO5dSJaElk,87907
68
- ccxt/hyperliquid.py,sha256=y3fcYDYU7PtsqSy7QF5fltKao7lHyDLnUAw26Pm3ORI,81293
68
+ ccxt/hyperliquid.py,sha256=JS7RXpyhal00BR5cQG0kzkyZ0ZTWhoHCRyRspUTyKU4,83029
69
69
  ccxt/idex.py,sha256=gpkfFnVxZUnYGaT--peh4IF1iB-HkoxknA6rJMq_3kk,72706
70
70
  ccxt/independentreserve.py,sha256=m8UP6mnYrl48623Y_tC6F0lZRx2rwTFmb-JZplnfzvA,31982
71
71
  ccxt/indodax.py,sha256=Su32yUkKr3OZlRYK3NcITfMipvErSjvSBgzO2Ljobdw,51765
@@ -79,12 +79,12 @@ ccxt/lbank.py,sha256=xP4TmRFZcYWcM51NSq45PPU68mACYlObJMXihJ4ZRYI,114925
79
79
  ccxt/luno.py,sha256=zGTeEBTqOVVPBmKYobOr9hLqvSNwcS8nhlF6K8UNzIc,45524
80
80
  ccxt/lykke.py,sha256=entIK-0anwAsK7pz5BMxrV5NoL3K7zPQRrJSjF7_TFo,50787
81
81
  ccxt/mercado.py,sha256=-R_dYN7-XgOyTXHk_W-6ZLtFTY9-f9VudkO9FvCXbvY,35172
82
- ccxt/mexc.py,sha256=uFUPwNICAE4iuhnTfB4qhFbpPnyloDosxHhbzgXnVvM,234112
82
+ ccxt/mexc.py,sha256=YqFBSNKIj6zy17tTkwpm_1o4zpnj_BJrczuKrhTKjKE,234225
83
83
  ccxt/ndax.py,sha256=iHuUDxE3FBgfhwaDhCQ1X7QMQjXDl91YF2MFDxUz9dk,108327
84
84
  ccxt/novadax.py,sha256=bxCFcrWsntHJKmuODno4FzGVP_85joYW5Y9QEKsfFvM,64098
85
85
  ccxt/oceanex.py,sha256=G_7y2JVDAIKa8fMebx55Qq4EIYkmhWY3SoGy_pmgSd4,37811
86
86
  ccxt/okcoin.py,sha256=wmV93bnhpzJEOrOVpP92VCBZ_OulWrqJj7423pa_CHY,151013
87
- ccxt/okx.py,sha256=rBJKHi8BjWvnCQ8mfFSjRE26j7spedtQfVziqFI0D8E,338461
87
+ ccxt/okx.py,sha256=42wKyo-sGYoje3jOQCKXwtyL3ir4HMz3P8YLmxL64iw,337640
88
88
  ccxt/onetrading.py,sha256=WQfDptspbWO-GXenGyJaJ8OWUWymlvKKyCXHYmCVhZ4,87891
89
89
  ccxt/p2b.py,sha256=l9zO6BqQdu_he6-TJl9zAO3HQJp_q3c6sr-eMO8Awm0,54065
90
90
  ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
@@ -95,7 +95,7 @@ ccxt/probit.py,sha256=Zm4jf39nn1WI1Lj4RZRwlwUWaR2Vzyfb8rkFifWmMVI,76187
95
95
  ccxt/timex.py,sha256=C0LhnFy0kZ4fHf0nl1qdd1eP_jD7zxjR83NuEWHvQvY,70971
96
96
  ccxt/tokocrypto.py,sha256=ItoDqo02WEz8bVPue29SvzXqfI3_kJ6vx9f-LWOPhjI,122995
97
97
  ccxt/tradeogre.py,sha256=pydYI9R-ZuWQFUNrU8ayK5rgONKaWXrMJRGCgnOjAdc,23721
98
- ccxt/upbit.py,sha256=-dCg1HlRp7uApjXCdSQtsn-rDCT2v-MTFAz13q6EYPU,81460
98
+ ccxt/upbit.py,sha256=KGqEgonaOJV4iMPW5no6P-WXvGP1vFTD4qJZgeXdQmU,81540
99
99
  ccxt/wavesexchange.py,sha256=xzzj9Nzhx7vXmzQj0sBmTQHu1B3p1OsiRb0VwzgHVmg,113387
100
100
  ccxt/wazirx.py,sha256=yNckhS5vlWVo0BeJUpmId2G3dSeaZ91x66K2IagwDcs,51138
101
101
  ccxt/whitebit.py,sha256=p6etPh1ekrh3XTFe18hNtuVyYow3nui4lo9jbtbW7yw,100869
@@ -199,7 +199,7 @@ ccxt/abstract/probit.py,sha256=PxQkrvv3EQ2TvOxJmc_mAF_aH8xFFw6pZaVVjjUo5_4,1969
199
199
  ccxt/abstract/timex.py,sha256=9b0CDsyjm8XrYZmhUMB1dTHUmyE9YrsZTCZrz1UTt6E,5875
200
200
  ccxt/abstract/tokocrypto.py,sha256=OF5UW4ch_Lf3-avOPgd4AD4CVrOUDUfUpSMCmxhNHlk,4094
201
201
  ccxt/abstract/tradeogre.py,sha256=sIdA_22RHztwsIeznysBPtvta5V_mQwUXeYK6OyUJqQ,1372
202
- ccxt/abstract/upbit.py,sha256=L55L1lsLF8h1geUf2L-LmRpK9RovuvvTc4OYg_VHVmo,3463
202
+ ccxt/abstract/upbit.py,sha256=fPIEwrzoNk01aQbxhuRveTFHHKGBfAweOn4Uv8Ru0UM,3576
203
203
  ccxt/abstract/wavesexchange.py,sha256=8LIgZiPixoaUFPKGSWJpjI1BYXVqeQh9NLcjfXciZMc,19631
204
204
  ccxt/abstract/wazirx.py,sha256=UfQvsyKwf4kImpkPlxdnoWDq0iUT5t1kSa2iDr_XkDw,2782
205
205
  ccxt/abstract/whitebit.py,sha256=IaK-PxBd3rBoE2m9EExB4rGaqovubRHPHOATUUMbJ9o,8029
@@ -207,13 +207,13 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
207
207
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
208
208
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
209
209
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
210
- ccxt/async_support/__init__.py,sha256=CXNvWSJP1d-HcBYQb2oHfe30wbp3hAMhPlMMFJgUfvc,15409
210
+ ccxt/async_support/__init__.py,sha256=F0syLNn4FSuVlTEbaqKsSDu9TNayXeMcedLQPSmkWpU,15409
211
211
  ccxt/async_support/ace.py,sha256=MGP2VoA2plRgcW8ZBBXAAUg0NSOXlWtwbzYr00DFMaI,41633
212
212
  ccxt/async_support/alpaca.py,sha256=-vgtpCEqQWs-k7tA0PObflNKa7pM1HqQYYOMnCS9r24,47104
213
213
  ccxt/async_support/ascendex.py,sha256=K_mqPMdT9Q1oS8CRtoVYjlN4rbp86glU4sPQGFi4W6U,151597
214
214
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
215
215
  ccxt/async_support/bigone.py,sha256=9_Xs69EbjqmchKlewEZh7mMpz1RYGNzAxiEMKANtgU8,92609
216
- ccxt/async_support/binance.py,sha256=WoxKOisddS6RxtlxQ8pHAblfysnBDJfzohZ9XW4s9Ws,589786
216
+ ccxt/async_support/binance.py,sha256=y29nEjI-shjpYEM-wN-r7Kz2xHmIT_cMSHFZ7BJ1O8w,593292
217
217
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
218
218
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
219
219
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
@@ -244,7 +244,7 @@ ccxt/async_support/btcalpha.py,sha256=HWMJJ7XvZJKE_2-c0ReQQlKO2piZWDpu1q3QukvmLu
244
244
  ccxt/async_support/btcbox.py,sha256=pT_fg3eVRk4Qi2ymTyxozHBz4FZs0KcCrU3fmZ2L_r4,23535
245
245
  ccxt/async_support/btcmarkets.py,sha256=fo-pKVLZLrtviYJCNDBCqYkK-1V5_1zqZtMMJuYIrEY,51652
246
246
  ccxt/async_support/btcturk.py,sha256=srhsQoz0K0R0lCM6eNiP6tyMBrOxNlBxnhcr1B2sHpY,36635
247
- ccxt/async_support/bybit.py,sha256=7uP43b3jlVWn1fWqZDl3j_AW_jmKiv-tCn9ojP2ayok,394079
247
+ ccxt/async_support/bybit.py,sha256=F_eKwyOW_LIcMLGPjjBP47VX4kh-J-ETS-gyzKRZqRI,401648
248
248
  ccxt/async_support/cex.py,sha256=CaauzTM2uCeOKKiR1XkkrIOsEzRiDuEw0dsPJAjzmVc,69933
249
249
  ccxt/async_support/coinbase.py,sha256=1LCO0zixD5EbQh3qTUEXlvyzr3VwwJ8Ax9Mw-qA64EU,177988
250
250
  ccxt/async_support/coinbaseinternational.py,sha256=lfkw-ZPfs66UbIyDOtUIOli1K2tvCc30WccO74JBgW4,87587
@@ -260,12 +260,12 @@ ccxt/async_support/coinspot.py,sha256=E0cj4OPK9nV43UzMIs88Y_bXtEzW49oeFP50Mj7wyr
260
260
  ccxt/async_support/cryptocom.py,sha256=kgC23ELiN77g0f1n3nuMEqhFYeOpz9K8RgHUZkXG8LI,128642
261
261
  ccxt/async_support/currencycom.py,sha256=DtKDSNV96umQDTf0Mixlls6Gq0LIifZFpCpu9EHPBUg,87101
262
262
  ccxt/async_support/delta.py,sha256=MVqiamG138Bk3D7C_7OLlOl4BzeBF8IeKH3HbyT7IyY,144908
263
- ccxt/async_support/deribit.py,sha256=SDze0YN7FyZ3NV931j9IgaHOE0GdodKTYkvWahPrric,154132
263
+ ccxt/async_support/deribit.py,sha256=heKhRntrSJypWb3XJ-ieeVe-oVwmzcXB5kgogROgGNQ,160844
264
264
  ccxt/async_support/digifinex.py,sha256=1NWewU2Uzm3ILr2kSlPvpfo0xIcQYE-sOx7YTlqhxL0,170328
265
265
  ccxt/async_support/exmo.py,sha256=fOIqQBiFW6U9hoct1K-vTZZ2vVi37SPcQ3Z5_WJxk6Q,114854
266
266
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
267
267
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
268
- ccxt/async_support/gate.py,sha256=IS4FmY04n1pUNPWNB5jfJts8xMBXh-kYuYWOT-UJN4I,307904
268
+ ccxt/async_support/gate.py,sha256=pmxZZg7WpSwJEtis6efsg7eByO41Bv_NOu39qwJWQUQ,316050
269
269
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
270
270
  ccxt/async_support/gemini.py,sha256=PPnLwDTyKdQS7LborOZlVymqPNzYqKnj9yC988zDqxU,79886
271
271
  ccxt/async_support/hitbtc.py,sha256=W5zLBFQlglCZVrQ0WBbbATD12aOODoowxcT2hMa2k1o,152517
@@ -274,7 +274,7 @@ ccxt/async_support/hollaex.py,sha256=LZ41Smk-7_s9XCOhTc0n4oG03ZeInCw-N_vEwLcETfA
274
274
  ccxt/async_support/htx.py,sha256=r5QKMwj6jJj9c1qs4fME3Jk22Uu7ZSd0UbxRLfaV6Vw,421142
275
275
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
276
276
  ccxt/async_support/huobijp.py,sha256=HkXnX91fcHVQAfSknYmfgasEhVkwS0tcbMHCjXFD0e4,88407
277
- ccxt/async_support/hyperliquid.py,sha256=3PoRC9zpQTKa9h7PlV3vqPiPC4ZuloCAbl8b25sKqMs,81715
277
+ ccxt/async_support/hyperliquid.py,sha256=gouETtgBBxxZ3iKU6DmoZjREAoVzD7KwsmN9R8nxefM,83451
278
278
  ccxt/async_support/idex.py,sha256=4CNRYJX12rpfoqlHE2Nvm2ZL56P7F2cWdZ6KHiA1zlQ,73182
279
279
  ccxt/async_support/independentreserve.py,sha256=fEkWmaw4LZx3n0MtqHLJpgmWosfL3FiKd3dN5_ZzxTI,32242
280
280
  ccxt/async_support/indodax.py,sha256=_eQVgwmPSfIvpPOW-1P_inVvOWK1g4rTXVPuqHr_YUE,52073
@@ -288,12 +288,12 @@ ccxt/async_support/lbank.py,sha256=cDCpWGT0PSG8NeX7hX85iF47BAN_fn5gaD_1VRgbLF0,1
288
288
  ccxt/async_support/luno.py,sha256=5CvASg2bhD2kryipy-5jL6bVq4ytVjBm0bT_q2PQbp8,45862
289
289
  ccxt/async_support/lykke.py,sha256=Ih2EJM-DmsG1lJFpYtKq6rOWvkzpXMtvfYpqAMniSzA,51101
290
290
  ccxt/async_support/mercado.py,sha256=qEG7L6n2bpVx-Idy4Qke8NAEXoaoD2XJd_Rkl31iNwk,35414
291
- ccxt/async_support/mexc.py,sha256=T5BOG1qq3q1lCG1L9fQf892aFRihYKLS_TdKDoHAR9I,235272
291
+ ccxt/async_support/mexc.py,sha256=Ri8NkBNQFjwXdvgFhyVnOoN1YkVcYTGcux6pVAtTwpo,235385
292
292
  ccxt/async_support/ndax.py,sha256=9hzPCmwrYVJqtUe6oFrGz9dYe8oRyp1F_7O4QunmYZQ,108851
293
293
  ccxt/async_support/novadax.py,sha256=bYUoEjRpvRCzFH25NNircGl36qB8eN2cwxc5qMtxJMs,64466
294
294
  ccxt/async_support/oceanex.py,sha256=LsNS6IIUDJd_KnxmUT5Ub8RLwDQhFqkfyuDr8uV65A8,38131
295
295
  ccxt/async_support/okcoin.py,sha256=z3t4nyfNxtyLY-l_hCqy0oLIsuxIqIBQKOLNjfnhA5I,151537
296
- ccxt/async_support/okx.py,sha256=V_q4haclKpyp_6vypE4ZINIl7KCK19lOG4GRXYZLytI,339844
296
+ ccxt/async_support/okx.py,sha256=FGIhSS3DRpd3MJHkPDB5-ppH--fimv9aKPBo7kSAqGY,339005
297
297
  ccxt/async_support/onetrading.py,sha256=zi0oFJLn0y4O0nxls-A1hLLokJ3C9Wnvarm3iCxPKhg,88343
298
298
  ccxt/async_support/p2b.py,sha256=F8BN8aVQGRTAfQMqAMdO9kpbHG8XB1ki8PbHkpMYtL8,54307
299
299
  ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM,24391
@@ -304,7 +304,7 @@ ccxt/async_support/probit.py,sha256=qz6ap6X466l5GbPHnFXbWr9fagC7guVLiEwpi4clRDo,
304
304
  ccxt/async_support/timex.py,sha256=KUxkXT5Xm6aa3g7XtIBvU3Gbu_Gf8eA6RL-zQgnYhKM,71333
305
305
  ccxt/async_support/tokocrypto.py,sha256=u3nWe2QcU1Csh0FEBgP6XKdlDkou7LyeQmcTS_end80,123357
306
306
  ccxt/async_support/tradeogre.py,sha256=bMIF3kC-LTmZ1h5HrCzYQA9xZJW-yhDSIFlBkPoUGA8,23915
307
- ccxt/async_support/upbit.py,sha256=Ab7Hm3e2GJDTOhmATvViyIWVSotU1G3S7ypWqsDvrL0,81942
307
+ ccxt/async_support/upbit.py,sha256=yDjNR_nqg-SZtLOlfWRAdPfx_u_BOf9YRN9yyWyh8BQ,82022
308
308
  ccxt/async_support/wavesexchange.py,sha256=6NqGSNhjz3JGovH_84nQ_cSGOO7DftFaVuS0PRr99Oo,113937
309
309
  ccxt/async_support/wazirx.py,sha256=jzK6x7b4-vumABdUurz5UEN1zXtg97j1ctt9oHSeRQM,51440
310
310
  ccxt/async_support/whitebit.py,sha256=vh0Be5Hb5SNK5Vq2Eu49HqJruhjsr1_PXZJ6dG0mYMQ,101417
@@ -313,7 +313,7 @@ ccxt/async_support/yobit.py,sha256=ZyQx9X9CE7cn5d3XB0sdieQyrgNLlFDe6LoVP8ckmzg,5
313
313
  ccxt/async_support/zaif.py,sha256=bbY7Sjnc8LsOcqwhipxx2AVOWBz-N7jjiftmksTOtTM,28119
314
314
  ccxt/async_support/zonda.py,sha256=5msJR5KAMz4MiUBJ_4QvQ8uRQWAYj5uf9AdsDyyRgtE,80766
315
315
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
316
- ccxt/async_support/base/exchange.py,sha256=Zp7joIotvxYLKh1anZ9vC5pHPrPJADwE_DU280ElOtM,91281
316
+ ccxt/async_support/base/exchange.py,sha256=O82yhgki2lWSiq18je8LHP3qk-Y7HgjG7_es6GcvvkU,91714
317
317
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
318
318
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
319
319
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
@@ -327,14 +327,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
327
327
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
328
328
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
329
329
  ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
330
- ccxt/base/exchange.py,sha256=YCrSSN0PI8YcsMtlkFQab6oPyApdUzmYJnvD67fqldg,248352
330
+ ccxt/base/exchange.py,sha256=FxQhEuiqMtMLNBffesTSOZwwZgebzUUBRKdh6lphwzU,249730
331
331
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
332
- ccxt/base/types.py,sha256=Pd0jZXOo29pfZ4VK4E5rfsUf1JPf336OGXLPlf6Qe_w,6404
333
- ccxt/pro/__init__.py,sha256=Kj0yTWpcUqlVI1ZqsoM1xJurX0vr23PiNhaCqDthoWo,6897
332
+ ccxt/base/types.py,sha256=6J3Dzo0NBbn-5tCRQpfeRkLDzH1loScrDjP7xRDz6gI,6842
333
+ ccxt/pro/__init__.py,sha256=MsiG8mPJ8Oe-vjCsGalUKSC0bhSy4nlScbqPlwsgkzM,6897
334
334
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
335
335
  ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
336
336
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
337
- ccxt/pro/binance.py,sha256=E-MOsVPrMElgYy909I5vukpjrBikQ_jlaH59QxdVRPo,134029
337
+ ccxt/pro/binance.py,sha256=fDM9iBZHHaGk7u4061tFy0o4Q9sWVJagO4jC2DqzglA,134162
338
338
  ccxt/pro/binancecoinm.py,sha256=s_evAyeT23VqscMRuSjrCK2CSaNsP-oc8A8noSuaLwQ,976
339
339
  ccxt/pro/binanceus.py,sha256=mpvmzc7kK3cGShM5EOvadOvwlj1xWsWzX9fIapuq2eQ,2321
340
340
  ccxt/pro/binanceusdm.py,sha256=S0eT662O2ReplsihWk42nhJWqw1XsODpeDQa9eFVVt8,1357
@@ -345,7 +345,7 @@ ccxt/pro/bitfinex2.py,sha256=zIFXJNjzHSUxbKm8DUAstcoDTg9IZ3LoF5uJYL0H7lg,42744
345
345
  ccxt/pro/bitget.py,sha256=LMWTlRkNiwFxyT3f05ikaX3oSvR5JOJSAveETtZntko,71724
346
346
  ccxt/pro/bitmart.py,sha256=KF45-NuljFoQKbDRYfWDQEZ9FTkfahVxOQKbuCSvhfw,62382
347
347
  ccxt/pro/bitmex.py,sha256=DAk_cbsDGWw8aTijphqtyqXNVNXRVpXCoyb_1zZPk-8,67893
348
- ccxt/pro/bitopro.py,sha256=QtM5bK7IY8Lh-p5Y8AJPPNF7YcKstzgegA_JgbZe-kc,18669
348
+ ccxt/pro/bitopro.py,sha256=eRtfFh8Xv9VO0ebaEDCOCZ7LsvxYcfAKdIAvMh1ihLU,18724
349
349
  ccxt/pro/bitpanda.py,sha256=ELrhfFKN9YJJdmm9wBf-vpk6WsXGWGf-SyJdqm-E_Lg,415
350
350
  ccxt/pro/bitrue.py,sha256=gPN1lVaDZ4IBYGhaS-1WCkcNQ5__RMbtn2dC2sKZUI4,16448
351
351
  ccxt/pro/bitstamp.py,sha256=LLxCbMr3VIpqqH5iHvJHPuLdWB3RwAkO6khgsE608Sk,20886
@@ -365,7 +365,7 @@ ccxt/pro/deribit.py,sha256=IutkVY1AzcTszpbbhNV1dLF3DUr3zGXxyHhWQVJ96m0,41035
365
365
  ccxt/pro/exmo.py,sha256=gLCAObkmAyL_4BTRnftfDTejsW3-isi18ppKIipidyo,24527
366
366
  ccxt/pro/gate.py,sha256=ZxG65LlbK4zk9PO6g_Tt1lZ1KN_gEmL0K8wOLU5M7wU,52489
367
367
  ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
368
- ccxt/pro/gemini.py,sha256=VZERPN0NgdkmnDavU-9J-bp06peQVrTjelkljADMlVo,36591
368
+ ccxt/pro/gemini.py,sha256=a8yZNyLnv1VI6FPhSK-d8MzG7wEX60wL8uUJrqeWmOI,36641
369
369
  ccxt/pro/hitbtc.py,sha256=ASHxLlG2qSdRJP0ilP3YfQ4Axh6xzglnuQc01sF_tss,56285
370
370
  ccxt/pro/hollaex.py,sha256=xkvPQ2h6t-Jvt1WsQC_ahKAaA6wYMvx03fnc0zqqOIg,21957
371
371
  ccxt/pro/htx.py,sha256=_nIGpiNlgFXnzo2v4pnuLVI4_gZON41eeB1W0p3d_OY,95779
@@ -386,7 +386,7 @@ ccxt/pro/okcoin.py,sha256=Mb8Zq47uO7pmXxv51swuGogo-D503GI_caRxQQt0R0I,30385
386
386
  ccxt/pro/okx.py,sha256=g56ZFnH8ApuL1Kgh427G_3kqhwD4SthWmkrhqMIe7ZA,68286
387
387
  ccxt/pro/onetrading.py,sha256=9-WTi6ZNjsG7TJ6CA6pGpnm_6Jg2gg21ny4GZypjr6s,54634
388
388
  ccxt/pro/p2b.py,sha256=afEcnqnXmAbKJGPlHHqDSw6Lpu13ON1FG7E1SSnfvRA,17320
389
- ccxt/pro/phemex.py,sha256=RpHaVQ2qnrtMO41I_-AwOW3qTkPqKB6sFL70nH01gnc,60674
389
+ ccxt/pro/phemex.py,sha256=lD4r2KQdpkgeXGors3jtEMxoaxpEF0tl6MYXZ99GSYg,61032
390
390
  ccxt/pro/poloniex.py,sha256=5-v7AgCp7sVlpkbGhG_Dfo5uWPrCti7jzCtdRwZTGVk,51236
391
391
  ccxt/pro/poloniexfutures.py,sha256=msal1FRxt5S4qM8b8PTiZHAVBwVl-aFzbIwH21PT3UE,41480
392
392
  ccxt/pro/probit.py,sha256=RLTnROQUmX31XQ3ymIZkiDkop3eiSVK70Yw81yDcde4,22822
@@ -492,8 +492,8 @@ ccxt/static_dependencies/toolz/curried/__init__.py,sha256=iOuFY4c1kixe_h8lxuWIW5
492
492
  ccxt/static_dependencies/toolz/curried/exceptions.py,sha256=gKFOHDIayAWnX2uC8Z2KrUwpP-UpoqI5Tx1a859QdVY,344
493
493
  ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4werSUmJEtSHNY9NSzhseNM9s,525
494
494
  ccxt/test/__init__.py,sha256=GKPbEcj0Rrz5HG-GUm-iY1IHhDYmlvcBXZAGk6-m2CI,141
495
- ccxt/test/test_async.py,sha256=r6JsWpEetQrIh_9iNvInr3MzCBiJ7hyLmNb6D0cnfM8,76155
496
- ccxt/test/test_sync.py,sha256=HPcWRUvr3t9kJ3q8Lc_Qx0qnUxUTYVEN0-m7fnUZeog,75154
495
+ ccxt/test/test_async.py,sha256=pKhpyg_fd6eiRfkVxOi0efFtsMN1lc4iqPrPuVPN_uA,76388
496
+ ccxt/test/test_sync.py,sha256=j3YJlisrVIoriLc-s8fucddMkqeZX4os9bjQMGxS7Jg,75387
497
497
  ccxt/test/base/__init__.py,sha256=LvE9DEw5mNiyFrE-XnfzFFuSOvZOyi7ec__PF7lpnYs,1889
498
498
  ccxt/test/base/test_account.py,sha256=lxwZXsY8qZgomBoEiomUmWcseSp--orJx-xmm3E1vYs,978
499
499
  ccxt/test/base/test_balance.py,sha256=W-IcVRiJNLtdKEWEEhmhWjtFRuHFtoywNiGQNtYSuc0,2931
@@ -516,19 +516,19 @@ ccxt/test/base/test_margin_mode.py,sha256=Hv6pohqI-uJAvrlBjxSRUB55E9hdHB7jBJqjHc
516
516
  ccxt/test/base/test_margin_modification.py,sha256=W1dj01TiAZd5ZLm9RV_GBWhUDOfOav9XNOXwMg02BKI,1730
517
517
  ccxt/test/base/test_market.py,sha256=ZyR-nCKWbtC0xF76rng4mZ5UE_k71p7DKf5aOIYiQMc,11414
518
518
  ccxt/test/base/test_number.py,sha256=vBis6fh9mJ5KnzGsUkcoh_cJxU1LR0x7CG0NMp6SejY,22083
519
- ccxt/test/base/test_ohlcv.py,sha256=TgKLSTdahsqx4sLEEtlEhEoyflyZQNpPqgySJnPfJ_o,1897
519
+ ccxt/test/base/test_ohlcv.py,sha256=4LbTPW6sPP_p2d9cdvS-swHNaNVr6CYdNnyjwKqgnLI,2036
520
520
  ccxt/test/base/test_open_interest.py,sha256=u689028CAIbR-MmgN8SfGShHmculqWgDouI4qsB-waQ,1547
521
521
  ccxt/test/base/test_order.py,sha256=WvW1DtUvdX7Msv7tjdLlpVt2KoqoMDJXtpY2JnHEzy8,3964
522
522
  ccxt/test/base/test_order_book.py,sha256=hwJKB8yFHndY2HcQWm3BdGH3qmX7mUc0fiISSwSKC6U,3586
523
523
  ccxt/test/base/test_position.py,sha256=MUH0Pr_-uCE5JFQTZYqdSXJe-tKd1sbkK312MON7g-A,3884
524
- ccxt/test/base/test_shared_methods.py,sha256=dSlY36dgiCiTx70h4MMIGFYX4CTMZag6XDoH7ub3cHg,19707
524
+ ccxt/test/base/test_shared_methods.py,sha256=hnuD1c6rMcafEc-8zU0AE_xdV4dBoK3ax5SWNVUyu_k,20058
525
525
  ccxt/test/base/test_status.py,sha256=1g4lXBVOazV96hucSKJ0R6hH2PVA593QyDW9qk8pEvs,781
526
526
  ccxt/test/base/test_throttle.py,sha256=GvLQWtA4fAk_yJrxeisek-wAz7eJdHj0DDKR4_V1beg,3123
527
- ccxt/test/base/test_ticker.py,sha256=cmYHv5ZtbAq27y4LGDcGzaro-qkSNJWme5rLHOEdA4U,5599
527
+ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ,5810
528
528
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
529
529
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
530
530
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
531
- ccxt-4.2.79.dist-info/METADATA,sha256=PxRMFicWTVd0lv-5SYR39H6POR3mTpeVWPzT-7PAjw4,110489
532
- ccxt-4.2.79.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
533
- ccxt-4.2.79.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
534
- ccxt-4.2.79.dist-info/RECORD,,
531
+ ccxt-4.2.81.dist-info/METADATA,sha256=ul5IcLX2Cxbg2knc6T0WVEHcqSKcr-iiXbAN682-0qw,110489
532
+ ccxt-4.2.81.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
533
+ ccxt-4.2.81.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
534
+ ccxt-4.2.81.dist-info/RECORD,,
File without changes