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.
- ccxt/__init__.py +3 -1
- ccxt/abstract/binance.py +2 -0
- ccxt/abstract/binancecoinm.py +2 -0
- ccxt/abstract/binanceus.py +2 -0
- ccxt/abstract/binanceusdm.py +2 -0
- ccxt/abstract/bitstamp.py +18 -2
- ccxt/abstract/kucoin.py +14 -0
- ccxt/abstract/kucoinfutures.py +14 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/oxfun.py +34 -0
- ccxt/async_support/__init__.py +3 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +2 -0
- ccxt/async_support/bingx.py +26 -18
- ccxt/async_support/bitmart.py +4 -0
- ccxt/async_support/bitstamp.py +18 -2
- ccxt/async_support/bitteam.py +6 -8
- ccxt/async_support/coinmetro.py +9 -18
- ccxt/async_support/hyperliquid.py +31 -23
- ccxt/async_support/idex.py +1 -0
- ccxt/async_support/kucoin.py +27 -1
- ccxt/async_support/luno.py +9 -1
- ccxt/async_support/mexc.py +8 -6
- ccxt/async_support/okx.py +1 -0
- ccxt/async_support/oxfun.py +2773 -0
- ccxt/async_support/tokocrypto.py +9 -11
- ccxt/async_support/wavesexchange.py +119 -105
- ccxt/async_support/woofipro.py +1 -0
- ccxt/async_support/xt.py +1 -1
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +2 -0
- ccxt/bingx.py +26 -18
- ccxt/bitmart.py +4 -0
- ccxt/bitstamp.py +18 -2
- ccxt/bitteam.py +6 -8
- ccxt/coinmetro.py +9 -18
- ccxt/hyperliquid.py +31 -23
- ccxt/idex.py +1 -0
- ccxt/kucoin.py +27 -1
- ccxt/luno.py +9 -1
- ccxt/mexc.py +8 -6
- ccxt/okx.py +1 -0
- ccxt/oxfun.py +2772 -0
- ccxt/pro/__init__.py +3 -1
- ccxt/pro/binanceus.py +0 -8
- ccxt/pro/oxfun.py +950 -0
- ccxt/test/test_async.py +17 -1
- ccxt/test/test_sync.py +17 -1
- ccxt/tokocrypto.py +9 -11
- ccxt/wavesexchange.py +119 -105
- ccxt/woofipro.py +1 -0
- ccxt/xt.py +1 -1
- {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/METADATA +131 -131
- {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/RECORD +56 -52
- {ccxt-4.3.44.dist-info → ccxt-4.3.46.dist-info}/WHEEL +0 -0
- {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.
|
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})
|
ccxt/abstract/binancecoinm.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})
|
ccxt/abstract/binanceus.py
CHANGED
@@ -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})
|
ccxt/abstract/binanceusdm.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})
|
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})
|
ccxt/abstract/kucoinfutures.py
CHANGED
@@ -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})
|
ccxt/async_support/__init__.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
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',
|
ccxt/async_support/binance.py
CHANGED
ccxt/async_support/bingx.py
CHANGED
@@ -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
|
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':
|
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
|
-
#
|
620
|
-
#
|
621
|
-
#
|
622
|
-
#
|
623
|
-
#
|
624
|
-
#
|
625
|
-
#
|
626
|
-
#
|
627
|
-
#
|
628
|
-
#
|
629
|
-
#
|
630
|
-
#
|
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.
|
656
|
+
pricePrecision = self.safe_number(market, 'tickSize')
|
649
657
|
if pricePrecision is None:
|
650
|
-
pricePrecision = self.
|
651
|
-
quantityPrecision = self.
|
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.
|
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'
|
ccxt/async_support/bitmart.py
CHANGED
@@ -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={}):
|
ccxt/async_support/bitstamp.py
CHANGED
@@ -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
|
},
|
ccxt/async_support/bitteam.py
CHANGED
@@ -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
|
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':
|
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':
|
398
|
-
'price':
|
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.
|
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.
|
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)
|
ccxt/async_support/coinmetro.py
CHANGED
@@ -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
|
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':
|
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':
|
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": "
|
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": "
|
368
|
-
# "precision":
|
369
|
-
# "margin":
|
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':
|
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
|