bitmart 0.0.24__py3-none-any.whl → 0.0.26__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 bitmart might be problematic. Click here for more details.
- bitmart/ccxt/__init__.py +2 -3
- bitmart/ccxt/abstract/bitmart.py +2 -0
- bitmart/ccxt/async_support/__init__.py +2 -3
- bitmart/ccxt/async_support/base/exchange.py +2 -2
- bitmart/ccxt/async_support/bitmart.py +72 -8
- bitmart/ccxt/base/exchange.py +109 -23
- bitmart/ccxt/bitmart.py +72 -8
- bitmart/ccxt/pro/__init__.py +2 -3
- bitmart/ccxt/pro/bitmart.py +9 -1
- {bitmart-0.0.24.dist-info → bitmart-0.0.26.dist-info}/METADATA +11 -3
- {bitmart-0.0.24.dist-info → bitmart-0.0.26.dist-info}/RECORD +12 -12
- {bitmart-0.0.24.dist-info → bitmart-0.0.26.dist-info}/WHEEL +0 -0
bitmart/ccxt/__init__.py
CHANGED
|
@@ -26,7 +26,7 @@ sys.modules['ccxt'] = ccxt_module
|
|
|
26
26
|
|
|
27
27
|
# ----------------------------------------------------------------------------
|
|
28
28
|
|
|
29
|
-
__version__ = '4.4.
|
|
29
|
+
__version__ = '4.4.78'
|
|
30
30
|
|
|
31
31
|
# ----------------------------------------------------------------------------
|
|
32
32
|
|
|
@@ -87,10 +87,9 @@ from ccxt.base.errors import CancelPending # noqa: F4
|
|
|
87
87
|
from ccxt.base.errors import UnsubscribeError # noqa: F401
|
|
88
88
|
from ccxt.base.errors import error_hierarchy # noqa: F401
|
|
89
89
|
|
|
90
|
-
from ccxt.bitfinex1 import bitfinex1 # noqa: F401
|
|
91
90
|
from ccxt.bitmart import bitmart # noqa: F401
|
|
92
91
|
|
|
93
|
-
exchanges = [ '
|
|
92
|
+
exchanges = [ 'bitmart',]
|
|
94
93
|
|
|
95
94
|
base = [
|
|
96
95
|
'Exchange',
|
bitmart/ccxt/abstract/bitmart.py
CHANGED
|
@@ -68,6 +68,7 @@ class ImplicitAPI:
|
|
|
68
68
|
private_get_contract_private_affilate_rebate_list = privateGetContractPrivateAffilateRebateList = Entry('contract/private/affilate/rebate-list', 'private', 'GET', {'cost': 10})
|
|
69
69
|
private_get_contract_private_affilate_trade_list = privateGetContractPrivateAffilateTradeList = Entry('contract/private/affilate/trade-list', 'private', 'GET', {'cost': 10})
|
|
70
70
|
private_get_contract_private_transaction_history = privateGetContractPrivateTransactionHistory = Entry('contract/private/transaction-history', 'private', 'GET', {'cost': 10})
|
|
71
|
+
private_get_contract_private_get_position_mode = privateGetContractPrivateGetPositionMode = Entry('contract/private/get-position-mode', 'private', 'GET', {'cost': 1})
|
|
71
72
|
private_post_account_sub_account_main_v1_sub_to_main = privatePostAccountSubAccountMainV1SubToMain = Entry('account/sub-account/main/v1/sub-to-main', 'private', 'POST', {'cost': 30})
|
|
72
73
|
private_post_account_sub_account_sub_v1_sub_to_main = privatePostAccountSubAccountSubV1SubToMain = Entry('account/sub-account/sub/v1/sub-to-main', 'private', 'POST', {'cost': 30})
|
|
73
74
|
private_post_account_sub_account_main_v1_main_to_sub = privatePostAccountSubAccountMainV1MainToSub = Entry('account/sub-account/main/v1/main-to-sub', 'private', 'POST', {'cost': 30})
|
|
@@ -112,3 +113,4 @@ class ImplicitAPI:
|
|
|
112
113
|
private_post_contract_private_modify_tp_sl_order = privatePostContractPrivateModifyTpSlOrder = Entry('contract/private/modify-tp-sl-order', 'private', 'POST', {'cost': 2.5})
|
|
113
114
|
private_post_contract_private_submit_trail_order = privatePostContractPrivateSubmitTrailOrder = Entry('contract/private/submit-trail-order', 'private', 'POST', {'cost': 2.5})
|
|
114
115
|
private_post_contract_private_cancel_trail_order = privatePostContractPrivateCancelTrailOrder = Entry('contract/private/cancel-trail-order', 'private', 'POST', {'cost': 1.5})
|
|
116
|
+
private_post_contract_private_set_position_mode = privatePostContractPrivateSetPositionMode = Entry('contract/private/set-position-mode', 'private', 'POST', {'cost': 1})
|
|
@@ -8,7 +8,7 @@ sys.modules['ccxt'] = ccxt_module
|
|
|
8
8
|
|
|
9
9
|
# -----------------------------------------------------------------------------
|
|
10
10
|
|
|
11
|
-
__version__ = '4.4.
|
|
11
|
+
__version__ = '4.4.78'
|
|
12
12
|
|
|
13
13
|
# -----------------------------------------------------------------------------
|
|
14
14
|
|
|
@@ -67,10 +67,9 @@ from ccxt.base.errors import UnsubscribeError # noqa: F4
|
|
|
67
67
|
from ccxt.base.errors import error_hierarchy # noqa: F401
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
from ccxt.async_support.bitfinex1 import bitfinex1 # noqa: F401
|
|
71
70
|
from ccxt.async_support.bitmart import bitmart # noqa: F401
|
|
72
71
|
|
|
73
|
-
exchanges = [ '
|
|
72
|
+
exchanges = [ 'bitmart',]
|
|
74
73
|
|
|
75
74
|
base = [
|
|
76
75
|
'Exchange',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# -----------------------------------------------------------------------------
|
|
4
4
|
|
|
5
|
-
__version__ = '4.4.
|
|
5
|
+
__version__ = '4.4.78'
|
|
6
6
|
|
|
7
7
|
# -----------------------------------------------------------------------------
|
|
8
8
|
|
|
@@ -154,7 +154,7 @@ class Exchange(BaseExchange):
|
|
|
154
154
|
proxyUrl = self.check_proxy_url_settings(url, method, headers, body)
|
|
155
155
|
if proxyUrl is not None:
|
|
156
156
|
request_headers.update({'Origin': self.origin})
|
|
157
|
-
url = proxyUrl + url
|
|
157
|
+
url = proxyUrl + self.url_encoder_for_proxy_url(url)
|
|
158
158
|
# proxy agents
|
|
159
159
|
final_proxy = None # set default
|
|
160
160
|
proxy_session = None
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.bitmart import ImplicitAPI
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Any, Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
|
|
9
|
+
from ccxt.base.types import Any, Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
12
12
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -104,7 +104,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
104
104
|
'fetchOrders': False,
|
|
105
105
|
'fetchOrderTrades': True,
|
|
106
106
|
'fetchPosition': True,
|
|
107
|
-
'fetchPositionMode':
|
|
107
|
+
'fetchPositionMode': True,
|
|
108
108
|
'fetchPositions': True,
|
|
109
109
|
'fetchStatus': True,
|
|
110
110
|
'fetchTicker': True,
|
|
@@ -126,6 +126,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
126
126
|
'repayIsolatedMargin': True,
|
|
127
127
|
'setLeverage': True,
|
|
128
128
|
'setMarginMode': False,
|
|
129
|
+
'setPositionMode': True,
|
|
129
130
|
'transfer': True,
|
|
130
131
|
'withdraw': True,
|
|
131
132
|
},
|
|
@@ -231,6 +232,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
231
232
|
'contract/private/affilate/rebate-list': 10,
|
|
232
233
|
'contract/private/affilate/trade-list': 10,
|
|
233
234
|
'contract/private/transaction-history': 10,
|
|
235
|
+
'contract/private/get-position-mode': 1,
|
|
234
236
|
},
|
|
235
237
|
'post': {
|
|
236
238
|
# sub-account endpoints
|
|
@@ -283,6 +285,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
283
285
|
'contract/private/modify-tp-sl-order': 2.5,
|
|
284
286
|
'contract/private/submit-trail-order': 2.5, # weight is not provided by the exchange, is set order
|
|
285
287
|
'contract/private/cancel-trail-order': 1.5, # weight is not provided by the exchange, is set order
|
|
288
|
+
'contract/private/set-position-mode': 1,
|
|
286
289
|
},
|
|
287
290
|
},
|
|
288
291
|
},
|
|
@@ -1205,7 +1208,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
1205
1208
|
# {
|
|
1206
1209
|
# "message": "OK",
|
|
1207
1210
|
# "code": 1000,
|
|
1208
|
-
# "trace": "619294ecef584282b26a3be322b1e01f.66.
|
|
1211
|
+
# "trace": "619294ecef584282b26a3be322b1e01f.66.17403093228242229",
|
|
1209
1212
|
# "data": {
|
|
1210
1213
|
# "currencies": [
|
|
1211
1214
|
# {
|
|
@@ -3847,10 +3850,11 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
3847
3850
|
timestamp = self.safe_integer(transaction, 'apply_time')
|
|
3848
3851
|
currencyId = self.safe_string(transaction, 'currency')
|
|
3849
3852
|
networkId: Str = None
|
|
3850
|
-
if currencyId
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3853
|
+
if currencyId is not None:
|
|
3854
|
+
if currencyId.find('NFT') < 0:
|
|
3855
|
+
parts = currencyId.split('-')
|
|
3856
|
+
currencyId = self.safe_string(parts, 0)
|
|
3857
|
+
networkId = self.safe_string(parts, 1)
|
|
3854
3858
|
code = self.safe_currency_code(currencyId, currency)
|
|
3855
3859
|
status = self.parse_transaction_status(self.safe_string(transaction, 'status'))
|
|
3856
3860
|
feeCost = self.safe_number(transaction, 'fee')
|
|
@@ -4650,7 +4654,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
4650
4654
|
first = self.safe_dict(data, 0, {})
|
|
4651
4655
|
return self.parse_position(first, market)
|
|
4652
4656
|
|
|
4653
|
-
async def fetch_positions(self, symbols: Strings = None, params={}):
|
|
4657
|
+
async def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
|
|
4654
4658
|
"""
|
|
4655
4659
|
fetch all open contract positions
|
|
4656
4660
|
|
|
@@ -5212,6 +5216,66 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
5212
5216
|
addresses.append(address)
|
|
5213
5217
|
return addresses
|
|
5214
5218
|
|
|
5219
|
+
async def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
|
5220
|
+
"""
|
|
5221
|
+
set hedged to True or False for a market
|
|
5222
|
+
|
|
5223
|
+
https://developer-pro.bitmart.com/en/futuresv2/#submit-leverage-signed
|
|
5224
|
+
|
|
5225
|
+
:param bool hedged: set to True to use dualSidePosition
|
|
5226
|
+
:param str symbol: not used by bingx setPositionMode()
|
|
5227
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
5228
|
+
:returns dict: response from the exchange
|
|
5229
|
+
"""
|
|
5230
|
+
await self.load_markets()
|
|
5231
|
+
positionMode = None
|
|
5232
|
+
if hedged:
|
|
5233
|
+
positionMode = 'hedge_mode'
|
|
5234
|
+
else:
|
|
5235
|
+
positionMode = 'one_way_mode'
|
|
5236
|
+
request: dict = {
|
|
5237
|
+
'position_mode': positionMode,
|
|
5238
|
+
}
|
|
5239
|
+
#
|
|
5240
|
+
# {
|
|
5241
|
+
# "code": 1000,
|
|
5242
|
+
# "trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
|
|
5243
|
+
# "message": "Ok",
|
|
5244
|
+
# "data": {
|
|
5245
|
+
# "position_mode":"one_way_mode"
|
|
5246
|
+
# }
|
|
5247
|
+
# }
|
|
5248
|
+
#
|
|
5249
|
+
return await self.privatePostContractPrivateSetPositionMode(self.extend(request, params))
|
|
5250
|
+
|
|
5251
|
+
async def fetch_position_mode(self, symbol: Str = None, params={}):
|
|
5252
|
+
"""
|
|
5253
|
+
fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
|
|
5254
|
+
|
|
5255
|
+
https://developer-pro.bitmart.com/en/futuresv2/#get-position-mode-keyed
|
|
5256
|
+
|
|
5257
|
+
:param str symbol: not used
|
|
5258
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
5259
|
+
:returns dict: an object detailing whether the market is in hedged or one-way mode
|
|
5260
|
+
"""
|
|
5261
|
+
response = await self.privateGetContractPrivateGetPositionMode(params)
|
|
5262
|
+
#
|
|
5263
|
+
# {
|
|
5264
|
+
# "code": 1000,
|
|
5265
|
+
# "trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
|
|
5266
|
+
# "message": "Ok",
|
|
5267
|
+
# "data": {
|
|
5268
|
+
# "position_mode":"one_way_mode"
|
|
5269
|
+
# }
|
|
5270
|
+
# }
|
|
5271
|
+
#
|
|
5272
|
+
data = self.safe_dict(response, 'data')
|
|
5273
|
+
positionMode = self.safe_string(data, 'position_mode')
|
|
5274
|
+
return {
|
|
5275
|
+
'info': response,
|
|
5276
|
+
'hedged': (positionMode == 'hedge_mode'),
|
|
5277
|
+
}
|
|
5278
|
+
|
|
5215
5279
|
def nonce(self):
|
|
5216
5280
|
return self.milliseconds() - self.options['timeDifference']
|
|
5217
5281
|
|
bitmart/ccxt/base/exchange.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# -----------------------------------------------------------------------------
|
|
6
6
|
|
|
7
|
-
__version__ = '4.4.
|
|
7
|
+
__version__ = '4.4.78'
|
|
8
8
|
|
|
9
9
|
# -----------------------------------------------------------------------------
|
|
10
10
|
|
|
@@ -67,6 +67,10 @@ from ccxt.static_dependencies.starknet.hash.address import compute_address
|
|
|
67
67
|
from ccxt.static_dependencies.starknet.hash.selector import get_selector_from_name
|
|
68
68
|
from ccxt.static_dependencies.starknet.hash.utils import message_signature, private_to_stark_key
|
|
69
69
|
from ccxt.static_dependencies.starknet.utils.typed_data import TypedData as TypedDataDataclass
|
|
70
|
+
try:
|
|
71
|
+
import apexpro.zklink_sdk as zklink_sdk
|
|
72
|
+
except ImportError:
|
|
73
|
+
zklink_sdk = None
|
|
70
74
|
|
|
71
75
|
# -----------------------------------------------------------------------------
|
|
72
76
|
|
|
@@ -509,7 +513,7 @@ class Exchange(object):
|
|
|
509
513
|
proxyUrl = self.check_proxy_url_settings(url, method, headers, body)
|
|
510
514
|
if proxyUrl is not None:
|
|
511
515
|
request_headers.update({'Origin': self.origin})
|
|
512
|
-
url = proxyUrl + url
|
|
516
|
+
url = proxyUrl + self.url_encoder_for_proxy_url(url)
|
|
513
517
|
# proxy agents
|
|
514
518
|
proxies = None # set default
|
|
515
519
|
httpProxy, httpsProxy, socksProxy = self.check_proxy_settings(url, method, headers, body)
|
|
@@ -1755,6 +1759,69 @@ class Exchange(object):
|
|
|
1755
1759
|
def binary_length(self, binary):
|
|
1756
1760
|
return len(binary)
|
|
1757
1761
|
|
|
1762
|
+
def get_zk_contract_signature_obj(self, seeds: str, params={}):
|
|
1763
|
+
if zklink_sdk is None:
|
|
1764
|
+
raise Exception('zklink_sdk is not installed, please do pip3 install apexomni-arm or apexomni-x86-mac or apexomni-x86-windows-linux')
|
|
1765
|
+
|
|
1766
|
+
slotId = self.safe_string(params, 'slotId')
|
|
1767
|
+
nonceInt = int(self.remove0x_prefix(self.hash(self.encode(slotId), 'sha256', 'hex')), 16)
|
|
1768
|
+
|
|
1769
|
+
maxUint64 = 18446744073709551615
|
|
1770
|
+
maxUint32 = 4294967295
|
|
1771
|
+
|
|
1772
|
+
slotId = (nonceInt % maxUint64) / maxUint32
|
|
1773
|
+
nonce = nonceInt % maxUint32
|
|
1774
|
+
accountId = int(self.safe_string(params, 'accountId'), 10) % maxUint32
|
|
1775
|
+
|
|
1776
|
+
priceStr = (Decimal(self.safe_string(params, 'price')) * Decimal(10) ** Decimal('18')).quantize(Decimal(0), rounding='ROUND_DOWN')
|
|
1777
|
+
sizeStr = (Decimal(self.safe_string(params, 'size')) * Decimal(10) ** Decimal('18')).quantize(Decimal(0), rounding='ROUND_DOWN')
|
|
1778
|
+
|
|
1779
|
+
takerFeeRateStr = (Decimal(self.safe_string(params, 'takerFeeRate')) * Decimal(10000)).quantize(Decimal(0), rounding='ROUND_UP')
|
|
1780
|
+
makerFeeRateStr = (Decimal(self.safe_string(params, 'makerFeeRate')) * Decimal(10000)).quantize(Decimal(0), rounding='ROUND_UP')
|
|
1781
|
+
|
|
1782
|
+
builder = zklink_sdk.ContractBuilder(
|
|
1783
|
+
int(accountId), int(0), int(slotId), int(nonce), int(self.safe_number(params, 'pairId')),
|
|
1784
|
+
sizeStr.__str__(), priceStr.__str__(), self.safe_string(params, 'direction') == "BUY",
|
|
1785
|
+
int(takerFeeRateStr), int(makerFeeRateStr), False)
|
|
1786
|
+
|
|
1787
|
+
|
|
1788
|
+
tx = zklink_sdk.Contract(builder)
|
|
1789
|
+
seedsByte = bytes.fromhex(seeds.removeprefix('0x'))
|
|
1790
|
+
signerSeed = zklink_sdk.ZkLinkSigner().new_from_seed(seedsByte)
|
|
1791
|
+
auth_data = signerSeed.sign_musig(tx.get_bytes())
|
|
1792
|
+
signature = auth_data.signature
|
|
1793
|
+
return signature
|
|
1794
|
+
|
|
1795
|
+
def get_zk_transfer_signature_obj(self, seeds: str, params={}):
|
|
1796
|
+
if zklink_sdk is None:
|
|
1797
|
+
raise Exception('zklink_sdk is not installed, please do pip3 install apexomni-arm or apexomni-x86-mac or apexomni-x86-windows-linux')
|
|
1798
|
+
|
|
1799
|
+
nonce = self.safe_string(params, 'nonce', '0')
|
|
1800
|
+
if self.safe_bool(params, 'isContract'):
|
|
1801
|
+
formattedUint32 = '4294967295'
|
|
1802
|
+
formattedNonce = int(self.remove0x_prefix(self.hash(self.encode(nonce), 'sha256', 'hex')), 16)
|
|
1803
|
+
nonce = Precise.string_mod(str(formattedNonce), formattedUint32)
|
|
1804
|
+
|
|
1805
|
+
tx_builder = zklink_sdk.TransferBuilder(
|
|
1806
|
+
int(self.safe_number(params, 'zkAccountId', 0)),
|
|
1807
|
+
self.safe_string(params, 'receiverAddress'),
|
|
1808
|
+
int(self.safe_number(params, 'subAccountId', 0)),
|
|
1809
|
+
int(self.safe_number(params, 'receiverSubAccountId', 0)),
|
|
1810
|
+
int(self.safe_number(params, 'tokenId', 0)),
|
|
1811
|
+
self.safe_string(params, 'amount', '0'),
|
|
1812
|
+
self.safe_string(params, 'fee', '0'),
|
|
1813
|
+
self.parse_to_int(nonce),
|
|
1814
|
+
int(self.safe_number(params, 'timestampSeconds', 0))
|
|
1815
|
+
)
|
|
1816
|
+
|
|
1817
|
+
tx = zklink_sdk.Transfer(tx_builder)
|
|
1818
|
+
seedsByte = bytes.fromhex(seeds.removeprefix('0x'))
|
|
1819
|
+
signerSeed = zklink_sdk.ZkLinkSigner().new_from_seed(seedsByte)
|
|
1820
|
+
auth_data = signerSeed.sign_musig(tx.get_bytes())
|
|
1821
|
+
signature = auth_data.signature
|
|
1822
|
+
return signature
|
|
1823
|
+
|
|
1824
|
+
|
|
1758
1825
|
# ########################################################################
|
|
1759
1826
|
# ########################################################################
|
|
1760
1827
|
# ########################################################################
|
|
@@ -2254,6 +2321,12 @@ class Exchange(object):
|
|
|
2254
2321
|
raise InvalidProxySettings(self.id + ' you have multiple conflicting proxy settings(' + joinedProxyNames + '), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback')
|
|
2255
2322
|
return proxyUrl
|
|
2256
2323
|
|
|
2324
|
+
def url_encoder_for_proxy_url(self, targetUrl: str):
|
|
2325
|
+
# to be overriden
|
|
2326
|
+
includesQuery = targetUrl.find('?') >= 0
|
|
2327
|
+
finalUrl = self.encode_uri_component(targetUrl) if includesQuery else targetUrl
|
|
2328
|
+
return finalUrl
|
|
2329
|
+
|
|
2257
2330
|
def check_proxy_settings(self, url: Str = None, method: Str = None, headers=None, body=None):
|
|
2258
2331
|
usedProxies = []
|
|
2259
2332
|
httpProxy = None
|
|
@@ -2913,9 +2986,6 @@ class Exchange(object):
|
|
|
2913
2986
|
|
|
2914
2987
|
def safe_currency_structure(self, currency: object):
|
|
2915
2988
|
# derive data from networks: deposit, withdraw, active, fee, limits, precision
|
|
2916
|
-
currencyDeposit = self.safe_bool(currency, 'deposit')
|
|
2917
|
-
currencyWithdraw = self.safe_bool(currency, 'withdraw')
|
|
2918
|
-
currencyActive = self.safe_bool(currency, 'active')
|
|
2919
2989
|
networks = self.safe_dict(currency, 'networks', {})
|
|
2920
2990
|
keys = list(networks.keys())
|
|
2921
2991
|
length = len(keys)
|
|
@@ -2924,20 +2994,24 @@ class Exchange(object):
|
|
|
2924
2994
|
key = keys[i]
|
|
2925
2995
|
network = networks[key]
|
|
2926
2996
|
deposit = self.safe_bool(network, 'deposit')
|
|
2997
|
+
currencyDeposit = self.safe_bool(currency, 'deposit')
|
|
2927
2998
|
if currencyDeposit is None or deposit:
|
|
2928
2999
|
currency['deposit'] = deposit
|
|
2929
3000
|
withdraw = self.safe_bool(network, 'withdraw')
|
|
3001
|
+
currencyWithdraw = self.safe_bool(currency, 'withdraw')
|
|
2930
3002
|
if currencyWithdraw is None or withdraw:
|
|
2931
3003
|
currency['withdraw'] = withdraw
|
|
2932
|
-
active = self.safe_bool(network, 'active')
|
|
2933
|
-
if currencyActive is None or active:
|
|
2934
|
-
currency['active'] = active
|
|
2935
3004
|
# set network 'active' to False if D or W is disabled
|
|
2936
|
-
|
|
3005
|
+
active = self.safe_bool(network, 'active')
|
|
3006
|
+
if active is None:
|
|
2937
3007
|
if deposit and withdraw:
|
|
2938
3008
|
currency['networks'][key]['active'] = True
|
|
2939
3009
|
elif deposit is not None and withdraw is not None:
|
|
2940
3010
|
currency['networks'][key]['active'] = False
|
|
3011
|
+
active = self.safe_bool(network, 'active')
|
|
3012
|
+
currencyActive = self.safe_bool(currency, 'active')
|
|
3013
|
+
if currencyActive is None or active:
|
|
3014
|
+
currency['active'] = active
|
|
2941
3015
|
# find lowest fee(which is more desired)
|
|
2942
3016
|
fee = self.safe_string(network, 'fee')
|
|
2943
3017
|
feeMain = self.safe_string(currency, 'fee')
|
|
@@ -2946,7 +3020,7 @@ class Exchange(object):
|
|
|
2946
3020
|
# find lowest precision(which is more desired)
|
|
2947
3021
|
precision = self.safe_string(network, 'precision')
|
|
2948
3022
|
precisionMain = self.safe_string(currency, 'precision')
|
|
2949
|
-
if precisionMain is None or Precise.
|
|
3023
|
+
if precisionMain is None or Precise.string_gt(precision, precisionMain):
|
|
2950
3024
|
currency['precision'] = self.parse_number(precision)
|
|
2951
3025
|
# limits
|
|
2952
3026
|
limits = self.safe_dict(network, 'limits')
|
|
@@ -6471,24 +6545,36 @@ class Exchange(object):
|
|
|
6471
6545
|
return self.sort_by(result, 'id', True)
|
|
6472
6546
|
return result
|
|
6473
6547
|
|
|
6474
|
-
def remove_repeated_elements_from_array(self, input):
|
|
6548
|
+
def remove_repeated_elements_from_array(self, input, fallbackToTimestamp: bool = True):
|
|
6549
|
+
uniqueDic = {}
|
|
6550
|
+
uniqueResult = []
|
|
6551
|
+
for i in range(0, len(input)):
|
|
6552
|
+
entry = input[i]
|
|
6553
|
+
uniqValue = self.safe_string_n(entry, ['id', 'timestamp', 0]) if fallbackToTimestamp else self.safe_string(entry, 'id')
|
|
6554
|
+
if uniqValue is not None and not (uniqValue in uniqueDic):
|
|
6555
|
+
uniqueDic[uniqValue] = 1
|
|
6556
|
+
uniqueResult.append(entry)
|
|
6557
|
+
valuesLength = len(uniqueResult)
|
|
6558
|
+
if valuesLength > 0:
|
|
6559
|
+
return uniqueResult
|
|
6560
|
+
return input
|
|
6561
|
+
|
|
6562
|
+
def remove_repeated_trades_from_array(self, input):
|
|
6475
6563
|
uniqueResult = {}
|
|
6476
6564
|
for i in range(0, len(input)):
|
|
6477
6565
|
entry = input[i]
|
|
6478
6566
|
id = self.safe_string(entry, 'id')
|
|
6479
|
-
if id is
|
|
6480
|
-
|
|
6481
|
-
|
|
6482
|
-
|
|
6483
|
-
|
|
6484
|
-
|
|
6485
|
-
|
|
6486
|
-
|
|
6567
|
+
if id is None:
|
|
6568
|
+
price = self.safe_string(entry, 'price')
|
|
6569
|
+
amount = self.safe_string(entry, 'amount')
|
|
6570
|
+
timestamp = self.safe_string(entry, 'timestamp')
|
|
6571
|
+
side = self.safe_string(entry, 'side')
|
|
6572
|
+
# unique trade identifier
|
|
6573
|
+
id = 't_' + str(timestamp) + '_' + side + '_' + price + '_' + amount
|
|
6574
|
+
if id is not None and not (id in uniqueResult):
|
|
6575
|
+
uniqueResult[id] = entry
|
|
6487
6576
|
values = list(uniqueResult.values())
|
|
6488
|
-
|
|
6489
|
-
if valuesLength > 0:
|
|
6490
|
-
return values
|
|
6491
|
-
return input
|
|
6577
|
+
return values
|
|
6492
6578
|
|
|
6493
6579
|
def handle_until_option(self, key: str, request, params, multiplier=1):
|
|
6494
6580
|
until = self.safe_integer_2(params, 'until', 'till')
|
bitmart/ccxt/bitmart.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.bitmart import ImplicitAPI
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Any, Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
|
|
9
|
+
from ccxt.base.types import Any, Balances, BorrowInterest, Currencies, Currency, DepositAddress, FundingHistory, Int, IsolatedBorrowRate, IsolatedBorrowRates, LedgerEntry, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, MarketInterface, TransferEntry
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
12
12
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -104,7 +104,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
104
104
|
'fetchOrders': False,
|
|
105
105
|
'fetchOrderTrades': True,
|
|
106
106
|
'fetchPosition': True,
|
|
107
|
-
'fetchPositionMode':
|
|
107
|
+
'fetchPositionMode': True,
|
|
108
108
|
'fetchPositions': True,
|
|
109
109
|
'fetchStatus': True,
|
|
110
110
|
'fetchTicker': True,
|
|
@@ -126,6 +126,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
126
126
|
'repayIsolatedMargin': True,
|
|
127
127
|
'setLeverage': True,
|
|
128
128
|
'setMarginMode': False,
|
|
129
|
+
'setPositionMode': True,
|
|
129
130
|
'transfer': True,
|
|
130
131
|
'withdraw': True,
|
|
131
132
|
},
|
|
@@ -231,6 +232,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
231
232
|
'contract/private/affilate/rebate-list': 10,
|
|
232
233
|
'contract/private/affilate/trade-list': 10,
|
|
233
234
|
'contract/private/transaction-history': 10,
|
|
235
|
+
'contract/private/get-position-mode': 1,
|
|
234
236
|
},
|
|
235
237
|
'post': {
|
|
236
238
|
# sub-account endpoints
|
|
@@ -283,6 +285,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
283
285
|
'contract/private/modify-tp-sl-order': 2.5,
|
|
284
286
|
'contract/private/submit-trail-order': 2.5, # weight is not provided by the exchange, is set order
|
|
285
287
|
'contract/private/cancel-trail-order': 1.5, # weight is not provided by the exchange, is set order
|
|
288
|
+
'contract/private/set-position-mode': 1,
|
|
286
289
|
},
|
|
287
290
|
},
|
|
288
291
|
},
|
|
@@ -1205,7 +1208,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
1205
1208
|
# {
|
|
1206
1209
|
# "message": "OK",
|
|
1207
1210
|
# "code": 1000,
|
|
1208
|
-
# "trace": "619294ecef584282b26a3be322b1e01f.66.
|
|
1211
|
+
# "trace": "619294ecef584282b26a3be322b1e01f.66.17403093228242229",
|
|
1209
1212
|
# "data": {
|
|
1210
1213
|
# "currencies": [
|
|
1211
1214
|
# {
|
|
@@ -3847,10 +3850,11 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
3847
3850
|
timestamp = self.safe_integer(transaction, 'apply_time')
|
|
3848
3851
|
currencyId = self.safe_string(transaction, 'currency')
|
|
3849
3852
|
networkId: Str = None
|
|
3850
|
-
if currencyId
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3853
|
+
if currencyId is not None:
|
|
3854
|
+
if currencyId.find('NFT') < 0:
|
|
3855
|
+
parts = currencyId.split('-')
|
|
3856
|
+
currencyId = self.safe_string(parts, 0)
|
|
3857
|
+
networkId = self.safe_string(parts, 1)
|
|
3854
3858
|
code = self.safe_currency_code(currencyId, currency)
|
|
3855
3859
|
status = self.parse_transaction_status(self.safe_string(transaction, 'status'))
|
|
3856
3860
|
feeCost = self.safe_number(transaction, 'fee')
|
|
@@ -4650,7 +4654,7 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
4650
4654
|
first = self.safe_dict(data, 0, {})
|
|
4651
4655
|
return self.parse_position(first, market)
|
|
4652
4656
|
|
|
4653
|
-
def fetch_positions(self, symbols: Strings = None, params={}):
|
|
4657
|
+
def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
|
|
4654
4658
|
"""
|
|
4655
4659
|
fetch all open contract positions
|
|
4656
4660
|
|
|
@@ -5212,6 +5216,66 @@ class bitmart(Exchange, ImplicitAPI):
|
|
|
5212
5216
|
addresses.append(address)
|
|
5213
5217
|
return addresses
|
|
5214
5218
|
|
|
5219
|
+
def set_position_mode(self, hedged: bool, symbol: Str = None, params={}):
|
|
5220
|
+
"""
|
|
5221
|
+
set hedged to True or False for a market
|
|
5222
|
+
|
|
5223
|
+
https://developer-pro.bitmart.com/en/futuresv2/#submit-leverage-signed
|
|
5224
|
+
|
|
5225
|
+
:param bool hedged: set to True to use dualSidePosition
|
|
5226
|
+
:param str symbol: not used by bingx setPositionMode()
|
|
5227
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
5228
|
+
:returns dict: response from the exchange
|
|
5229
|
+
"""
|
|
5230
|
+
self.load_markets()
|
|
5231
|
+
positionMode = None
|
|
5232
|
+
if hedged:
|
|
5233
|
+
positionMode = 'hedge_mode'
|
|
5234
|
+
else:
|
|
5235
|
+
positionMode = 'one_way_mode'
|
|
5236
|
+
request: dict = {
|
|
5237
|
+
'position_mode': positionMode,
|
|
5238
|
+
}
|
|
5239
|
+
#
|
|
5240
|
+
# {
|
|
5241
|
+
# "code": 1000,
|
|
5242
|
+
# "trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
|
|
5243
|
+
# "message": "Ok",
|
|
5244
|
+
# "data": {
|
|
5245
|
+
# "position_mode":"one_way_mode"
|
|
5246
|
+
# }
|
|
5247
|
+
# }
|
|
5248
|
+
#
|
|
5249
|
+
return self.privatePostContractPrivateSetPositionMode(self.extend(request, params))
|
|
5250
|
+
|
|
5251
|
+
def fetch_position_mode(self, symbol: Str = None, params={}):
|
|
5252
|
+
"""
|
|
5253
|
+
fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
|
|
5254
|
+
|
|
5255
|
+
https://developer-pro.bitmart.com/en/futuresv2/#get-position-mode-keyed
|
|
5256
|
+
|
|
5257
|
+
:param str symbol: not used
|
|
5258
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
5259
|
+
:returns dict: an object detailing whether the market is in hedged or one-way mode
|
|
5260
|
+
"""
|
|
5261
|
+
response = self.privateGetContractPrivateGetPositionMode(params)
|
|
5262
|
+
#
|
|
5263
|
+
# {
|
|
5264
|
+
# "code": 1000,
|
|
5265
|
+
# "trace": "0cc6f4c4-8b8c-4253-8e90-8d3195aa109c",
|
|
5266
|
+
# "message": "Ok",
|
|
5267
|
+
# "data": {
|
|
5268
|
+
# "position_mode":"one_way_mode"
|
|
5269
|
+
# }
|
|
5270
|
+
# }
|
|
5271
|
+
#
|
|
5272
|
+
data = self.safe_dict(response, 'data')
|
|
5273
|
+
positionMode = self.safe_string(data, 'position_mode')
|
|
5274
|
+
return {
|
|
5275
|
+
'info': response,
|
|
5276
|
+
'hedged': (positionMode == 'hedge_mode'),
|
|
5277
|
+
}
|
|
5278
|
+
|
|
5215
5279
|
def nonce(self):
|
|
5216
5280
|
return self.milliseconds() - self.options['timeDifference']
|
|
5217
5281
|
|
bitmart/ccxt/pro/__init__.py
CHANGED
|
@@ -8,7 +8,7 @@ sys.modules['ccxt'] = ccxt_module
|
|
|
8
8
|
|
|
9
9
|
# ----------------------------------------------------------------------------
|
|
10
10
|
|
|
11
|
-
__version__ = '4.4.
|
|
11
|
+
__version__ = '4.4.78'
|
|
12
12
|
|
|
13
13
|
# ----------------------------------------------------------------------------
|
|
14
14
|
|
|
@@ -16,7 +16,6 @@ from ccxt.async_support.base.exchange import Exchange # noqa: F401
|
|
|
16
16
|
|
|
17
17
|
# CCXT Pro exchanges (now this is mainly used for importing exchanges in WS tests)
|
|
18
18
|
|
|
19
|
-
from ccxt.pro.bitfinex1 import bitfinex1 # noqa: F401
|
|
20
19
|
from ccxt.pro.bitmart import bitmart # noqa: F401
|
|
21
20
|
|
|
22
|
-
exchanges = [ '
|
|
21
|
+
exchanges = [ 'bitmart',]
|
bitmart/ccxt/pro/bitmart.py
CHANGED
|
@@ -74,6 +74,9 @@ class bitmart(bitmartAsync):
|
|
|
74
74
|
'watchOrderBookForSymbols': {
|
|
75
75
|
'depth': 'depth/increase100',
|
|
76
76
|
},
|
|
77
|
+
'watchTrades': {
|
|
78
|
+
'ignoreDuplicates': True,
|
|
79
|
+
},
|
|
77
80
|
'ws': {
|
|
78
81
|
'inflate': True,
|
|
79
82
|
},
|
|
@@ -302,7 +305,12 @@ class bitmart(bitmartAsync):
|
|
|
302
305
|
first = self.safe_dict(trades, 0)
|
|
303
306
|
tradeSymbol = self.safe_string(first, 'symbol')
|
|
304
307
|
limit = trades.getLimit(tradeSymbol, limit)
|
|
305
|
-
|
|
308
|
+
result = self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
309
|
+
if self.handle_option('watchTrades', 'ignoreDuplicates', True):
|
|
310
|
+
filtered = self.remove_repeated_trades_from_array(result)
|
|
311
|
+
filtered = self.sort_by(filtered, 'timestamp')
|
|
312
|
+
return filtered
|
|
313
|
+
return result
|
|
306
314
|
|
|
307
315
|
def get_params_for_multiple_sub(self, methodName: str, symbols: List[str], limit: Int = None, params={}):
|
|
308
316
|
symbols = self.market_symbols(symbols, None, False, True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bitmart
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.26
|
|
4
4
|
Summary: bitmart crypto exchange api client
|
|
5
5
|
Project-URL: Homepage, https://github.com/ccxt/ccxt
|
|
6
6
|
Project-URL: Issues, https://github.com/ccxt/ccxt
|
|
@@ -20,8 +20,10 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
# bitmart-python
|
|
21
21
|
Python SDK (sync and async) for Bitmart cryptocurrency exchange with Rest and WS capabilities.
|
|
22
22
|
|
|
23
|
-
You can check the SDK docs here: [SDK](https://docs.ccxt.com/#/exchanges/bitmart)
|
|
24
|
-
You can check Bitmart's docs here: [Docs](https://www.google.com/search?q=google+bitmart+cryptocurrency+exchange+api+docs)
|
|
23
|
+
- You can check the SDK docs here: [SDK](https://docs.ccxt.com/#/exchanges/bitmart)
|
|
24
|
+
- You can check Bitmart's docs here: [Docs](https://www.google.com/search?q=google+bitmart+cryptocurrency+exchange+api+docs)
|
|
25
|
+
- Github repo: https://github.com/ccxt/bitmart-python
|
|
26
|
+
- Pypi package: https://pypi.org/project/bitmart
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
## Installation
|
|
@@ -44,6 +46,8 @@ def main():
|
|
|
44
46
|
#
|
|
45
47
|
# balance = instance.fetch_balance()
|
|
46
48
|
# order = instance.create_order("BTC/USDC", "limit", "buy", 1, 100000)
|
|
49
|
+
|
|
50
|
+
main()
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
### Async
|
|
@@ -153,6 +157,7 @@ You can also construct custom requests to available "implicit" endpoints
|
|
|
153
157
|
- `fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={})`
|
|
154
158
|
- `fetch_order(self, id: str, symbol: Str = None, params={})`
|
|
155
159
|
- `fetch_orders_by_status(self, status, symbol: Str = None, since: Int = None, limit: Int = None, params={})`
|
|
160
|
+
- `fetch_position_mode(self, symbol: Str = None, params={})`
|
|
156
161
|
- `fetch_position(self, symbol: str, params={})`
|
|
157
162
|
- `fetch_positions(self, symbols: Strings = None, params={})`
|
|
158
163
|
- `fetch_spot_markets(self, params={})`
|
|
@@ -180,6 +185,7 @@ You can also construct custom requests to available "implicit" endpoints
|
|
|
180
185
|
- `nonce(self)`
|
|
181
186
|
- `repay_isolated_margin(self, symbol: str, code: str, amount, params={})`
|
|
182
187
|
- `set_leverage(self, leverage: Int, symbol: Str = None, params={})`
|
|
188
|
+
- `set_position_mode(self, hedged: bool, symbol: Str = None, params={})`
|
|
183
189
|
- `transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={})`
|
|
184
190
|
- `withdraw(self, code: str, amount: float, address: str, tag=None, params={})`
|
|
185
191
|
|
|
@@ -251,6 +257,7 @@ You can also construct custom requests to available "implicit" endpoints
|
|
|
251
257
|
- `private_get_contract_private_affilate_rebate_list(request)`
|
|
252
258
|
- `private_get_contract_private_affilate_trade_list(request)`
|
|
253
259
|
- `private_get_contract_private_transaction_history(request)`
|
|
260
|
+
- `private_get_contract_private_get_position_mode(request)`
|
|
254
261
|
- `private_post_account_sub_account_main_v1_sub_to_main(request)`
|
|
255
262
|
- `private_post_account_sub_account_sub_v1_sub_to_main(request)`
|
|
256
263
|
- `private_post_account_sub_account_main_v1_main_to_sub(request)`
|
|
@@ -295,6 +302,7 @@ You can also construct custom requests to available "implicit" endpoints
|
|
|
295
302
|
- `private_post_contract_private_modify_tp_sl_order(request)`
|
|
296
303
|
- `private_post_contract_private_submit_trail_order(request)`
|
|
297
304
|
- `private_post_contract_private_cancel_trail_order(request)`
|
|
305
|
+
- `private_post_contract_private_set_position_mode(request)`
|
|
298
306
|
|
|
299
307
|
### WS Unified
|
|
300
308
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
bitmart/__init__.py,sha256=DRRGWQ_AXzv_ztbAPzIZ0ID_zHfKYZID66sOb-SJ3eM,258
|
|
2
|
-
bitmart/ccxt/__init__.py,sha256=
|
|
3
|
-
bitmart/ccxt/bitmart.py,sha256=
|
|
4
|
-
bitmart/ccxt/abstract/bitmart.py,sha256=
|
|
5
|
-
bitmart/ccxt/async_support/__init__.py,sha256=
|
|
6
|
-
bitmart/ccxt/async_support/bitmart.py,sha256=
|
|
2
|
+
bitmart/ccxt/__init__.py,sha256=WqXntgafsUUdwH7OEAl4x5gw3HhfQ3Wl7uF4H0MSJjg,6050
|
|
3
|
+
bitmart/ccxt/bitmart.py,sha256=_aT0mQXpRNkUhplxEvuS2A7IoHhtSA6j4R5g7QYZ4LI,247923
|
|
4
|
+
bitmart/ccxt/abstract/bitmart.py,sha256=JF2hfATRDwmQoP9bSy9jPv_IYM0aQicSp-9Mat4tA4o,17240
|
|
5
|
+
bitmart/ccxt/async_support/__init__.py,sha256=iMIUy6QMjldAXoqVpdDPa8dPJsdUq4br8-eNzxqIgMs,4783
|
|
6
|
+
bitmart/ccxt/async_support/bitmart.py,sha256=CZJnlHnF5PB7OWlvbvbbYI4rC_03DJ7XgjI9xXu8IEQ,249047
|
|
7
7
|
bitmart/ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
|
|
8
|
-
bitmart/ccxt/async_support/base/exchange.py,sha256=
|
|
8
|
+
bitmart/ccxt/async_support/base/exchange.py,sha256=AOQnGV5CUYT2fOCko3E6JqYxa_s8_QxHDdBxbqUUOgU,117255
|
|
9
9
|
bitmart/ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
|
|
10
10
|
bitmart/ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
|
|
11
11
|
bitmart/ccxt/async_support/base/ws/aiohttp_client.py,sha256=Y5HxAVXyyYduj6b6SbbUZETlq3GrVMzrkW1r-TMgpb8,6329
|
|
@@ -19,11 +19,11 @@ bitmart/ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9p
|
|
|
19
19
|
bitmart/ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
|
|
20
20
|
bitmart/ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
|
|
21
21
|
bitmart/ccxt/base/errors.py,sha256=MvCrL_sAM3de616T6RE0PSxiF2xV6Qqz5b1y1ghidbk,4888
|
|
22
|
-
bitmart/ccxt/base/exchange.py,sha256=
|
|
22
|
+
bitmart/ccxt/base/exchange.py,sha256=R0StVeXIxmXvA73by-Gqx70tT7wbJMNuenrVXgoe0Dk,326255
|
|
23
23
|
bitmart/ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
|
|
24
24
|
bitmart/ccxt/base/types.py,sha256=SfxIKDSsxP7MPHWiOVI965Nr5NSEPpAno5fuveTRi3w,11423
|
|
25
|
-
bitmart/ccxt/pro/__init__.py,sha256=
|
|
26
|
-
bitmart/ccxt/pro/bitmart.py,sha256
|
|
25
|
+
bitmart/ccxt/pro/__init__.py,sha256=lXb4j6BK2BnmNnozozbzcDShLZOfWPn7TS_ZBCL8fTc,621
|
|
26
|
+
bitmart/ccxt/pro/bitmart.py,sha256=-iCp2w0UXeNrro_TcyVyJvsaTFXtq92nEP4h7hq-F-w,67253
|
|
27
27
|
bitmart/ccxt/static_dependencies/README.md,sha256=3TCvhhn09_Cqf9BDDpao1V7EfKHDpQ6k9oWRsLFixpU,18
|
|
28
28
|
bitmart/ccxt/static_dependencies/__init__.py,sha256=tzFje8cloqmiIE6kola3EaYC0SnD1izWnri69hzHsSw,168
|
|
29
29
|
bitmart/ccxt/static_dependencies/ecdsa/__init__.py,sha256=Xaj0G79BLtBt2YZcOOMV8qOlQZ7fIJznNiHhiEEZfQA,594
|
|
@@ -283,6 +283,6 @@ bitmart/ccxt/static_dependencies/toolz/curried/exceptions.py,sha256=gKFOHDIayAWn
|
|
|
283
283
|
bitmart/ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4werSUmJEtSHNY9NSzhseNM9s,525
|
|
284
284
|
bitmart/ccxt/static_dependencies/typing_inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
285
285
|
bitmart/ccxt/static_dependencies/typing_inspect/typing_inspect.py,sha256=5gIWomLPfuDpgd3gX1GlnX0MuXM3VorR4j2W2qXORiQ,28269
|
|
286
|
-
bitmart-0.0.
|
|
287
|
-
bitmart-0.0.
|
|
288
|
-
bitmart-0.0.
|
|
286
|
+
bitmart-0.0.26.dist-info/METADATA,sha256=EbaSI8mqKOBCUS-Le6jKLqL0LEVOgYay-xJNp9E3puY,15102
|
|
287
|
+
bitmart-0.0.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
288
|
+
bitmart-0.0.26.dist-info/RECORD,,
|
|
File without changes
|