ccxt 4.3.44__py2.py3-none-any.whl → 4.3.46__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.
Files changed (56) hide show
  1. ccxt/__init__.py +3 -1
  2. ccxt/abstract/binance.py +2 -0
  3. ccxt/abstract/binancecoinm.py +2 -0
  4. ccxt/abstract/binanceus.py +2 -0
  5. ccxt/abstract/binanceusdm.py +2 -0
  6. ccxt/abstract/bitstamp.py +18 -2
  7. ccxt/abstract/kucoin.py +14 -0
  8. ccxt/abstract/kucoinfutures.py +14 -0
  9. ccxt/abstract/mexc.py +2 -0
  10. ccxt/abstract/oxfun.py +34 -0
  11. ccxt/async_support/__init__.py +3 -1
  12. ccxt/async_support/base/exchange.py +1 -1
  13. ccxt/async_support/binance.py +2 -0
  14. ccxt/async_support/bingx.py +26 -18
  15. ccxt/async_support/bitmart.py +4 -0
  16. ccxt/async_support/bitstamp.py +18 -2
  17. ccxt/async_support/bitteam.py +6 -8
  18. ccxt/async_support/coinmetro.py +9 -18
  19. ccxt/async_support/hyperliquid.py +31 -23
  20. ccxt/async_support/idex.py +1 -0
  21. ccxt/async_support/kucoin.py +27 -1
  22. ccxt/async_support/luno.py +9 -1
  23. ccxt/async_support/mexc.py +8 -6
  24. ccxt/async_support/okx.py +1 -0
  25. ccxt/async_support/oxfun.py +2773 -0
  26. ccxt/async_support/tokocrypto.py +9 -11
  27. ccxt/async_support/wavesexchange.py +119 -105
  28. ccxt/async_support/woofipro.py +1 -0
  29. ccxt/async_support/xt.py +1 -1
  30. ccxt/base/exchange.py +1 -1
  31. ccxt/binance.py +2 -0
  32. ccxt/bingx.py +26 -18
  33. ccxt/bitmart.py +4 -0
  34. ccxt/bitstamp.py +18 -2
  35. ccxt/bitteam.py +6 -8
  36. ccxt/coinmetro.py +9 -18
  37. ccxt/hyperliquid.py +31 -23
  38. ccxt/idex.py +1 -0
  39. ccxt/kucoin.py +27 -1
  40. ccxt/luno.py +9 -1
  41. ccxt/mexc.py +8 -6
  42. ccxt/okx.py +1 -0
  43. ccxt/oxfun.py +2772 -0
  44. ccxt/pro/__init__.py +3 -1
  45. ccxt/pro/binanceus.py +0 -8
  46. ccxt/pro/oxfun.py +950 -0
  47. ccxt/test/test_async.py +17 -1
  48. ccxt/test/test_sync.py +17 -1
  49. ccxt/tokocrypto.py +9 -11
  50. ccxt/wavesexchange.py +119 -105
  51. ccxt/woofipro.py +1 -0
  52. ccxt/xt.py +1 -1
  53. {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/METADATA +131 -131
  54. {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/RECORD +56 -52
  55. {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/WHEEL +0 -0
  56. {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/top_level.txt +0 -0
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.44'
25
+ __version__ = '4.3.46'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -167,6 +167,7 @@ from ccxt.oceanex import oceanex # noqa: F4
167
167
  from ccxt.okcoin import okcoin # noqa: F401
168
168
  from ccxt.okx import okx # noqa: F401
169
169
  from ccxt.onetrading import onetrading # noqa: F401
170
+ from ccxt.oxfun import oxfun # noqa: F401
170
171
  from ccxt.p2b import p2b # noqa: F401
171
172
  from ccxt.paymium import paymium # noqa: F401
172
173
  from ccxt.phemex import phemex # noqa: F401
@@ -275,6 +276,7 @@ exchanges = [
275
276
  'okcoin',
276
277
  'okx',
277
278
  'onetrading',
279
+ 'oxfun',
278
280
  'p2b',
279
281
  'paymium',
280
282
  'phemex',
ccxt/abstract/binance.py CHANGED
@@ -616,6 +616,8 @@ class ImplicitAPI:
616
616
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
617
617
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
618
618
  private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
619
+ private_post_orderlist_oto = privatePostOrderListOto = Entry('orderList/oto', 'private', 'POST', {'cost': 0.2})
620
+ private_post_orderlist_otoco = privatePostOrderListOtoco = Entry('orderList/otoco', 'private', 'POST', {'cost': 0.2})
619
621
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
620
622
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
621
623
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -616,6 +616,8 @@ class ImplicitAPI:
616
616
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
617
617
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
618
618
  private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
619
+ private_post_orderlist_oto = privatePostOrderListOto = Entry('orderList/oto', 'private', 'POST', {'cost': 0.2})
620
+ private_post_orderlist_otoco = privatePostOrderListOtoco = Entry('orderList/otoco', 'private', 'POST', {'cost': 0.2})
619
621
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
620
622
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
621
623
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -668,6 +668,8 @@ class ImplicitAPI:
668
668
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
669
669
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
670
670
  private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
671
+ private_post_orderlist_oto = privatePostOrderListOto = Entry('orderList/oto', 'private', 'POST', {'cost': 0.2})
672
+ private_post_orderlist_otoco = privatePostOrderListOtoco = Entry('orderList/otoco', 'private', 'POST', {'cost': 0.2})
671
673
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
672
674
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
673
675
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -616,6 +616,8 @@ class ImplicitAPI:
616
616
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
617
617
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
618
618
  private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
619
+ private_post_orderlist_oto = privatePostOrderListOto = Entry('orderList/oto', 'private', 'POST', {'cost': 0.2})
620
+ private_post_orderlist_otoco = privatePostOrderListOtoco = Entry('orderList/otoco', 'private', 'POST', {'cost': 0.2})
619
621
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
620
622
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
621
623
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
ccxt/abstract/bitstamp.py CHANGED
@@ -93,7 +93,7 @@ class ImplicitAPI:
93
93
  private_post_uni_withdrawal = privatePostUniWithdrawal = Entry('uni_withdrawal/', 'private', 'POST', {'cost': 1})
94
94
  private_post_uni_address = privatePostUniAddress = Entry('uni_address/', 'private', 'POST', {'cost': 1})
95
95
  private_post_yfi_withdrawal = privatePostYfiWithdrawal = Entry('yfi_withdrawal/', 'private', 'POST', {'cost': 1})
96
- private_post_yfi_address = privatePostYfiAddress = Entry('yfi_address', 'private', 'POST', {'cost': 1})
96
+ private_post_yfi_address = privatePostYfiAddress = Entry('yfi_address/', 'private', 'POST', {'cost': 1})
97
97
  private_post_audio_withdrawal = privatePostAudioWithdrawal = Entry('audio_withdrawal/', 'private', 'POST', {'cost': 1})
98
98
  private_post_audio_address = privatePostAudioAddress = Entry('audio_address/', 'private', 'POST', {'cost': 1})
99
99
  private_post_crv_withdrawal = privatePostCrvWithdrawal = Entry('crv_withdrawal/', 'private', 'POST', {'cost': 1})
@@ -102,7 +102,7 @@ class ImplicitAPI:
102
102
  private_post_algo_address = privatePostAlgoAddress = Entry('algo_address/', 'private', 'POST', {'cost': 1})
103
103
  private_post_comp_withdrawal = privatePostCompWithdrawal = Entry('comp_withdrawal/', 'private', 'POST', {'cost': 1})
104
104
  private_post_comp_address = privatePostCompAddress = Entry('comp_address/', 'private', 'POST', {'cost': 1})
105
- private_post_grt_withdrawal = privatePostGrtWithdrawal = Entry('grt_withdrawal', 'private', 'POST', {'cost': 1})
105
+ private_post_grt_withdrawal = privatePostGrtWithdrawal = Entry('grt_withdrawal/', 'private', 'POST', {'cost': 1})
106
106
  private_post_grt_address = privatePostGrtAddress = Entry('grt_address/', 'private', 'POST', {'cost': 1})
107
107
  private_post_usdt_withdrawal = privatePostUsdtWithdrawal = Entry('usdt_withdrawal/', 'private', 'POST', {'cost': 1})
108
108
  private_post_usdt_address = privatePostUsdtAddress = Entry('usdt_address/', 'private', 'POST', {'cost': 1})
@@ -240,3 +240,19 @@ class ImplicitAPI:
240
240
  private_post_vchf_address = privatePostVchfAddress = Entry('vchf_address/', 'private', 'POST', {'cost': 1})
241
241
  private_post_veur_withdrawal = privatePostVeurWithdrawal = Entry('veur_withdrawal/', 'private', 'POST', {'cost': 1})
242
242
  private_post_veur_address = privatePostVeurAddress = Entry('veur_address/', 'private', 'POST', {'cost': 1})
243
+ private_post_truf_withdrawal = privatePostTrufWithdrawal = Entry('truf_withdrawal/', 'private', 'POST', {'cost': 1})
244
+ private_post_truf_address = privatePostTrufAddress = Entry('truf_address/', 'private', 'POST', {'cost': 1})
245
+ private_post_wif_withdrawal = privatePostWifWithdrawal = Entry('wif_withdrawal/', 'private', 'POST', {'cost': 1})
246
+ private_post_wif_address = privatePostWifAddress = Entry('wif_address/', 'private', 'POST', {'cost': 1})
247
+ private_post_smt_withdrawal = privatePostSmtWithdrawal = Entry('smt_withdrawal/', 'private', 'POST', {'cost': 1})
248
+ private_post_smt_address = privatePostSmtAddress = Entry('smt_address/', 'private', 'POST', {'cost': 1})
249
+ private_post_sui_withdrawal = privatePostSuiWithdrawal = Entry('sui_withdrawal/', 'private', 'POST', {'cost': 1})
250
+ private_post_sui_address = privatePostSuiAddress = Entry('sui_address/', 'private', 'POST', {'cost': 1})
251
+ private_post_jup_withdrawal = privatePostJupWithdrawal = Entry('jup_withdrawal/', 'private', 'POST', {'cost': 1})
252
+ private_post_jup_address = privatePostJupAddress = Entry('jup_address/', 'private', 'POST', {'cost': 1})
253
+ private_post_ondo_withdrawal = privatePostOndoWithdrawal = Entry('ondo_withdrawal/', 'private', 'POST', {'cost': 1})
254
+ private_post_ondo_address = privatePostOndoAddress = Entry('ondo_address/', 'private', 'POST', {'cost': 1})
255
+ private_post_boba_withdrawal = privatePostBobaWithdrawal = Entry('boba_withdrawal/', 'private', 'POST', {'cost': 1})
256
+ private_post_boba_address = privatePostBobaAddress = Entry('boba_address/', 'private', 'POST', {'cost': 1})
257
+ private_post_pyth_withdrawal = privatePostPythWithdrawal = Entry('pyth_withdrawal/', 'private', 'POST', {'cost': 1})
258
+ private_post_pyth_address = privatePostPythAddress = Entry('pyth_address/', 'private', 'POST', {'cost': 1})
ccxt/abstract/kucoin.py CHANGED
@@ -193,8 +193,22 @@ class ImplicitAPI:
193
193
  broker_get_broker_nd_account = brokerGetBrokerNdAccount = Entry('broker/nd/account', 'broker', 'GET', {'cost': 2})
194
194
  broker_get_broker_nd_account_apikey = brokerGetBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'GET', {'cost': 2})
195
195
  broker_get_broker_nd_rebase_download = brokerGetBrokerNdRebaseDownload = Entry('broker/nd/rebase/download', 'broker', 'GET', {'cost': 3})
196
+ broker_get_broker_nd_transfer_detail = brokerGetBrokerNdTransferDetail = Entry('broker/nd/transfer/detail', 'broker', 'GET', {'cost': 1})
197
+ broker_get_broker_nd_deposit_detail = brokerGetBrokerNdDepositDetail = Entry('broker/nd/deposit/detail', 'broker', 'GET', {'cost': 1})
198
+ broker_get_broker_nd_withdraw_detail = brokerGetBrokerNdWithdrawDetail = Entry('broker/nd/withdraw/detail', 'broker', 'GET', {'cost': 1})
196
199
  broker_post_broker_nd_transfer = brokerPostBrokerNdTransfer = Entry('broker/nd/transfer', 'broker', 'POST', {'cost': 1})
197
200
  broker_post_broker_nd_account = brokerPostBrokerNdAccount = Entry('broker/nd/account', 'broker', 'POST', {'cost': 3})
198
201
  broker_post_broker_nd_account_apikey = brokerPostBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'POST', {'cost': 3})
199
202
  broker_post_broker_nd_account_update_apikey = brokerPostBrokerNdAccountUpdateApikey = Entry('broker/nd/account/update-apikey', 'broker', 'POST', {'cost': 3})
200
203
  broker_delete_broker_nd_account_apikey = brokerDeleteBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'DELETE', {'cost': 3})
204
+ earn_get_otc_loan_loan = earnGetOtcLoanLoan = Entry('otc-loan/loan', 'earn', 'GET', {'cost': 1})
205
+ earn_get_otc_loan_accounts = earnGetOtcLoanAccounts = Entry('otc-loan/accounts', 'earn', 'GET', {'cost': 1})
206
+ earn_get_earn_redeem_preview = earnGetEarnRedeemPreview = Entry('earn/redeem-preview', 'earn', 'GET', {'cost': 7.5})
207
+ earn_get_earn_saving_products = earnGetEarnSavingProducts = Entry('earn/saving/products', 'earn', 'GET', {'cost': 7.5})
208
+ earn_get_earn_hold_assets = earnGetEarnHoldAssets = Entry('earn/hold-assets', 'earn', 'GET', {'cost': 7.5})
209
+ earn_get_earn_promotion_products = earnGetEarnPromotionProducts = Entry('earn/promotion/products', 'earn', 'GET', {'cost': 7.5})
210
+ earn_get_earn_kcs_staking_products = earnGetEarnKcsStakingProducts = Entry('earn/kcs-staking/products', 'earn', 'GET', {'cost': 7.5})
211
+ earn_get_earn_staking_products = earnGetEarnStakingProducts = Entry('earn/staking/products', 'earn', 'GET', {'cost': 7.5})
212
+ earn_get_earn_eth_staking_products = earnGetEarnEthStakingProducts = Entry('earn/eth-staking/products', 'earn', 'GET', {'cost': 7.5})
213
+ earn_post_earn_orders = earnPostEarnOrders = Entry('earn/orders', 'earn', 'POST', {'cost': 7.5})
214
+ earn_delete_earn_orders = earnDeleteEarnOrders = Entry('earn/orders', 'earn', 'DELETE', {'cost': 7.5})
@@ -212,8 +212,22 @@ class ImplicitAPI:
212
212
  broker_get_broker_nd_account = brokerGetBrokerNdAccount = Entry('broker/nd/account', 'broker', 'GET', {'cost': 2})
213
213
  broker_get_broker_nd_account_apikey = brokerGetBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'GET', {'cost': 2})
214
214
  broker_get_broker_nd_rebase_download = brokerGetBrokerNdRebaseDownload = Entry('broker/nd/rebase/download', 'broker', 'GET', {'cost': 3})
215
+ broker_get_broker_nd_transfer_detail = brokerGetBrokerNdTransferDetail = Entry('broker/nd/transfer/detail', 'broker', 'GET', {'cost': 1})
216
+ broker_get_broker_nd_deposit_detail = brokerGetBrokerNdDepositDetail = Entry('broker/nd/deposit/detail', 'broker', 'GET', {'cost': 1})
217
+ broker_get_broker_nd_withdraw_detail = brokerGetBrokerNdWithdrawDetail = Entry('broker/nd/withdraw/detail', 'broker', 'GET', {'cost': 1})
215
218
  broker_post_broker_nd_transfer = brokerPostBrokerNdTransfer = Entry('broker/nd/transfer', 'broker', 'POST', {'cost': 1})
216
219
  broker_post_broker_nd_account = brokerPostBrokerNdAccount = Entry('broker/nd/account', 'broker', 'POST', {'cost': 3})
217
220
  broker_post_broker_nd_account_apikey = brokerPostBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'POST', {'cost': 3})
218
221
  broker_post_broker_nd_account_update_apikey = brokerPostBrokerNdAccountUpdateApikey = Entry('broker/nd/account/update-apikey', 'broker', 'POST', {'cost': 3})
219
222
  broker_delete_broker_nd_account_apikey = brokerDeleteBrokerNdAccountApikey = Entry('broker/nd/account/apikey', 'broker', 'DELETE', {'cost': 3})
223
+ earn_get_otc_loan_loan = earnGetOtcLoanLoan = Entry('otc-loan/loan', 'earn', 'GET', {'cost': 1})
224
+ earn_get_otc_loan_accounts = earnGetOtcLoanAccounts = Entry('otc-loan/accounts', 'earn', 'GET', {'cost': 1})
225
+ earn_get_earn_redeem_preview = earnGetEarnRedeemPreview = Entry('earn/redeem-preview', 'earn', 'GET', {'cost': 7.5})
226
+ earn_get_earn_saving_products = earnGetEarnSavingProducts = Entry('earn/saving/products', 'earn', 'GET', {'cost': 7.5})
227
+ earn_get_earn_hold_assets = earnGetEarnHoldAssets = Entry('earn/hold-assets', 'earn', 'GET', {'cost': 7.5})
228
+ earn_get_earn_promotion_products = earnGetEarnPromotionProducts = Entry('earn/promotion/products', 'earn', 'GET', {'cost': 7.5})
229
+ earn_get_earn_kcs_staking_products = earnGetEarnKcsStakingProducts = Entry('earn/kcs-staking/products', 'earn', 'GET', {'cost': 7.5})
230
+ earn_get_earn_staking_products = earnGetEarnStakingProducts = Entry('earn/staking/products', 'earn', 'GET', {'cost': 7.5})
231
+ earn_get_earn_eth_staking_products = earnGetEarnEthStakingProducts = Entry('earn/eth-staking/products', 'earn', 'GET', {'cost': 7.5})
232
+ earn_post_earn_orders = earnPostEarnOrders = Entry('earn/orders', 'earn', 'POST', {'cost': 7.5})
233
+ earn_delete_earn_orders = earnDeleteEarnOrders = Entry('earn/orders', 'earn', 'DELETE', {'cost': 7.5})
ccxt/abstract/mexc.py CHANGED
@@ -64,6 +64,7 @@ class ImplicitAPI:
64
64
  spot_private_post_sub_account_margin = spotPrivatePostSubAccountMargin = Entry('sub-account/margin', ['spot', 'private'], 'POST', {'cost': 1})
65
65
  spot_private_post_batchorders = spotPrivatePostBatchOrders = Entry('batchOrders', ['spot', 'private'], 'POST', {'cost': 10})
66
66
  spot_private_post_capital_withdraw_apply = spotPrivatePostCapitalWithdrawApply = Entry('capital/withdraw/apply', ['spot', 'private'], 'POST', {'cost': 1})
67
+ spot_private_post_capital_withdraw = spotPrivatePostCapitalWithdraw = Entry('capital/withdraw', ['spot', 'private'], 'POST', {'cost': 1})
67
68
  spot_private_post_capital_transfer = spotPrivatePostCapitalTransfer = Entry('capital/transfer', ['spot', 'private'], 'POST', {'cost': 1})
68
69
  spot_private_post_capital_transfer_internal = spotPrivatePostCapitalTransferInternal = Entry('capital/transfer/internal', ['spot', 'private'], 'POST', {'cost': 1})
69
70
  spot_private_post_capital_deposit_address = spotPrivatePostCapitalDepositAddress = Entry('capital/deposit/address', ['spot', 'private'], 'POST', {'cost': 1})
@@ -78,6 +79,7 @@ class ImplicitAPI:
78
79
  spot_private_delete_margin_order = spotPrivateDeleteMarginOrder = Entry('margin/order', ['spot', 'private'], 'DELETE', {'cost': 1})
79
80
  spot_private_delete_margin_openorders = spotPrivateDeleteMarginOpenOrders = Entry('margin/openOrders', ['spot', 'private'], 'DELETE', {'cost': 1})
80
81
  spot_private_delete_userdatastream = spotPrivateDeleteUserDataStream = Entry('userDataStream', ['spot', 'private'], 'DELETE', {'cost': 1})
82
+ spot_private_delete_capital_withdraw = spotPrivateDeleteCapitalWithdraw = Entry('capital/withdraw', ['spot', 'private'], 'DELETE', {'cost': 1})
81
83
  contract_public_get_ping = contractPublicGetPing = Entry('ping', ['contract', 'public'], 'GET', {'cost': 2})
82
84
  contract_public_get_detail = contractPublicGetDetail = Entry('detail', ['contract', 'public'], 'GET', {'cost': 100})
83
85
  contract_public_get_support_currencies = contractPublicGetSupportCurrencies = Entry('support_currencies', ['contract', 'public'], 'GET', {'cost': 2})
ccxt/abstract/oxfun.py ADDED
@@ -0,0 +1,34 @@
1
+ from ccxt.base.types import Entry
2
+
3
+
4
+ class ImplicitAPI:
5
+ public_get_v3_markets = publicGetV3Markets = Entry('v3/markets', 'public', 'GET', {'cost': 1})
6
+ public_get_v3_assets = publicGetV3Assets = Entry('v3/assets', 'public', 'GET', {'cost': 1})
7
+ public_get_v3_tickers = publicGetV3Tickers = Entry('v3/tickers', 'public', 'GET', {'cost': 1})
8
+ public_get_v3_funding_estimates = publicGetV3FundingEstimates = Entry('v3/funding/estimates', 'public', 'GET', {'cost': 1})
9
+ public_get_v3_candles = publicGetV3Candles = Entry('v3/candles', 'public', 'GET', {'cost': 1})
10
+ public_get_v3_depth = publicGetV3Depth = Entry('v3/depth', 'public', 'GET', {'cost': 1})
11
+ public_get_v3_markets_operational = publicGetV3MarketsOperational = Entry('v3/markets/operational', 'public', 'GET', {'cost': 1})
12
+ public_get_v3_exchange_trades = publicGetV3ExchangeTrades = Entry('v3/exchange-trades', 'public', 'GET', {'cost': 1})
13
+ public_get_v3_funding_rates = publicGetV3FundingRates = Entry('v3/funding/rates', 'public', 'GET', {'cost': 1})
14
+ public_get_v3_leverage_tiers = publicGetV3LeverageTiers = Entry('v3/leverage/tiers', 'public', 'GET', {'cost': 1})
15
+ private_get_v3_account = privateGetV3Account = Entry('v3/account', 'private', 'GET', {'cost': 1})
16
+ private_get_v3_account_names = privateGetV3AccountNames = Entry('v3/account/names', 'private', 'GET', {'cost': 1})
17
+ private_get_v3_wallet = privateGetV3Wallet = Entry('v3/wallet', 'private', 'GET', {'cost': 1})
18
+ private_get_v3_transfer = privateGetV3Transfer = Entry('v3/transfer', 'private', 'GET', {'cost': 1})
19
+ private_get_v3_balances = privateGetV3Balances = Entry('v3/balances', 'private', 'GET', {'cost': 1})
20
+ private_get_v3_positions = privateGetV3Positions = Entry('v3/positions', 'private', 'GET', {'cost': 1})
21
+ private_get_v3_funding = privateGetV3Funding = Entry('v3/funding', 'private', 'GET', {'cost': 1})
22
+ private_get_v3_deposit_addresses = privateGetV3DepositAddresses = Entry('v3/deposit-addresses', 'private', 'GET', {'cost': 1})
23
+ private_get_v3_deposit = privateGetV3Deposit = Entry('v3/deposit', 'private', 'GET', {'cost': 1})
24
+ private_get_v3_withdrawal_addresses = privateGetV3WithdrawalAddresses = Entry('v3/withdrawal-addresses', 'private', 'GET', {'cost': 1})
25
+ private_get_v3_withdrawal = privateGetV3Withdrawal = Entry('v3/withdrawal', 'private', 'GET', {'cost': 1})
26
+ private_get_v3_withdrawal_fees = privateGetV3WithdrawalFees = Entry('v3/withdrawal-fees', 'private', 'GET', {'cost': 1})
27
+ private_get_v3_orders_status = privateGetV3OrdersStatus = Entry('v3/orders/status', 'private', 'GET', {'cost': 1})
28
+ private_get_v3_orders_working = privateGetV3OrdersWorking = Entry('v3/orders/working', 'private', 'GET', {'cost': 1})
29
+ private_get_v3_trades = privateGetV3Trades = Entry('v3/trades', 'private', 'GET', {'cost': 1})
30
+ private_post_v3_transfer = privatePostV3Transfer = Entry('v3/transfer', 'private', 'POST', {'cost': 1})
31
+ private_post_v3_withdrawal = privatePostV3Withdrawal = Entry('v3/withdrawal', 'private', 'POST', {'cost': 1})
32
+ private_post_v3_orders_place = privatePostV3OrdersPlace = Entry('v3/orders/place', 'private', 'POST', {'cost': 1})
33
+ private_delete_v3_orders_cancel = privateDeleteV3OrdersCancel = Entry('v3/orders/cancel', 'private', 'DELETE', {'cost': 1})
34
+ private_delete_v3_orders_cancel_all = privateDeleteV3OrdersCancelAll = Entry('v3/orders/cancel-all', 'private', 'DELETE', {'cost': 1})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.44'
7
+ __version__ = '4.3.46'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -147,6 +147,7 @@ from ccxt.async_support.oceanex import oceanex
147
147
  from ccxt.async_support.okcoin import okcoin # noqa: F401
148
148
  from ccxt.async_support.okx import okx # noqa: F401
149
149
  from ccxt.async_support.onetrading import onetrading # noqa: F401
150
+ from ccxt.async_support.oxfun import oxfun # noqa: F401
150
151
  from ccxt.async_support.p2b import p2b # noqa: F401
151
152
  from ccxt.async_support.paymium import paymium # noqa: F401
152
153
  from ccxt.async_support.phemex import phemex # noqa: F401
@@ -255,6 +256,7 @@ exchanges = [
255
256
  'okcoin',
256
257
  'okx',
257
258
  'onetrading',
259
+ 'oxfun',
258
260
  'p2b',
259
261
  'paymium',
260
262
  'phemex',
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.44'
5
+ __version__ = '4.3.46'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1011,6 +1011,8 @@ class binance(Exchange, ImplicitAPI):
1011
1011
  'post': {
1012
1012
  'order/oco': 0.2,
1013
1013
  'orderList/oco': 0.2,
1014
+ 'orderList/oto': 0.2,
1015
+ 'orderList/otoco': 0.2,
1014
1016
  'sor/order': 0.2,
1015
1017
  'sor/order/test': 0.2,
1016
1018
  'order': 0.2,
@@ -22,7 +22,7 @@ from ccxt.base.errors import OrderNotFound
22
22
  from ccxt.base.errors import NotSupported
23
23
  from ccxt.base.errors import OperationFailed
24
24
  from ccxt.base.errors import DDoSProtection
25
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES
25
+ from ccxt.base.decimal_to_precision import TICK_SIZE
26
26
  from ccxt.base.precise import Precise
27
27
 
28
28
 
@@ -400,7 +400,7 @@ class bingx(Exchange, ImplicitAPI):
400
400
  '1w': '1w',
401
401
  '1M': '1M',
402
402
  },
403
- 'precisionMode': DECIMAL_PLACES,
403
+ 'precisionMode': TICK_SIZE,
404
404
  'exceptions': {
405
405
  'exact': {
406
406
  '400': BadRequest,
@@ -616,18 +616,26 @@ class bingx(Exchange, ImplicitAPI):
616
616
  # "msg": "",
617
617
  # "data": [
618
618
  # {
619
- # "contractId": "100",
620
- # "symbol": "BTC-USDT",
621
- # "size": "0.0001",
622
- # "quantityPrecision": 4,
623
- # "pricePrecision": 1,
624
- # "feeRate": 0.0005,
625
- # "tradeMinLimit": 1,
626
- # "maxLongLeverage": 150,
627
- # "maxShortLeverage": 150,
628
- # "currency": "USDT",
629
- # "asset": "BTC",
630
- # "status": 1
619
+ # "contractId": "100",
620
+ # "symbol": "BTC-USDT",
621
+ # "size": "0.0001",
622
+ # "quantityPrecision": "4",
623
+ # "pricePrecision": "1",
624
+ # "feeRate": "0.0005",
625
+ # "makerFeeRate": "0.0002",
626
+ # "takerFeeRate": "0.0005",
627
+ # "tradeMinLimit": "0",
628
+ # "tradeMinQuantity": "0.0001",
629
+ # "tradeMinUSDT": "2",
630
+ # "maxLongLeverage": "125",
631
+ # "maxShortLeverage": "125",
632
+ # "currency": "USDT",
633
+ # "asset": "BTC",
634
+ # "status": "1",
635
+ # "apiStateOpen": "true",
636
+ # "apiStateClose": "true",
637
+ # "ensureTrigger": True,
638
+ # "triggerFeeRate": "0.00020000"
631
639
  # },
632
640
  # ...
633
641
  # ]
@@ -645,12 +653,12 @@ class bingx(Exchange, ImplicitAPI):
645
653
  quote = self.safe_currency_code(quoteId)
646
654
  currency = self.safe_string(market, 'currency')
647
655
  settle = self.safe_currency_code(currency)
648
- pricePrecision = self.safe_integer(market, 'pricePrecision')
656
+ pricePrecision = self.safe_number(market, 'tickSize')
649
657
  if pricePrecision is None:
650
- pricePrecision = self.precision_from_string(self.safe_string(market, 'tickSize'))
651
- quantityPrecision = self.safe_integer(market, 'quantityPrecision')
658
+ pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'pricePrecision')))
659
+ quantityPrecision = self.safe_number(market, 'stepSize')
652
660
  if quantityPrecision is None:
653
- quantityPrecision = self.precision_from_string(self.safe_string(market, 'stepSize'))
661
+ quantityPrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'quantityPrecision')))
654
662
  type = 'swap' if (settle is not None) else 'spot'
655
663
  spot = type == 'spot'
656
664
  swap = type == 'swap'
@@ -2594,6 +2594,10 @@ class bitmart(Exchange, ImplicitAPI):
2594
2594
  request['type'] = 'limit_maker'
2595
2595
  if ioc:
2596
2596
  request['type'] = 'ioc'
2597
+ clientOrderId = self.safe_string(params, 'clientOrderId')
2598
+ if clientOrderId is not None:
2599
+ params = self.omit(params, 'clientOrderId')
2600
+ request['client_order_id'] = clientOrderId
2597
2601
  return self.extend(request, params)
2598
2602
 
2599
2603
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
@@ -232,7 +232,7 @@ class bitstamp(Exchange, ImplicitAPI):
232
232
  'uni_withdrawal/': 1,
233
233
  'uni_address/': 1,
234
234
  'yfi_withdrawal/': 1,
235
- 'yfi_address': 1,
235
+ 'yfi_address/': 1,
236
236
  'audio_withdrawal/': 1,
237
237
  'audio_address/': 1,
238
238
  'crv_withdrawal/': 1,
@@ -241,7 +241,7 @@ class bitstamp(Exchange, ImplicitAPI):
241
241
  'algo_address/': 1,
242
242
  'comp_withdrawal/': 1,
243
243
  'comp_address/': 1,
244
- 'grt_withdrawal': 1,
244
+ 'grt_withdrawal/': 1,
245
245
  'grt_address/': 1,
246
246
  'usdt_withdrawal/': 1,
247
247
  'usdt_address/': 1,
@@ -379,6 +379,22 @@ class bitstamp(Exchange, ImplicitAPI):
379
379
  'vchf_address/': 1,
380
380
  'veur_withdrawal/': 1,
381
381
  'veur_address/': 1,
382
+ 'truf_withdrawal/': 1,
383
+ 'truf_address/': 1,
384
+ 'wif_withdrawal/': 1,
385
+ 'wif_address/': 1,
386
+ 'smt_withdrawal/': 1,
387
+ 'smt_address/': 1,
388
+ 'sui_withdrawal/': 1,
389
+ 'sui_address/': 1,
390
+ 'jup_withdrawal/': 1,
391
+ 'jup_address/': 1,
392
+ 'ondo_withdrawal/': 1,
393
+ 'ondo_address/': 1,
394
+ 'boba_withdrawal/': 1,
395
+ 'boba_address/': 1,
396
+ 'pyth_withdrawal/': 1,
397
+ 'pyth_address/': 1,
382
398
  },
383
399
  },
384
400
  },
@@ -15,7 +15,7 @@ from ccxt.base.errors import BadSymbol
15
15
  from ccxt.base.errors import InsufficientFunds
16
16
  from ccxt.base.errors import OrderNotFound
17
17
  from ccxt.base.errors import ExchangeNotAvailable
18
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES
18
+ from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
  from ccxt.base.precise import Precise
20
20
 
21
21
 
@@ -199,7 +199,7 @@ class bitteam(Exchange, ImplicitAPI):
199
199
  'maker': self.parse_number('0.002'),
200
200
  },
201
201
  },
202
- 'precisionMode': DECIMAL_PLACES,
202
+ 'precisionMode': TICK_SIZE,
203
203
  # exchange-specific options
204
204
  'options': {
205
205
  'networksById': {
@@ -358,8 +358,6 @@ class bitteam(Exchange, ImplicitAPI):
358
358
  base = self.safe_currency_code(baseId)
359
359
  quote = self.safe_currency_code(quoteId)
360
360
  active = self.safe_value(market, 'active')
361
- amountPrecision = self.safe_integer(market, 'baseStep')
362
- pricePrecision = self.safe_integer(market, 'quoteStep')
363
361
  timeStart = self.safe_string(market, 'timeStart')
364
362
  created = self.parse8601(timeStart)
365
363
  minCost = None
@@ -394,8 +392,8 @@ class bitteam(Exchange, ImplicitAPI):
394
392
  'strike': None,
395
393
  'optionType': None,
396
394
  'precision': {
397
- 'amount': amountPrecision,
398
- 'price': pricePrecision,
395
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'baseStep'))),
396
+ 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'quoteStep'))),
399
397
  },
400
398
  'limits': {
401
399
  'leverage': {
@@ -549,7 +547,7 @@ class bitteam(Exchange, ImplicitAPI):
549
547
  numericId = self.safe_integer(currency, 'id')
550
548
  code = self.safe_currency_code(id)
551
549
  active = self.safe_bool(currency, 'active', False)
552
- precision = self.safe_integer(currency, 'precision')
550
+ precision = self.parse_number(self.parse_precision(self.safe_string(currency, 'precision')))
553
551
  txLimits = self.safe_value(currency, 'txLimits', {})
554
552
  minWithdraw = self.safe_string(txLimits, 'minWithdraw')
555
553
  maxWithdraw = self.safe_string(txLimits, 'maxWithdraw')
@@ -569,7 +567,7 @@ class bitteam(Exchange, ImplicitAPI):
569
567
  withdraw = self.safe_value(statuses, 'withdrawStatus')
570
568
  networkIds = list(feesByNetworkId.keys())
571
569
  networks: dict = {}
572
- networkPrecision = self.safe_integer(currency, 'decimals')
570
+ networkPrecision = self.parse_number(self.parse_precision(self.safe_string(currency, 'decimals')))
573
571
  for j in range(0, len(networkIds)):
574
572
  networkId = networkIds[j]
575
573
  networkCode = self.network_id_to_code(networkId, code)
@@ -16,7 +16,7 @@ from ccxt.base.errors import InsufficientFunds
16
16
  from ccxt.base.errors import InvalidOrder
17
17
  from ccxt.base.errors import OrderNotFound
18
18
  from ccxt.base.errors import RateLimitExceeded
19
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES
19
+ from ccxt.base.decimal_to_precision import TICK_SIZE
20
20
  from ccxt.base.precise import Precise
21
21
 
22
22
 
@@ -215,7 +215,7 @@ class coinmetro(Exchange, ImplicitAPI):
215
215
  'maker': self.parse_number('0'),
216
216
  },
217
217
  },
218
- 'precisionMode': DECIMAL_PLACES,
218
+ 'precisionMode': TICK_SIZE,
219
219
  # exchange-specific options
220
220
  'options': {
221
221
  'currenciesByIdForParseMarket': None,
@@ -317,7 +317,6 @@ class coinmetro(Exchange, ImplicitAPI):
317
317
  deposit = self.safe_value(currency, 'canDeposit')
318
318
  canTrade = self.safe_value(currency, 'canTrade')
319
319
  active = withdraw if canTrade else True
320
- precision = self.safe_integer(currency, 'digits')
321
320
  minAmount = self.safe_number(currency, 'minQty')
322
321
  result[code] = self.safe_currency_structure({
323
322
  'id': id,
@@ -328,7 +327,7 @@ class coinmetro(Exchange, ImplicitAPI):
328
327
  'deposit': deposit,
329
328
  'withdraw': withdraw,
330
329
  'fee': None,
331
- 'precision': precision,
330
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(currency, 'digits'))),
332
331
  'limits': {
333
332
  'amount': {'min': minAmount, 'max': None},
334
333
  'withdraw': {'min': None, 'max': None},
@@ -354,19 +353,14 @@ class coinmetro(Exchange, ImplicitAPI):
354
353
  #
355
354
  # [
356
355
  # {
357
- # "pair": "PERPEUR",
358
- # "precision": 5,
359
- # "margin": False
360
- # },
361
- # {
362
- # "pair": "PERPUSD",
356
+ # "pair": "YFIEUR",
363
357
  # "precision": 5,
364
358
  # "margin": False
365
359
  # },
366
360
  # {
367
- # "pair": "YFIEUR",
368
- # "precision": 5,
369
- # "margin": False
361
+ # "pair": "BTCEUR",
362
+ # "precision": 2,
363
+ # "margin": True
370
364
  # },
371
365
  # ...
372
366
  # ]
@@ -412,9 +406,7 @@ class coinmetro(Exchange, ImplicitAPI):
412
406
  'optionType': None,
413
407
  'precision': {
414
408
  'amount': basePrecisionAndLimits['precision'],
415
- 'price': quotePrecisionAndLimits['precision'],
416
- 'base': basePrecisionAndLimits['precision'],
417
- 'quote': quotePrecisionAndLimits['precision'],
409
+ 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'precision'))),
418
410
  },
419
411
  'limits': {
420
412
  'leverage': {
@@ -464,12 +456,11 @@ class coinmetro(Exchange, ImplicitAPI):
464
456
  def parse_market_precision_and_limits(self, currencyId):
465
457
  currencies = self.safe_value(self.options, 'currenciesByIdForParseMarket', {})
466
458
  currency = self.safe_value(currencies, currencyId, {})
467
- precision = self.safe_integer(currency, 'precision')
468
459
  limits = self.safe_value(currency, 'limits', {})
469
460
  amountLimits = self.safe_value(limits, 'amount', {})
470
461
  minLimit = self.safe_number(amountLimits, 'min')
471
462
  result: dict = {
472
- 'precision': precision,
463
+ 'precision': self.safe_number(currency, 'precision'),
473
464
  'minLimit': minLimit,
474
465
  }
475
466
  return result