ccxt 4.3.23__py2.py3-none-any.whl → 4.3.24__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 +5 -3
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/async_support/__init__.py +5 -3
- ccxt/async_support/base/exchange.py +4 -3
- ccxt/async_support/bitrue.py +5 -1
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +13 -13
- ccxt/async_support/coinex.py +40 -72
- ccxt/async_support/kucoin.py +1 -0
- ccxt/base/exchange.py +4 -3
- ccxt/bitrue.py +5 -1
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +13 -13
- ccxt/coinex.py +40 -72
- ccxt/kucoin.py +1 -0
- ccxt/pro/__init__.py +3 -3
- ccxt/pro/bitget.py +10 -3
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +5 -5
- {ccxt-4.3.23.dist-info → ccxt-4.3.24.dist-info}/METADATA +6 -6
- {ccxt-4.3.23.dist-info → ccxt-4.3.24.dist-info}/RECORD +23 -20
- /ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +0 -0
- {ccxt-4.3.23.dist-info → ccxt-4.3.24.dist-info}/WHEEL +0 -0
- {ccxt-4.3.23.dist-info → ccxt-4.3.24.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.24'
|
26
26
|
|
27
27
|
# ----------------------------------------------------------------------------
|
28
28
|
|
@@ -119,8 +119,9 @@ from ccxt.btcturk import btcturk # noqa: F4
|
|
119
119
|
from ccxt.bybit import bybit # noqa: F401
|
120
120
|
from ccxt.cex import cex # noqa: F401
|
121
121
|
from ccxt.coinbase import coinbase # noqa: F401
|
122
|
+
from ccxt.coinbaseadvanced import coinbaseadvanced # noqa: F401
|
123
|
+
from ccxt.coinbaseexchange import coinbaseexchange # noqa: F401
|
122
124
|
from ccxt.coinbaseinternational import coinbaseinternational # noqa: F401
|
123
|
-
from ccxt.coinbasepro import coinbasepro # noqa: F401
|
124
125
|
from ccxt.coincheck import coincheck # noqa: F401
|
125
126
|
from ccxt.coinex import coinex # noqa: F401
|
126
127
|
from ccxt.coinlist import coinlist # noqa: F401
|
@@ -225,8 +226,9 @@ exchanges = [
|
|
225
226
|
'bybit',
|
226
227
|
'cex',
|
227
228
|
'coinbase',
|
229
|
+
'coinbaseadvanced',
|
230
|
+
'coinbaseexchange',
|
228
231
|
'coinbaseinternational',
|
229
|
-
'coinbasepro',
|
230
232
|
'coincheck',
|
231
233
|
'coinex',
|
232
234
|
'coinlist',
|
@@ -0,0 +1,94 @@
|
|
1
|
+
from ccxt.base.types import Entry
|
2
|
+
|
3
|
+
|
4
|
+
class ImplicitAPI:
|
5
|
+
v2_public_get_currencies = v2PublicGetCurrencies = Entry('currencies', ['v2', 'public'], 'GET', {'cost': 10.6})
|
6
|
+
v2_public_get_currencies_crypto = v2PublicGetCurrenciesCrypto = Entry('currencies/crypto', ['v2', 'public'], 'GET', {'cost': 10.6})
|
7
|
+
v2_public_get_time = v2PublicGetTime = Entry('time', ['v2', 'public'], 'GET', {'cost': 10.6})
|
8
|
+
v2_public_get_exchange_rates = v2PublicGetExchangeRates = Entry('exchange-rates', ['v2', 'public'], 'GET', {'cost': 10.6})
|
9
|
+
v2_public_get_users_user_id = v2PublicGetUsersUserId = Entry('users/{user_id}', ['v2', 'public'], 'GET', {'cost': 10.6})
|
10
|
+
v2_public_get_prices_symbol_buy = v2PublicGetPricesSymbolBuy = Entry('prices/{symbol}/buy', ['v2', 'public'], 'GET', {'cost': 10.6})
|
11
|
+
v2_public_get_prices_symbol_sell = v2PublicGetPricesSymbolSell = Entry('prices/{symbol}/sell', ['v2', 'public'], 'GET', {'cost': 10.6})
|
12
|
+
v2_public_get_prices_symbol_spot = v2PublicGetPricesSymbolSpot = Entry('prices/{symbol}/spot', ['v2', 'public'], 'GET', {'cost': 10.6})
|
13
|
+
v2_private_get_accounts = v2PrivateGetAccounts = Entry('accounts', ['v2', 'private'], 'GET', {'cost': 10.6})
|
14
|
+
v2_private_get_accounts_account_id = v2PrivateGetAccountsAccountId = Entry('accounts/{account_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
15
|
+
v2_private_get_accounts_account_id_addresses = v2PrivateGetAccountsAccountIdAddresses = Entry('accounts/{account_id}/addresses', ['v2', 'private'], 'GET', {'cost': 10.6})
|
16
|
+
v2_private_get_accounts_account_id_addresses_address_id = v2PrivateGetAccountsAccountIdAddressesAddressId = Entry('accounts/{account_id}/addresses/{address_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
17
|
+
v2_private_get_accounts_account_id_addresses_address_id_transactions = v2PrivateGetAccountsAccountIdAddressesAddressIdTransactions = Entry('accounts/{account_id}/addresses/{address_id}/transactions', ['v2', 'private'], 'GET', {'cost': 10.6})
|
18
|
+
v2_private_get_accounts_account_id_transactions = v2PrivateGetAccountsAccountIdTransactions = Entry('accounts/{account_id}/transactions', ['v2', 'private'], 'GET', {'cost': 10.6})
|
19
|
+
v2_private_get_accounts_account_id_transactions_transaction_id = v2PrivateGetAccountsAccountIdTransactionsTransactionId = Entry('accounts/{account_id}/transactions/{transaction_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
20
|
+
v2_private_get_accounts_account_id_buys = v2PrivateGetAccountsAccountIdBuys = Entry('accounts/{account_id}/buys', ['v2', 'private'], 'GET', {'cost': 10.6})
|
21
|
+
v2_private_get_accounts_account_id_buys_buy_id = v2PrivateGetAccountsAccountIdBuysBuyId = Entry('accounts/{account_id}/buys/{buy_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
22
|
+
v2_private_get_accounts_account_id_sells = v2PrivateGetAccountsAccountIdSells = Entry('accounts/{account_id}/sells', ['v2', 'private'], 'GET', {'cost': 10.6})
|
23
|
+
v2_private_get_accounts_account_id_sells_sell_id = v2PrivateGetAccountsAccountIdSellsSellId = Entry('accounts/{account_id}/sells/{sell_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
24
|
+
v2_private_get_accounts_account_id_deposits = v2PrivateGetAccountsAccountIdDeposits = Entry('accounts/{account_id}/deposits', ['v2', 'private'], 'GET', {'cost': 10.6})
|
25
|
+
v2_private_get_accounts_account_id_deposits_deposit_id = v2PrivateGetAccountsAccountIdDepositsDepositId = Entry('accounts/{account_id}/deposits/{deposit_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
26
|
+
v2_private_get_accounts_account_id_withdrawals = v2PrivateGetAccountsAccountIdWithdrawals = Entry('accounts/{account_id}/withdrawals', ['v2', 'private'], 'GET', {'cost': 10.6})
|
27
|
+
v2_private_get_accounts_account_id_withdrawals_withdrawal_id = v2PrivateGetAccountsAccountIdWithdrawalsWithdrawalId = Entry('accounts/{account_id}/withdrawals/{withdrawal_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
28
|
+
v2_private_get_payment_methods = v2PrivateGetPaymentMethods = Entry('payment-methods', ['v2', 'private'], 'GET', {'cost': 10.6})
|
29
|
+
v2_private_get_payment_methods_payment_method_id = v2PrivateGetPaymentMethodsPaymentMethodId = Entry('payment-methods/{payment_method_id}', ['v2', 'private'], 'GET', {'cost': 10.6})
|
30
|
+
v2_private_get_user = v2PrivateGetUser = Entry('user', ['v2', 'private'], 'GET', {'cost': 10.6})
|
31
|
+
v2_private_get_user_auth = v2PrivateGetUserAuth = Entry('user/auth', ['v2', 'private'], 'GET', {'cost': 10.6})
|
32
|
+
v2_private_post_accounts = v2PrivatePostAccounts = Entry('accounts', ['v2', 'private'], 'POST', {'cost': 10.6})
|
33
|
+
v2_private_post_accounts_account_id_primary = v2PrivatePostAccountsAccountIdPrimary = Entry('accounts/{account_id}/primary', ['v2', 'private'], 'POST', {'cost': 10.6})
|
34
|
+
v2_private_post_accounts_account_id_addresses = v2PrivatePostAccountsAccountIdAddresses = Entry('accounts/{account_id}/addresses', ['v2', 'private'], 'POST', {'cost': 10.6})
|
35
|
+
v2_private_post_accounts_account_id_transactions = v2PrivatePostAccountsAccountIdTransactions = Entry('accounts/{account_id}/transactions', ['v2', 'private'], 'POST', {'cost': 10.6})
|
36
|
+
v2_private_post_accounts_account_id_transactions_transaction_id_complete = v2PrivatePostAccountsAccountIdTransactionsTransactionIdComplete = Entry('accounts/{account_id}/transactions/{transaction_id}/complete', ['v2', 'private'], 'POST', {'cost': 10.6})
|
37
|
+
v2_private_post_accounts_account_id_transactions_transaction_id_resend = v2PrivatePostAccountsAccountIdTransactionsTransactionIdResend = Entry('accounts/{account_id}/transactions/{transaction_id}/resend', ['v2', 'private'], 'POST', {'cost': 10.6})
|
38
|
+
v2_private_post_accounts_account_id_buys = v2PrivatePostAccountsAccountIdBuys = Entry('accounts/{account_id}/buys', ['v2', 'private'], 'POST', {'cost': 10.6})
|
39
|
+
v2_private_post_accounts_account_id_buys_buy_id_commit = v2PrivatePostAccountsAccountIdBuysBuyIdCommit = Entry('accounts/{account_id}/buys/{buy_id}/commit', ['v2', 'private'], 'POST', {'cost': 10.6})
|
40
|
+
v2_private_post_accounts_account_id_sells = v2PrivatePostAccountsAccountIdSells = Entry('accounts/{account_id}/sells', ['v2', 'private'], 'POST', {'cost': 10.6})
|
41
|
+
v2_private_post_accounts_account_id_sells_sell_id_commit = v2PrivatePostAccountsAccountIdSellsSellIdCommit = Entry('accounts/{account_id}/sells/{sell_id}/commit', ['v2', 'private'], 'POST', {'cost': 10.6})
|
42
|
+
v2_private_post_accounts_account_id_deposits = v2PrivatePostAccountsAccountIdDeposits = Entry('accounts/{account_id}/deposits', ['v2', 'private'], 'POST', {'cost': 10.6})
|
43
|
+
v2_private_post_accounts_account_id_deposits_deposit_id_commit = v2PrivatePostAccountsAccountIdDepositsDepositIdCommit = Entry('accounts/{account_id}/deposits/{deposit_id}/commit', ['v2', 'private'], 'POST', {'cost': 10.6})
|
44
|
+
v2_private_post_accounts_account_id_withdrawals = v2PrivatePostAccountsAccountIdWithdrawals = Entry('accounts/{account_id}/withdrawals', ['v2', 'private'], 'POST', {'cost': 10.6})
|
45
|
+
v2_private_post_accounts_account_id_withdrawals_withdrawal_id_commit = v2PrivatePostAccountsAccountIdWithdrawalsWithdrawalIdCommit = Entry('accounts/{account_id}/withdrawals/{withdrawal_id}/commit', ['v2', 'private'], 'POST', {'cost': 10.6})
|
46
|
+
v2_private_put_accounts_account_id = v2PrivatePutAccountsAccountId = Entry('accounts/{account_id}', ['v2', 'private'], 'PUT', {'cost': 10.6})
|
47
|
+
v2_private_put_user = v2PrivatePutUser = Entry('user', ['v2', 'private'], 'PUT', {'cost': 10.6})
|
48
|
+
v2_private_delete_accounts_id = v2PrivateDeleteAccountsId = Entry('accounts/{id}', ['v2', 'private'], 'DELETE', {'cost': 10.6})
|
49
|
+
v2_private_delete_accounts_account_id_transactions_transaction_id = v2PrivateDeleteAccountsAccountIdTransactionsTransactionId = Entry('accounts/{account_id}/transactions/{transaction_id}', ['v2', 'private'], 'DELETE', {'cost': 10.6})
|
50
|
+
v3_public_get_brokerage_time = v3PublicGetBrokerageTime = Entry('brokerage/time', ['v3', 'public'], 'GET', {'cost': 3})
|
51
|
+
v3_public_get_brokerage_market_product_book = v3PublicGetBrokerageMarketProductBook = Entry('brokerage/market/product_book', ['v3', 'public'], 'GET', {'cost': 3})
|
52
|
+
v3_public_get_brokerage_market_products = v3PublicGetBrokerageMarketProducts = Entry('brokerage/market/products', ['v3', 'public'], 'GET', {'cost': 3})
|
53
|
+
v3_public_get_brokerage_market_products_product_id = v3PublicGetBrokerageMarketProductsProductId = Entry('brokerage/market/products/{product_id}', ['v3', 'public'], 'GET', {'cost': 3})
|
54
|
+
v3_public_get_brokerage_market_products_product_id_candles = v3PublicGetBrokerageMarketProductsProductIdCandles = Entry('brokerage/market/products/{product_id}/candles', ['v3', 'public'], 'GET', {'cost': 3})
|
55
|
+
v3_public_get_brokerage_market_products_product_id_ticker = v3PublicGetBrokerageMarketProductsProductIdTicker = Entry('brokerage/market/products/{product_id}/ticker', ['v3', 'public'], 'GET', {'cost': 3})
|
56
|
+
v3_private_get_brokerage_accounts = v3PrivateGetBrokerageAccounts = Entry('brokerage/accounts', ['v3', 'private'], 'GET', {'cost': 1})
|
57
|
+
v3_private_get_brokerage_accounts_account_uuid = v3PrivateGetBrokerageAccountsAccountUuid = Entry('brokerage/accounts/{account_uuid}', ['v3', 'private'], 'GET', {'cost': 1})
|
58
|
+
v3_private_get_brokerage_orders_historical_batch = v3PrivateGetBrokerageOrdersHistoricalBatch = Entry('brokerage/orders/historical/batch', ['v3', 'private'], 'GET', {'cost': 1})
|
59
|
+
v3_private_get_brokerage_orders_historical_fills = v3PrivateGetBrokerageOrdersHistoricalFills = Entry('brokerage/orders/historical/fills', ['v3', 'private'], 'GET', {'cost': 1})
|
60
|
+
v3_private_get_brokerage_orders_historical_order_id = v3PrivateGetBrokerageOrdersHistoricalOrderId = Entry('brokerage/orders/historical/{order_id}', ['v3', 'private'], 'GET', {'cost': 1})
|
61
|
+
v3_private_get_brokerage_products = v3PrivateGetBrokerageProducts = Entry('brokerage/products', ['v3', 'private'], 'GET', {'cost': 3})
|
62
|
+
v3_private_get_brokerage_products_product_id = v3PrivateGetBrokerageProductsProductId = Entry('brokerage/products/{product_id}', ['v3', 'private'], 'GET', {'cost': 3})
|
63
|
+
v3_private_get_brokerage_products_product_id_candles = v3PrivateGetBrokerageProductsProductIdCandles = Entry('brokerage/products/{product_id}/candles', ['v3', 'private'], 'GET', {'cost': 3})
|
64
|
+
v3_private_get_brokerage_products_product_id_ticker = v3PrivateGetBrokerageProductsProductIdTicker = Entry('brokerage/products/{product_id}/ticker', ['v3', 'private'], 'GET', {'cost': 3})
|
65
|
+
v3_private_get_brokerage_best_bid_ask = v3PrivateGetBrokerageBestBidAsk = Entry('brokerage/best_bid_ask', ['v3', 'private'], 'GET', {'cost': 3})
|
66
|
+
v3_private_get_brokerage_product_book = v3PrivateGetBrokerageProductBook = Entry('brokerage/product_book', ['v3', 'private'], 'GET', {'cost': 3})
|
67
|
+
v3_private_get_brokerage_transaction_summary = v3PrivateGetBrokerageTransactionSummary = Entry('brokerage/transaction_summary', ['v3', 'private'], 'GET', {'cost': 3})
|
68
|
+
v3_private_get_brokerage_portfolios = v3PrivateGetBrokeragePortfolios = Entry('brokerage/portfolios', ['v3', 'private'], 'GET', {'cost': 1})
|
69
|
+
v3_private_get_brokerage_portfolios_portfolio_uuid = v3PrivateGetBrokeragePortfoliosPortfolioUuid = Entry('brokerage/portfolios/{portfolio_uuid}', ['v3', 'private'], 'GET', {'cost': 1})
|
70
|
+
v3_private_get_brokerage_convert_trade_trade_id = v3PrivateGetBrokerageConvertTradeTradeId = Entry('brokerage/convert/trade/{trade_id}', ['v3', 'private'], 'GET', {'cost': 1})
|
71
|
+
v3_private_get_brokerage_cfm_balance_summary = v3PrivateGetBrokerageCfmBalanceSummary = Entry('brokerage/cfm/balance_summary', ['v3', 'private'], 'GET', {'cost': 1})
|
72
|
+
v3_private_get_brokerage_cfm_positions = v3PrivateGetBrokerageCfmPositions = Entry('brokerage/cfm/positions', ['v3', 'private'], 'GET', {'cost': 1})
|
73
|
+
v3_private_get_brokerage_cfm_positions_product_id = v3PrivateGetBrokerageCfmPositionsProductId = Entry('brokerage/cfm/positions/{product_id}', ['v3', 'private'], 'GET', {'cost': 1})
|
74
|
+
v3_private_get_brokerage_cfm_sweeps = v3PrivateGetBrokerageCfmSweeps = Entry('brokerage/cfm/sweeps', ['v3', 'private'], 'GET', {'cost': 1})
|
75
|
+
v3_private_get_brokerage_intx_portfolio_portfolio_uuid = v3PrivateGetBrokerageIntxPortfolioPortfolioUuid = Entry('brokerage/intx/portfolio/{portfolio_uuid}', ['v3', 'private'], 'GET', {'cost': 1})
|
76
|
+
v3_private_get_brokerage_intx_positions_portfolio_uuid = v3PrivateGetBrokerageIntxPositionsPortfolioUuid = Entry('brokerage/intx/positions/{portfolio_uuid}', ['v3', 'private'], 'GET', {'cost': 1})
|
77
|
+
v3_private_get_brokerage_intx_positions_portfolio_uuid_symbol = v3PrivateGetBrokerageIntxPositionsPortfolioUuidSymbol = Entry('brokerage/intx/positions/{portfolio_uuid}/{symbol}', ['v3', 'private'], 'GET', {'cost': 1})
|
78
|
+
v3_private_get_brokerage_payment_methods = v3PrivateGetBrokeragePaymentMethods = Entry('brokerage/payment_methods', ['v3', 'private'], 'GET', {'cost': 1})
|
79
|
+
v3_private_get_brokerage_payment_methods_payment_method_id = v3PrivateGetBrokeragePaymentMethodsPaymentMethodId = Entry('brokerage/payment_methods/{payment_method_id}', ['v3', 'private'], 'GET', {'cost': 1})
|
80
|
+
v3_private_post_brokerage_orders = v3PrivatePostBrokerageOrders = Entry('brokerage/orders', ['v3', 'private'], 'POST', {'cost': 1})
|
81
|
+
v3_private_post_brokerage_orders_batch_cancel = v3PrivatePostBrokerageOrdersBatchCancel = Entry('brokerage/orders/batch_cancel', ['v3', 'private'], 'POST', {'cost': 1})
|
82
|
+
v3_private_post_brokerage_orders_edit = v3PrivatePostBrokerageOrdersEdit = Entry('brokerage/orders/edit', ['v3', 'private'], 'POST', {'cost': 1})
|
83
|
+
v3_private_post_brokerage_orders_edit_preview = v3PrivatePostBrokerageOrdersEditPreview = Entry('brokerage/orders/edit_preview', ['v3', 'private'], 'POST', {'cost': 1})
|
84
|
+
v3_private_post_brokerage_orders_preview = v3PrivatePostBrokerageOrdersPreview = Entry('brokerage/orders/preview', ['v3', 'private'], 'POST', {'cost': 1})
|
85
|
+
v3_private_post_brokerage_portfolios = v3PrivatePostBrokeragePortfolios = Entry('brokerage/portfolios', ['v3', 'private'], 'POST', {'cost': 1})
|
86
|
+
v3_private_post_brokerage_portfolios_move_funds = v3PrivatePostBrokeragePortfoliosMoveFunds = Entry('brokerage/portfolios/move_funds', ['v3', 'private'], 'POST', {'cost': 1})
|
87
|
+
v3_private_post_brokerage_convert_quote = v3PrivatePostBrokerageConvertQuote = Entry('brokerage/convert/quote', ['v3', 'private'], 'POST', {'cost': 1})
|
88
|
+
v3_private_post_brokerage_convert_trade_trade_id = v3PrivatePostBrokerageConvertTradeTradeId = Entry('brokerage/convert/trade/{trade_id}', ['v3', 'private'], 'POST', {'cost': 1})
|
89
|
+
v3_private_post_brokerage_cfm_sweeps_schedule = v3PrivatePostBrokerageCfmSweepsSchedule = Entry('brokerage/cfm/sweeps/schedule', ['v3', 'private'], 'POST', {'cost': 1})
|
90
|
+
v3_private_post_brokerage_intx_allocate = v3PrivatePostBrokerageIntxAllocate = Entry('brokerage/intx/allocate', ['v3', 'private'], 'POST', {'cost': 1})
|
91
|
+
v3_private_post_brokerage_orders_close_position = v3PrivatePostBrokerageOrdersClosePosition = Entry('brokerage/orders/close_position', ['v3', 'private'], 'POST', {'cost': 1})
|
92
|
+
v3_private_put_brokerage_portfolios_portfolio_uuid = v3PrivatePutBrokeragePortfoliosPortfolioUuid = Entry('brokerage/portfolios/{portfolio_uuid}', ['v3', 'private'], 'PUT', {'cost': 1})
|
93
|
+
v3_private_delete_brokerage_portfolios_portfolio_uuid = v3PrivateDeleteBrokeragePortfoliosPortfolioUuid = Entry('brokerage/portfolios/{portfolio_uuid}', ['v3', 'private'], 'DELETE', {'cost': 1})
|
94
|
+
v3_private_delete_brokerage_cfm_sweeps = v3PrivateDeleteBrokerageCfmSweeps = Entry('brokerage/cfm/sweeps', ['v3', '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.24'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -99,8 +99,9 @@ from ccxt.async_support.btcturk import btcturk
|
|
99
99
|
from ccxt.async_support.bybit import bybit # noqa: F401
|
100
100
|
from ccxt.async_support.cex import cex # noqa: F401
|
101
101
|
from ccxt.async_support.coinbase import coinbase # noqa: F401
|
102
|
+
from ccxt.async_support.coinbaseadvanced import coinbaseadvanced # noqa: F401
|
103
|
+
from ccxt.async_support.coinbaseexchange import coinbaseexchange # noqa: F401
|
102
104
|
from ccxt.async_support.coinbaseinternational import coinbaseinternational # noqa: F401
|
103
|
-
from ccxt.async_support.coinbasepro import coinbasepro # noqa: F401
|
104
105
|
from ccxt.async_support.coincheck import coincheck # noqa: F401
|
105
106
|
from ccxt.async_support.coinex import coinex # noqa: F401
|
106
107
|
from ccxt.async_support.coinlist import coinlist # noqa: F401
|
@@ -205,8 +206,9 @@ exchanges = [
|
|
205
206
|
'bybit',
|
206
207
|
'cex',
|
207
208
|
'coinbase',
|
209
|
+
'coinbaseadvanced',
|
210
|
+
'coinbaseexchange',
|
208
211
|
'coinbaseinternational',
|
209
|
-
'coinbasepro',
|
210
212
|
'coincheck',
|
211
213
|
'coinex',
|
212
214
|
'coinlist',
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# -----------------------------------------------------------------------------
|
4
4
|
|
5
|
-
__version__ = '4.3.
|
5
|
+
__version__ = '4.3.24'
|
6
6
|
|
7
7
|
# -----------------------------------------------------------------------------
|
8
8
|
|
@@ -1848,8 +1848,9 @@ class Exchange(BaseExchange):
|
|
1848
1848
|
errors = 0
|
1849
1849
|
responseLength = len(response)
|
1850
1850
|
if self.verbose:
|
1851
|
-
|
1852
|
-
|
1851
|
+
cursorString = '' if (cursorValue is None) else cursorValue
|
1852
|
+
iteration = (i + 1)
|
1853
|
+
cursorMessage = 'Cursor pagination call ' + str(iteration) + ' method ' + method + ' response length ' + str(responseLength) + ' cursor ' + cursorString
|
1853
1854
|
self.log(cursorMessage)
|
1854
1855
|
if responseLength == 0:
|
1855
1856
|
break
|
ccxt/async_support/bitrue.py
CHANGED
@@ -2933,6 +2933,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
2933
2933
|
signPath = signPath + '/' + version + '/' + path
|
2934
2934
|
signMessage = timestamp + method + signPath
|
2935
2935
|
if method == 'GET':
|
2936
|
+
keys = list(params.keys())
|
2937
|
+
keysLength = len(keys)
|
2938
|
+
if keysLength > 0:
|
2939
|
+
signMessage += '?' + self.urlencode(params)
|
2936
2940
|
signature = self.hmac(self.encode(signMessage), self.encode(self.secret), hashlib.sha256)
|
2937
2941
|
headers = {
|
2938
2942
|
'X-CH-APIKEY': self.apiKey,
|
@@ -2945,7 +2949,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
2945
2949
|
'recvWindow': recvWindow,
|
2946
2950
|
}, params)
|
2947
2951
|
body = self.json(query)
|
2948
|
-
signMessage
|
2952
|
+
signMessage += body
|
2949
2953
|
signature = self.hmac(self.encode(signMessage), self.encode(self.secret), hashlib.sha256)
|
2950
2954
|
headers = {
|
2951
2955
|
'Content-Type': 'application/json',
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
4
|
+
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
|
+
|
6
|
+
from ccxt.async_support.coinbase import coinbase
|
7
|
+
from ccxt.abstract.coinbaseadvanced import ImplicitAPI
|
8
|
+
|
9
|
+
|
10
|
+
class coinbaseadvanced(coinbase, ImplicitAPI):
|
11
|
+
|
12
|
+
def describe(self):
|
13
|
+
return self.deep_extend(super(coinbaseadvanced, self).describe(), {
|
14
|
+
'id': 'coinbaseadvanced',
|
15
|
+
'name': 'Coinbase Advanced',
|
16
|
+
'alias': True,
|
17
|
+
})
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
|
-
from ccxt.abstract.
|
7
|
+
from ccxt.abstract.coinbaseexchange import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
|
10
10
|
from typing import List
|
@@ -22,12 +22,12 @@ from ccxt.base.decimal_to_precision import TICK_SIZE
|
|
22
22
|
from ccxt.base.precise import Precise
|
23
23
|
|
24
24
|
|
25
|
-
class
|
25
|
+
class coinbaseexchange(Exchange, ImplicitAPI):
|
26
26
|
|
27
27
|
def describe(self):
|
28
|
-
return self.deep_extend(super(
|
29
|
-
'id': '
|
30
|
-
'name': 'Coinbase
|
28
|
+
return self.deep_extend(super(coinbaseexchange, self).describe(), {
|
29
|
+
'id': 'coinbaseexchange',
|
30
|
+
'name': 'Coinbase Exchange',
|
31
31
|
'countries': ['US'],
|
32
32
|
'rateLimit': 100,
|
33
33
|
'userAgent': self.userAgents['chrome'],
|
@@ -89,19 +89,19 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
89
89
|
'6h': 21600,
|
90
90
|
'1d': 86400,
|
91
91
|
},
|
92
|
-
'hostname': '
|
92
|
+
'hostname': 'exchange.coinbase.com',
|
93
93
|
'urls': {
|
94
94
|
'test': {
|
95
|
-
'public': 'https://api-public.sandbox.
|
96
|
-
'private': 'https://api-public.sandbox.
|
95
|
+
'public': 'https://api-public.sandbox.exchange.coinbase.com',
|
96
|
+
'private': 'https://api-public.sandbox.exchange.coinbase.com',
|
97
97
|
},
|
98
|
-
'logo': 'https://
|
98
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e',
|
99
99
|
'api': {
|
100
100
|
'public': 'https://api.{hostname}',
|
101
101
|
'private': 'https://api.{hostname}',
|
102
102
|
},
|
103
|
-
'www': 'https://
|
104
|
-
'doc': 'https://docs.
|
103
|
+
'www': 'https://coinbase.com/',
|
104
|
+
'doc': 'https://docs.cloud.coinbase.com/exchange/docs/',
|
105
105
|
'fees': [
|
106
106
|
'https://docs.pro.coinbase.com/#fees',
|
107
107
|
'https://support.pro.coinbase.com/customer/en/portal/articles/2945310-fees',
|
@@ -315,7 +315,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
315
315
|
|
316
316
|
async def fetch_markets(self, params={}) -> List[Market]:
|
317
317
|
"""
|
318
|
-
retrieves data on all markets for
|
318
|
+
retrieves data on all markets for coinbaseexchange
|
319
319
|
:see: https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducts
|
320
320
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
321
321
|
:returns dict[]: an array of objects representing market data
|
@@ -1047,7 +1047,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1047
1047
|
"""
|
1048
1048
|
:see: https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorder
|
1049
1049
|
fetches information on an order made by the user
|
1050
|
-
:param str symbol: not used by
|
1050
|
+
:param str symbol: not used by coinbaseexchange fetchOrder
|
1051
1051
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1052
1052
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1053
1053
|
"""
|
ccxt/async_support/coinex.py
CHANGED
@@ -459,7 +459,9 @@ class coinex(Exchange, ImplicitAPI):
|
|
459
459
|
'fillResponseFromRequest': True,
|
460
460
|
},
|
461
461
|
'accountsById': {
|
462
|
-
'spot': '
|
462
|
+
'spot': 'SPOT',
|
463
|
+
'margin': 'MARGIN',
|
464
|
+
'swap': 'FUTURES',
|
463
465
|
},
|
464
466
|
'networks': {
|
465
467
|
'BEP20': 'BSC',
|
@@ -3454,7 +3456,10 @@ class coinex(Exchange, ImplicitAPI):
|
|
3454
3456
|
:param str [params.marginMode]: 'cross' or 'isolated' for fetching spot margin orders
|
3455
3457
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
3456
3458
|
"""
|
3457
|
-
|
3459
|
+
openOrders = await self.fetch_orders_by_status('pending', symbol, since, limit, params)
|
3460
|
+
for i in range(0, len(openOrders)):
|
3461
|
+
openOrders[i]['status'] = 'open'
|
3462
|
+
return openOrders
|
3458
3463
|
|
3459
3464
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
3460
3465
|
"""
|
@@ -4599,40 +4604,42 @@ class coinex(Exchange, ImplicitAPI):
|
|
4599
4604
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
4600
4605
|
"""
|
4601
4606
|
transfer currency internally between wallets on the same account
|
4602
|
-
:see: https://
|
4603
|
-
:see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account013_margin_transfer
|
4607
|
+
:see: https://docs.coinex.com/api/v2/assets/transfer/http/transfer
|
4604
4608
|
:param str code: unified currency code
|
4605
4609
|
:param float amount: amount to transfer
|
4606
4610
|
:param str fromAccount: account to transfer from
|
4607
4611
|
:param str toAccount: account to transfer to
|
4608
4612
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4613
|
+
:param str [params.symbol]: unified ccxt symbol, required when either the fromAccount or toAccount is margin
|
4609
4614
|
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
|
4610
4615
|
"""
|
4611
4616
|
await self.load_markets()
|
4612
4617
|
currency = self.currency(code)
|
4613
4618
|
amountToPrecision = self.currency_to_precision(code, amount)
|
4619
|
+
accountsById = self.safe_dict(self.options, 'accountsById', {})
|
4620
|
+
fromId = self.safe_string(accountsById, fromAccount, fromAccount)
|
4621
|
+
toId = self.safe_string(accountsById, toAccount, toAccount)
|
4614
4622
|
request = {
|
4623
|
+
'ccy': currency['id'],
|
4615
4624
|
'amount': amountToPrecision,
|
4616
|
-
'
|
4625
|
+
'from_account_type': fromId,
|
4626
|
+
'to_account_type': toId,
|
4617
4627
|
}
|
4618
|
-
|
4619
|
-
|
4620
|
-
|
4621
|
-
|
4622
|
-
|
4623
|
-
request['
|
4624
|
-
|
4625
|
-
|
4626
|
-
|
4627
|
-
fromId = self.safe_string(accountsById, fromAccount, fromAccount)
|
4628
|
-
toId = self.safe_string(accountsById, toAccount, toAccount)
|
4629
|
-
# fromAccount and toAccount must be integers for margin transfers
|
4630
|
-
# spot is 0, use fetchBalance() to find the margin account id
|
4631
|
-
request['from_account'] = int(fromId)
|
4632
|
-
request['to_account'] = int(toId)
|
4633
|
-
response = await self.v1PrivatePostMarginTransfer(self.extend(request, params))
|
4628
|
+
if (fromAccount == 'margin') or (toAccount == 'margin'):
|
4629
|
+
symbol = self.safe_string(params, 'symbol')
|
4630
|
+
if symbol is None:
|
4631
|
+
raise ArgumentsRequired(self.id + ' transfer() the symbol parameter must be defined for a margin account')
|
4632
|
+
params = self.omit(params, 'symbol')
|
4633
|
+
request['market'] = self.market_id(symbol)
|
4634
|
+
if (fromAccount != 'spot') and (toAccount != 'spot'):
|
4635
|
+
raise BadRequest(self.id + ' transfer() can only be between spot and swap, or spot and margin, either the fromAccount or toAccount must be spot')
|
4636
|
+
response = await self.v2PrivatePostAssetsTransfer(self.extend(request, params))
|
4634
4637
|
#
|
4635
|
-
# {
|
4638
|
+
# {
|
4639
|
+
# "code": 0,
|
4640
|
+
# "data": {},
|
4641
|
+
# "message": "OK"
|
4642
|
+
# }
|
4636
4643
|
#
|
4637
4644
|
return self.extend(self.parse_transfer(response, currency), {
|
4638
4645
|
'amount': self.parse_number(amountToPrecision),
|
@@ -4640,67 +4647,28 @@ class coinex(Exchange, ImplicitAPI):
|
|
4640
4647
|
'toAccount': toAccount,
|
4641
4648
|
})
|
4642
4649
|
|
4643
|
-
def parse_transfer_status(self, status
|
4650
|
+
def parse_transfer_status(self, status):
|
4644
4651
|
statuses = {
|
4645
4652
|
'0': 'ok',
|
4646
4653
|
'SUCCESS': 'ok',
|
4654
|
+
'OK': 'ok',
|
4647
4655
|
}
|
4648
4656
|
return self.safe_string(statuses, status, status)
|
4649
4657
|
|
4650
4658
|
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
4651
|
-
|
4652
|
-
|
4653
|
-
|
4654
|
-
|
4655
|
-
|
4656
|
-
# "asset": "USDT",
|
4657
|
-
# "transfer_type": "transfer_out", # from swap to spot
|
4658
|
-
# "created_at": 1651633422
|
4659
|
-
# },
|
4660
|
-
#
|
4661
|
-
# fetchTransfers Margin
|
4662
|
-
#
|
4663
|
-
# {
|
4664
|
-
# "id": 7580062,
|
4665
|
-
# "updated_at": 1653684379,
|
4666
|
-
# "user_id": 3620173,
|
4667
|
-
# "from_account_id": 0,
|
4668
|
-
# "to_account_id": 1,
|
4669
|
-
# "asset": "BTC",
|
4670
|
-
# "amount": "0.00160829",
|
4671
|
-
# "balance": "0.00160829",
|
4672
|
-
# "transfer_type": "IN",
|
4673
|
-
# "status": "SUCCESS",
|
4674
|
-
# "created_at": 1653684379
|
4675
|
-
# },
|
4676
|
-
#
|
4677
|
-
timestamp = self.safe_timestamp(transfer, 'created_at')
|
4678
|
-
transferType = self.safe_string(transfer, 'transfer_type')
|
4679
|
-
fromAccount = None
|
4680
|
-
toAccount = None
|
4681
|
-
if transferType == 'transfer_out':
|
4682
|
-
fromAccount = 'swap'
|
4683
|
-
toAccount = 'spot'
|
4684
|
-
elif transferType == 'transfer_in':
|
4685
|
-
fromAccount = 'spot'
|
4686
|
-
toAccount = 'swap'
|
4687
|
-
elif transferType == 'IN':
|
4688
|
-
fromAccount = 'spot'
|
4689
|
-
toAccount = 'margin'
|
4690
|
-
elif transferType == 'OUT':
|
4691
|
-
fromAccount = 'margin'
|
4692
|
-
toAccount = 'spot'
|
4693
|
-
currencyId = self.safe_string(transfer, 'asset')
|
4694
|
-
currencyCode = self.safe_currency_code(currencyId, currency)
|
4659
|
+
timestamp = self.safe_integer(transfer, 'created_at')
|
4660
|
+
currencyId = self.safe_string(transfer, 'ccy')
|
4661
|
+
fromId = self.safe_string(transfer, 'from_account_type')
|
4662
|
+
toId = self.safe_string(transfer, 'to_account_type')
|
4663
|
+
accountsById = self.safe_value(self.options, 'accountsById', {})
|
4695
4664
|
return {
|
4696
|
-
'
|
4697
|
-
'id': self.safe_string(transfer, 'id'),
|
4665
|
+
'id': None,
|
4698
4666
|
'timestamp': timestamp,
|
4699
4667
|
'datetime': self.iso8601(timestamp),
|
4700
|
-
'currency':
|
4668
|
+
'currency': self.safe_currency_code(currencyId, currency),
|
4701
4669
|
'amount': self.safe_number(transfer, 'amount'),
|
4702
|
-
'fromAccount':
|
4703
|
-
'toAccount':
|
4670
|
+
'fromAccount': self.safe_string(accountsById, fromId, fromId),
|
4671
|
+
'toAccount': self.safe_string(accountsById, toId, toId),
|
4704
4672
|
'status': self.parse_transfer_status(self.safe_string_2(transfer, 'code', 'status')),
|
4705
4673
|
}
|
4706
4674
|
|
ccxt/async_support/kucoin.py
CHANGED
@@ -4490,6 +4490,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
4490
4490
|
partnerSignature = self.hmac(self.encode(partnerPayload), self.encode(partnerSecret), hashlib.sha256, 'base64')
|
4491
4491
|
headers['KC-API-PARTNER-SIGN'] = partnerSignature
|
4492
4492
|
headers['KC-API-PARTNER'] = partnerId
|
4493
|
+
headers['KC-API-PARTNER-VERIFY'] = 'true'
|
4493
4494
|
if isBroker:
|
4494
4495
|
brokerName = self.safe_string(partner, 'name')
|
4495
4496
|
if brokerName is not None:
|
ccxt/base/exchange.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
7
|
+
__version__ = '4.3.24'
|
8
8
|
|
9
9
|
# -----------------------------------------------------------------------------
|
10
10
|
|
@@ -5566,8 +5566,9 @@ class Exchange(object):
|
|
5566
5566
|
errors = 0
|
5567
5567
|
responseLength = len(response)
|
5568
5568
|
if self.verbose:
|
5569
|
-
|
5570
|
-
|
5569
|
+
cursorString = '' if (cursorValue is None) else cursorValue
|
5570
|
+
iteration = (i + 1)
|
5571
|
+
cursorMessage = 'Cursor pagination call ' + str(iteration) + ' method ' + method + ' response length ' + str(responseLength) + ' cursor ' + cursorString
|
5571
5572
|
self.log(cursorMessage)
|
5572
5573
|
if responseLength == 0:
|
5573
5574
|
break
|
ccxt/bitrue.py
CHANGED
@@ -2932,6 +2932,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
2932
2932
|
signPath = signPath + '/' + version + '/' + path
|
2933
2933
|
signMessage = timestamp + method + signPath
|
2934
2934
|
if method == 'GET':
|
2935
|
+
keys = list(params.keys())
|
2936
|
+
keysLength = len(keys)
|
2937
|
+
if keysLength > 0:
|
2938
|
+
signMessage += '?' + self.urlencode(params)
|
2935
2939
|
signature = self.hmac(self.encode(signMessage), self.encode(self.secret), hashlib.sha256)
|
2936
2940
|
headers = {
|
2937
2941
|
'X-CH-APIKEY': self.apiKey,
|
@@ -2944,7 +2948,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
2944
2948
|
'recvWindow': recvWindow,
|
2945
2949
|
}, params)
|
2946
2950
|
body = self.json(query)
|
2947
|
-
signMessage
|
2951
|
+
signMessage += body
|
2948
2952
|
signature = self.hmac(self.encode(signMessage), self.encode(self.secret), hashlib.sha256)
|
2949
2953
|
headers = {
|
2950
2954
|
'Content-Type': 'application/json',
|
ccxt/coinbaseadvanced.py
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
4
|
+
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
|
+
|
6
|
+
from ccxt.coinbase import coinbase
|
7
|
+
from ccxt.abstract.coinbaseadvanced import ImplicitAPI
|
8
|
+
|
9
|
+
|
10
|
+
class coinbaseadvanced(coinbase, ImplicitAPI):
|
11
|
+
|
12
|
+
def describe(self):
|
13
|
+
return self.deep_extend(super(coinbaseadvanced, self).describe(), {
|
14
|
+
'id': 'coinbaseadvanced',
|
15
|
+
'name': 'Coinbase Advanced',
|
16
|
+
'alias': True,
|
17
|
+
})
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
5
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
|
-
from ccxt.abstract.
|
7
|
+
from ccxt.abstract.coinbaseexchange import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
|
10
10
|
from typing import List
|
@@ -22,12 +22,12 @@ from ccxt.base.decimal_to_precision import TICK_SIZE
|
|
22
22
|
from ccxt.base.precise import Precise
|
23
23
|
|
24
24
|
|
25
|
-
class
|
25
|
+
class coinbaseexchange(Exchange, ImplicitAPI):
|
26
26
|
|
27
27
|
def describe(self):
|
28
|
-
return self.deep_extend(super(
|
29
|
-
'id': '
|
30
|
-
'name': 'Coinbase
|
28
|
+
return self.deep_extend(super(coinbaseexchange, self).describe(), {
|
29
|
+
'id': 'coinbaseexchange',
|
30
|
+
'name': 'Coinbase Exchange',
|
31
31
|
'countries': ['US'],
|
32
32
|
'rateLimit': 100,
|
33
33
|
'userAgent': self.userAgents['chrome'],
|
@@ -89,19 +89,19 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
89
89
|
'6h': 21600,
|
90
90
|
'1d': 86400,
|
91
91
|
},
|
92
|
-
'hostname': '
|
92
|
+
'hostname': 'exchange.coinbase.com',
|
93
93
|
'urls': {
|
94
94
|
'test': {
|
95
|
-
'public': 'https://api-public.sandbox.
|
96
|
-
'private': 'https://api-public.sandbox.
|
95
|
+
'public': 'https://api-public.sandbox.exchange.coinbase.com',
|
96
|
+
'private': 'https://api-public.sandbox.exchange.coinbase.com',
|
97
97
|
},
|
98
|
-
'logo': 'https://
|
98
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e',
|
99
99
|
'api': {
|
100
100
|
'public': 'https://api.{hostname}',
|
101
101
|
'private': 'https://api.{hostname}',
|
102
102
|
},
|
103
|
-
'www': 'https://
|
104
|
-
'doc': 'https://docs.
|
103
|
+
'www': 'https://coinbase.com/',
|
104
|
+
'doc': 'https://docs.cloud.coinbase.com/exchange/docs/',
|
105
105
|
'fees': [
|
106
106
|
'https://docs.pro.coinbase.com/#fees',
|
107
107
|
'https://support.pro.coinbase.com/customer/en/portal/articles/2945310-fees',
|
@@ -315,7 +315,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
315
315
|
|
316
316
|
def fetch_markets(self, params={}) -> List[Market]:
|
317
317
|
"""
|
318
|
-
retrieves data on all markets for
|
318
|
+
retrieves data on all markets for coinbaseexchange
|
319
319
|
:see: https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducts
|
320
320
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
321
321
|
:returns dict[]: an array of objects representing market data
|
@@ -1047,7 +1047,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1047
1047
|
"""
|
1048
1048
|
:see: https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorder
|
1049
1049
|
fetches information on an order made by the user
|
1050
|
-
:param str symbol: not used by
|
1050
|
+
:param str symbol: not used by coinbaseexchange fetchOrder
|
1051
1051
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1052
1052
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1053
1053
|
"""
|
ccxt/coinex.py
CHANGED
@@ -458,7 +458,9 @@ class coinex(Exchange, ImplicitAPI):
|
|
458
458
|
'fillResponseFromRequest': True,
|
459
459
|
},
|
460
460
|
'accountsById': {
|
461
|
-
'spot': '
|
461
|
+
'spot': 'SPOT',
|
462
|
+
'margin': 'MARGIN',
|
463
|
+
'swap': 'FUTURES',
|
462
464
|
},
|
463
465
|
'networks': {
|
464
466
|
'BEP20': 'BSC',
|
@@ -3453,7 +3455,10 @@ class coinex(Exchange, ImplicitAPI):
|
|
3453
3455
|
:param str [params.marginMode]: 'cross' or 'isolated' for fetching spot margin orders
|
3454
3456
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
3455
3457
|
"""
|
3456
|
-
|
3458
|
+
openOrders = self.fetch_orders_by_status('pending', symbol, since, limit, params)
|
3459
|
+
for i in range(0, len(openOrders)):
|
3460
|
+
openOrders[i]['status'] = 'open'
|
3461
|
+
return openOrders
|
3457
3462
|
|
3458
3463
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
3459
3464
|
"""
|
@@ -4598,40 +4603,42 @@ class coinex(Exchange, ImplicitAPI):
|
|
4598
4603
|
def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
4599
4604
|
"""
|
4600
4605
|
transfer currency internally between wallets on the same account
|
4601
|
-
:see: https://
|
4602
|
-
:see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account013_margin_transfer
|
4606
|
+
:see: https://docs.coinex.com/api/v2/assets/transfer/http/transfer
|
4603
4607
|
:param str code: unified currency code
|
4604
4608
|
:param float amount: amount to transfer
|
4605
4609
|
:param str fromAccount: account to transfer from
|
4606
4610
|
:param str toAccount: account to transfer to
|
4607
4611
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
4612
|
+
:param str [params.symbol]: unified ccxt symbol, required when either the fromAccount or toAccount is margin
|
4608
4613
|
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
|
4609
4614
|
"""
|
4610
4615
|
self.load_markets()
|
4611
4616
|
currency = self.currency(code)
|
4612
4617
|
amountToPrecision = self.currency_to_precision(code, amount)
|
4618
|
+
accountsById = self.safe_dict(self.options, 'accountsById', {})
|
4619
|
+
fromId = self.safe_string(accountsById, fromAccount, fromAccount)
|
4620
|
+
toId = self.safe_string(accountsById, toAccount, toAccount)
|
4613
4621
|
request = {
|
4622
|
+
'ccy': currency['id'],
|
4614
4623
|
'amount': amountToPrecision,
|
4615
|
-
'
|
4624
|
+
'from_account_type': fromId,
|
4625
|
+
'to_account_type': toId,
|
4616
4626
|
}
|
4617
|
-
|
4618
|
-
|
4619
|
-
|
4620
|
-
|
4621
|
-
|
4622
|
-
request['
|
4623
|
-
|
4624
|
-
|
4625
|
-
|
4626
|
-
fromId = self.safe_string(accountsById, fromAccount, fromAccount)
|
4627
|
-
toId = self.safe_string(accountsById, toAccount, toAccount)
|
4628
|
-
# fromAccount and toAccount must be integers for margin transfers
|
4629
|
-
# spot is 0, use fetchBalance() to find the margin account id
|
4630
|
-
request['from_account'] = int(fromId)
|
4631
|
-
request['to_account'] = int(toId)
|
4632
|
-
response = self.v1PrivatePostMarginTransfer(self.extend(request, params))
|
4627
|
+
if (fromAccount == 'margin') or (toAccount == 'margin'):
|
4628
|
+
symbol = self.safe_string(params, 'symbol')
|
4629
|
+
if symbol is None:
|
4630
|
+
raise ArgumentsRequired(self.id + ' transfer() the symbol parameter must be defined for a margin account')
|
4631
|
+
params = self.omit(params, 'symbol')
|
4632
|
+
request['market'] = self.market_id(symbol)
|
4633
|
+
if (fromAccount != 'spot') and (toAccount != 'spot'):
|
4634
|
+
raise BadRequest(self.id + ' transfer() can only be between spot and swap, or spot and margin, either the fromAccount or toAccount must be spot')
|
4635
|
+
response = self.v2PrivatePostAssetsTransfer(self.extend(request, params))
|
4633
4636
|
#
|
4634
|
-
# {
|
4637
|
+
# {
|
4638
|
+
# "code": 0,
|
4639
|
+
# "data": {},
|
4640
|
+
# "message": "OK"
|
4641
|
+
# }
|
4635
4642
|
#
|
4636
4643
|
return self.extend(self.parse_transfer(response, currency), {
|
4637
4644
|
'amount': self.parse_number(amountToPrecision),
|
@@ -4639,67 +4646,28 @@ class coinex(Exchange, ImplicitAPI):
|
|
4639
4646
|
'toAccount': toAccount,
|
4640
4647
|
})
|
4641
4648
|
|
4642
|
-
def parse_transfer_status(self, status
|
4649
|
+
def parse_transfer_status(self, status):
|
4643
4650
|
statuses = {
|
4644
4651
|
'0': 'ok',
|
4645
4652
|
'SUCCESS': 'ok',
|
4653
|
+
'OK': 'ok',
|
4646
4654
|
}
|
4647
4655
|
return self.safe_string(statuses, status, status)
|
4648
4656
|
|
4649
4657
|
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
4650
|
-
|
4651
|
-
|
4652
|
-
|
4653
|
-
|
4654
|
-
|
4655
|
-
# "asset": "USDT",
|
4656
|
-
# "transfer_type": "transfer_out", # from swap to spot
|
4657
|
-
# "created_at": 1651633422
|
4658
|
-
# },
|
4659
|
-
#
|
4660
|
-
# fetchTransfers Margin
|
4661
|
-
#
|
4662
|
-
# {
|
4663
|
-
# "id": 7580062,
|
4664
|
-
# "updated_at": 1653684379,
|
4665
|
-
# "user_id": 3620173,
|
4666
|
-
# "from_account_id": 0,
|
4667
|
-
# "to_account_id": 1,
|
4668
|
-
# "asset": "BTC",
|
4669
|
-
# "amount": "0.00160829",
|
4670
|
-
# "balance": "0.00160829",
|
4671
|
-
# "transfer_type": "IN",
|
4672
|
-
# "status": "SUCCESS",
|
4673
|
-
# "created_at": 1653684379
|
4674
|
-
# },
|
4675
|
-
#
|
4676
|
-
timestamp = self.safe_timestamp(transfer, 'created_at')
|
4677
|
-
transferType = self.safe_string(transfer, 'transfer_type')
|
4678
|
-
fromAccount = None
|
4679
|
-
toAccount = None
|
4680
|
-
if transferType == 'transfer_out':
|
4681
|
-
fromAccount = 'swap'
|
4682
|
-
toAccount = 'spot'
|
4683
|
-
elif transferType == 'transfer_in':
|
4684
|
-
fromAccount = 'spot'
|
4685
|
-
toAccount = 'swap'
|
4686
|
-
elif transferType == 'IN':
|
4687
|
-
fromAccount = 'spot'
|
4688
|
-
toAccount = 'margin'
|
4689
|
-
elif transferType == 'OUT':
|
4690
|
-
fromAccount = 'margin'
|
4691
|
-
toAccount = 'spot'
|
4692
|
-
currencyId = self.safe_string(transfer, 'asset')
|
4693
|
-
currencyCode = self.safe_currency_code(currencyId, currency)
|
4658
|
+
timestamp = self.safe_integer(transfer, 'created_at')
|
4659
|
+
currencyId = self.safe_string(transfer, 'ccy')
|
4660
|
+
fromId = self.safe_string(transfer, 'from_account_type')
|
4661
|
+
toId = self.safe_string(transfer, 'to_account_type')
|
4662
|
+
accountsById = self.safe_value(self.options, 'accountsById', {})
|
4694
4663
|
return {
|
4695
|
-
'
|
4696
|
-
'id': self.safe_string(transfer, 'id'),
|
4664
|
+
'id': None,
|
4697
4665
|
'timestamp': timestamp,
|
4698
4666
|
'datetime': self.iso8601(timestamp),
|
4699
|
-
'currency':
|
4667
|
+
'currency': self.safe_currency_code(currencyId, currency),
|
4700
4668
|
'amount': self.safe_number(transfer, 'amount'),
|
4701
|
-
'fromAccount':
|
4702
|
-
'toAccount':
|
4669
|
+
'fromAccount': self.safe_string(accountsById, fromId, fromId),
|
4670
|
+
'toAccount': self.safe_string(accountsById, toId, toId),
|
4703
4671
|
'status': self.parse_transfer_status(self.safe_string_2(transfer, 'code', 'status')),
|
4704
4672
|
}
|
4705
4673
|
|
ccxt/kucoin.py
CHANGED
@@ -4489,6 +4489,7 @@ class kucoin(Exchange, ImplicitAPI):
|
|
4489
4489
|
partnerSignature = self.hmac(self.encode(partnerPayload), self.encode(partnerSecret), hashlib.sha256, 'base64')
|
4490
4490
|
headers['KC-API-PARTNER-SIGN'] = partnerSignature
|
4491
4491
|
headers['KC-API-PARTNER'] = partnerId
|
4492
|
+
headers['KC-API-PARTNER-VERIFY'] = 'true'
|
4492
4493
|
if isBroker:
|
4493
4494
|
brokerName = self.safe_string(partner, 'name')
|
4494
4495
|
if brokerName is not None:
|
ccxt/pro/__init__.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# ----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
7
|
+
__version__ = '4.3.24'
|
8
8
|
|
9
9
|
# ----------------------------------------------------------------------------
|
10
10
|
|
@@ -36,8 +36,8 @@ from ccxt.pro.blockchaincom import blockchaincom # noqa
|
|
36
36
|
from ccxt.pro.bybit import bybit # noqa: F401
|
37
37
|
from ccxt.pro.cex import cex # noqa: F401
|
38
38
|
from ccxt.pro.coinbase import coinbase # noqa: F401
|
39
|
+
from ccxt.pro.coinbaseexchange import coinbaseexchange # noqa: F401
|
39
40
|
from ccxt.pro.coinbaseinternational import coinbaseinternational # noqa: F401
|
40
|
-
from ccxt.pro.coinbasepro import coinbasepro # noqa: F401
|
41
41
|
from ccxt.pro.coincheck import coincheck # noqa: F401
|
42
42
|
from ccxt.pro.coinex import coinex # noqa: F401
|
43
43
|
from ccxt.pro.coinone import coinone # noqa: F401
|
@@ -103,8 +103,8 @@ exchanges = [
|
|
103
103
|
'bybit',
|
104
104
|
'cex',
|
105
105
|
'coinbase',
|
106
|
+
'coinbaseexchange',
|
106
107
|
'coinbaseinternational',
|
107
|
-
'coinbasepro',
|
108
108
|
'coincheck',
|
109
109
|
'coinex',
|
110
110
|
'coinone',
|
ccxt/pro/bitget.py
CHANGED
@@ -1060,7 +1060,7 @@ class bitget(ccxt.async_support.bitget):
|
|
1060
1060
|
# "executePrice": "35123", # self is limit price
|
1061
1061
|
# "triggerType": "fill_price",
|
1062
1062
|
# "planType": "amount",
|
1063
|
-
# #### in case order had fill: ####
|
1063
|
+
# #### in case order had a partial fill: ####
|
1064
1064
|
# fillPrice: '35123',
|
1065
1065
|
# tradeId: '1171775539946528779',
|
1066
1066
|
# baseVolume: '7', # field present in market order
|
@@ -1177,13 +1177,19 @@ class bitget(ccxt.async_support.bitget):
|
|
1177
1177
|
totalAmount = None
|
1178
1178
|
filledAmount = None
|
1179
1179
|
cost = None
|
1180
|
+
remaining = None
|
1181
|
+
totalFilled = self.safe_string(order, 'accBaseVolume')
|
1180
1182
|
if isSpot:
|
1181
1183
|
if isMargin:
|
1182
1184
|
filledAmount = self.omit_zero(self.safe_string(order, 'fillTotalAmount'))
|
1183
1185
|
totalAmount = self.omit_zero(self.safe_string(order, 'baseSize')) # for margin trading
|
1184
1186
|
cost = self.safe_string(order, 'quoteSize')
|
1185
1187
|
else:
|
1186
|
-
|
1188
|
+
partialFillAmount = self.safe_string(order, 'baseVolume')
|
1189
|
+
if partialFillAmount is not None:
|
1190
|
+
filledAmount = partialFillAmount
|
1191
|
+
else:
|
1192
|
+
filledAmount = totalFilled
|
1187
1193
|
if isMarketOrder:
|
1188
1194
|
if isBuy:
|
1189
1195
|
totalAmount = accBaseVolume
|
@@ -1199,6 +1205,7 @@ class bitget(ccxt.async_support.bitget):
|
|
1199
1205
|
filledAmount = self.safe_string(order, 'baseVolume')
|
1200
1206
|
totalAmount = self.safe_string(order, 'size')
|
1201
1207
|
cost = self.safe_string(order, 'fillNotionalUsd')
|
1208
|
+
remaining = self.omit_zero(Precise.string_sub(totalAmount, totalFilled))
|
1202
1209
|
return self.safe_order({
|
1203
1210
|
'info': order,
|
1204
1211
|
'symbol': symbol,
|
@@ -1217,7 +1224,7 @@ class bitget(ccxt.async_support.bitget):
|
|
1217
1224
|
'cost': cost,
|
1218
1225
|
'average': avgPrice,
|
1219
1226
|
'filled': filledAmount,
|
1220
|
-
'remaining':
|
1227
|
+
'remaining': remaining,
|
1221
1228
|
'status': self.parse_ws_order_status(rawStatus),
|
1222
1229
|
'fee': feeObject,
|
1223
1230
|
'trades': None,
|
@@ -16,10 +16,10 @@ from ccxt.base.errors import BadRequest
|
|
16
16
|
from ccxt.base.errors import BadSymbol
|
17
17
|
|
18
18
|
|
19
|
-
class
|
19
|
+
class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
20
20
|
|
21
21
|
def describe(self):
|
22
|
-
return self.deep_extend(super(
|
22
|
+
return self.deep_extend(super(coinbaseexchange, self).describe(), {
|
23
23
|
'has': {
|
24
24
|
'ws': True,
|
25
25
|
'watchOHLCV': False, # missing on the exchange side
|
@@ -38,7 +38,7 @@ class coinbasepro(ccxt.async_support.coinbasepro):
|
|
38
38
|
},
|
39
39
|
'urls': {
|
40
40
|
'api': {
|
41
|
-
'ws': 'wss://ws-feed.
|
41
|
+
'ws': 'wss://ws-feed.exchange.coinbase.com',
|
42
42
|
},
|
43
43
|
'test': {
|
44
44
|
'ws': 'wss://ws-feed-public.sandbox.exchange.coinbase.com',
|
@@ -437,7 +437,7 @@ class coinbasepro(ccxt.async_support.coinbasepro):
|
|
437
437
|
# "side": "buy",
|
438
438
|
# "order_type": "limit"
|
439
439
|
# }
|
440
|
-
parsed = super(
|
440
|
+
parsed = super(coinbaseexchange, self).parse_trade(trade)
|
441
441
|
feeRate = None
|
442
442
|
isMaker = False
|
443
443
|
if 'maker_fee_rate' in trade:
|
@@ -727,7 +727,7 @@ class coinbasepro(ccxt.async_support.coinbasepro):
|
|
727
727
|
#
|
728
728
|
type = self.safe_string(ticker, 'type')
|
729
729
|
if type is None:
|
730
|
-
return super(
|
730
|
+
return super(coinbaseexchange, self).parse_ticker(ticker, market)
|
731
731
|
marketId = self.safe_string(ticker, 'product_id')
|
732
732
|
symbol = self.safe_symbol(marketId, market, '-')
|
733
733
|
timestamp = self.parse8601(self.safe_string(ticker, 'time'))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.24
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -49,7 +49,7 @@ Requires-Dist: mypy ==1.6.1 ; extra == 'type'
|
|
49
49
|
|
50
50
|
# CCXT – CryptoCurrency eXchange Trading Library
|
51
51
|
|
52
|
-
[](https://travis-ci.com/ccxt/ccxt) [](https://npmjs.com/package/ccxt) [](https://pypi.python.org/pypi/ccxt) [](https://www.npmjs.com/package/ccxt) [](https://discord.gg/ccxt) [](https://travis-ci.com/ccxt/ccxt) [](https://npmjs.com/package/ccxt) [](https://pypi.python.org/pypi/ccxt) [](https://www.npmjs.com/package/ccxt) [](https://discord.gg/ccxt) [](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [](https://twitter.com/ccxt_official)
|
53
53
|
|
54
54
|
A JavaScript / Python / PHP / C# library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.
|
55
55
|
|
@@ -145,8 +145,8 @@ The CCXT library currently supports the following 98 cryptocurrency exchange mar
|
|
145
145
|
| [](https://www.bybit.com/register?affiliate_id=35953) | bybit | [Bybit](https://www.bybit.com/register?affiliate_id=35953) | [](https://bybit-exchange.github.io/docs/inverse/) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
146
146
|
| [](https://cex.io/r/0/up105393824/0/) | cex | [CEX.IO](https://cex.io/r/0/up105393824/0/) | [](https://cex.io/cex-api) | | [](https://ccxt.pro) |
|
147
147
|
| [](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | coinbase | [Coinbase Advanced](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | [](https://developers.coinbase.com/api/v2) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
148
|
+
| [](https://coinbase.com/) | coinbaseexchange | [Coinbase Exchange](https://coinbase.com/) | [](https://docs.cloud.coinbase.com/exchange/docs/) | | [](https://ccxt.pro) |
|
148
149
|
| [](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [](https://docs.cloud.coinbase.com/intx/docs) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
149
|
-
| [](https://pro.coinbase.com/) | coinbasepro | [Coinbase Pro(Deprecated)](https://pro.coinbase.com/) | [](https://docs.pro.coinbase.com) | | [](https://ccxt.pro) |
|
150
150
|
| [](https://coincheck.com) | coincheck | [coincheck](https://coincheck.com) | [](https://coincheck.com/documents/exchange/api) | | |
|
151
151
|
| [](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [](https://docs.coinex.com/api/v2) | [](https://github.com/ccxt/ccxt/wiki/Certification) | [](https://ccxt.pro) |
|
152
152
|
| [](https://coinlist.co) | coinlist | [Coinlist](https://coinlist.co) | [](https://trade-docs.coinlist.co) | | |
|
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
|
|
264
264
|
|
265
265
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
266
266
|
|
267
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
268
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
267
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.24/dist/ccxt.browser.js
|
268
|
+
* unpkg: https://unpkg.com/ccxt@4.3.24/dist/ccxt.browser.js
|
269
269
|
|
270
270
|
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.
|
271
271
|
|
272
272
|
```HTML
|
273
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
273
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.24/dist/ccxt.browser.js"></script>
|
274
274
|
```
|
275
275
|
|
276
276
|
Creates a global `ccxt` object:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ccxt/__init__.py,sha256=
|
1
|
+
ccxt/__init__.py,sha256=B1EFn-tKO_K29PcG0QEnfrDIY1jVqOL-3lliEvXsWx0,15950
|
2
2
|
ccxt/ace.py,sha256=IAbVQ73OhU5xdTLO6dtedqa3bSuZ63Me55Se1zotYUY,41656
|
3
3
|
ccxt/alpaca.py,sha256=NadHil-XkNFteqE7GwzIhKCCRjQ7m0xBQBCUlKxS6Sc,47215
|
4
4
|
ccxt/ascendex.py,sha256=UjGRc4PgSi9ZNFl8greVZZZMTQxjEQRF8yF5SSUqeJM,151471
|
@@ -23,7 +23,7 @@ ccxt/bitmart.py,sha256=kM0SaiFm7LMGSSh-9iHSyexet0t7C9gLnKFfyORscEU,199137
|
|
23
23
|
ccxt/bitmex.py,sha256=PxRDGNFOToB2fFulw0Z3XEklLhFmKF_rRfx8LpDtgoo,126584
|
24
24
|
ccxt/bitopro.py,sha256=Ph0uhgzUJzNKji_bIs9SxbY72U7Fu-6QWr2i6WMKB7M,68522
|
25
25
|
ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
|
26
|
-
ccxt/bitrue.py,sha256=
|
26
|
+
ccxt/bitrue.py,sha256=IyMHMGfGwOwhi2WOy5-cPe7_GITVB22tS4JeVXClxGY,136392
|
27
27
|
ccxt/bitso.py,sha256=ni6NTPVeUN8JODxvXR7oCG0TIc3JwEq8D-grCNpnFM8,70885
|
28
28
|
ccxt/bitstamp.py,sha256=5_Y1RbEMxzX0H8Y9IJ3cEOyemkI_QpyUKFSW23IEp0Y,92235
|
29
29
|
ccxt/bitteam.py,sha256=pInXxLqE5yOXly9JLKOsRx92l6SA4clnMm1oYEOzuEw,102026
|
@@ -38,10 +38,11 @@ ccxt/btcturk.py,sha256=9RFC0mCWjW_jW8Hgz5cuwb1gaeLf469FOXae4p_KQJM,36657
|
|
38
38
|
ccxt/bybit.py,sha256=OCRuZpug2qrIFy97l_7xSAxRa0y8Vua1lamHxSo6IwE,412519
|
39
39
|
ccxt/cex.py,sha256=_EDbKQQiIKS5UVztu1wrQq-WQPJxa3GnLelfOkd6O2k,69930
|
40
40
|
ccxt/coinbase.py,sha256=IQu7NvSQ80m5cUlfkbHhywTdwO2n7YRXeuToXbGlYG0,212311
|
41
|
+
ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
|
42
|
+
ccxt/coinbaseexchange.py,sha256=FeSNMY_lAzYAs3X9QmDCMSHScdyUW-nLv78AoMIPK78,78704
|
41
43
|
ccxt/coinbaseinternational.py,sha256=wieWUwsLsBYAgNpvnnrKseqAE7aOw__apSP6MQK9u9E,87240
|
42
|
-
ccxt/coinbasepro.py,sha256=SFMlNzdnl_vbE_KqnopNmj-u8As_g2D9qFmrpicNsZw,78671
|
43
44
|
ccxt/coincheck.py,sha256=jg8KHt_XUMPlbG1BYUiSHu9-DDBWdnQwV15P9IzKqbY,35664
|
44
|
-
ccxt/coinex.py,sha256=
|
45
|
+
ccxt/coinex.py,sha256=zce54mXGtgS1bqSrt-3IRSZdFHRtflIoqIX8dl2SaXc,259870
|
45
46
|
ccxt/coinlist.py,sha256=EU4jtqWALdcLG5X3m2q4xPbQ3-h5-H63Eeb_R3wW-5s,103140
|
46
47
|
ccxt/coinmate.py,sha256=EsXu0mcAkVFwg2VOg47qr6g95a3bDPN2I9AuFQxgkQg,45946
|
47
48
|
ccxt/coinmetro.py,sha256=tZjLAz5XufybO3BU3QGXMrLzinoY4UBhn0JIyXivnys,80700
|
@@ -70,7 +71,7 @@ ccxt/independentreserve.py,sha256=iobtHiT8KlD1-mDJeoZCzPEPteSZz512mxgnrTnsECo,32
|
|
70
71
|
ccxt/indodax.py,sha256=ulvlP7-xpQWXrBfvRn-GWMoOXr_4MBBMrkTDDgM4fbQ,51921
|
71
72
|
ccxt/kraken.py,sha256=YKMTpaILyYw5kLQkKMH9pl9nB0ek_5NSE0ew5-cUOVQ,125472
|
72
73
|
ccxt/krakenfutures.py,sha256=S1WRrAtZ_tibYH50N0yb4y4pe12g3yNruLaH0ZWuWw4,116835
|
73
|
-
ccxt/kucoin.py,sha256=
|
74
|
+
ccxt/kucoin.py,sha256=0YqwMhzxBt_cmOgZj_JPJ5tOF7QrFJXzyvBrheJiuT4,217796
|
74
75
|
ccxt/kucoinfutures.py,sha256=x5m2yqC5ZEIaKCBmM8alKJ7tk2r9nzpMC-PcpfadnRo,124327
|
75
76
|
ccxt/kuna.py,sha256=Q1FuK9RvZmEYN87G3bHsVhcUcclMApuFVDNv5njyaRU,95991
|
76
77
|
ccxt/latoken.py,sha256=pMuCXETni8Ihgl4OSUNk5Ovt4D6bV61zctM45nn8cCs,79197
|
@@ -143,8 +144,9 @@ ccxt/abstract/btcturk.py,sha256=duM-QrB9MvGpopOtxkfbeYlY49bgvXQLiosRVmnQYFw,1777
|
|
143
144
|
ccxt/abstract/bybit.py,sha256=eqKWi3rALneYXIgP62lKZDq_mRAGYNawisGPPLqQ1vk,48923
|
144
145
|
ccxt/abstract/cex.py,sha256=Q0NJeDuJ4Kn_mtokYqBenhXWvLIiMSVTqbgbfcLGgv4,3311
|
145
146
|
ccxt/abstract/coinbase.py,sha256=GFXDh_Bf65Gsx_DmgOrRG2jpM3IdITE3Agqz_LZTJfo,15507
|
147
|
+
ccxt/abstract/coinbaseadvanced.py,sha256=GFXDh_Bf65Gsx_DmgOrRG2jpM3IdITE3Agqz_LZTJfo,15507
|
148
|
+
ccxt/abstract/coinbaseexchange.py,sha256=eQMtsIw94xJqQO_xXmrrHdc_YFmhVZNW4OXCWv4Nx1w,7162
|
146
149
|
ccxt/abstract/coinbaseinternational.py,sha256=wf1fF31fQ1TAVSk1X4ju6LYQc7tHI1lN5nxRnhnzsbk,4770
|
147
|
-
ccxt/abstract/coinbasepro.py,sha256=eQMtsIw94xJqQO_xXmrrHdc_YFmhVZNW4OXCWv4Nx1w,7162
|
148
150
|
ccxt/abstract/coincheck.py,sha256=3IIVmryXmzxXqi6IleUmfDZIUMOn_L_4G9Iw8BuEEGo,3417
|
149
151
|
ccxt/abstract/coinex.py,sha256=xPxsdMIhrtHfZO7w5cW-1RpR12H20u1tTPNFaNaeXOU,34678
|
150
152
|
ccxt/abstract/coinlist.py,sha256=t4Xc9xyWNHgHAz7nyplj8PmgrX4knA3cnk2uEJCvkQk,6538
|
@@ -208,7 +210,7 @@ ccxt/abstract/woofipro.py,sha256=El50vWGAV-4QPIDhgSnd4egfvk246NB6vTC-8h722vs,160
|
|
208
210
|
ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
|
209
211
|
ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
|
210
212
|
ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
|
211
|
-
ccxt/async_support/__init__.py,sha256=
|
213
|
+
ccxt/async_support/__init__.py,sha256=t_VwyA3nEUTkoaRHt7HUyUv8NmHmqiIHEChunLqt2Dg,15723
|
212
214
|
ccxt/async_support/ace.py,sha256=xVxaTocpMapAIl4ApPApw69Rd-RDuU0_vleJnVt_qhI,41880
|
213
215
|
ccxt/async_support/alpaca.py,sha256=rjD8PdQr1B5e9hvaoTQBKVtWwHLs04e6_-gooXl4eEE,47427
|
214
216
|
ccxt/async_support/ascendex.py,sha256=w4GaR3Xm9fkIAdXostTsu0Pnw9VkRrT6ar57gU9HSHw,152259
|
@@ -233,7 +235,7 @@ ccxt/async_support/bitmart.py,sha256=wKlX--oFHZI8rWzdrR8jeYvg4dWfuARfSZ67yO9JgFc
|
|
233
235
|
ccxt/async_support/bitmex.py,sha256=tnw76bg38oOvz-luU-c7K4A75MwSsfwJs9VrzRW5OHs,127162
|
234
236
|
ccxt/async_support/bitopro.py,sha256=kIorVevTcOvIqfsCn0z-QXscJjIDcG3qq9_WzC6C_ks,68926
|
235
237
|
ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
|
236
|
-
ccxt/async_support/bitrue.py,sha256=
|
238
|
+
ccxt/async_support/bitrue.py,sha256=WEmcqhfxpON6EoBNXvlslfID2NTyk5vRgvwQU9lt1QU,137050
|
237
239
|
ccxt/async_support/bitso.py,sha256=z0X3fCd9sQF5YSUJIr9d9dNyLhLgl7XsU5F7DvzgO4E,71271
|
238
240
|
ccxt/async_support/bitstamp.py,sha256=_hHTPEPF51z7HJ3Z8s037k6b0YZwdbe1nATfepEtDLc,92735
|
239
241
|
ccxt/async_support/bitteam.py,sha256=V-Ofv3bjLcEgikZX_XNF9D941uJ9MLPla0656Q2mrUk,102358
|
@@ -248,10 +250,11 @@ ccxt/async_support/btcturk.py,sha256=EMrvQcRRGtO9Hu3StUvalUiaTgueI7UM86IYS0Dgj6I
|
|
248
250
|
ccxt/async_support/bybit.py,sha256=4wjZKMH6UthYB1qIeA0gAcoaHk71fEnQii8xPIM3-VI,414323
|
249
251
|
ccxt/async_support/cex.py,sha256=MMVgApSlmqtfnEJHdsL4WXd7_5uFri-F0QjSWOsyoEU,70280
|
250
252
|
ccxt/async_support/coinbase.py,sha256=7I2rxiBGKwnC6aZ2DMajH5FEarhesMGRWK-Xhn3kL8g,213417
|
253
|
+
ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
|
254
|
+
ccxt/async_support/coinbaseexchange.py,sha256=3wEfbKBAVn9JkOfukopSRPhM8unRA6BQLqvm5c2VLBE,79210
|
251
255
|
ccxt/async_support/coinbaseinternational.py,sha256=fuU-h5UpO_nVs1j8KA7oGsQlP0kQefuPycZrc8ph6OQ,87794
|
252
|
-
ccxt/async_support/coinbasepro.py,sha256=GnzjqgXso5wqAVZbkMcMjcpQ1BJ7um3BtBbhrM_X0rI,79177
|
253
256
|
ccxt/async_support/coincheck.py,sha256=ThRQX8E3NZrGc9Z__UIb7p0AtHgnq_DBhe9GzE9SlaQ,35870
|
254
|
-
ccxt/async_support/coinex.py,sha256=
|
257
|
+
ccxt/async_support/coinex.py,sha256=g_RcySMlUqdpONcOnzJgTOt3JpvMkhGVCYu2OfiHdks,261152
|
255
258
|
ccxt/async_support/coinlist.py,sha256=MKLhRyaw0DHkpRfR-Vj9NS0SwCpYUx8nOxZJ26swIMY,103628
|
256
259
|
ccxt/async_support/coinmate.py,sha256=lc8p0aQXu-oSf2whiqvm0QoBhDVx9wf50CcFeucdXcY,46212
|
257
260
|
ccxt/async_support/coinmetro.py,sha256=NLqNdcJ_zXcNqaxqkrloL9PqnogbQ6OzA5e_Gl4ACtk,81020
|
@@ -280,7 +283,7 @@ ccxt/async_support/independentreserve.py,sha256=8UTpFWJtrfZTeMhRfNK8mGiOu0-p-JCb
|
|
280
283
|
ccxt/async_support/indodax.py,sha256=Duu0r6PCzPlQLNqj2v2smCh6xE65S9LpP7wwQWa5ygM,52229
|
281
284
|
ccxt/async_support/kraken.py,sha256=_yQEd3_OjqQBDdElH-XTPkLVe6P2tCVt0kl2BjlVnKU,126074
|
282
285
|
ccxt/async_support/krakenfutures.py,sha256=LwIy5nZe5urJ7Yrb5_KSKtk0giBBUnQl20KlgGKXwLg,117323
|
283
|
-
ccxt/async_support/kucoin.py,sha256
|
286
|
+
ccxt/async_support/kucoin.py,sha256=-7kAVv2ghUIBXL6QLWmuZUsgCdq2wW6cHGSFMFGDyMA,218868
|
284
287
|
ccxt/async_support/kucoinfutures.py,sha256=3gdO1HK5avmyseAXEEiufyNifvJAUpW75mUQNYhlmzQ,124965
|
285
288
|
ccxt/async_support/kuna.py,sha256=jcgPCS4_wHsWbBni6yuj6iMa641AYsiZr8ZBNGoxCe8,96407
|
286
289
|
ccxt/async_support/latoken.py,sha256=eseLp2evP-Ux0BSkOTlq2CXSnHVjAWDqY26OrKMgXTQ,79673
|
@@ -314,7 +317,7 @@ ccxt/async_support/yobit.py,sha256=kvMIVVjf8XxE7cKt51iHtqH7zgmFKc5ZVhk1dKDtlxE,5
|
|
314
317
|
ccxt/async_support/zaif.py,sha256=lzrmIYPlNJquYkK-fq9DjqS8EfiAtofXnPcTMf3XOMM,28161
|
315
318
|
ccxt/async_support/zonda.py,sha256=bS_Oq8FVjbLxnxFVVg-_5ZlNS0CH9QxSUVKL91IR9rc,80912
|
316
319
|
ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
317
|
-
ccxt/async_support/base/exchange.py,sha256=
|
320
|
+
ccxt/async_support/base/exchange.py,sha256=IYH0t15nRLoVoENRTCmxOy8ClaroISPnRV0RVIvDyH0,108717
|
318
321
|
ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
319
322
|
ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
320
323
|
ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
|
@@ -328,10 +331,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
|
|
328
331
|
ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
329
332
|
ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
330
333
|
ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
|
331
|
-
ccxt/base/exchange.py,sha256=
|
334
|
+
ccxt/base/exchange.py,sha256=aKmetWxqjo5la1OpqiQnmh6dkTiopP5U_HBg2IVaCTI,278253
|
332
335
|
ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
|
333
336
|
ccxt/base/types.py,sha256=3hBdiD2EO7W-pwmBrDeDYMEdFGcnT0QqQZa3l8ywTVM,9027
|
334
|
-
ccxt/pro/__init__.py,sha256=
|
337
|
+
ccxt/pro/__init__.py,sha256=sVg8AyzgbmwugQlnDh4ZA6H-NzqxchL4yuWNT9cx4aI,7107
|
335
338
|
ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
|
336
339
|
ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
|
337
340
|
ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
|
@@ -343,7 +346,7 @@ ccxt/pro/bingx.py,sha256=DX-_TEWhTSi__zP865UUM0DqnEO9VO6KHysLiVr2JpE,42110
|
|
343
346
|
ccxt/pro/bitcoincom.py,sha256=zAX6hiz4hS6Un8dSGp88rpnvItxQHfNmsfF0IZ2xIVA,1181
|
344
347
|
ccxt/pro/bitfinex.py,sha256=VdvMikgWO7htYSAEKmGkDBYISWCJon1bnkv3JkV4nv0,24826
|
345
348
|
ccxt/pro/bitfinex2.py,sha256=9_N-a4eyiOndD1_1qRDEH7_02U75K1dH7qOYu8M5xUg,42834
|
346
|
-
ccxt/pro/bitget.py,sha256=
|
349
|
+
ccxt/pro/bitget.py,sha256=6_z3512667AfuT18xZ8TYVad6_8wjbYh5mLIVZ4jJQw,72543
|
347
350
|
ccxt/pro/bithumb.py,sha256=xMFS5eOYLAdqePz2Tcwu76qG_k7XbgnUjW9hKDehBjA,16799
|
348
351
|
ccxt/pro/bitmart.py,sha256=Jyp-MyCUlvLDcMgz4Y8Dbjm8FJkjc79iLCBLgjYJHwc,62382
|
349
352
|
ccxt/pro/bitmex.py,sha256=EJ_M666RDhhKal8umRKTbYZHCqHrrkRbWnOCzSEe3kI,68956
|
@@ -356,8 +359,8 @@ ccxt/pro/blockchaincom.py,sha256=Uv1ijvxvFGrqFPH6iifCk5AgQYTDsXUa5n0ktpusVjM,295
|
|
356
359
|
ccxt/pro/bybit.py,sha256=FWN3ixxNYBIlHBkfD5wg5kaJ_lxLppvTDySvCvyOebI,85098
|
357
360
|
ccxt/pro/cex.py,sha256=psU0k-icE931Z_wpkr16IdSZ2iDUwLnqJz3KUmQ5Xls,58380
|
358
361
|
ccxt/pro/coinbase.py,sha256=j1iI52eNa-qya7Q7BZCpd1SAJQZc4LEGu25DIu0LMwo,29324
|
362
|
+
ccxt/pro/coinbaseexchange.py,sha256=vhW-SIPSaSidXkQk1WDAU1-0Vj1S9kRJl6U-5CnyPcQ,38975
|
359
363
|
ccxt/pro/coinbaseinternational.py,sha256=4LMDA9RJhwT2T55kyryGCJBrdRgh_XBVYlJjXGS_AMc,25794
|
360
|
-
ccxt/pro/coinbasepro.py,sha256=94ZXmg-Ez5tSiUYP98nu-gWvuXb-Dk4WHMVsXOR8AK0,38945
|
361
364
|
ccxt/pro/coincheck.py,sha256=MKAPHJeVifQaCKPla-7RY86TIWyDGe4nvjRhNmi617w,7789
|
362
365
|
ccxt/pro/coinex.py,sha256=LVgahnm6laz2e0oQP4C8ki3mLcx5Eh-uz989BFquozM,45042
|
363
366
|
ccxt/pro/coinone.py,sha256=d0s11hTNFVFZiBD3jWWu6iRseyVsHR6dO-njqqZ2WyU,15652
|
@@ -531,7 +534,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
|
|
531
534
|
ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
|
532
535
|
ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
|
533
536
|
ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
|
534
|
-
ccxt-4.3.
|
535
|
-
ccxt-4.3.
|
536
|
-
ccxt-4.3.
|
537
|
-
ccxt-4.3.
|
537
|
+
ccxt-4.3.24.dist-info/METADATA,sha256=bv863nPYUVx5JlZGAu--tTGwa4QRxDiJZm-TEQqWsW0,112795
|
538
|
+
ccxt-4.3.24.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
|
539
|
+
ccxt-4.3.24.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
|
540
|
+
ccxt-4.3.24.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|