ccxt 4.3.56__py2.py3-none-any.whl → 4.3.58__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.

ccxt/bingx.py CHANGED
@@ -674,6 +674,29 @@ class bingx(Exchange, ImplicitAPI):
674
674
  markets = self.safe_list(response, 'data', [])
675
675
  return self.parse_markets(markets)
676
676
 
677
+ def fetch_inverse_swap_markets(self, params):
678
+ response = self.cswapV1PublicGetMarketContracts(params)
679
+ #
680
+ # {
681
+ # "code": 0,
682
+ # "msg": "",
683
+ # "timestamp": 1720074487610,
684
+ # "data": [
685
+ # {
686
+ # "symbol": "BNB-USD",
687
+ # "pricePrecision": 2,
688
+ # "minTickSize": "10",
689
+ # "minTradeValue": "10",
690
+ # "minQty": "1.00000000",
691
+ # "status": 1,
692
+ # "timeOnline": 1713175200000
693
+ # },
694
+ # ]
695
+ # }
696
+ #
697
+ markets = self.safe_list(response, 'data', [])
698
+ return self.parse_markets(markets)
699
+
677
700
  def parse_market(self, market: dict) -> Market:
678
701
  id = self.safe_string(market, 'symbol')
679
702
  symbolParts = id.split('-')
@@ -682,6 +705,14 @@ class bingx(Exchange, ImplicitAPI):
682
705
  base = self.safe_currency_code(baseId)
683
706
  quote = self.safe_currency_code(quoteId)
684
707
  currency = self.safe_string(market, 'currency')
708
+ checkIsInverse = False
709
+ checkIsLinear = True
710
+ minTickSize = self.safe_number(market, 'minTickSize')
711
+ if minTickSize is not None:
712
+ # inverse swap market
713
+ currency = baseId
714
+ checkIsInverse = True
715
+ checkIsLinear = False
685
716
  settle = self.safe_currency_code(currency)
686
717
  pricePrecision = self.safe_number(market, 'tickSize')
687
718
  if pricePrecision is None:
@@ -698,8 +729,11 @@ class bingx(Exchange, ImplicitAPI):
698
729
  fees = self.safe_dict(self.fees, type, {})
699
730
  contractSize = self.parse_number('1') if (swap) else None
700
731
  isActive = self.safe_string(market, 'status') == '1'
701
- isInverse = None if (spot) else False
702
- isLinear = None if (spot) else swap
732
+ isInverse = None if (spot) else checkIsInverse
733
+ isLinear = None if (spot) else checkIsLinear
734
+ timeOnline = self.safe_integer(market, 'timeOnline')
735
+ if timeOnline == 0:
736
+ timeOnline = None
703
737
  return self.safe_market_structure({
704
738
  'id': id,
705
739
  'symbol': symbol,
@@ -741,15 +775,15 @@ class bingx(Exchange, ImplicitAPI):
741
775
  'max': self.safe_number(market, 'maxQty'),
742
776
  },
743
777
  'price': {
744
- 'min': None,
778
+ 'min': minTickSize,
745
779
  'max': None,
746
780
  },
747
781
  'cost': {
748
- 'min': self.safe_number_2(market, 'minNotional', 'tradeMinUSDT'),
782
+ 'min': self.safe_number_n(market, ['minNotional', 'tradeMinUSDT', 'minTradeValue']),
749
783
  'max': self.safe_number(market, 'maxNotional'),
750
784
  },
751
785
  },
752
- 'created': None,
786
+ 'created': timeOnline,
753
787
  'info': market,
754
788
  })
755
789
 
@@ -758,16 +792,20 @@ class bingx(Exchange, ImplicitAPI):
758
792
  retrieves data on all markets for bingx
759
793
  :see: https://bingx-api.github.io/docs/#/spot/market-api.html#Query%20Symbols
760
794
  :see: https://bingx-api.github.io/docs/#/swapV2/market-api.html#Contract%20Information
795
+ :see: https://bingx-api.github.io/docs/#/en-us/cswap/market-api.html#Contract%20Information
761
796
  :param dict [params]: extra parameters specific to the exchange API endpoint
762
797
  :returns dict[]: an array of objects representing market data
763
798
  """
764
799
  requests = [self.fetch_swap_markets(params)]
765
800
  isSandbox = self.safe_bool(self.options, 'sandboxMode', False)
766
801
  if not isSandbox:
802
+ requests.append(self.fetch_inverse_swap_markets(params))
767
803
  requests.append(self.fetch_spot_markets(params)) # sandbox is swap only
768
804
  promises = requests
769
- spotMarkets = self.safe_list(promises, 0, [])
770
- swapMarkets = self.safe_list(promises, 1, [])
805
+ linearSwapMarkets = self.safe_list(promises, 0, [])
806
+ inverseSwapMarkets = self.safe_list(promises, 1, [])
807
+ spotMarkets = self.safe_list(promises, 2, [])
808
+ swapMarkets = self.array_concat(linearSwapMarkets, inverseSwapMarkets)
771
809
  return self.array_concat(spotMarkets, swapMarkets)
772
810
 
773
811
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
@@ -777,13 +815,14 @@ class bingx(Exchange, ImplicitAPI):
777
815
  :see: https://bingx-api.github.io/docs/#/spot/market-api.html#Candlestick%20chart%20data
778
816
  :see: https://bingx-api.github.io/docs/#/swapV2/market-api.html#%20K-Line%20Data
779
817
  :see: https://bingx-api.github.io/docs/#/en-us/swapV2/market-api.html#K-Line%20Data%20-%20Mark%20Price
818
+ :see: https://bingx-api.github.io/docs/#/en-us/cswap/market-api.html#Get%20K-line%20Data
780
819
  :param str symbol: unified symbol of the market to fetch OHLCV data for
781
820
  :param str timeframe: the length of time each candle represents
782
821
  :param int [since]: timestamp in ms of the earliest candle to fetch
783
822
  :param int [limit]: the maximum amount of candles to fetch
784
823
  :param dict [params]: extra parameters specific to the exchange API endpoint
785
824
  :param int [params.until]: timestamp in ms of the latest candle to fetch
786
- :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
825
+ :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
787
826
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
788
827
  """
789
828
  self.load_markets()
@@ -808,12 +847,15 @@ class bingx(Exchange, ImplicitAPI):
808
847
  if market['spot']:
809
848
  response = self.spotV1PublicGetMarketKline(self.extend(request, params))
810
849
  else:
811
- price = self.safe_string(params, 'price')
812
- params = self.omit(params, 'price')
813
- if price == 'mark':
814
- response = self.swapV1PrivateGetMarketMarkPriceKlines(self.extend(request, params))
850
+ if market['inverse']:
851
+ response = self.cswapV1PublicGetMarketKlines(self.extend(request, params))
815
852
  else:
816
- response = self.swapV3PublicGetQuoteKlines(self.extend(request, params))
853
+ price = self.safe_string(params, 'price')
854
+ params = self.omit(params, 'price')
855
+ if price == 'mark':
856
+ response = self.swapV1PrivateGetMarketMarkPriceKlines(self.extend(request, params))
857
+ else:
858
+ response = self.swapV3PublicGetQuoteKlines(self.extend(request, params))
817
859
  #
818
860
  # {
819
861
  # "code": 0,
@@ -1106,6 +1148,7 @@ class bingx(Exchange, ImplicitAPI):
1106
1148
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1107
1149
  :see: https://bingx-api.github.io/docs/#/spot/market-api.html#Query%20depth%20information
1108
1150
  :see: https://bingx-api.github.io/docs/#/swapV2/market-api.html#Get%20Market%20Depth
1151
+ :see: https://bingx-api.github.io/docs/#/en-us/cswap/market-api.html#Query%20Depth%20Data
1109
1152
  :param str symbol: unified symbol of the market to fetch the order book for
1110
1153
  :param int [limit]: the maximum amount of order book entries to return
1111
1154
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1124,7 +1167,10 @@ class bingx(Exchange, ImplicitAPI):
1124
1167
  if marketType == 'spot':
1125
1168
  response = self.spotV1PublicGetMarketDepth(self.extend(request, params))
1126
1169
  else:
1127
- response = self.swapV2PublicGetQuoteDepth(self.extend(request, params))
1170
+ if market['inverse']:
1171
+ response = self.cswapV1PublicGetMarketDepth(self.extend(request, params))
1172
+ else:
1173
+ response = self.swapV2PublicGetQuoteDepth(self.extend(request, params))
1128
1174
  #
1129
1175
  # spot
1130
1176
  #
@@ -1190,6 +1236,7 @@ class bingx(Exchange, ImplicitAPI):
1190
1236
  """
1191
1237
  fetch the current funding rate
1192
1238
  :see: https://bingx-api.github.io/docs/#/swapV2/market-api.html#Current%20Funding%20Rate
1239
+ :see: https://bingx-api.github.io/docs/#/en-us/cswap/market-api.html#Price%20&%20Current%20Funding%20Rate
1193
1240
  :param str symbol: unified market symbol
1194
1241
  :param dict [params]: extra parameters specific to the exchange API endpoint
1195
1242
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
@@ -1199,7 +1246,11 @@ class bingx(Exchange, ImplicitAPI):
1199
1246
  request: dict = {
1200
1247
  'symbol': market['id'],
1201
1248
  }
1202
- response = self.swapV2PublicGetQuotePremiumIndex(self.extend(request, params))
1249
+ response = None
1250
+ if market['inverse']:
1251
+ response = self.cswapV1PublicGetMarketPremiumIndex(self.extend(request, params))
1252
+ else:
1253
+ response = self.swapV2PublicGetQuotePremiumIndex(self.extend(request, params))
1203
1254
  #
1204
1255
  # {
1205
1256
  # "code":0,
@@ -1337,9 +1388,10 @@ class bingx(Exchange, ImplicitAPI):
1337
1388
 
1338
1389
  def fetch_open_interest(self, symbol: str, params={}):
1339
1390
  """
1340
- Retrieves the open interest of a currency
1391
+ retrieves the open interest of a trading pair
1341
1392
  :see: https://bingx-api.github.io/docs/#/swapV2/market-api.html#Get%20Swap%20Open%20Positions
1342
- :param str symbol: Unified CCXT market symbol
1393
+ :see: https://bingx-api.github.io/docs/#/en-us/cswap/market-api.html#Get%20Swap%20Open%20Positions
1394
+ :param str symbol: unified CCXT market symbol
1343
1395
  :param dict [params]: exchange specific parameters
1344
1396
  :returns dict} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure:
1345
1397
  """
@@ -1348,7 +1400,13 @@ class bingx(Exchange, ImplicitAPI):
1348
1400
  request: dict = {
1349
1401
  'symbol': market['id'],
1350
1402
  }
1351
- response = self.swapV2PublicGetQuoteOpenInterest(self.extend(request, params))
1403
+ response = None
1404
+ if market['inverse']:
1405
+ response = self.cswapV1PublicGetMarketOpenInterest(self.extend(request, params))
1406
+ else:
1407
+ response = self.swapV2PublicGetQuoteOpenInterest(self.extend(request, params))
1408
+ #
1409
+ # linear swap
1352
1410
  #
1353
1411
  # {
1354
1412
  # "code": 0,
@@ -1360,18 +1418,48 @@ class bingx(Exchange, ImplicitAPI):
1360
1418
  # }
1361
1419
  # }
1362
1420
  #
1363
- data = self.safe_dict(response, 'data', {})
1364
- return self.parse_open_interest(data, market)
1421
+ # inverse swap
1422
+ #
1423
+ # {
1424
+ # "code": 0,
1425
+ # "msg": "",
1426
+ # "timestamp": 1720328247986,
1427
+ # "data": [
1428
+ # {
1429
+ # "symbol": "BTC-USD",
1430
+ # "openInterest": "749.1160",
1431
+ # "timestamp": 1720310400000
1432
+ # }
1433
+ # ]
1434
+ # }
1435
+ #
1436
+ result: dict = {}
1437
+ if market['inverse']:
1438
+ data = self.safe_list(response, 'data', [])
1439
+ result = self.safe_dict(data, 0, {})
1440
+ else:
1441
+ result = self.safe_dict(response, 'data', {})
1442
+ return self.parse_open_interest(result, market)
1365
1443
 
1366
1444
  def parse_open_interest(self, interest, market: Market = None):
1367
1445
  #
1368
- # {
1369
- # "openInterest": "3289641547.10",
1370
- # "symbol": "BTC-USDT",
1371
- # "time": 1672026617364
1372
- # }
1446
+ # linear swap
1447
+ #
1448
+ # {
1449
+ # "openInterest": "3289641547.10",
1450
+ # "symbol": "BTC-USDT",
1451
+ # "time": 1672026617364
1452
+ # }
1453
+ #
1454
+ # inverse swap
1455
+ #
1456
+ # {
1457
+ # "symbol": "BTC-USD",
1458
+ # "openInterest": "749.1160",
1459
+ # "timestamp": 1720310400000
1460
+ # }
1373
1461
  #
1374
- timestamp = self.safe_integer(interest, 'time')
1462
+ timestamp = self.safe_integer_2(interest, 'time', 'timestamp')
1375
1463
  id = self.safe_string(interest, 'symbol')
1376
1464
  symbol = self.safe_symbol(id, market, '-', 'swap')
1377
1465
  openInterest = self.safe_number(interest, 'openInterest')
ccxt/bitget.py CHANGED
@@ -4691,6 +4691,22 @@ class bitget(Exchange, ImplicitAPI):
4691
4691
  response = self.privateMarginPostMarginV1CrossOrderBatchCancelOrder(self.extend(request, params))
4692
4692
  else:
4693
4693
  response = self.privateMarginPostMarginV1IsolatedOrderBatchCancelOrder(self.extend(request, params))
4694
+ #
4695
+ # {
4696
+ # "code": "00000",
4697
+ # "msg": "success",
4698
+ # "requestTime": 1700717155622,
4699
+ # "data": {
4700
+ # "resultList": [
4701
+ # {
4702
+ # "orderId": "1111453253721796609",
4703
+ # "clientOid": "2ae7fc8a4ff949b6b60d770ca3950e2d"
4704
+ # },
4705
+ # ],
4706
+ # "failure": []
4707
+ # }
4708
+ # }
4709
+ #
4694
4710
  else:
4695
4711
  if stop:
4696
4712
  stopRequest: dict = {
@@ -4699,6 +4715,27 @@ class bitget(Exchange, ImplicitAPI):
4699
4715
  response = self.privateSpotPostV2SpotTradeBatchCancelPlanOrder(self.extend(stopRequest, params))
4700
4716
  else:
4701
4717
  response = self.privateSpotPostV2SpotTradeCancelSymbolOrder(self.extend(request, params))
4718
+ #
4719
+ # {
4720
+ # "code": "00000",
4721
+ # "msg": "success",
4722
+ # "requestTime": 1700716953996,
4723
+ # "data": {
4724
+ # "symbol": "BTCUSDT"
4725
+ # }
4726
+ # }
4727
+ #
4728
+ timestamp = self.safe_integer(response, 'requestTime')
4729
+ responseData = self.safe_dict(response, 'data')
4730
+ marketId = self.safe_string(responseData, 'symbol')
4731
+ return [
4732
+ self.safe_order({
4733
+ 'info': response,
4734
+ 'symbol': self.safe_symbol(marketId, None, None, 'spot'),
4735
+ 'timestamp': timestamp,
4736
+ 'datetime': self.iso8601(timestamp),
4737
+ }),
4738
+ ]
4702
4739
  else:
4703
4740
  productType = None
4704
4741
  productType, params = self.handle_product_type_and_params(market, params)
@@ -4707,53 +4744,25 @@ class bitget(Exchange, ImplicitAPI):
4707
4744
  response = self.privateMixPostV2MixOrderCancelPlanOrder(self.extend(request, params))
4708
4745
  else:
4709
4746
  response = self.privateMixPostV2MixOrderBatchCancelOrders(self.extend(request, params))
4710
- #
4711
- # spot
4712
- #
4713
- # {
4714
- # "code": "00000",
4715
- # "msg": "success",
4716
- # "requestTime": 1700716953996,
4717
- # "data": {
4718
- # "symbol": "BTCUSDT"
4719
- # }
4720
- # }
4721
- #
4722
- # swap
4723
- #
4724
- # {
4725
- # "code": "00000",
4726
- # "msg": "success",
4727
- # "requestTime": "1680008815965",
4728
- # "data": {
4729
- # "successList": [
4730
- # {
4731
- # "orderId": "1024598257429823488",
4732
- # "clientOid": "876493ce-c287-4bfc-9f4a-8b1905881313"
4733
- # },
4734
- # ],
4735
- # "failureList": []
4736
- # }
4737
- # }
4738
- #
4739
- # spot margin
4740
- #
4741
- # {
4742
- # "code": "00000",
4743
- # "msg": "success",
4744
- # "requestTime": 1700717155622,
4745
- # "data": {
4746
- # "resultList": [
4747
- # {
4748
- # "orderId": "1111453253721796609",
4749
- # "clientOid": "2ae7fc8a4ff949b6b60d770ca3950e2d"
4750
- # },
4751
- # ],
4752
- # "failure": []
4753
- # }
4754
- # }
4755
- #
4756
- return response
4747
+ # {
4748
+ # "code": "00000",
4749
+ # "msg": "success",
4750
+ # "requestTime": "1680008815965",
4751
+ # "data": {
4752
+ # "successList": [
4753
+ # {
4754
+ # "orderId": "1024598257429823488",
4755
+ # "clientOid": "876493ce-c287-4bfc-9f4a-8b1905881313"
4756
+ # },
4757
+ # ],
4758
+ # "failureList": []
4759
+ # }
4760
+ # }
4761
+ data = self.safe_dict(response, 'data')
4762
+ resultList = self.safe_list_2(data, 'resultList', 'successList')
4763
+ failureList = self.safe_list_2(data, 'failure', 'failureList')
4764
+ responseList = self.array_concat(resultList, failureList)
4765
+ return self.parse_orders(responseList)
4757
4766
 
4758
4767
  def fetch_order(self, id: str, symbol: Str = None, params={}):
4759
4768
  """
ccxt/coinmate.py CHANGED
@@ -26,7 +26,7 @@ class coinmate(Exchange, ImplicitAPI):
26
26
  'id': 'coinmate',
27
27
  'name': 'CoinMate',
28
28
  'countries': ['GB', 'CZ', 'EU'], # UK, Czech Republic
29
- 'rateLimit': 1000,
29
+ 'rateLimit': 600,
30
30
  'has': {
31
31
  'CORS': True,
32
32
  'spot': True,
@@ -175,28 +175,28 @@ class coinmate(Exchange, ImplicitAPI):
175
175
  'trading': {
176
176
  'tierBased': True,
177
177
  'percentage': True,
178
- 'maker': self.parse_number('0.0012'),
179
- 'taker': self.parse_number('0.0025'),
178
+ 'taker': self.parse_number('0.006'),
179
+ 'maker': self.parse_number('0.004'),
180
180
  'tiers': {
181
181
  'taker': [
182
- [self.parse_number('0'), self.parse_number('0.0035')],
183
- [self.parse_number('10000'), self.parse_number('0.0023')],
184
- [self.parse_number('100000'), self.parse_number('0.0021')],
185
- [self.parse_number('250000'), self.parse_number('0.0020')],
186
- [self.parse_number('500000'), self.parse_number('0.0015')],
187
- [self.parse_number('1000000'), self.parse_number('0.0013')],
188
- [self.parse_number('3000000'), self.parse_number('0.0010')],
189
- [self.parse_number('15000000'), self.parse_number('0.0005')],
182
+ [self.parse_number('0'), self.parse_number('0.006')],
183
+ [self.parse_number('10000'), self.parse_number('0.003')],
184
+ [self.parse_number('100000'), self.parse_number('0.0023')],
185
+ [self.parse_number('250000'), self.parse_number('0.0021')],
186
+ [self.parse_number('500000'), self.parse_number('0.0018')],
187
+ [self.parse_number('1000000'), self.parse_number('0.0015')],
188
+ [self.parse_number('3000000'), self.parse_number('0.0012')],
189
+ [self.parse_number('15000000'), self.parse_number('0.001')],
190
190
  ],
191
191
  'maker': [
192
- [self.parse_number('0'), self.parse_number('0.003')],
193
- [self.parse_number('10000'), self.parse_number('0.0011')],
194
- [self.parse_number('100000'), self.parse_number('0.0010')],
195
- [self.parse_number('250000'), self.parse_number('0.0008')],
192
+ [self.parse_number('0'), self.parse_number('0.004')],
193
+ [self.parse_number('10000'), self.parse_number('0.002')],
194
+ [self.parse_number('100000'), self.parse_number('0.0012')],
195
+ [self.parse_number('250000'), self.parse_number('0.0009')],
196
196
  [self.parse_number('500000'), self.parse_number('0.0005')],
197
197
  [self.parse_number('1000000'), self.parse_number('0.0003')],
198
198
  [self.parse_number('3000000'), self.parse_number('0.0002')],
199
- [self.parse_number('15000000'), self.parse_number('0')],
199
+ [self.parse_number('15000000'), self.parse_number('-0.0004')],
200
200
  ],
201
201
  },
202
202
  },
@@ -1048,20 +1048,16 @@ class coinmate(Exchange, ImplicitAPI):
1048
1048
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1049
1049
 
1050
1050
  def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1051
- if response is not None:
1052
- if 'error' in response:
1053
- # {"error":true,"errorMessage":"Minimum Order Size 0.01 ETH","data":null}
1054
- if response['error']:
1055
- message = self.safe_string(response, 'errorMessage')
1056
- feedback = self.id + ' ' + message
1057
- self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1058
- self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
1059
- raise ExchangeError(self.id + ' ' + self.json(response))
1060
- if code > 400:
1061
- if body:
1062
- feedback = self.id + ' ' + body
1063
- self.throw_exactly_matched_exception(self.exceptions['exact'], body, feedback)
1064
- self.throw_broadly_matched_exception(self.exceptions['broad'], body, feedback)
1065
- raise ExchangeError(feedback) # unknown message
1066
- raise ExchangeError(self.id + ' ' + body)
1051
+ if response is None:
1052
+ return None # fallback to default error handler
1053
+ #
1054
+ # {"error":true,"errorMessage":"Api internal error","data":null}
1055
+ # {"error":true,"errorMessage":"Access denied.","data":null}
1056
+ #
1057
+ errorMessage = self.safe_string(response, 'errorMessage')
1058
+ if errorMessage is not None:
1059
+ feedback = self.id + ' ' + body
1060
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorMessage, feedback)
1061
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errorMessage, feedback)
1062
+ raise ExchangeError(feedback) # unknown message
1067
1063
  return None
ccxt/coinone.py CHANGED
@@ -25,8 +25,7 @@ class coinone(Exchange, ImplicitAPI):
25
25
  'id': 'coinone',
26
26
  'name': 'CoinOne',
27
27
  'countries': ['KR'], # Korea
28
- # 'enableRateLimit': False,
29
- 'rateLimit': 667,
28
+ 'rateLimit': 50,
30
29
  'version': 'v2',
31
30
  'pro': False,
32
31
  'has': {
@@ -198,10 +197,10 @@ class coinone(Exchange, ImplicitAPI):
198
197
  },
199
198
  'precisionMode': TICK_SIZE,
200
199
  'exceptions': {
201
- '405': OnMaintenance, # {"errorCode":"405","status":"maintenance","result":"error"}
202
- '104': OrderNotFound, # {"errorCode":"104","errorMsg":"Order id is not exist","result":"error"}
203
- '108': BadSymbol, # {"errorCode":"108","errorMsg":"Unknown CryptoCurrency","result":"error"}
204
- '107': BadRequest, # {"errorCode":"107","errorMsg":"Parameter error","result":"error"}
200
+ '104': OrderNotFound,
201
+ '107': BadRequest,
202
+ '108': BadSymbol,
203
+ '405': OnMaintenance,
205
204
  },
206
205
  'commonCurrencies': {
207
206
  'SOC': 'Soda Coin',
@@ -1111,17 +1110,14 @@ class coinone(Exchange, ImplicitAPI):
1111
1110
 
1112
1111
  def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1113
1112
  if response is None:
1114
- return None
1115
- if 'result' in response:
1116
- result = response['result']
1117
- if result != 'success':
1118
- #
1119
- # { "errorCode": "405", "status": "maintenance", "result": "error"}
1120
- #
1121
- errorCode = self.safe_string(response, 'errorCode')
1122
- feedback = self.id + ' ' + body
1123
- self.throw_exactly_matched_exception(self.exceptions, errorCode, feedback)
1124
- raise ExchangeError(feedback)
1125
- else:
1126
- raise ExchangeError(self.id + ' ' + body)
1113
+ return None # fallback to default error handler
1114
+ #
1115
+ # {"result":"error","error_code":"107","error_msg":"Parameter value is wrong"}
1116
+ # {"result":"error","error_code":"108","error_msg":"Unknown CryptoCurrency"}
1117
+ #
1118
+ errorCode = self.safe_string(response, 'error_code')
1119
+ if errorCode is not None and errorCode != '0':
1120
+ feedback = self.id + ' ' + body
1121
+ self.throw_exactly_matched_exception(self.exceptions, errorCode, feedback)
1122
+ raise ExchangeError(feedback) # unknown message
1127
1123
  return None