ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3513 -1511
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3105 -881
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +403 -150
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1473 -464
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1634 -269
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +1050 -355
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1777 -455
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1155 -295
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1729 -482
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +403 -150
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1633 -269
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +1050 -355
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1777 -455
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +63 -15
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +204 -82
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +967 -661
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +168 -32
  309. ccxt/pro/exmo.py +253 -21
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +486 -70
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +465 -407
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +465 -409
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1155 -295
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/coinmate.py CHANGED
@@ -6,15 +6,15 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.coinmate import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import InsufficientFunds
14
15
  from ccxt.base.errors import InvalidOrder
15
16
  from ccxt.base.errors import OrderNotFound
16
17
  from ccxt.base.errors import RateLimitExceeded
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
  from ccxt.base.precise import Precise
20
20
 
@@ -26,7 +26,7 @@ class coinmate(Exchange, ImplicitAPI):
26
26
  'id': 'coinmate',
27
27
  'name': 'CoinMate',
28
28
  'countries': ['GB', 'CZ', 'EU'], # UK, Czech Republic
29
- 'rateLimit': 1000,
29
+ 'rateLimit': 600,
30
30
  'has': {
31
31
  'CORS': True,
32
32
  'spot': True,
@@ -65,8 +65,11 @@ class coinmate(Exchange, ImplicitAPI):
65
65
  'fetchOrderBook': True,
66
66
  'fetchOrders': True,
67
67
  'fetchPosition': False,
68
+ 'fetchPositionHistory': False,
68
69
  'fetchPositionMode': False,
69
70
  'fetchPositions': False,
71
+ 'fetchPositionsForSymbol': False,
72
+ 'fetchPositionsHistory': False,
70
73
  'fetchPositionsRisk': False,
71
74
  'fetchPremiumIndexOHLCV': False,
72
75
  'fetchTicker': True,
@@ -172,28 +175,28 @@ class coinmate(Exchange, ImplicitAPI):
172
175
  'trading': {
173
176
  'tierBased': True,
174
177
  'percentage': True,
175
- 'maker': self.parse_number('0.0012'),
176
- 'taker': self.parse_number('0.0025'),
178
+ 'taker': self.parse_number('0.006'),
179
+ 'maker': self.parse_number('0.004'),
177
180
  'tiers': {
178
181
  'taker': [
179
- [self.parse_number('0'), self.parse_number('0.0035')],
180
- [self.parse_number('10000'), self.parse_number('0.0023')],
181
- [self.parse_number('100000'), self.parse_number('0.0021')],
182
- [self.parse_number('250000'), self.parse_number('0.0020')],
183
- [self.parse_number('500000'), self.parse_number('0.0015')],
184
- [self.parse_number('1000000'), self.parse_number('0.0013')],
185
- [self.parse_number('3000000'), self.parse_number('0.0010')],
186
- [self.parse_number('15000000'), self.parse_number('0.0005')],
182
+ [self.parse_number('0'), self.parse_number('0.006')],
183
+ [self.parse_number('10000'), self.parse_number('0.003')],
184
+ [self.parse_number('100000'), self.parse_number('0.0023')],
185
+ [self.parse_number('250000'), self.parse_number('0.0021')],
186
+ [self.parse_number('500000'), self.parse_number('0.0018')],
187
+ [self.parse_number('1000000'), self.parse_number('0.0015')],
188
+ [self.parse_number('3000000'), self.parse_number('0.0012')],
189
+ [self.parse_number('15000000'), self.parse_number('0.001')],
187
190
  ],
188
191
  'maker': [
189
- [self.parse_number('0'), self.parse_number('0.003')],
190
- [self.parse_number('10000'), self.parse_number('0.0011')],
191
- [self.parse_number('100000'), self.parse_number('0.0010')],
192
- [self.parse_number('250000'), self.parse_number('0.0008')],
192
+ [self.parse_number('0'), self.parse_number('0.004')],
193
+ [self.parse_number('10000'), self.parse_number('0.002')],
194
+ [self.parse_number('100000'), self.parse_number('0.0012')],
195
+ [self.parse_number('250000'), self.parse_number('0.0009')],
193
196
  [self.parse_number('500000'), self.parse_number('0.0005')],
194
197
  [self.parse_number('1000000'), self.parse_number('0.0003')],
195
198
  [self.parse_number('3000000'), self.parse_number('0.0002')],
196
- [self.parse_number('15000000'), self.parse_number('0')],
199
+ [self.parse_number('15000000'), self.parse_number('-0.0004')],
197
200
  ],
198
201
  },
199
202
  },
@@ -214,6 +217,69 @@ class coinmate(Exchange, ImplicitAPI):
214
217
  },
215
218
  },
216
219
  },
220
+ 'features': {
221
+ 'spot': {
222
+ 'sandbox': False,
223
+ 'createOrder': {
224
+ 'marginMode': False,
225
+ 'triggerPrice': True, # todo implement
226
+ 'triggerPriceType': None,
227
+ 'triggerDirection': False,
228
+ 'stopLossPrice': False, # todo
229
+ 'takeProfitPrice': False, # todo
230
+ 'attachedStopLossTakeProfit': None,
231
+ 'timeInForce': {
232
+ 'IOC': True,
233
+ 'FOK': False,
234
+ 'PO': True,
235
+ 'GTD': False,
236
+ },
237
+ 'hedged': False,
238
+ 'trailing': True, # todo implement
239
+ 'leverage': False,
240
+ 'marketBuyByCost': False,
241
+ 'marketBuyRequiresPrice': False,
242
+ 'selfTradePrevention': False,
243
+ 'iceberg': True, # todo
244
+ },
245
+ 'createOrders': None,
246
+ 'fetchMyTrades': {
247
+ 'marginMode': False,
248
+ 'limit': 1000,
249
+ 'daysBack': 100000,
250
+ 'untilDays': 100000, # todo implement
251
+ },
252
+ 'fetchOrder': {
253
+ 'marginMode': False,
254
+ 'trigger': False,
255
+ 'trailing': False,
256
+ },
257
+ 'fetchOpenOrders': {
258
+ 'marginMode': False,
259
+ 'limit': None,
260
+ 'trigger': False,
261
+ 'trailing': False,
262
+ },
263
+ 'fetchOrders': {
264
+ 'marginMode': False,
265
+ 'limit': 100,
266
+ 'daysBack': None,
267
+ 'untilDays': None,
268
+ 'trigger': False,
269
+ 'trailing': False,
270
+ },
271
+ 'fetchClosedOrders': None,
272
+ 'fetchOHLCV': None,
273
+ },
274
+ 'swap': {
275
+ 'linear': None,
276
+ 'inverse': None,
277
+ },
278
+ 'future': {
279
+ 'linear': None,
280
+ 'inverse': None,
281
+ },
282
+ },
217
283
  'exceptions': {
218
284
  'exact': {
219
285
  'No order with given ID': OrderNotFound,
@@ -230,10 +296,12 @@ class coinmate(Exchange, ImplicitAPI):
230
296
  'precisionMode': TICK_SIZE,
231
297
  })
232
298
 
233
- def fetch_markets(self, params={}):
299
+ def fetch_markets(self, params={}) -> List[Market]:
234
300
  """
235
301
  retrieves data on all markets for coinmate
236
- :see: https://coinmate.docs.apiary.io/#reference/trading-pairs/get-trading-pairs/get
302
+
303
+ https://coinmate.docs.apiary.io/#reference/trading-pairs/get-trading-pairs/get
304
+
237
305
  :param dict [params]: extra parameters specific to the exchange API endpoint
238
306
  :returns dict[]: an array of objects representing market data
239
307
  """
@@ -320,7 +388,7 @@ class coinmate(Exchange, ImplicitAPI):
320
388
 
321
389
  def parse_balance(self, response) -> Balances:
322
390
  balances = self.safe_value(response, 'data', {})
323
- result = {'info': response}
391
+ result: dict = {'info': response}
324
392
  currencyIds = list(balances.keys())
325
393
  for i in range(0, len(currencyIds)):
326
394
  currencyId = currencyIds[i]
@@ -336,7 +404,9 @@ class coinmate(Exchange, ImplicitAPI):
336
404
  def fetch_balance(self, params={}) -> Balances:
337
405
  """
338
406
  query for balance and get the amount of funds available for trading or funds locked in orders
339
- :see: https://coinmate.docs.apiary.io/#reference/balance/get-balances/post
407
+
408
+ https://coinmate.docs.apiary.io/#reference/balance/get-balances/post
409
+
340
410
  :param dict [params]: extra parameters specific to the exchange API endpoint
341
411
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
342
412
  """
@@ -347,7 +417,9 @@ class coinmate(Exchange, ImplicitAPI):
347
417
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
348
418
  """
349
419
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
350
- :see: https://coinmate.docs.apiary.io/#reference/order-book/get-order-book/get
420
+
421
+ https://coinmate.docs.apiary.io/#reference/order-book/get-order-book/get
422
+
351
423
  :param str symbol: unified symbol of the market to fetch the order book for
352
424
  :param int [limit]: the maximum amount of order book entries to return
353
425
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -355,7 +427,7 @@ class coinmate(Exchange, ImplicitAPI):
355
427
  """
356
428
  self.load_markets()
357
429
  market = self.market(symbol)
358
- request = {
430
+ request: dict = {
359
431
  'currencyPair': market['id'],
360
432
  'groupByPriceLimit': 'False',
361
433
  }
@@ -367,14 +439,16 @@ class coinmate(Exchange, ImplicitAPI):
367
439
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
368
440
  """
369
441
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
370
- :see: https://coinmate.docs.apiary.io/#reference/ticker/get-ticker/get
442
+
443
+ https://coinmate.docs.apiary.io/#reference/ticker/get-ticker/get
444
+
371
445
  :param str symbol: unified symbol of the market to fetch the ticker for
372
446
  :param dict [params]: extra parameters specific to the exchange API endpoint
373
447
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
374
448
  """
375
449
  self.load_markets()
376
450
  market = self.market(symbol)
377
- request = {
451
+ request: dict = {
378
452
  'currencyPair': market['id'],
379
453
  }
380
454
  response = self.publicGetTicker(self.extend(request, params))
@@ -395,13 +469,15 @@ class coinmate(Exchange, ImplicitAPI):
395
469
  # }
396
470
  # }
397
471
  #
398
- data = self.safe_value(response, 'data')
472
+ data = self.safe_dict(response, 'data')
399
473
  return self.parse_ticker(data, market)
400
474
 
401
475
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
402
476
  """
403
477
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
404
- :see: https://coinmate.docs.apiary.io/#reference/ticker/get-ticker-all/get
478
+
479
+ https://coinmate.docs.apiary.io/#reference/ticker/get-ticker-all/get
480
+
405
481
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
406
482
  :param dict [params]: extra parameters specific to the exchange API endpoint
407
483
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -430,14 +506,14 @@ class coinmate(Exchange, ImplicitAPI):
430
506
  #
431
507
  data = self.safe_value(response, 'data', {})
432
508
  keys = list(data.keys())
433
- result = {}
509
+ result: dict = {}
434
510
  for i in range(0, len(keys)):
435
511
  market = self.market(keys[i])
436
512
  ticker = self.parse_ticker(self.safe_value(data, keys[i]), market)
437
513
  result[market['symbol']] = ticker
438
514
  return self.filter_by_array_tickers(result, 'symbol', symbols)
439
515
 
440
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
516
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
441
517
  #
442
518
  # {
443
519
  # "last": "0.001337",
@@ -479,7 +555,9 @@ class coinmate(Exchange, ImplicitAPI):
479
555
  def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
480
556
  """
481
557
  fetch history of deposits and withdrawals
482
- :see: https://coinmate.docs.apiary.io/#reference/transfers/get-transfer-history/post
558
+
559
+ https://coinmate.docs.apiary.io/#reference/transfers/get-transfer-history/post
560
+
483
561
  :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
484
562
  :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
485
563
  :param int [limit]: max number of deposit/withdrawals to return, default is None
@@ -487,7 +565,7 @@ class coinmate(Exchange, ImplicitAPI):
487
565
  :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
488
566
  """
489
567
  self.load_markets()
490
- request = {
568
+ request: dict = {
491
569
  'limit': 1000,
492
570
  }
493
571
  if limit is not None:
@@ -501,8 +579,8 @@ class coinmate(Exchange, ImplicitAPI):
501
579
  items = response['data']
502
580
  return self.parse_transactions(items, None, since, limit)
503
581
 
504
- def parse_transaction_status(self, status):
505
- statuses = {
582
+ def parse_transaction_status(self, status: Str):
583
+ statuses: dict = {
506
584
  'COMPLETED': 'ok',
507
585
  'WAITING': 'pending',
508
586
  'SENT': 'pending',
@@ -513,7 +591,7 @@ class coinmate(Exchange, ImplicitAPI):
513
591
  }
514
592
  return self.safe_string(statuses, status, status)
515
593
 
516
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
594
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
517
595
  #
518
596
  # deposits
519
597
  #
@@ -584,15 +662,17 @@ class coinmate(Exchange, ImplicitAPI):
584
662
  },
585
663
  }
586
664
 
587
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
665
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
588
666
  """
589
667
  make a withdrawal
590
- :see: https://coinmate.docs.apiary.io/#reference/bitcoin-withdrawal-and-deposit/withdraw-bitcoins/post
591
- :see: https://coinmate.docs.apiary.io/#reference/litecoin-withdrawal-and-deposit/withdraw-litecoins/post
592
- :see: https://coinmate.docs.apiary.io/#reference/ethereum-withdrawal-and-deposit/withdraw-ethereum/post
593
- :see: https://coinmate.docs.apiary.io/#reference/ripple-withdrawal-and-deposit/withdraw-ripple/post
594
- :see: https://coinmate.docs.apiary.io/#reference/cardano-withdrawal-and-deposit/withdraw-cardano/post
595
- :see: https://coinmate.docs.apiary.io/#reference/solana-withdrawal-and-deposit/withdraw-solana/post
668
+
669
+ https://coinmate.docs.apiary.io/#reference/bitcoin-withdrawal-and-deposit/withdraw-bitcoins/post
670
+ https://coinmate.docs.apiary.io/#reference/litecoin-withdrawal-and-deposit/withdraw-litecoins/post
671
+ https://coinmate.docs.apiary.io/#reference/ethereum-withdrawal-and-deposit/withdraw-ethereum/post
672
+ https://coinmate.docs.apiary.io/#reference/ripple-withdrawal-and-deposit/withdraw-ripple/post
673
+ https://coinmate.docs.apiary.io/#reference/cardano-withdrawal-and-deposit/withdraw-cardano/post
674
+ https://coinmate.docs.apiary.io/#reference/solana-withdrawal-and-deposit/withdraw-solana/post
675
+
596
676
  :param str code: unified currency code
597
677
  :param float amount: the amount to withdraw
598
678
  :param str address: the address to withdraw to
@@ -610,7 +690,7 @@ class coinmate(Exchange, ImplicitAPI):
610
690
  if method is None:
611
691
  allowedCurrencies = list(methods.keys())
612
692
  raise ExchangeError(self.id + ' withdraw() only allows withdrawing the following currencies: ' + ', '.join(allowedCurrencies))
613
- request = {
693
+ request: dict = {
614
694
  'amount': self.currency_to_precision(code, amount),
615
695
  'address': address,
616
696
  }
@@ -641,7 +721,9 @@ class coinmate(Exchange, ImplicitAPI):
641
721
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
642
722
  """
643
723
  fetch all trades made by the user
644
- :see: https://coinmate.docs.apiary.io/#reference/trade-history/get-trade-history/post
724
+
725
+ https://coinmate.docs.apiary.io/#reference/trade-history/get-trade-history/post
726
+
645
727
  :param str symbol: unified market symbol
646
728
  :param int [since]: the earliest time in ms to fetch trades for
647
729
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -651,7 +733,7 @@ class coinmate(Exchange, ImplicitAPI):
651
733
  self.load_markets()
652
734
  if limit is None:
653
735
  limit = 1000
654
- request = {
736
+ request: dict = {
655
737
  'limit': limit,
656
738
  }
657
739
  if symbol is not None:
@@ -660,10 +742,10 @@ class coinmate(Exchange, ImplicitAPI):
660
742
  if since is not None:
661
743
  request['timestampFrom'] = since
662
744
  response = self.privatePostTradeHistory(self.extend(request, params))
663
- data = self.safe_value(response, 'data', [])
745
+ data = self.safe_list(response, 'data', [])
664
746
  return self.parse_trades(data, None, since, limit)
665
747
 
666
- def parse_trade(self, trade, market: Market = None) -> Trade:
748
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
667
749
  #
668
750
  # fetchMyTrades(private)
669
751
  #
@@ -728,7 +810,9 @@ class coinmate(Exchange, ImplicitAPI):
728
810
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
729
811
  """
730
812
  get the list of most recent trades for a particular symbol
731
- :see: https://coinmate.docs.apiary.io/#reference/transactions/transactions/get
813
+
814
+ https://coinmate.docs.apiary.io/#reference/transactions/transactions/get
815
+
732
816
  :param str symbol: unified symbol of the market to fetch trades for
733
817
  :param int [since]: timestamp in ms of the earliest trade to fetch
734
818
  :param int [limit]: the maximum amount of trades to fetch
@@ -737,7 +821,7 @@ class coinmate(Exchange, ImplicitAPI):
737
821
  """
738
822
  self.load_markets()
739
823
  market = self.market(symbol)
740
- request = {
824
+ request: dict = {
741
825
  'currencyPair': market['id'],
742
826
  'minutesIntoHistory': 10,
743
827
  }
@@ -758,20 +842,22 @@ class coinmate(Exchange, ImplicitAPI):
758
842
  # ]
759
843
  # }
760
844
  #
761
- data = self.safe_value(response, 'data', [])
845
+ data = self.safe_list(response, 'data', [])
762
846
  return self.parse_trades(data, market, since, limit)
763
847
 
764
- def fetch_trading_fee(self, symbol: str, params={}):
848
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
765
849
  """
766
850
  fetch the trading fees for a market
767
- :see: https://coinmate.docs.apiary.io/#reference/trader-fees/get-trading-fees/post
851
+
852
+ https://coinmate.docs.apiary.io/#reference/trader-fees/get-trading-fees/post
853
+
768
854
  :param str symbol: unified market symbol
769
855
  :param dict [params]: extra parameters specific to the exchange API endpoint
770
856
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
771
857
  """
772
858
  self.load_markets()
773
859
  market = self.market(symbol)
774
- request = {
860
+ request: dict = {
775
861
  'currencyPair': market['id'],
776
862
  }
777
863
  response = self.privatePostTraderFees(self.extend(request, params))
@@ -799,7 +885,9 @@ class coinmate(Exchange, ImplicitAPI):
799
885
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
800
886
  """
801
887
  fetch all unfilled currently open orders
802
- :see: https://coinmate.docs.apiary.io/#reference/order/get-open-orders/post
888
+
889
+ https://coinmate.docs.apiary.io/#reference/order/get-open-orders/post
890
+
803
891
  :param str symbol: unified market symbol
804
892
  :param int [since]: the earliest time in ms to fetch open orders for
805
893
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -807,13 +895,15 @@ class coinmate(Exchange, ImplicitAPI):
807
895
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
808
896
  """
809
897
  response = self.privatePostOpenOrders(self.extend({}, params))
810
- extension = {'status': 'open'}
898
+ extension: dict = {'status': 'open'}
811
899
  return self.parse_orders(response['data'], None, since, limit, extension)
812
900
 
813
901
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
814
902
  """
815
903
  fetches information on multiple orders made by the user
816
- :see: https://coinmate.docs.apiary.io/#reference/order/order-history/post
904
+
905
+ https://coinmate.docs.apiary.io/#reference/order/order-history/post
906
+
817
907
  :param str symbol: unified market symbol of the market orders were made in
818
908
  :param int [since]: the earliest time in ms to fetch orders for
819
909
  :param int [limit]: the maximum number of order structures to retrieve
@@ -824,7 +914,7 @@ class coinmate(Exchange, ImplicitAPI):
824
914
  raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
825
915
  self.load_markets()
826
916
  market = self.market(symbol)
827
- request = {
917
+ request: dict = {
828
918
  'currencyPair': market['id'],
829
919
  }
830
920
  # offset param that appears in other parts of the API doesn't appear to be supported here
@@ -833,8 +923,8 @@ class coinmate(Exchange, ImplicitAPI):
833
923
  response = self.privatePostOrderHistory(self.extend(request, params))
834
924
  return self.parse_orders(response['data'], market, since, limit)
835
925
 
836
- def parse_order_status(self, status):
837
- statuses = {
926
+ def parse_order_status(self, status: Str):
927
+ statuses: dict = {
838
928
  'FILLED': 'closed',
839
929
  'CANCELLED': 'canceled',
840
930
  'PARTIALLY_FILLED': 'open',
@@ -842,14 +932,14 @@ class coinmate(Exchange, ImplicitAPI):
842
932
  }
843
933
  return self.safe_string(statuses, status, status)
844
934
 
845
- def parse_order_type(self, type):
846
- types = {
935
+ def parse_order_type(self, type: Str):
936
+ types: dict = {
847
937
  'LIMIT': 'limit',
848
938
  'MARKET': 'market',
849
939
  }
850
940
  return self.safe_string(types, type, type)
851
941
 
852
- def parse_order(self, order, market: Market = None) -> Order:
942
+ def parse_order(self, order: dict, market: Market = None) -> Order:
853
943
  #
854
944
  # limit sell
855
945
  #
@@ -892,6 +982,13 @@ class coinmate(Exchange, ImplicitAPI):
892
982
  # "trailing": False,
893
983
  # }
894
984
  #
985
+ # cancelOrder
986
+ #
987
+ # {
988
+ # "success": True,
989
+ # "remainingAmount": 0.1
990
+ # }
991
+ #
895
992
  id = self.safe_string(order, 'id')
896
993
  timestamp = self.safe_integer(order, 'timestamp')
897
994
  side = self.safe_string_lower(order, 'type')
@@ -904,7 +1001,6 @@ class coinmate(Exchange, ImplicitAPI):
904
1001
  marketId = self.safe_string(order, 'currencyPair')
905
1002
  symbol = self.safe_symbol(marketId, market, '_')
906
1003
  clientOrderId = self.safe_string(order, 'clientOrderId')
907
- stopPrice = self.safe_number(order, 'stopPrice')
908
1004
  return self.safe_order({
909
1005
  'id': id,
910
1006
  'clientOrderId': clientOrderId,
@@ -917,8 +1013,7 @@ class coinmate(Exchange, ImplicitAPI):
917
1013
  'postOnly': None,
918
1014
  'side': side,
919
1015
  'price': priceString,
920
- 'stopPrice': stopPrice,
921
- 'triggerPrice': stopPrice,
1016
+ 'triggerPrice': self.safe_number(order, 'stopPrice'),
922
1017
  'amount': amountString,
923
1018
  'cost': None,
924
1019
  'average': averageString,
@@ -933,22 +1028,24 @@ class coinmate(Exchange, ImplicitAPI):
933
1028
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
934
1029
  """
935
1030
  create a trade order
936
- :see: https://coinmate.docs.apiary.io/#reference/order/buy-limit-order/post
937
- :see: https://coinmate.docs.apiary.io/#reference/order/sell-limit-order/post
938
- :see: https://coinmate.docs.apiary.io/#reference/order/buy-instant-order/post
939
- :see: https://coinmate.docs.apiary.io/#reference/order/sell-instant-order/post
1031
+
1032
+ https://coinmate.docs.apiary.io/#reference/order/buy-limit-order/post
1033
+ https://coinmate.docs.apiary.io/#reference/order/sell-limit-order/post
1034
+ https://coinmate.docs.apiary.io/#reference/order/buy-instant-order/post
1035
+ https://coinmate.docs.apiary.io/#reference/order/sell-instant-order/post
1036
+
940
1037
  :param str symbol: unified symbol of the market to create an order in
941
1038
  :param str type: 'market' or 'limit'
942
1039
  :param str side: 'buy' or 'sell'
943
1040
  :param float amount: how much of currency you want to trade in units of base currency
944
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1041
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
945
1042
  :param dict [params]: extra parameters specific to the exchange API endpoint
946
1043
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
947
1044
  """
948
1045
  self.load_markets()
949
1046
  method = 'privatePost' + self.capitalize(side)
950
1047
  market = self.market(symbol)
951
- request = {
1048
+ request: dict = {
952
1049
  'currencyPair': market['id'],
953
1050
  }
954
1051
  if type == 'market':
@@ -971,38 +1068,52 @@ class coinmate(Exchange, ImplicitAPI):
971
1068
  def fetch_order(self, id: str, symbol: Str = None, params={}):
972
1069
  """
973
1070
  fetches information on an order made by the user
974
- :see: https://coinmate.docs.apiary.io/#reference/order/get-order-by-orderid/post
975
- :see: https://coinmate.docs.apiary.io/#reference/order/get-order-by-clientorderid/post
1071
+
1072
+ https://coinmate.docs.apiary.io/#reference/order/get-order-by-orderid/post
1073
+ https://coinmate.docs.apiary.io/#reference/order/get-order-by-clientorderid/post
1074
+
1075
+ :param str id: order id
976
1076
  :param str symbol: unified symbol of the market the order was made in
977
1077
  :param dict [params]: extra parameters specific to the exchange API endpoint
978
1078
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
979
1079
  """
980
1080
  self.load_markets()
981
- request = {
1081
+ request: dict = {
982
1082
  'orderId': id,
983
1083
  }
984
1084
  market = None
985
1085
  if symbol:
986
1086
  market = self.market(symbol)
987
1087
  response = self.privatePostOrderById(self.extend(request, params))
988
- data = self.safe_value(response, 'data')
1088
+ data = self.safe_dict(response, 'data')
989
1089
  return self.parse_order(data, market)
990
1090
 
991
1091
  def cancel_order(self, id: str, symbol: Str = None, params={}):
992
1092
  """
993
1093
  cancels an open order
994
- :see: https://coinmate.docs.apiary.io/#reference/order/cancel-order/post
1094
+
1095
+ https://coinmate.docs.apiary.io/#reference/order/cancel-order/post
1096
+
995
1097
  :param str id: order id
996
1098
  :param str symbol: not used by coinmate cancelOrder()
997
1099
  :param dict [params]: extra parameters specific to the exchange API endpoint
998
1100
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
999
1101
  """
1000
1102
  # {"error":false,"errorMessage":null,"data":{"success":true,"remainingAmount":0.01}}
1001
- request = {'orderId': id}
1103
+ request: dict = {'orderId': id}
1002
1104
  response = self.privatePostCancelOrderWithInfo(self.extend(request, params))
1003
- return {
1004
- 'info': response,
1005
- }
1105
+ #
1106
+ # {
1107
+ # "error": False,
1108
+ # "errorMessage": null,
1109
+ # "data": {
1110
+ # "success": True,
1111
+ # "remainingAmount": 0.1
1112
+ # }
1113
+ # }
1114
+ #
1115
+ data = self.safe_dict(response, 'data')
1116
+ return self.parse_order(data)
1006
1117
 
1007
1118
  def nonce(self):
1008
1119
  return self.milliseconds()
@@ -1028,21 +1139,17 @@ class coinmate(Exchange, ImplicitAPI):
1028
1139
  }
1029
1140
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1030
1141
 
1031
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1032
- if response is not None:
1033
- if 'error' in response:
1034
- # {"error":true,"errorMessage":"Minimum Order Size 0.01 ETH","data":null}
1035
- if response['error']:
1036
- message = self.safe_string(response, 'errorMessage')
1037
- feedback = self.id + ' ' + message
1038
- self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1039
- self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
1040
- raise ExchangeError(self.id + ' ' + self.json(response))
1041
- if code > 400:
1042
- if body:
1043
- feedback = self.id + ' ' + body
1044
- self.throw_exactly_matched_exception(self.exceptions['exact'], body, feedback)
1045
- self.throw_broadly_matched_exception(self.exceptions['broad'], body, feedback)
1046
- raise ExchangeError(feedback) # unknown message
1047
- raise ExchangeError(self.id + ' ' + body)
1142
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1143
+ if response is None:
1144
+ return None # fallback to default error handler
1145
+ #
1146
+ # {"error":true,"errorMessage":"Api internal error","data":null}
1147
+ # {"error":true,"errorMessage":"Access denied.","data":null}
1148
+ #
1149
+ errorMessage = self.safe_string(response, 'errorMessage')
1150
+ if errorMessage is not None:
1151
+ feedback = self.id + ' ' + body
1152
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorMessage, feedback)
1153
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errorMessage, feedback)
1154
+ raise ExchangeError(feedback) # unknown message
1048
1155
  return None