gate-io-api 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 gate-io-api might be problematic. Click here for more details.

gate/ccxt/__init__.py CHANGED
@@ -26,7 +26,7 @@ sys.modules['ccxt'] = ccxt_module
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
29
- __version__ = '4.4.75'
29
+ __version__ = '4.4.79'
30
30
 
31
31
  # ----------------------------------------------------------------------------
32
32
 
@@ -8,7 +8,7 @@ sys.modules['ccxt'] = ccxt_module
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
11
- __version__ = '4.4.75'
11
+ __version__ = '4.4.79'
12
12
 
13
13
  # -----------------------------------------------------------------------------
14
14
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.75'
5
+ __version__ = '4.4.79'
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
@@ -5724,7 +5724,7 @@ class gate(Exchange, ImplicitAPI):
5724
5724
  #
5725
5725
  return self.parse_position(response, market)
5726
5726
 
5727
- async def fetch_positions(self, symbols: Strings = None, params={}):
5727
+ async def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
5728
5728
  """
5729
5729
  fetch all open positions
5730
5730
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.75'
7
+ __version__ = '4.4.79'
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
@@ -2947,7 +3020,7 @@ class Exchange(object):
2947
3020
  # find lowest precision(which is more desired)
2948
3021
  precision = self.safe_string(network, 'precision')
2949
3022
  precisionMain = self.safe_string(currency, 'precision')
2950
- if precisionMain is None or Precise.string_lt(precision, precisionMain):
3023
+ if precisionMain is None or Precise.string_gt(precision, precisionMain):
2951
3024
  currency['precision'] = self.parse_number(precision)
2952
3025
  # limits
2953
3026
  limits = self.safe_dict(network, 'limits')
gate/ccxt/gate.py CHANGED
@@ -5723,7 +5723,7 @@ class gate(Exchange, ImplicitAPI):
5723
5723
  #
5724
5724
  return self.parse_position(response, market)
5725
5725
 
5726
- def fetch_positions(self, symbols: Strings = None, params={}):
5726
+ def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
5727
5727
  """
5728
5728
  fetch all open positions
5729
5729
 
gate/ccxt/pro/__init__.py CHANGED
@@ -8,7 +8,7 @@ sys.modules['ccxt'] = ccxt_module
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
11
- __version__ = '4.4.75'
11
+ __version__ = '4.4.79'
12
12
 
13
13
  # ----------------------------------------------------------------------------
14
14
 
gate/ccxt/pro/gate.py CHANGED
@@ -1178,8 +1178,28 @@ class gate(gateAsync):
1178
1178
  for i in range(0, len(data)):
1179
1179
  rawPosition = data[i]
1180
1180
  position = self.parse_position(rawPosition)
1181
- newPositions.append(position)
1182
- cache.append(position)
1181
+ symbol = self.safe_string(position, 'symbol')
1182
+ side = self.safe_string(position, 'side')
1183
+ # Control when position is closed no side is returned
1184
+ if side is None:
1185
+ prevLongPosition = self.safe_dict(cache, symbol + 'long')
1186
+ if prevLongPosition is not None:
1187
+ position['side'] = prevLongPosition['side']
1188
+ newPositions.append(position)
1189
+ cache.append(position)
1190
+ prevShortPosition = self.safe_dict(cache, symbol + 'short')
1191
+ if prevShortPosition is not None:
1192
+ position['side'] = prevShortPosition['side']
1193
+ newPositions.append(position)
1194
+ cache.append(position)
1195
+ # if no prev position is found, default to long
1196
+ if prevLongPosition is None and prevShortPosition is None:
1197
+ position['side'] = 'long'
1198
+ newPositions.append(position)
1199
+ cache.append(position)
1200
+ else:
1201
+ newPositions.append(position)
1202
+ cache.append(position)
1183
1203
  messageHashes = self.find_message_hashes(client, type + ':positions::')
1184
1204
  for i in range(0, len(messageHashes)):
1185
1205
  messageHash = messageHashes[i]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gate-io-api
3
- Version: 0.0.24
3
+ Version: 0.0.26
4
4
  Summary: gate crypto exchange api client
5
5
  Project-URL: Homepage, https://github.com/ccxt/ccxt
6
6
  Project-URL: Issues, https://github.com/ccxt/ccxt
@@ -1,11 +1,11 @@
1
1
  gate/__init__.py,sha256=rmRavmagjlyk7Z5zGWWJiY8tfYIPsk04hRzC4SYJOzA,222
2
- gate/ccxt/__init__.py,sha256=WiXNlyIJxu6hTJIGZnN3KYx_9Qytly7SBwL7wRNBFxw,6044
3
- gate/ccxt/gate.py,sha256=ZxQ41kj6pUzdE5ZVItIBEhcpt8vhjYYa1TStZeW85dw,351132
2
+ gate/ccxt/__init__.py,sha256=4ri8l_uP8V2Wv1agQgF6lk27v0sr9W2-o8YXqDydTC8,6044
3
+ gate/ccxt/gate.py,sha256=NsqL92pBgTUB0cc1y0sWZVScgLSWje98WPO7MKkKtUI,351150
4
4
  gate/ccxt/abstract/gate.py,sha256=MrRMycFEpZKJ6yC7qi0p_qcwZtU9WJi5bBbVllskGoA,45044
5
- gate/ccxt/async_support/__init__.py,sha256=lLSsESXbm2FdU5gWIJ8FQOrFjJ2g4JwTj9CONKdd77k,4777
6
- gate/ccxt/async_support/gate.py,sha256=np6lAr9DztlNuRiaWSLeIcjHj49Y5oP7u_jB8OmuiQU,353091
5
+ gate/ccxt/async_support/__init__.py,sha256=_1IkW4NRX6VruHo2AEnWFioWmoisCFLrLUT5buLT4H8,4777
6
+ gate/ccxt/async_support/gate.py,sha256=pYpJtFpqydeVZu-BZrNhS24SWh4NhOCFhh-koFgDU2o,353109
7
7
  gate/ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
8
- gate/ccxt/async_support/base/exchange.py,sha256=X4BrbR9Oo-33uUotlodYrIW7ucESwmoHYnUmWAkS8ck,117223
8
+ gate/ccxt/async_support/base/exchange.py,sha256=X_oV71iDNfd2c96pnNJ-e2mniQx-1px-iIXkE-bNUTk,117255
9
9
  gate/ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
10
10
  gate/ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
11
11
  gate/ccxt/async_support/base/ws/aiohttp_client.py,sha256=Y5HxAVXyyYduj6b6SbbUZETlq3GrVMzrkW1r-TMgpb8,6329
@@ -19,11 +19,11 @@ gate/ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9prod
19
19
  gate/ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
20
20
  gate/ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
21
21
  gate/ccxt/base/errors.py,sha256=MvCrL_sAM3de616T6RE0PSxiF2xV6Qqz5b1y1ghidbk,4888
22
- gate/ccxt/base/exchange.py,sha256=ZvK4GMhsYIvcZ7KloZD22dcBDOWtroMR88T5mu7zQ7E,322633
22
+ gate/ccxt/base/exchange.py,sha256=Nc1YifSOr1D3QRVQiSJu59SP76gActUUZIsgusjoTss,326255
23
23
  gate/ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
24
24
  gate/ccxt/base/types.py,sha256=SfxIKDSsxP7MPHWiOVI965Nr5NSEPpAno5fuveTRi3w,11423
25
- gate/ccxt/pro/__init__.py,sha256=pMZe-G0hgNCkOSwINA6ghppN_LRcqOZ0yN1nkpTNing,615
26
- gate/ccxt/pro/gate.py,sha256=mC3bL0fuYXz7yzVOU450Y8STI1O3vF2EnpV_w_XwDBE,88324
25
+ gate/ccxt/pro/__init__.py,sha256=oACREwicOpxy911AVFsBGwMGKIE7qbLsKB2O2JRBVqk,615
26
+ gate/ccxt/pro/gate.py,sha256=TImMphR9V8h9xqDJ541s3zb4NOppfLDc-XoBkntT1nA,89399
27
27
  gate/ccxt/static_dependencies/README.md,sha256=3TCvhhn09_Cqf9BDDpao1V7EfKHDpQ6k9oWRsLFixpU,18
28
28
  gate/ccxt/static_dependencies/__init__.py,sha256=tzFje8cloqmiIE6kola3EaYC0SnD1izWnri69hzHsSw,168
29
29
  gate/ccxt/static_dependencies/ecdsa/__init__.py,sha256=Xaj0G79BLtBt2YZcOOMV8qOlQZ7fIJznNiHhiEEZfQA,594
@@ -283,6 +283,6 @@ gate/ccxt/static_dependencies/toolz/curried/exceptions.py,sha256=gKFOHDIayAWnX2u
283
283
  gate/ccxt/static_dependencies/toolz/curried/operator.py,sha256=ML92mknkAwzBl2NCm-4werSUmJEtSHNY9NSzhseNM9s,525
284
284
  gate/ccxt/static_dependencies/typing_inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
285
  gate/ccxt/static_dependencies/typing_inspect/typing_inspect.py,sha256=5gIWomLPfuDpgd3gX1GlnX0MuXM3VorR4j2W2qXORiQ,28269
286
- gate_io_api-0.0.24.dist-info/METADATA,sha256=DYh4WQdxSsPiPnmmMg_ZlHJ17VpY2tGiOObbKujNLt8,26789
287
- gate_io_api-0.0.24.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
288
- gate_io_api-0.0.24.dist-info/RECORD,,
286
+ gate_io_api-0.0.26.dist-info/METADATA,sha256=lsE2-znvQMh4b9vMngUDJhKmRTc7_4dIAEV95jBSkdQ,26789
287
+ gate_io_api-0.0.26.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
288
+ gate_io_api-0.0.26.dist-info/RECORD,,