ccxt 4.0.76__py2.py3-none-any.whl → 4.0.77__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/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.0.76'
25
+ __version__ = '4.0.77'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/gate.py CHANGED
@@ -80,6 +80,19 @@ class ImplicitAPI:
80
80
  private_subaccounts_post_sub_accounts_user_id_unlock = privateSubAccountsPostSubAccountsUserIdUnlock = Entry('sub_accounts/{user_id}/unlock', ['private', 'subAccounts'], 'POST', {'cost': 1})
81
81
  private_subaccounts_put_sub_accounts_user_id_keys_key = privateSubAccountsPutSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'PUT', {'cost': 1})
82
82
  private_subaccounts_delete_sub_accounts_user_id_keys_key = privateSubAccountsDeleteSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'DELETE', {'cost': 1})
83
+ private_portfolio_get_accounts = privatePortfolioGetAccounts = Entry('accounts', ['private', 'portfolio'], 'GET', {'cost': 1.5})
84
+ private_portfolio_get_account_mode = privatePortfolioGetAccountMode = Entry('account_mode', ['private', 'portfolio'], 'GET', {'cost': 1.5})
85
+ private_portfolio_get_borrowable = privatePortfolioGetBorrowable = Entry('borrowable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
86
+ private_portfolio_get_transferable = privatePortfolioGetTransferable = Entry('transferable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
87
+ private_portfolio_get_loans = privatePortfolioGetLoans = Entry('loans', ['private', 'portfolio'], 'GET', {'cost': 1.5})
88
+ private_portfolio_get_loan_records = privatePortfolioGetLoanRecords = Entry('loan_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
89
+ private_portfolio_get_interest_records = privatePortfolioGetInterestRecords = Entry('interest_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
90
+ private_portfolio_get_spot_orders = privatePortfolioGetSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'GET', {'cost': 1.5})
91
+ private_portfolio_get_spot_orders_order_id = privatePortfolioGetSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'GET', {'cost': 1.5})
92
+ private_portfolio_post_loans = privatePortfolioPostLoans = Entry('loans', ['private', 'portfolio'], 'POST', {'cost': 1.5})
93
+ private_portfolio_post_spot_orders = privatePortfolioPostSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'POST', {'cost': 1.5})
94
+ private_portfolio_delete_spot_orders_order_id = privatePortfolioDeleteSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'DELETE', {'cost': 1.5})
95
+ private_portfolio_patch_spot_orders_order_id = privatePortfolioPatchSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'PATCH', {'cost': 1.5})
83
96
  private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
84
97
  private_spot_get_batch_fee = privateSpotGetBatchFee = Entry('batch_fee', ['private', 'spot'], 'GET', {'cost': 1})
85
98
  private_spot_get_accounts = privateSpotGetAccounts = Entry('accounts', ['private', 'spot'], 'GET', {'cost': 1})
@@ -213,10 +226,21 @@ class ImplicitAPI:
213
226
  private_earn_get_uni_interest_records = privateEarnGetUniInterestRecords = Entry('uni/interest_records', ['private', 'earn'], 'GET', {'cost': 1.5})
214
227
  private_earn_post_uni_lends = privateEarnPostUniLends = Entry('uni/lends', ['private', 'earn'], 'POST', {'cost': 1.5})
215
228
  private_earn_patch_uni_lends = privateEarnPatchUniLends = Entry('uni/lends', ['private', 'earn'], 'PATCH', {'cost': 1.5})
229
+ private_loan_get_collateral_orders = privateLoanGetCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'GET', {'cost': 1.5})
230
+ private_loan_get_collateral_orders_order_id = privateLoanGetCollateralOrdersOrderId = Entry('collateral/orders/{order_id}', ['private', 'loan'], 'GET', {'cost': 1.5})
231
+ private_loan_get_collateral_repay_records = privateLoanGetCollateralRepayRecords = Entry('collateral/repay_records', ['private', 'loan'], 'GET', {'cost': 1.5})
232
+ private_loan_get_collateral_collaterals = privateLoanGetCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'GET', {'cost': 1.5})
233
+ private_loan_get_collateral_total_amount = privateLoanGetCollateralTotalAmount = Entry('collateral/total_amount', ['private', 'loan'], 'GET', {'cost': 1.5})
234
+ private_loan_get_collateral_ltv = privateLoanGetCollateralLtv = Entry('collateral/ltv', ['private', 'loan'], 'GET', {'cost': 1.5})
235
+ private_loan_get_collateral_currencies = privateLoanGetCollateralCurrencies = Entry('collateral/currencies', ['private', 'loan'], 'GET', {'cost': 1.5})
236
+ private_loan_post_collateral_orders = privateLoanPostCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'POST', {'cost': 1.5})
237
+ private_loan_post_collateral_repay = privateLoanPostCollateralRepay = Entry('collateral/repay', ['private', 'loan'], 'POST', {'cost': 1.5})
238
+ private_loan_post_collateral_collaterals = privateLoanPostCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'POST', {'cost': 1.5})
216
239
  private_account_get_detail = privateAccountGetDetail = Entry('detail', ['private', 'account'], 'GET', {'cost': 1.5})
217
240
  private_account_get_stp_groups = privateAccountGetStpGroups = Entry('stp_groups', ['private', 'account'], 'GET', {'cost': 1.5})
218
241
  private_account_get_stp_groups_stp_id_users = privateAccountGetStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'GET', {'cost': 1.5})
219
242
  private_account_post_stp_groups = privateAccountPostStpGroups = Entry('stp_groups', ['private', 'account'], 'POST', {'cost': 1.5})
220
243
  private_account_post_stp_groups_stp_id_users = privateAccountPostStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'POST', {'cost': 1.5})
244
+ private_account_delete_stp_groups_stp_id_users = privateAccountDeleteStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'DELETE', {'cost': 1.5})
221
245
  private_rebate_get_agency_transaction_history = privateRebateGetAgencyTransactionHistory = Entry('agency/transaction_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
222
246
  private_rebate_get_agency_commission_history = privateRebateGetAgencyCommissionHistory = Entry('agency/commission_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
ccxt/abstract/gateio.py CHANGED
@@ -80,6 +80,19 @@ class ImplicitAPI:
80
80
  private_subaccounts_post_sub_accounts_user_id_unlock = privateSubAccountsPostSubAccountsUserIdUnlock = Entry('sub_accounts/{user_id}/unlock', ['private', 'subAccounts'], 'POST', {'cost': 1})
81
81
  private_subaccounts_put_sub_accounts_user_id_keys_key = privateSubAccountsPutSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'PUT', {'cost': 1})
82
82
  private_subaccounts_delete_sub_accounts_user_id_keys_key = privateSubAccountsDeleteSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'DELETE', {'cost': 1})
83
+ private_portfolio_get_accounts = privatePortfolioGetAccounts = Entry('accounts', ['private', 'portfolio'], 'GET', {'cost': 1.5})
84
+ private_portfolio_get_account_mode = privatePortfolioGetAccountMode = Entry('account_mode', ['private', 'portfolio'], 'GET', {'cost': 1.5})
85
+ private_portfolio_get_borrowable = privatePortfolioGetBorrowable = Entry('borrowable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
86
+ private_portfolio_get_transferable = privatePortfolioGetTransferable = Entry('transferable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
87
+ private_portfolio_get_loans = privatePortfolioGetLoans = Entry('loans', ['private', 'portfolio'], 'GET', {'cost': 1.5})
88
+ private_portfolio_get_loan_records = privatePortfolioGetLoanRecords = Entry('loan_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
89
+ private_portfolio_get_interest_records = privatePortfolioGetInterestRecords = Entry('interest_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
90
+ private_portfolio_get_spot_orders = privatePortfolioGetSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'GET', {'cost': 1.5})
91
+ private_portfolio_get_spot_orders_order_id = privatePortfolioGetSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'GET', {'cost': 1.5})
92
+ private_portfolio_post_loans = privatePortfolioPostLoans = Entry('loans', ['private', 'portfolio'], 'POST', {'cost': 1.5})
93
+ private_portfolio_post_spot_orders = privatePortfolioPostSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'POST', {'cost': 1.5})
94
+ private_portfolio_delete_spot_orders_order_id = privatePortfolioDeleteSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'DELETE', {'cost': 1.5})
95
+ private_portfolio_patch_spot_orders_order_id = privatePortfolioPatchSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'PATCH', {'cost': 1.5})
83
96
  private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
84
97
  private_spot_get_batch_fee = privateSpotGetBatchFee = Entry('batch_fee', ['private', 'spot'], 'GET', {'cost': 1})
85
98
  private_spot_get_accounts = privateSpotGetAccounts = Entry('accounts', ['private', 'spot'], 'GET', {'cost': 1})
@@ -213,10 +226,21 @@ class ImplicitAPI:
213
226
  private_earn_get_uni_interest_records = privateEarnGetUniInterestRecords = Entry('uni/interest_records', ['private', 'earn'], 'GET', {'cost': 1.5})
214
227
  private_earn_post_uni_lends = privateEarnPostUniLends = Entry('uni/lends', ['private', 'earn'], 'POST', {'cost': 1.5})
215
228
  private_earn_patch_uni_lends = privateEarnPatchUniLends = Entry('uni/lends', ['private', 'earn'], 'PATCH', {'cost': 1.5})
229
+ private_loan_get_collateral_orders = privateLoanGetCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'GET', {'cost': 1.5})
230
+ private_loan_get_collateral_orders_order_id = privateLoanGetCollateralOrdersOrderId = Entry('collateral/orders/{order_id}', ['private', 'loan'], 'GET', {'cost': 1.5})
231
+ private_loan_get_collateral_repay_records = privateLoanGetCollateralRepayRecords = Entry('collateral/repay_records', ['private', 'loan'], 'GET', {'cost': 1.5})
232
+ private_loan_get_collateral_collaterals = privateLoanGetCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'GET', {'cost': 1.5})
233
+ private_loan_get_collateral_total_amount = privateLoanGetCollateralTotalAmount = Entry('collateral/total_amount', ['private', 'loan'], 'GET', {'cost': 1.5})
234
+ private_loan_get_collateral_ltv = privateLoanGetCollateralLtv = Entry('collateral/ltv', ['private', 'loan'], 'GET', {'cost': 1.5})
235
+ private_loan_get_collateral_currencies = privateLoanGetCollateralCurrencies = Entry('collateral/currencies', ['private', 'loan'], 'GET', {'cost': 1.5})
236
+ private_loan_post_collateral_orders = privateLoanPostCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'POST', {'cost': 1.5})
237
+ private_loan_post_collateral_repay = privateLoanPostCollateralRepay = Entry('collateral/repay', ['private', 'loan'], 'POST', {'cost': 1.5})
238
+ private_loan_post_collateral_collaterals = privateLoanPostCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'POST', {'cost': 1.5})
216
239
  private_account_get_detail = privateAccountGetDetail = Entry('detail', ['private', 'account'], 'GET', {'cost': 1.5})
217
240
  private_account_get_stp_groups = privateAccountGetStpGroups = Entry('stp_groups', ['private', 'account'], 'GET', {'cost': 1.5})
218
241
  private_account_get_stp_groups_stp_id_users = privateAccountGetStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'GET', {'cost': 1.5})
219
242
  private_account_post_stp_groups = privateAccountPostStpGroups = Entry('stp_groups', ['private', 'account'], 'POST', {'cost': 1.5})
220
243
  private_account_post_stp_groups_stp_id_users = privateAccountPostStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'POST', {'cost': 1.5})
244
+ private_account_delete_stp_groups_stp_id_users = privateAccountDeleteStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'DELETE', {'cost': 1.5})
221
245
  private_rebate_get_agency_transaction_history = privateRebateGetAgencyTransactionHistory = Entry('agency/transaction_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
222
246
  private_rebate_get_agency_commission_history = privateRebateGetAgencyCommissionHistory = Entry('agency/commission_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.76'
7
+ __version__ = '4.0.77'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.76'
5
+ __version__ = '4.0.77'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1070,9 +1070,9 @@ class bingx(Exchange, ImplicitAPI):
1070
1070
  }
1071
1071
  response = None
1072
1072
  if market['spot']:
1073
- response = await self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1073
+ response = await self.spotV1PrivateGetTicker24hr(self.extend(request, params))
1074
1074
  else:
1075
- response = await self.spotV1PublicGetCommonSymbols(self.extend(request, params))
1075
+ response = await self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1076
1076
  #
1077
1077
  # {
1078
1078
  # "code": 0,
@@ -1094,7 +1094,8 @@ class bingx(Exchange, ImplicitAPI):
1094
1094
  # }
1095
1095
  #
1096
1096
  data = self.safe_value(response, 'data')
1097
- return self.parse_ticker(data, market)
1097
+ ticker = self.safe_value(data, 0, data)
1098
+ return self.parse_ticker(ticker, market)
1098
1099
 
1099
1100
  async def fetch_tickers(self, symbols: Optional[List[str]] = None, params={}):
1100
1101
  """
@@ -1138,6 +1139,20 @@ class bingx(Exchange, ImplicitAPI):
1138
1139
  return self.parse_tickers(tickers, symbols)
1139
1140
 
1140
1141
  def parse_ticker(self, ticker, market=None):
1142
+ #
1143
+ # spot
1144
+ # {
1145
+ # symbol: 'BTC-USDT',
1146
+ # openPrice: '26032.08',
1147
+ # highPrice: '26178.86',
1148
+ # lowPrice: '25968.18',
1149
+ # lastPrice: '26113.60',
1150
+ # volume: '1161.79',
1151
+ # quoteVolume: '30288466.44',
1152
+ # openTime: '1693081020762',
1153
+ # closeTime: '1693167420762'
1154
+ # }
1155
+ # swap
1141
1156
  #
1142
1157
  # {
1143
1158
  # "symbol": "BTC-USDT",
@@ -1155,15 +1170,15 @@ class bingx(Exchange, ImplicitAPI):
1155
1170
  # }
1156
1171
  #
1157
1172
  marketId = self.safe_string(ticker, 'symbol')
1158
- defaultType = self.safe_string(self.options, 'defaultType', 'swap')
1159
- symbol = self.safe_symbol(marketId, market, '-', defaultType)
1173
+ change = self.safe_string(ticker, 'priceChange')
1174
+ type = 'spot' if (change is None) else 'swap'
1175
+ symbol = self.safe_symbol(marketId, market, None, type)
1160
1176
  open = self.safe_string(ticker, 'openPrice')
1161
1177
  high = self.safe_string(ticker, 'highPrice')
1162
1178
  low = self.safe_string(ticker, 'lowPrice')
1163
1179
  close = self.safe_string(ticker, 'lastPrice')
1164
1180
  quoteVolume = self.safe_string(ticker, 'quoteVolume')
1165
1181
  baseVolume = self.safe_string(ticker, 'volume')
1166
- change = self.safe_string(ticker, 'chapriceChangenge')
1167
1182
  percentage = self.safe_string(ticker, 'priceChangePercent')
1168
1183
  ts = self.safe_integer(ticker, 'closeTime')
1169
1184
  datetime = self.iso8601(ts)
@@ -298,6 +298,29 @@ class gate(Exchange, ImplicitAPI):
298
298
  'sub_accounts/{user_id}/keys/{key}': 1,
299
299
  },
300
300
  },
301
+ 'portfolio': {
302
+ 'get': {
303
+ 'accounts': 1.5,
304
+ 'account_mode': 1.5,
305
+ 'borrowable': 1.5,
306
+ 'transferable': 1.5,
307
+ 'loans': 1.5,
308
+ 'loan_records': 1.5,
309
+ 'interest_records': 1.5,
310
+ 'spot/orders': 1.5,
311
+ 'spot/orders/{order_id}': 1.5,
312
+ },
313
+ 'post': {
314
+ 'loans': 1.5,
315
+ 'spot/orders': 1.5,
316
+ },
317
+ 'delete': {
318
+ 'spot/orders/{order_id}': 1.5,
319
+ },
320
+ 'patch': {
321
+ 'spot/orders/{order_id}': 1.5,
322
+ },
323
+ },
301
324
  'spot': {
302
325
  'get': {
303
326
  'fee': 1,
@@ -491,6 +514,22 @@ class gate(Exchange, ImplicitAPI):
491
514
  'uni/lends': 1.5,
492
515
  },
493
516
  },
517
+ 'loan': {
518
+ 'get': {
519
+ 'collateral/orders': 1.5,
520
+ 'collateral/orders/{order_id}': 1.5,
521
+ 'collateral/repay_records': 1.5,
522
+ 'collateral/collaterals': 1.5,
523
+ 'collateral/total_amount': 1.5,
524
+ 'collateral/ltv': 1.5,
525
+ 'collateral/currencies': 1.5,
526
+ },
527
+ 'post': {
528
+ 'collateral/orders': 1.5,
529
+ 'collateral/repay': 1.5,
530
+ 'collateral/collaterals': 1.5,
531
+ },
532
+ },
494
533
  'account': {
495
534
  'get': {
496
535
  'detail': 1.5,
@@ -501,6 +540,9 @@ class gate(Exchange, ImplicitAPI):
501
540
  'stp_groups': 1.5,
502
541
  'stp_groups/{stp_id}/users': 1.5,
503
542
  },
543
+ 'delete': {
544
+ 'stp_groups/{stp_id}/users': 1.5,
545
+ },
504
546
  },
505
547
  'rebate': {
506
548
  'get': {
@@ -268,6 +268,7 @@ class whitebit(Exchange, ImplicitAPI):
268
268
  '422': OrderNotFound, # {"response":null,"status":422,"errors":{"orderId":["Finished order id 1295772653 not found on your account"]},"notification":null,"warning":"Finished order id 1295772653 not found on your account","_token":null}
269
269
  },
270
270
  'broad': {
271
+ 'This action is unauthorized': PermissionDenied, # {"code":2,"message":"This action is unauthorized. Enable your key in API settings"}
271
272
  'Given amount is less than min amount': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
272
273
  'Total is less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
273
274
  'fee must be no less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Total amount + fee must be no less than 5.05505"]}}
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.76'
7
+ __version__ = '4.0.77'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bingx.py CHANGED
@@ -1069,9 +1069,9 @@ class bingx(Exchange, ImplicitAPI):
1069
1069
  }
1070
1070
  response = None
1071
1071
  if market['spot']:
1072
- response = self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1072
+ response = self.spotV1PrivateGetTicker24hr(self.extend(request, params))
1073
1073
  else:
1074
- response = self.spotV1PublicGetCommonSymbols(self.extend(request, params))
1074
+ response = self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1075
1075
  #
1076
1076
  # {
1077
1077
  # "code": 0,
@@ -1093,7 +1093,8 @@ class bingx(Exchange, ImplicitAPI):
1093
1093
  # }
1094
1094
  #
1095
1095
  data = self.safe_value(response, 'data')
1096
- return self.parse_ticker(data, market)
1096
+ ticker = self.safe_value(data, 0, data)
1097
+ return self.parse_ticker(ticker, market)
1097
1098
 
1098
1099
  def fetch_tickers(self, symbols: Optional[List[str]] = None, params={}):
1099
1100
  """
@@ -1137,6 +1138,20 @@ class bingx(Exchange, ImplicitAPI):
1137
1138
  return self.parse_tickers(tickers, symbols)
1138
1139
 
1139
1140
  def parse_ticker(self, ticker, market=None):
1141
+ #
1142
+ # spot
1143
+ # {
1144
+ # symbol: 'BTC-USDT',
1145
+ # openPrice: '26032.08',
1146
+ # highPrice: '26178.86',
1147
+ # lowPrice: '25968.18',
1148
+ # lastPrice: '26113.60',
1149
+ # volume: '1161.79',
1150
+ # quoteVolume: '30288466.44',
1151
+ # openTime: '1693081020762',
1152
+ # closeTime: '1693167420762'
1153
+ # }
1154
+ # swap
1140
1155
  #
1141
1156
  # {
1142
1157
  # "symbol": "BTC-USDT",
@@ -1154,15 +1169,15 @@ class bingx(Exchange, ImplicitAPI):
1154
1169
  # }
1155
1170
  #
1156
1171
  marketId = self.safe_string(ticker, 'symbol')
1157
- defaultType = self.safe_string(self.options, 'defaultType', 'swap')
1158
- symbol = self.safe_symbol(marketId, market, '-', defaultType)
1172
+ change = self.safe_string(ticker, 'priceChange')
1173
+ type = 'spot' if (change is None) else 'swap'
1174
+ symbol = self.safe_symbol(marketId, market, None, type)
1159
1175
  open = self.safe_string(ticker, 'openPrice')
1160
1176
  high = self.safe_string(ticker, 'highPrice')
1161
1177
  low = self.safe_string(ticker, 'lowPrice')
1162
1178
  close = self.safe_string(ticker, 'lastPrice')
1163
1179
  quoteVolume = self.safe_string(ticker, 'quoteVolume')
1164
1180
  baseVolume = self.safe_string(ticker, 'volume')
1165
- change = self.safe_string(ticker, 'chapriceChangenge')
1166
1181
  percentage = self.safe_string(ticker, 'priceChangePercent')
1167
1182
  ts = self.safe_integer(ticker, 'closeTime')
1168
1183
  datetime = self.iso8601(ts)
ccxt/gate.py CHANGED
@@ -297,6 +297,29 @@ class gate(Exchange, ImplicitAPI):
297
297
  'sub_accounts/{user_id}/keys/{key}': 1,
298
298
  },
299
299
  },
300
+ 'portfolio': {
301
+ 'get': {
302
+ 'accounts': 1.5,
303
+ 'account_mode': 1.5,
304
+ 'borrowable': 1.5,
305
+ 'transferable': 1.5,
306
+ 'loans': 1.5,
307
+ 'loan_records': 1.5,
308
+ 'interest_records': 1.5,
309
+ 'spot/orders': 1.5,
310
+ 'spot/orders/{order_id}': 1.5,
311
+ },
312
+ 'post': {
313
+ 'loans': 1.5,
314
+ 'spot/orders': 1.5,
315
+ },
316
+ 'delete': {
317
+ 'spot/orders/{order_id}': 1.5,
318
+ },
319
+ 'patch': {
320
+ 'spot/orders/{order_id}': 1.5,
321
+ },
322
+ },
300
323
  'spot': {
301
324
  'get': {
302
325
  'fee': 1,
@@ -490,6 +513,22 @@ class gate(Exchange, ImplicitAPI):
490
513
  'uni/lends': 1.5,
491
514
  },
492
515
  },
516
+ 'loan': {
517
+ 'get': {
518
+ 'collateral/orders': 1.5,
519
+ 'collateral/orders/{order_id}': 1.5,
520
+ 'collateral/repay_records': 1.5,
521
+ 'collateral/collaterals': 1.5,
522
+ 'collateral/total_amount': 1.5,
523
+ 'collateral/ltv': 1.5,
524
+ 'collateral/currencies': 1.5,
525
+ },
526
+ 'post': {
527
+ 'collateral/orders': 1.5,
528
+ 'collateral/repay': 1.5,
529
+ 'collateral/collaterals': 1.5,
530
+ },
531
+ },
493
532
  'account': {
494
533
  'get': {
495
534
  'detail': 1.5,
@@ -500,6 +539,9 @@ class gate(Exchange, ImplicitAPI):
500
539
  'stp_groups': 1.5,
501
540
  'stp_groups/{stp_id}/users': 1.5,
502
541
  },
542
+ 'delete': {
543
+ 'stp_groups/{stp_id}/users': 1.5,
544
+ },
503
545
  },
504
546
  'rebate': {
505
547
  'get': {
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.76'
7
+ __version__ = '4.0.77'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/okx.py CHANGED
@@ -11,6 +11,7 @@ from ccxt.base.types import OrderType
11
11
  from ccxt.async_support.base.ws.client import Client
12
12
  from typing import Optional
13
13
  from typing import List
14
+ from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import InvalidNonce
16
17
  from ccxt.base.errors import AuthenticationError
@@ -226,6 +227,8 @@ class okx(ccxt.async_support.okx):
226
227
  :param str [params.channel]: the channel to subscribe to, tickers by default. Can be tickers, sprd-tickers, index-tickers, block-tickers
227
228
  :returns dict: a `ticker structure <https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure>`
228
229
  """
230
+ if self.is_empty(symbols):
231
+ raise ArgumentsRequired(self.id + ' watchTickers requires a list of symbols')
229
232
  channel = None
230
233
  channel, params = self.handle_option_and_params(params, 'watchTickers', 'channel', 'tickers')
231
234
  newTickers = await self.subscribe_multiple('public', channel, symbols, params)
ccxt/whitebit.py CHANGED
@@ -268,6 +268,7 @@ class whitebit(Exchange, ImplicitAPI):
268
268
  '422': OrderNotFound, # {"response":null,"status":422,"errors":{"orderId":["Finished order id 1295772653 not found on your account"]},"notification":null,"warning":"Finished order id 1295772653 not found on your account","_token":null}
269
269
  },
270
270
  'broad': {
271
+ 'This action is unauthorized': PermissionDenied, # {"code":2,"message":"This action is unauthorized. Enable your key in API settings"}
271
272
  'Given amount is less than min amount': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
272
273
  'Total is less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
273
274
  'fee must be no less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Total amount + fee must be no less than 5.05505"]}}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.76
3
+ Version: 4.0.77
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -259,13 +259,13 @@ console.log(version, Object.keys(exchanges));
259
259
 
260
260
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
261
261
 
262
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.76/dist/ccxt.browser.js
263
- * unpkg: https://unpkg.com/ccxt@4.0.76/dist/ccxt.browser.js
262
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js
263
+ * unpkg: https://unpkg.com/ccxt@4.0.77/dist/ccxt.browser.js
264
264
 
265
265
  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.
266
266
 
267
267
  ```HTML
268
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.76/dist/ccxt.browser.js"></script>
268
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.77/dist/ccxt.browser.js"></script>
269
269
  ```
270
270
 
271
271
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=l2cdoYMHRWll3DOa2eOy6hY7gyBhBUPZb1psKIrHHFI,15521
1
+ ccxt/__init__.py,sha256=sne7AqnQxLmKq1X0Wf_OMRRHXwKstdS91uONapDmeWs,15521
2
2
  ccxt/ace.py,sha256=Xisv0lJgU05Ir1H00uwBDsBC7H6-1Qdv7x2qKgVv64Y,41499
3
3
  ccxt/alpaca.py,sha256=H7GYF2I-ci7WgtFHG3G74vGL8qbfIYkFI5EJrnrGWdA,33648
4
4
  ccxt/ascendex.py,sha256=01s6du4Jb3KA_iJi-_RDzYnUzApyB60Z7FnstNQLbV0,132963
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=-d6ePbJCvRCoTEz0_4DaAunBGumu7V7GFEF4yubfa-8,398374
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=RoC8nReBHXUJzRNyqMe4vhta6gLGuh1fyFkI8FOMKBE,2151
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
11
- ccxt/bingx.py,sha256=KR30rxdIWHTruNuiyhB230JixJQAlJO1EokqTCEL_vU,112407
11
+ ccxt/bingx.py,sha256=ADq-5rxbDi3bPtFDQrGYGWJWv5hiHO5ObiCtXi3S0wo,112856
12
12
  ccxt/bit2c.py,sha256=i3KTftaZo0wA7hFDA6ByR-XSMg0DWnulDeE6HdGXxsI,35848
13
13
  ccxt/bitbank.py,sha256=USh3XJcwuXSm9F7eDHMSMw9xkWevDc--J6Lgn4m3KYU,39405
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -58,7 +58,7 @@ ccxt/digifinex.py,sha256=8T4BmCRqFSY_kNnf__kcskaBTzNDzvPf_zNmR2rwm3o,151393
58
58
  ccxt/exmo.py,sha256=nPepx_UuidmUorcMTE_mhPuOZMst4MNZAGOT8-0NmeE,88644
59
59
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
60
60
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
61
- ccxt/gate.py,sha256=kn6aIL0pdtllt_YWjULDueT1H3V1XDqeNdKA1mF56Io,260325
61
+ ccxt/gate.py,sha256=7mEhQZZUCVsgcVC8oxY7YDXHOXAnZXipuMXAlmijA9Q,262151
62
62
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
63
63
  ccxt/gemini.py,sha256=-huywMkpuitLZOUIJLjrKxNTooTn8nM-qLV1sLjUyp4,74061
64
64
  ccxt/hitbtc.py,sha256=5jR_sWSALrlFEs0X_SOT0ojrxeDjhW-9FFqmiSAukvU,126498
@@ -101,7 +101,7 @@ ccxt/tokocrypto.py,sha256=-g0eyDasanqa2Ni3whEnez1IQiuVeKmOQhEV7hMNE4E,121652
101
101
  ccxt/upbit.py,sha256=YpzO98GaVnSnJ4Rp2NO4FXRDtWMILr-sAxu-I3QVHhQ,75839
102
102
  ccxt/wavesexchange.py,sha256=efzFFrjlzhwoMkJEgalewR3j3iuqoJjQjAh8oCjJcwg,112924
103
103
  ccxt/wazirx.py,sha256=7wGV00xbSVnbbeYsw3lH9IyBa1E15dMwPa1qBLYgx9c,35743
104
- ccxt/whitebit.py,sha256=6sSQGWPZZo0eWmqSe7DBZ8iiGauhRsMuWfvscPd941s,98162
104
+ ccxt/whitebit.py,sha256=pSCtmXwO2Js8QXKvgzQzEVYhJpTxSIA5pH79emV4uSA,98318
105
105
  ccxt/woo.py,sha256=z1KmyemlOZXinwx7iMVJI0Rr3niRq15HwZ532joyxFE,105268
106
106
  ccxt/yobit.py,sha256=fR2NGmJnY9zhma02vJMh1Z1q9wfPz3-ssGLbfhKC5bo,51830
107
107
  ccxt/zaif.py,sha256=OWdPjhPAbCuYqjfqutqRZ-dxwUNaTqI3AZirJpQgmvs,28888
@@ -165,8 +165,8 @@ ccxt/abstract/deribit.py,sha256=rS_982u8dOVsh2vGSB5TO7K8Tye0Alq-Rg9fYZwz8hg,1549
165
165
  ccxt/abstract/digifinex.py,sha256=2tlP2G6Niu6TSbNUcgxvXdHfln6VhAZliXV7upFwpas,9386
166
166
  ccxt/abstract/exmo.py,sha256=yq9zis5G9Qjsecs-YSHAghDjad6y52jFteWSBJZFg8o,6177
167
167
  ccxt/abstract/fmfwio.py,sha256=-bjb83y_4FGdHtHMo-naHYoI5JyltlF2M-TzjAZJ3Hg,10949
168
- ccxt/abstract/gate.py,sha256=c6k6EJqNLp9CkqWq9KYjCNJUkWHr0a51S6tQ38Jwm-o,33517
169
- ccxt/abstract/gateio.py,sha256=c6k6EJqNLp9CkqWq9KYjCNJUkWHr0a51S6tQ38Jwm-o,33517
168
+ ccxt/abstract/gate.py,sha256=-c44Lxt05-rvQaGhD57U1LyMyoC0m6bU6_IsiujbKpo,37155
169
+ ccxt/abstract/gateio.py,sha256=-c44Lxt05-rvQaGhD57U1LyMyoC0m6bU6_IsiujbKpo,37155
170
170
  ccxt/abstract/gemini.py,sha256=6TyBUDw-e4b02J5ToCX0eaXQfF0Knvkf7ToLcseqcIY,6915
171
171
  ccxt/abstract/hitbtc.py,sha256=-bjb83y_4FGdHtHMo-naHYoI5JyltlF2M-TzjAZJ3Hg,10949
172
172
  ccxt/abstract/hitbtc3.py,sha256=-bjb83y_4FGdHtHMo-naHYoI5JyltlF2M-TzjAZJ3Hg,10949
@@ -213,7 +213,7 @@ ccxt/abstract/woo.py,sha256=Z3ua45hKE0Tf9rtfSEYYgGEztaTO1Ri3mKl_hIo3OHs,8768
213
213
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
214
214
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
215
215
  ccxt/abstract/zonda.py,sha256=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
216
- ccxt/async_support/__init__.py,sha256=gdPy0C5Gn8QGDGngZ03EA-VAexqF3pVtbeu-TuQJu3U,15304
216
+ ccxt/async_support/__init__.py,sha256=RSS8-rDCstnbePenockEwUPMhoxGJHxNLYDbbuoddlQ,15304
217
217
  ccxt/async_support/ace.py,sha256=GfB1wI9oK_nmj2IH-J1KYXkg8qjzWlWK7SaMuZCWRdk,41723
218
218
  ccxt/async_support/alpaca.py,sha256=frGPbeZHd2nEN9Q45phgnNOmU4Brh9e_FgDEEFnRyVM,33794
219
219
  ccxt/async_support/ascendex.py,sha256=Cv4Okc5hRD23CVReRIT9vrI_4hWtvTyOWts5XXohW_c,133595
@@ -223,7 +223,7 @@ ccxt/async_support/binance.py,sha256=KSc-Z39r6VK6HPoi2_JGJcC59YSs49bTbm90gmZyBJM
223
223
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
224
224
  ccxt/async_support/binanceus.py,sha256=Jtyl0jtSOpdjAAAYcSUzH6YRVxe88RJ6f4_IUge5gWg,2165
225
225
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
226
- ccxt/async_support/bingx.py,sha256=IeFbN49z6OWLBKp5yS3B_G_OipbrePgIIddFGA5p-M4,113101
226
+ ccxt/async_support/bingx.py,sha256=fINB2Xws8RVPjmLnzrzo2JvquC_mglIp_DYZBw5zBIs,113550
227
227
  ccxt/async_support/bit2c.py,sha256=BjoSNY-lVr3Fh45F-QEyKvCBy94t14dV6uzG89te9xI,36054
228
228
  ccxt/async_support/bitbank.py,sha256=FN-4xLWqfUARmKFfrWV1s_0Luv4warSDLJmc1YYfxT8,39665
229
229
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -273,7 +273,7 @@ ccxt/async_support/digifinex.py,sha256=G3BoD3bB1a7gRN1KlHJyVMw5uUKQ2eSLsIcLBnrqX
273
273
  ccxt/async_support/exmo.py,sha256=ezih4gdfKN8nnP11N6-NpKk0ic9g9u0hpdLPR879Exs,89186
274
274
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
275
275
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
276
- ccxt/async_support/gate.py,sha256=JS5w-pnM-9ijULSPrTU_NjqoumMxNH7afTvBNgeWFgI,261283
276
+ ccxt/async_support/gate.py,sha256=BW2XFFGwnb3jCHAxA3KF0qozB7KG0_986sLX02AsulU,263109
277
277
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
278
278
  ccxt/async_support/gemini.py,sha256=Lg8YQf-3NSL8qcub6EG1Y9vhqS3x1bXFiVRwpdz3bXk,74551
279
279
  ccxt/async_support/hitbtc.py,sha256=BexA5IY_Bl82NMhIDpCmL10y9oBrJEqK5z5v5K0_Xqs,127184
@@ -316,13 +316,13 @@ ccxt/async_support/tokocrypto.py,sha256=3dllnzzV6Nyby4eysWOLOSFrtBXee30DuT1eiqST
316
316
  ccxt/async_support/upbit.py,sha256=r2cQ2WDQPvOsVPCxx2Uqfh9gtQLo1tGi7Ave1voFGpQ,76273
317
317
  ccxt/async_support/wavesexchange.py,sha256=5DZkkYA0NlmWkrD-6LiqFyZQNMK1m91sCw3xvsB4sf4,113474
318
318
  ccxt/async_support/wazirx.py,sha256=PFjb3U-hAbdE7YDTwA3LGqNcVmFoE2rYQjfr2PLfZJw,35991
319
- ccxt/async_support/whitebit.py,sha256=2Wf_qZ7-86UBtMCP_7qfhvJhIoebeIbSBTSg4ulT6IQ,98656
319
+ ccxt/async_support/whitebit.py,sha256=Rl7FznEGXOglxoFzXejns01Qhcn-ycYVJkBLd_rcukU,98812
320
320
  ccxt/async_support/woo.py,sha256=_UahOgG8CHaFXFKnuelUERs4_U-8sXvWvqGxayyAijc,105870
321
321
  ccxt/async_support/yobit.py,sha256=d9hY9Sam1tIdDyUavBz_LeO74vfKPFk5_-4gS5iwurU,52114
322
322
  ccxt/async_support/zaif.py,sha256=3iz6oNEYONAjhCLVKK13T1d2eQ0pklzgxCkkdqn5zyM,29070
323
323
  ccxt/async_support/zonda.py,sha256=BGNx6UYa19tDo_UBLPC6sJKirzTQsuQpdpzsXiVR0JE,79973
324
324
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
325
- ccxt/async_support/base/exchange.py,sha256=1eJMXCvOOMw7mesoFJKq5n3LqvX-wJS2q4oqBF0kpyg,145348
325
+ ccxt/async_support/base/exchange.py,sha256=utfY_WqnM2Am3B2kGK9EYcIRReSeeN5cW2nochAeiNI,145348
326
326
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
327
327
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
328
328
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=3YtsI6nV2ViYIZB7sGaowpoiF9Xaf93gHXH98253mJQ,5011
@@ -336,10 +336,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GH-475Ni0mLOx7mUDnz4jjzaGkh
336
336
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
337
337
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
338
338
  ccxt/base/errors.py,sha256=2KC_p5UunRhrgPfEEHtE-II2buIPqKJUjQZHiIdAhog,3523
339
- ccxt/base/exchange.py,sha256=wGeWbLHTALnTo6fU-WwmuL7q8Y8wJ2YhmSI9GGhH618,185174
339
+ ccxt/base/exchange.py,sha256=siAbA7AcF-7B-gQ1rm7x29W-C-asOx0B2MY2kyzozJ8,185174
340
340
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
341
341
  ccxt/base/types.py,sha256=NQMNi7eE7XvF3LzOLkYflWL_4etzbGQgSCdp1hm0sD4,2109
342
- ccxt/pro/__init__.py,sha256=JfOx9btMPUs83jbGrbq8_8QnU6PnVwtJDLrWJ5tHt3Q,6480
342
+ ccxt/pro/__init__.py,sha256=7vCA2ZAlepWYUbhpv0RWJt8XojzycGh2ERS5qtYIlmA,6480
343
343
  ccxt/pro/alpaca.py,sha256=OO5fBSjG89OmlSY_6gy20BCs3hJMF8kWkeHtxM-JaTY,26762
344
344
  ccxt/pro/ascendex.py,sha256=KrTNXPurOm4EySkSV8pIg8CcQ2BBFyPZ15Hbce6HSSQ,34569
345
345
  ccxt/pro/bequant.py,sha256=3IeQ0vPg-eVqPiGMfX7yqH9qtXKm1ZqocQDeLwpA8EE,1093
@@ -391,7 +391,7 @@ ccxt/pro/mexc3.py,sha256=SFCoEPWnmrD-DKTYEhEicld2aTX6s8SZHxTWeCdozwI,388
391
391
  ccxt/pro/ndax.py,sha256=Iq9alo8njEmYSI8WMmicut2eLPsHBPG82YYLi-iNbZw,22682
392
392
  ccxt/pro/okcoin.py,sha256=G-JrfC50gcLYHj99oYnJPY7RZl5_JtFY7yWiB2zpIUA,30265
393
393
  ccxt/pro/okex.py,sha256=mKJJEfmOzmt31KyDIPVRuAqV_mL280pc2mbRz5h2oOg,382
394
- ccxt/pro/okx.py,sha256=cwmVTDqUITJJNd_MGWAwYyB52hk2z8l8OIfEsfG6Hx4,56056
394
+ ccxt/pro/okx.py,sha256=J2iZgA93ZFeRzk-iyDirzTew9hYq7WN3__Wd4GXkrgI,56228
395
395
  ccxt/pro/phemex.py,sha256=bfKMh4hzMeT2Q6DbpzqWaLv-Oc2F6eK52HBNTM5bzzs,59923
396
396
  ccxt/pro/poloniex.py,sha256=K3zW2c8jGIK_SkC4lxaSwvVqL3iqiMyoQS-057SzlhE,41682
397
397
  ccxt/pro/poloniexfutures.py,sha256=abjDkiqaKvBChcDSZ_wKbW4fJyERmtHqhnfbdZLhcOs,40313
@@ -450,7 +450,7 @@ ccxt/test/base/test_ticker.py,sha256=h9AV_O6s-Ax3vB3sFoN0Mz22rMOi65i9BDv0SNejH98
450
450
  ccxt/test/base/test_trade.py,sha256=rOEbyHLvsB-rh7X7WOcfeOV_3MOGq_0s4ovg2SRk-2I,2284
451
451
  ccxt/test/base/test_trading_fee.py,sha256=2_WCp3qJ2UpraQQoGFlGJYwHD-T0Bm5W7KIw4zpFvSM,1068
452
452
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
453
- ccxt-4.0.76.dist-info/METADATA,sha256=-YXtJ638jZ77nWIafeMntFtClUll8gA-QqeUMcTYy-g,110642
454
- ccxt-4.0.76.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
- ccxt-4.0.76.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
- ccxt-4.0.76.dist-info/RECORD,,
453
+ ccxt-4.0.77.dist-info/METADATA,sha256=h8E1-bsyn9La_g8_UEJYhZu1ZVU3miL7vbkyNyV-9XM,110642
454
+ ccxt-4.0.77.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
455
+ ccxt-4.0.77.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
456
+ ccxt-4.0.77.dist-info/RECORD,,
File without changes