ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +8 -8
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +10 -10
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +32 -38
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +32 -27
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +34 -30
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +15 -14
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +30 -36
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +29 -24
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +32 -28
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +13 -12
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.1.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
ccxt/pro/bitvavo.py CHANGED
@@ -6,7 +6,7 @@
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
9
+ from ccxt.base.types import Any, Balances, Bool, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
@@ -16,7 +16,7 @@ from ccxt.base.errors import ArgumentsRequired
16
16
 
17
17
  class bitvavo(ccxt.async_support.bitvavo):
18
18
 
19
- def describe(self):
19
+ def describe(self) -> Any:
20
20
  return self.deep_extend(super(bitvavo, self).describe(), {
21
21
  'has': {
22
22
  'ws': True,
@@ -25,6 +25,8 @@ class bitvavo(ccxt.async_support.bitvavo):
25
25
  'watchOrderBook': True,
26
26
  'watchTrades': True,
27
27
  'watchTicker': True,
28
+ 'watchTickers': True,
29
+ 'watchBidsAsks': True,
28
30
  'watchOHLCV': True,
29
31
  'watchOrders': True,
30
32
  'watchMyTrades': True,
@@ -85,15 +87,55 @@ class bitvavo(ccxt.async_support.bitvavo):
85
87
  message = self.extend(request, params)
86
88
  return await self.watch(url, messageHash, message, messageHash)
87
89
 
90
+ async def watch_public_multiple(self, methodName, channelName: str, symbols, params={}):
91
+ await self.load_markets()
92
+ symbols = self.market_symbols(symbols)
93
+ messageHashes = [methodName]
94
+ args = []
95
+ for i in range(0, len(symbols)):
96
+ market = self.market(symbols[i])
97
+ args.append(market['id'])
98
+ url = self.urls['api']['ws']
99
+ request: dict = {
100
+ 'action': 'subscribe',
101
+ 'channels': [
102
+ {
103
+ 'name': channelName,
104
+ 'markets': args,
105
+ },
106
+ ],
107
+ }
108
+ message = self.extend(request, params)
109
+ return await self.watch_multiple(url, messageHashes, message, messageHashes)
110
+
88
111
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
89
112
  """
90
113
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
114
+
115
+ https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
116
+
91
117
  :param str symbol: unified symbol of the market to fetch the ticker for
92
118
  :param dict [params]: extra parameters specific to the exchange API endpoint
93
119
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
94
120
  """
95
121
  return await self.watch_public('ticker24h', symbol, params)
96
122
 
123
+ async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
124
+ """
125
+ watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
126
+
127
+ https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
128
+
129
+ :param str[] [symbols]: unified symbol of the market to fetch the ticker for
130
+ :param dict [params]: extra parameters specific to the exchange API endpoint
131
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
132
+ """
133
+ await self.load_markets()
134
+ symbols = self.market_symbols(symbols, None, False)
135
+ channel = 'ticker24h'
136
+ tickers = await self.watch_public_multiple(channel, channel, symbols, params)
137
+ return self.filter_by_array(tickers, 'symbol', symbols)
138
+
97
139
  def handle_ticker(self, client: Client, message):
98
140
  #
99
141
  # {
@@ -116,8 +158,10 @@ class bitvavo(ccxt.async_support.bitvavo):
116
158
  # ]
117
159
  # }
118
160
  #
161
+ self.handle_bid_ask(client, message)
119
162
  event = self.safe_string(message, 'event')
120
163
  tickers = self.safe_value(message, 'data', [])
164
+ result = []
121
165
  for i in range(0, len(tickers)):
122
166
  data = tickers[i]
123
167
  marketId = self.safe_string(data, 'market')
@@ -126,8 +170,55 @@ class bitvavo(ccxt.async_support.bitvavo):
126
170
  ticker = self.parse_ticker(data, market)
127
171
  symbol = ticker['symbol']
128
172
  self.tickers[symbol] = ticker
173
+ result.append(ticker)
129
174
  client.resolve(ticker, messageHash)
130
- return message
175
+ client.resolve(result, event)
176
+
177
+ async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
178
+ """
179
+ watches best bid & ask for symbols
180
+
181
+ https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
182
+
183
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
184
+ :param dict [params]: extra parameters specific to the exchange API endpoint
185
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
186
+ """
187
+ await self.load_markets()
188
+ symbols = self.market_symbols(symbols, None, False)
189
+ channel = 'ticker24h'
190
+ tickers = await self.watch_public_multiple('bidask', channel, symbols, params)
191
+ return self.filter_by_array(tickers, 'symbol', symbols)
192
+
193
+ def handle_bid_ask(self, client: Client, message):
194
+ event = 'bidask'
195
+ tickers = self.safe_value(message, 'data', [])
196
+ result = []
197
+ for i in range(0, len(tickers)):
198
+ data = tickers[i]
199
+ ticker = self.parse_ws_bid_ask(data)
200
+ symbol = ticker['symbol']
201
+ self.bidsasks[symbol] = ticker
202
+ result.append(ticker)
203
+ messageHash = event + ':' + symbol
204
+ client.resolve(ticker, messageHash)
205
+ client.resolve(result, event)
206
+
207
+ def parse_ws_bid_ask(self, ticker, market=None):
208
+ marketId = self.safe_string(ticker, 'market')
209
+ market = self.safe_market(marketId, None, '-')
210
+ symbol = self.safe_string(market, 'symbol')
211
+ timestamp = self.safe_integer(ticker, 'timestamp')
212
+ return self.safe_ticker({
213
+ 'symbol': symbol,
214
+ 'timestamp': timestamp,
215
+ 'datetime': self.iso8601(timestamp),
216
+ 'ask': self.safe_number(ticker, 'ask'),
217
+ 'askVolume': self.safe_number(ticker, 'askSize'),
218
+ 'bid': self.safe_number(ticker, 'bid'),
219
+ 'bidVolume': self.safe_number(ticker, 'bidSize'),
220
+ 'info': ticker,
221
+ }, market)
131
222
 
132
223
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
133
224
  """
@@ -215,10 +306,9 @@ class bitvavo(ccxt.async_support.bitvavo):
215
306
  # ]
216
307
  # }
217
308
  #
218
- action = self.safe_string(message, 'action')
219
309
  response = self.safe_value(message, 'response')
220
310
  ohlcv = self.parse_ohlcvs(response, None, None, None)
221
- messageHash = self.build_message_hash(action)
311
+ messageHash = self.safe_string(message, 'requestId')
222
312
  client.resolve(ohlcv, messageHash)
223
313
 
224
314
  def handle_ohlcv(self, client: Client, message):
@@ -476,7 +566,7 @@ class bitvavo(ccxt.async_support.bitvavo):
476
566
  :param int [since]: the earliest time in ms to fetch trades for
477
567
  :param int [limit]: the maximum number of trade structures to retrieve
478
568
  :param dict [params]: extra parameters specific to the exchange API endpoint
479
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=ortradeder-structure
569
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
480
570
  """
481
571
  if symbol is None:
482
572
  raise ArgumentsRequired(self.id + ' watchMyTrades() requires a symbol argument')
@@ -505,12 +595,14 @@ class bitvavo(ccxt.async_support.bitvavo):
505
595
  async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
506
596
  """
507
597
  create a trade order
508
- :see: https://docs.bitvavo.com/#tag/Orders/paths/~1order/post
598
+
599
+ https://docs.bitvavo.com/#tag/Orders/paths/~1order/post
600
+
509
601
  :param str symbol: unified symbol of the market to create an order in
510
602
  :param str type: 'market' or 'limit'
511
603
  :param str side: 'buy' or 'sell'
512
604
  :param float amount: how much of currency you want to trade in units of base currency
513
- :param float price: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
605
+ :param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
514
606
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
515
607
  :param str [params.timeInForce]: "GTC", "IOC", or "PO"
516
608
  :param float [params.stopPrice]: The price at which a trigger order is triggered at
@@ -533,13 +625,15 @@ class bitvavo(ccxt.async_support.bitvavo):
533
625
  async def edit_order_ws(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}) -> Order:
534
626
  """
535
627
  edit a trade order
536
- :see: https://docs.bitvavo.com/#tag/Orders/paths/~1order/put
628
+
629
+ https://docs.bitvavo.com/#tag/Orders/paths/~1order/put
630
+
537
631
  :param str id: cancel order id
538
632
  :param str symbol: unified symbol of the market to create an order in
539
633
  :param str type: 'market' or 'limit'
540
634
  :param str side: 'buy' or 'sell'
541
635
  :param float [amount]: how much of currency you want to trade in units of base currency
542
- :param float [price]: the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
636
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
543
637
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
544
638
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
545
639
  """
@@ -550,7 +644,9 @@ class bitvavo(ccxt.async_support.bitvavo):
550
644
 
551
645
  async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
552
646
  """
553
- :see: https://docs.bitvavo.com/#tag/Orders/paths/~1order/delete
647
+
648
+ https://docs.bitvavo.com/#tag/Orders/paths/~1order/delete
649
+
554
650
  cancels an open order
555
651
  :param str id: order id
556
652
  :param str symbol: unified symbol of the market the order was made in
@@ -564,7 +660,9 @@ class bitvavo(ccxt.async_support.bitvavo):
564
660
 
565
661
  async def cancel_all_orders_ws(self, symbol: Str = None, params={}):
566
662
  """
567
- :see: https://docs.bitvavo.com/#tag/Orders/paths/~1orders/delete
663
+
664
+ https://docs.bitvavo.com/#tag/Orders/paths/~1orders/delete
665
+
568
666
  cancel all open orders
569
667
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
570
668
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
@@ -588,20 +686,24 @@ class bitvavo(ccxt.async_support.bitvavo):
588
686
  # }]
589
687
  # }
590
688
  #
591
- action = self.safe_string(message, 'action')
592
- response = self.safe_value(message, 'response')
593
- firstRawOrder = self.safe_value(response, 0, {})
594
- marketId = self.safe_string(firstRawOrder, 'market')
689
+ # action = self.safe_string(message, 'action')
690
+ response = self.safe_list(message, 'response')
691
+ # firstRawOrder = self.safe_value(response, 0, {})
692
+ # marketId = self.safe_string(firstRawOrder, 'market')
595
693
  orders = self.parse_orders(response)
596
- messageHash = self.build_message_hash(action, {'market': marketId})
597
- client.resolve(orders, messageHash)
598
- messageHash = self.build_message_hash(action, message)
694
+ # messageHash = self.build_message_hash(action, {'market': marketId})
695
+ # client.resolve(orders, messageHash)
696
+ # messageHash = self.build_message_hash(action, message)
697
+ messageHash = self.safe_string(message, 'requestId')
599
698
  client.resolve(orders, messageHash)
600
699
 
601
700
  async def fetch_order_ws(self, id: str, symbol: Str = None, params={}) -> Order:
602
701
  """
603
- :see: https://docs.bitvavo.com/#tag/General/paths/~1assets/get
702
+
703
+ https://docs.bitvavo.com/#tag/General/paths/~1assets/get
704
+
604
705
  fetches information on an order made by the user
706
+ :param str id: the order id
605
707
  :param str symbol: unified symbol of the market the order was made in
606
708
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
607
709
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -619,7 +721,9 @@ class bitvavo(ccxt.async_support.bitvavo):
619
721
 
620
722
  async def fetch_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
621
723
  """
622
- :see: https://docs.bitvavo.com/#tag/Orders/paths/~1orders/get
724
+
725
+ https://docs.bitvavo.com/#tag/Orders/paths/~1orders/get
726
+
623
727
  fetches information on multiple orders made by the user
624
728
  :param str symbol: unified market symbol of the market orders were made in
625
729
  :param int [since]: the earliest time in ms to fetch orders for
@@ -635,12 +739,19 @@ class bitvavo(ccxt.async_support.bitvavo):
635
739
  orders = await self.watch_request('privateGetOrders', request)
636
740
  return self.filter_by_symbol_since_limit(orders, symbol, since, limit)
637
741
 
742
+ def request_id(self):
743
+ ts = str(self.milliseconds())
744
+ randomNumber = self.rand_number(4)
745
+ randomPart = str(randomNumber)
746
+ return int(ts + randomPart)
747
+
638
748
  async def watch_request(self, action, request):
749
+ messageHash = self.request_id()
750
+ messageHashStr = str(messageHash)
639
751
  request['action'] = action
640
- messageHash = self.build_message_hash(action, request)
641
- self.check_message_hash_does_not_exist(messageHash)
752
+ request['requestId'] = messageHash
642
753
  url = self.urls['api']['ws']
643
- return await self.watch(url, messageHash, request, messageHash)
754
+ return await self.watch(url, messageHashStr, request, messageHashStr)
644
755
 
645
756
  async def fetch_open_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
646
757
  """
@@ -665,7 +776,9 @@ class bitvavo(ccxt.async_support.bitvavo):
665
776
 
666
777
  async def fetch_my_trades_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
667
778
  """
668
- :see: https://docs.bitvavo.com/#tag/Trades
779
+
780
+ https://docs.bitvavo.com/#tag/Trades
781
+
669
782
  fetch all trades made by the user
670
783
  :param str symbol: unified market symbol
671
784
  :param int [since]: the earliest time in ms to fetch trades for
@@ -703,12 +816,12 @@ class bitvavo(ccxt.async_support.bitvavo):
703
816
  # }
704
817
  #
705
818
  #
706
- action = self.safe_string(message, 'action')
707
- response = self.safe_value(message, 'response')
708
- firstRawTrade = self.safe_value(response, 0, {})
709
- marketId = self.safe_string(firstRawTrade, 'market')
819
+ # action = self.safe_string(message, 'action')
820
+ response = self.safe_list(message, 'response')
821
+ # marketId = self.safe_string(firstRawTrade, 'market')
710
822
  trades = self.parse_trades(response, None, None, None)
711
- messageHash = self.build_message_hash(action, {'market': marketId})
823
+ # messageHash = self.build_message_hash(action, {'market': marketId})
824
+ messageHash = self.safe_string(message, 'requestId')
712
825
  client.resolve(trades, messageHash)
713
826
 
714
827
  async def withdraw_ws(self, code: str, amount, address, tag=None, params={}):
@@ -739,15 +852,18 @@ class bitvavo(ccxt.async_support.bitvavo):
739
852
  # }
740
853
  # }
741
854
  #
742
- action = self.safe_string(message, 'action')
743
- messageHash = self.build_message_hash(action, message)
855
+ # action = self.safe_string(message, 'action')
856
+ # messageHash = self.build_message_hash(action, message)
857
+ messageHash = self.safe_string(message, 'requestId')
744
858
  response = self.safe_value(message, 'response')
745
859
  withdraw = self.parse_transaction(response)
746
860
  client.resolve(withdraw, messageHash)
747
861
 
748
862
  async def fetch_withdrawals_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
749
863
  """
750
- :see: https://docs.bitvavo.com/#tag/Account/paths/~1withdrawalHistory/get
864
+
865
+ https://docs.bitvavo.com/#tag/Account/paths/~1withdrawalHistory/get
866
+
751
867
  fetch all withdrawals made from an account
752
868
  :param str code: unified currency code
753
869
  :param int [since]: the earliest time in ms to fetch withdrawals for
@@ -777,15 +893,18 @@ class bitvavo(ccxt.async_support.bitvavo):
777
893
  # ]
778
894
  # }
779
895
  #
780
- action = self.safe_string(message, 'action')
781
- messageHash = self.build_message_hash(action, message)
782
- response = self.safe_value(message, 'response')
896
+ # action = self.safe_string(message, 'action')
897
+ # messageHash = self.build_message_hash(action, message)
898
+ response = self.safe_list(message, 'response')
899
+ messageHash = self.safe_string(message, 'requestId')
783
900
  withdrawals = self.parse_transactions(response, None, None, None, {'type': 'withdrawal'})
784
901
  client.resolve(withdrawals, messageHash)
785
902
 
786
903
  async def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
787
904
  """
788
- :see: https://docs.bitvavo.com/#tag/Market-Data/paths/~1{market}~1candles/get
905
+
906
+ https://docs.bitvavo.com/#tag/Market-Data/paths/~1{market}~1candles/get
907
+
789
908
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
790
909
  :param str symbol: unified symbol of the market to fetch OHLCV data for
791
910
  :param str timeframe: the length of time each candle represents
@@ -802,7 +921,9 @@ class bitvavo(ccxt.async_support.bitvavo):
802
921
 
803
922
  async def fetch_deposits_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
804
923
  """
805
- :see: https://docs.bitvavo.com/#tag/Account/paths/~1depositHistory/get
924
+
925
+ https://docs.bitvavo.com/#tag/Account/paths/~1depositHistory/get
926
+
806
927
  fetch all deposits made to an account
807
928
  :param str code: unified currency code
808
929
  :param int [since]: the earliest time in ms to fetch deposits for
@@ -832,15 +953,16 @@ class bitvavo(ccxt.async_support.bitvavo):
832
953
  # ]
833
954
  # }
834
955
  #
835
- action = self.safe_string(message, 'action')
836
- messageHash = self.build_message_hash(action, message)
837
956
  response = self.safe_value(message, 'response')
838
957
  deposits = self.parse_transactions(response, None, None, None, {'type': 'deposit'})
958
+ messageHash = self.safe_string(message, 'requestId')
839
959
  client.resolve(deposits, messageHash)
840
960
 
841
961
  async def fetch_trading_fees_ws(self, params={}) -> TradingFees:
842
962
  """
843
- :see: https://docs.bitvavo.com/#tag/Account/paths/~1account/get
963
+
964
+ https://docs.bitvavo.com/#tag/Account/paths/~1account/get
965
+
844
966
  fetch the trading fees for multiple markets
845
967
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
846
968
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
@@ -851,7 +973,9 @@ class bitvavo(ccxt.async_support.bitvavo):
851
973
 
852
974
  async def fetch_markets_ws(self, params={}):
853
975
  """
854
- :see: https://docs.bitvavo.com/#tag/General/paths/~1markets/get
976
+
977
+ https://docs.bitvavo.com/#tag/General/paths/~1markets/get
978
+
855
979
  retrieves data on all markets for bitvavo
856
980
  :param dict [params]: extra parameters specific to the exchange api endpoint
857
981
  :returns dict[]: an array of objects representing market data
@@ -860,7 +984,9 @@ class bitvavo(ccxt.async_support.bitvavo):
860
984
 
861
985
  async def fetch_currencies_ws(self, params={}):
862
986
  """
863
- :see: https://docs.bitvavo.com/#tag/General/paths/~1assets/get
987
+
988
+ https://docs.bitvavo.com/#tag/General/paths/~1assets/get
989
+
864
990
  fetches all available currencies on an exchange
865
991
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
866
992
  :returns dict: an associative dictionary of currencies
@@ -889,10 +1015,9 @@ class bitvavo(ccxt.async_support.bitvavo):
889
1015
  # ]
890
1016
  # }
891
1017
  #
892
- action = self.safe_string(message, 'action')
893
- messageHash = self.build_message_hash(action, message)
1018
+ messageHash = self.safe_string(message, 'requestId')
894
1019
  response = self.safe_value(message, 'response')
895
- currencies = self.parseCurrencies(response)
1020
+ currencies = self.parse_currencies(response)
896
1021
  client.resolve(currencies, messageHash)
897
1022
 
898
1023
  def handle_trading_fees(self, client, message):
@@ -908,15 +1033,16 @@ class bitvavo(ccxt.async_support.bitvavo):
908
1033
  # }
909
1034
  # }
910
1035
  #
911
- action = self.safe_string(message, 'action')
912
- messageHash = self.build_message_hash(action, message)
1036
+ messageHash = self.safe_string(message, 'requestId')
913
1037
  response = self.safe_value(message, 'response')
914
1038
  fees = self.parse_trading_fees(response)
915
1039
  client.resolve(fees, messageHash)
916
1040
 
917
1041
  async def fetch_balance_ws(self, params={}) -> Balances:
918
1042
  """
919
- :see: https://docs.bitvavo.com/#tag/Account/paths/~1balance/get
1043
+
1044
+ https://docs.bitvavo.com/#tag/Account/paths/~1balance/get
1045
+
920
1046
  query for balance and get the amount of funds available for trading or funds locked in orders
921
1047
  :param dict [params]: extra parameters specific to the bitvavo api endpoint
922
1048
  :returns dict: a `balance structure <https://docs.ccxt.com/en/latest/manual.html?#balance-structure>`
@@ -938,8 +1064,7 @@ class bitvavo(ccxt.async_support.bitvavo):
938
1064
  # ]
939
1065
  # }
940
1066
  #
941
- action = self.safe_string(message, 'action', 'privateGetBalance')
942
- messageHash = self.build_message_hash(action, message)
1067
+ messageHash = self.safe_string(message, 'requestId')
943
1068
  response = self.safe_value(message, 'response', [])
944
1069
  balance = self.parse_balance(response)
945
1070
  client.resolve(balance, messageHash)
@@ -973,10 +1098,9 @@ class bitvavo(ccxt.async_support.bitvavo):
973
1098
  # }
974
1099
  # }
975
1100
  #
976
- action = self.safe_string(message, 'action')
977
1101
  response = self.safe_value(message, 'response', {})
978
1102
  order = self.parse_order(response)
979
- messageHash = self.build_message_hash(action, response)
1103
+ messageHash = self.safe_string(message, 'requestId')
980
1104
  client.resolve(order, messageHash)
981
1105
 
982
1106
  def handle_markets(self, client: Client, message):
@@ -999,10 +1123,9 @@ class bitvavo(ccxt.async_support.bitvavo):
999
1123
  # ]
1000
1124
  # }
1001
1125
  #
1002
- action = self.safe_string(message, 'action')
1003
1126
  response = self.safe_value(message, 'response', {})
1004
1127
  markets = self.parse_markets(response)
1005
- messageHash = self.build_message_hash(action, response)
1128
+ messageHash = self.safe_string(message, 'requestId')
1006
1129
  client.resolve(markets, messageHash)
1007
1130
 
1008
1131
  def build_message_hash(self, action, params={}):
@@ -1019,15 +1142,6 @@ class bitvavo(ccxt.async_support.bitvavo):
1019
1142
  messageHash = method(action, params)
1020
1143
  return messageHash
1021
1144
 
1022
- def check_message_hash_does_not_exist(self, messageHash):
1023
- supressMultipleWsRequestsError = self.safe_bool(self.options, 'supressMultipleWsRequestsError', False)
1024
- if not supressMultipleWsRequestsError:
1025
- client = self.safe_value(self.clients, self.urls['api']['ws'])
1026
- if client is not None:
1027
- future = self.safe_value(client.futures, messageHash)
1028
- if future is not None:
1029
- raise ExchangeError(self.id + ' a similar request with messageHash ' + messageHash + ' is already pending, you must wait for a response, or turn off self error by setting supressMultipleWsRequestsError in the options to True')
1030
-
1031
1145
  def action_and_market_message_hash(self, action, params={}):
1032
1146
  symbol = self.safe_string(params, 'market', '')
1033
1147
  return action + symbol
@@ -1163,7 +1277,7 @@ class bitvavo(ccxt.async_support.bitvavo):
1163
1277
  if messageHash in client.subscriptions:
1164
1278
  del client.subscriptions[messageHash]
1165
1279
 
1166
- def handle_error_message(self, client: Client, message):
1280
+ def handle_error_message(self, client: Client, message) -> Bool:
1167
1281
  #
1168
1282
  # {
1169
1283
  # action: 'privateCreateOrder',
@@ -1171,19 +1285,29 @@ class bitvavo(ccxt.async_support.bitvavo):
1171
1285
  # errorCode: 217,
1172
1286
  # error: 'Minimum order size in quote currency is 5 EUR or 0.001 BTC.'
1173
1287
  # }
1288
+ # {
1289
+ # action: 'privateCreateOrder',
1290
+ # requestId: '17317539426571916',
1291
+ # market: 'USDT-EUR',
1292
+ # errorCode: 216,
1293
+ # error: 'You do not have sufficient balance to complete self operation.'
1294
+ # }
1174
1295
  #
1175
1296
  error = self.safe_string(message, 'error')
1176
1297
  code = self.safe_integer(error, 'errorCode')
1177
1298
  action = self.safe_string(message, 'action')
1178
- messageHash = self.build_message_hash(action, message)
1299
+ buildMessage = self.build_message_hash(action, message)
1300
+ messageHash = self.safe_string(message, 'requestId', buildMessage)
1179
1301
  rejected = False
1180
1302
  try:
1181
- self.handle_errors(code, error, client.url, None, None, error, message, None, None)
1303
+ self.handle_errors(code, error, client.url, '', {}, error, message, {}, {})
1182
1304
  except Exception as e:
1183
1305
  rejected = True
1184
1306
  client.reject(e, messageHash)
1185
1307
  if not rejected:
1186
1308
  client.reject(message, messageHash)
1309
+ return True
1310
+ return None
1187
1311
 
1188
1312
  def handle_message(self, client: Client, message):
1189
1313
  #
ccxt/pro/blockchaincom.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
8
- from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
8
+ from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str, Ticker, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
@@ -15,7 +15,7 @@ from ccxt.base.errors import NotSupported
15
15
 
16
16
  class blockchaincom(ccxt.async_support.blockchaincom):
17
17
 
18
- def describe(self):
18
+ def describe(self) -> Any:
19
19
  return self.deep_extend(super(blockchaincom, self).describe(), {
20
20
  'has': {
21
21
  'ws': True,
@@ -23,6 +23,7 @@ class blockchaincom(ccxt.async_support.blockchaincom):
23
23
  'watchTicker': True,
24
24
  'watchTickers': False,
25
25
  'watchTrades': True,
26
+ 'watchTradesForSymbols': False,
26
27
  'watchMyTrades': False,
27
28
  'watchOrders': True,
28
29
  'watchOrderBook': True,
@@ -60,7 +61,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
60
61
  async def watch_balance(self, params={}) -> Balances:
61
62
  """
62
63
  watch balance and get the amount of funds available for trading or funds locked in orders
63
- :see: https://exchange.blockchain.com/api/#balances
64
+
65
+ https://exchange.blockchain.com/api/#balances
66
+
64
67
  :param dict [params]: extra parameters specific to the exchange API endpoint
65
68
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
66
69
  """
@@ -124,7 +127,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
124
127
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
125
128
  """
126
129
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market.
127
- :see: https://exchange.blockchain.com/api/#prices
130
+
131
+ https://exchange.blockchain.com/api/#prices
132
+
128
133
  :param str symbol: unified symbol of the market to fetch OHLCV data for
129
134
  :param str timeframe: the length of time each candle represents. Allows '1m', '5m', '15m', '1h', '6h' '1d'. Can only watch one timeframe per symbol.
130
135
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -196,7 +201,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
196
201
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
197
202
  """
198
203
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
199
- :see: https://exchange.blockchain.com/api/#ticker
204
+
205
+ https://exchange.blockchain.com/api/#ticker
206
+
200
207
  :param str symbol: unified symbol of the market to fetch the ticker for
201
208
  :param dict [params]: extra parameters specific to the exchange API endpoint
202
209
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -298,7 +305,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
298
305
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
299
306
  """
300
307
  get the list of most recent trades for a particular symbol
301
- :see: https://exchange.blockchain.com/api/#trades
308
+
309
+ https://exchange.blockchain.com/api/#trades
310
+
302
311
  :param str symbol: unified symbol of the market to fetch trades for
303
312
  :param int [since]: timestamp in ms of the earliest trade to fetch
304
313
  :param int [limit]: the maximum amount of trades to fetch
@@ -393,7 +402,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
393
402
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
394
403
  """
395
404
  watches information on multiple orders made by the user
396
- :see: https://exchange.blockchain.com/api/#mass-order-status-request-ordermassstatusrequest
405
+
406
+ https://exchange.blockchain.com/api/#mass-order-status-request-ordermassstatusrequest
407
+
397
408
  :param str symbol: unified market symbol of the market orders were made in
398
409
  :param int [since]: the earliest time in ms to fetch orders for
399
410
  :param int [limit]: the maximum number of order structures to retrieve
@@ -596,7 +607,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
596
607
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
597
608
  """
598
609
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
599
- :see: https://exchange.blockchain.com/api/#l2-order-book
610
+
611
+ https://exchange.blockchain.com/api/#l2-order-book
612
+
600
613
  :param str symbol: unified symbol of the market to fetch the order book for
601
614
  :param int [limit]: the maximum amount of order book entries to return
602
615
  :param dictConstructor [params]: extra parameters specific to the exchange API endpoint
ccxt/pro/blofin.py CHANGED
@@ -16,7 +16,7 @@ from ccxt.base.errors import NotSupported
16
16
 
17
17
  class blofin(ccxt.async_support.blofin):
18
18
 
19
- def describe(self):
19
+ def describe(self) -> Any:
20
20
  return self.deep_extend(super(blofin, self).describe(), {
21
21
  'has': {
22
22
  'ws': True,
@@ -42,6 +42,14 @@ class blofin(ccxt.async_support.blofin):
42
42
  },
43
43
  },
44
44
  },
45
+ 'test': {
46
+ 'ws': {
47
+ 'swap': {
48
+ 'public': 'wss://demo-trading-openapi.blofin.com/ws/public',
49
+ 'private': 'wss://demo-trading-openapi.blofin.com/ws/private',
50
+ },
51
+ },
52
+ },
45
53
  },
46
54
  'options': {
47
55
  'defaultType': 'swap',