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/bithumb.py CHANGED
@@ -6,16 +6,16 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.bithumb 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, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, 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 PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import InvalidAddress
16
17
  from ccxt.base.errors import InvalidOrder
17
18
  from ccxt.base.errors import ExchangeNotAvailable
18
- from ccxt.base.errors import AuthenticationError
19
19
  from ccxt.base.decimal_to_precision import TRUNCATE
20
20
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
21
21
  from ccxt.base.decimal_to_precision import SIGNIFICANT_DIGITS
@@ -30,6 +30,7 @@ class bithumb(Exchange, ImplicitAPI):
30
30
  'name': 'Bithumb',
31
31
  'countries': ['KR'], # South Korea
32
32
  'rateLimit': 500,
33
+ 'pro': True,
33
34
  'has': {
34
35
  'CORS': True,
35
36
  'spot': True,
@@ -65,7 +66,11 @@ class bithumb(Exchange, ImplicitAPI):
65
66
  'fetchOrder': True,
66
67
  'fetchOrderBook': True,
67
68
  'fetchPosition': False,
69
+ 'fetchPositionHistory': False,
70
+ 'fetchPositionMode': False,
68
71
  'fetchPositions': False,
72
+ 'fetchPositionsForSymbol': False,
73
+ 'fetchPositionsHistory': False,
69
74
  'fetchPositionsRisk': False,
70
75
  'fetchPremiumIndexOHLCV': False,
71
76
  'fetchTicker': True,
@@ -82,7 +87,7 @@ class bithumb(Exchange, ImplicitAPI):
82
87
  },
83
88
  'hostname': 'bithumb.com',
84
89
  'urls': {
85
- 'logo': 'https://user-images.githubusercontent.com/1294454/30597177-ea800172-9d5e-11e7-804c-b9d4fa9b56b0.jpg',
90
+ 'logo': 'https://github.com/user-attachments/assets/c9e0eefb-4777-46b9-8f09-9d7f7c4af82d',
86
91
  'api': {
87
92
  'public': 'https://api.{hostname}/public',
88
93
  'private': 'https://api.{hostname}',
@@ -136,6 +141,60 @@ class bithumb(Exchange, ImplicitAPI):
136
141
  },
137
142
  },
138
143
  'precisionMode': SIGNIFICANT_DIGITS,
144
+ # todo: update to v2 apis
145
+ 'features': {
146
+ 'spot': {
147
+ 'sandbox': False,
148
+ 'createOrder': {
149
+ 'marginMode': False,
150
+ 'triggerPrice': False,
151
+ 'triggerPriceType': None,
152
+ 'triggerDirection': False,
153
+ 'stopLossPrice': False,
154
+ 'takeProfitPrice': False,
155
+ 'attachedStopLossTakeProfit': None,
156
+ 'timeInForce': {
157
+ 'IOC': False,
158
+ 'FOK': False,
159
+ 'PO': False,
160
+ 'GTD': False,
161
+ },
162
+ 'hedged': False,
163
+ 'trailing': False,
164
+ 'leverage': False,
165
+ 'marketBuyRequiresPrice': False,
166
+ 'marketBuyByCost': False,
167
+ 'selfTradePrevention': False,
168
+ 'iceberg': False,
169
+ },
170
+ 'createOrders': None,
171
+ 'fetchMyTrades': None,
172
+ 'fetchOrder': {
173
+ 'marginMode': False,
174
+ 'trigger': False,
175
+ 'trailing': False,
176
+ },
177
+ 'fetchOpenOrders': {
178
+ 'marginMode': False,
179
+ 'limit': 1000,
180
+ 'trigger': False,
181
+ 'trailing': False,
182
+ },
183
+ 'fetchOrders': None,
184
+ 'fetchClosedOrders': None,
185
+ 'fetchOHLCV': {
186
+ 'limit': 1000,
187
+ },
188
+ },
189
+ 'swap': {
190
+ 'linear': None,
191
+ 'inverse': None,
192
+ },
193
+ 'future': {
194
+ 'linear': None,
195
+ 'inverse': None,
196
+ },
197
+ },
139
198
  'exceptions': {
140
199
  'Bad Request(SSL)': BadRequest,
141
200
  'Bad Request(Bad Method)': BadRequest,
@@ -189,7 +248,7 @@ class bithumb(Exchange, ImplicitAPI):
189
248
  },
190
249
  })
191
250
 
192
- def safe_market(self, marketId=None, market=None, delimiter=None, marketType=None):
251
+ def safe_market(self, marketId: Str = None, market: Market = None, delimiter: Str = None, marketType: Str = None) -> MarketInterface:
193
252
  # bithumb has a different type of conflict in markets, because
194
253
  # their ids are the base currency(BTC for instance), so we can have
195
254
  # multiple "BTC" ids representing the different markets(BTC/ETH, "BTC/DOGE", etc)
@@ -199,25 +258,66 @@ class bithumb(Exchange, ImplicitAPI):
199
258
  def amount_to_precision(self, symbol, amount):
200
259
  return self.decimal_to_precision(amount, TRUNCATE, self.markets[symbol]['precision']['amount'], DECIMAL_PLACES)
201
260
 
202
- def fetch_markets(self, params={}):
261
+ def fetch_markets(self, params={}) -> List[Market]:
203
262
  """
204
263
  retrieves data on all markets for bithumb
205
- :see: https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
264
+
265
+ https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
266
+
206
267
  :param dict [params]: extra parameters specific to the exchange API endpoint
207
268
  :returns dict[]: an array of objects representing market data
208
269
  """
209
270
  result = []
210
- quoteCurrencies = self.safe_value(self.options, 'quoteCurrencies', {})
271
+ quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
211
272
  quotes = list(quoteCurrencies.keys())
273
+ promises = []
212
274
  for i in range(0, len(quotes)):
213
- quote = quotes[i]
214
- quoteId = quote
215
- extension = self.safe_value(quoteCurrencies, quote, {})
216
275
  request = {
217
- 'quoteId': quoteId,
276
+ 'quoteId': quotes[i],
218
277
  }
219
- response = self.publicGetTickerALLQuoteId(self.extend(request, params))
220
- data = self.safe_value(response, 'data')
278
+ promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
279
+ #
280
+ # {
281
+ # "status": "0000",
282
+ # "data": {
283
+ # "ETH": {
284
+ # "opening_price": "0.05153399",
285
+ # "closing_price": "0.05145144",
286
+ # "min_price": "0.05145144",
287
+ # "max_price": "0.05160781",
288
+ # "units_traded": "6.541124172077830855",
289
+ # "acc_trade_value": "0.33705472498492329997697755",
290
+ # "prev_closing_price": "0.0515943",
291
+ # "units_traded_24H": "43.368879902677400513",
292
+ # "acc_trade_value_24H": "2.24165339555398079994373342",
293
+ # "fluctate_24H": "-0.00018203",
294
+ # "fluctate_rate_24H": "-0.35"
295
+ # },
296
+ # "XRP": {
297
+ # "opening_price": "0.00000918",
298
+ # "closing_price": "0.0000092",
299
+ # "min_price": "0.00000918",
300
+ # "max_price": "0.0000092",
301
+ # "units_traded": "6516.949363",
302
+ # "acc_trade_value": "0.0598792533602796",
303
+ # "prev_closing_price": "0.00000916",
304
+ # "units_traded_24H": "229161.50354738",
305
+ # "acc_trade_value_24H": "2.0446589371637117",
306
+ # "fluctate_24H": "0.00000049",
307
+ # "fluctate_rate_24H": "5.63"
308
+ # },
309
+ # ...
310
+ # "date": "1721675913145"
311
+ # }
312
+ # }
313
+ #
314
+ results = promises
315
+ for i in range(0, len(quotes)):
316
+ quote = quotes[i]
317
+ quoteId = quote
318
+ response = results[i]
319
+ data = self.safe_dict(response, 'data')
320
+ extension = self.safe_dict(quoteCurrencies, quote, {})
221
321
  currencyIds = list(data.keys())
222
322
  for j in range(0, len(currencyIds)):
223
323
  currencyId = currencyIds[j]
@@ -280,8 +380,8 @@ class bithumb(Exchange, ImplicitAPI):
280
380
  return result
281
381
 
282
382
  def parse_balance(self, response) -> Balances:
283
- result = {'info': response}
284
- balances = self.safe_value(response, 'data')
383
+ result: dict = {'info': response}
384
+ balances = self.safe_dict(response, 'data')
285
385
  codes = list(self.currencies.keys())
286
386
  for i in range(0, len(codes)):
287
387
  code = codes[i]
@@ -297,12 +397,14 @@ class bithumb(Exchange, ImplicitAPI):
297
397
  def fetch_balance(self, params={}) -> Balances:
298
398
  """
299
399
  query for balance and get the amount of funds available for trading or funds locked in orders
300
- :see: https://apidocs.bithumb.com/reference/%EB%B3%B4%EC%9C%A0%EC%9E%90%EC%82%B0-%EC%A1%B0%ED%9A%8C
400
+
401
+ https://apidocs.bithumb.com/v1.2.0/reference/%EB%B3%B4%EC%9C%A0%EC%9E%90%EC%82%B0-%EC%A1%B0%ED%9A%8C
402
+
301
403
  :param dict [params]: extra parameters specific to the exchange API endpoint
302
404
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
303
405
  """
304
406
  self.load_markets()
305
- request = {
407
+ request: dict = {
306
408
  'currency': 'ALL',
307
409
  }
308
410
  response = self.privatePostInfoBalance(self.extend(request, params))
@@ -311,7 +413,9 @@ class bithumb(Exchange, ImplicitAPI):
311
413
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
312
414
  """
313
415
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
314
- :see: https://apidocs.bithumb.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
416
+
417
+ https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
418
+
315
419
  :param str symbol: unified symbol of the market to fetch the order book for
316
420
  :param int [limit]: the maximum amount of order book entries to return
317
421
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -319,7 +423,7 @@ class bithumb(Exchange, ImplicitAPI):
319
423
  """
320
424
  self.load_markets()
321
425
  market = self.market(symbol)
322
- request = {
426
+ request: dict = {
323
427
  'baseId': market['baseId'],
324
428
  'quoteId': market['quoteId'],
325
429
  }
@@ -346,11 +450,11 @@ class bithumb(Exchange, ImplicitAPI):
346
450
  # }
347
451
  # }
348
452
  #
349
- data = self.safe_value(response, 'data', {})
453
+ data = self.safe_dict(response, 'data', {})
350
454
  timestamp = self.safe_integer(data, 'timestamp')
351
455
  return self.parse_order_book(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity')
352
456
 
353
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
457
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
354
458
  #
355
459
  # fetchTicker, fetchTickers
356
460
  #
@@ -401,22 +505,27 @@ class bithumb(Exchange, ImplicitAPI):
401
505
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
402
506
  """
403
507
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
404
- :see: https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
508
+
509
+ https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
510
+
405
511
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
406
512
  :param dict [params]: extra parameters specific to the exchange API endpoint
407
513
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
408
514
  """
409
515
  self.load_markets()
410
- result = {}
411
- quoteCurrencies = self.safe_value(self.options, 'quoteCurrencies', {})
516
+ result: dict = {}
517
+ quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
412
518
  quotes = list(quoteCurrencies.keys())
519
+ promises = []
413
520
  for i in range(0, len(quotes)):
414
- quote = quotes[i]
415
- quoteId = quote
416
- request = {
417
- 'quoteId': quoteId,
521
+ request: dict = {
522
+ 'quoteId': quotes[i],
418
523
  }
419
- response = self.publicGetTickerALLQuoteId(self.extend(request, params))
524
+ promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
525
+ responses = promises
526
+ for i in range(0, len(quotes)):
527
+ quote = quotes[i]
528
+ response = responses[i]
420
529
  #
421
530
  # {
422
531
  # "status":"0000",
@@ -438,7 +547,7 @@ class bithumb(Exchange, ImplicitAPI):
438
547
  # }
439
548
  # }
440
549
  #
441
- data = self.safe_value(response, 'data', {})
550
+ data = self.safe_dict(response, 'data', {})
442
551
  timestamp = self.safe_integer(data, 'date')
443
552
  tickers = self.omit(data, 'date')
444
553
  currencyIds = list(tickers.keys())
@@ -455,14 +564,16 @@ class bithumb(Exchange, ImplicitAPI):
455
564
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
456
565
  """
457
566
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
458
- :see: https://apidocs.bithumb.com/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
567
+
568
+ https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
569
+
459
570
  :param str symbol: unified symbol of the market to fetch the ticker for
460
571
  :param dict [params]: extra parameters specific to the exchange API endpoint
461
572
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
462
573
  """
463
574
  self.load_markets()
464
575
  market = self.market(symbol)
465
- request = {
576
+ request: dict = {
466
577
  'baseId': market['baseId'],
467
578
  'quoteId': market['quoteId'],
468
579
  }
@@ -486,7 +597,7 @@ class bithumb(Exchange, ImplicitAPI):
486
597
  # }
487
598
  # }
488
599
  #
489
- data = self.safe_value(response, 'data', {})
600
+ data = self.safe_dict(response, 'data', {})
490
601
  return self.parse_ticker(data, market)
491
602
 
492
603
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -512,7 +623,9 @@ class bithumb(Exchange, ImplicitAPI):
512
623
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
513
624
  """
514
625
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
515
- :see: https://apidocs.bithumb.com/reference/candlestick-rest-api
626
+
627
+ https://apidocs.bithumb.com/v1.2.0/reference/candlestick-rest-api
628
+
516
629
  :param str symbol: unified symbol of the market to fetch OHLCV data for
517
630
  :param str timeframe: the length of time each candle represents
518
631
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -522,7 +635,7 @@ class bithumb(Exchange, ImplicitAPI):
522
635
  """
523
636
  self.load_markets()
524
637
  market = self.market(symbol)
525
- request = {
638
+ request: dict = {
526
639
  'baseId': market['baseId'],
527
640
  'quoteId': market['quoteId'],
528
641
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
@@ -551,10 +664,10 @@ class bithumb(Exchange, ImplicitAPI):
551
664
  # }
552
665
  # }
553
666
  #
554
- data = self.safe_value(response, 'data', [])
667
+ data = self.safe_list(response, 'data', [])
555
668
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
556
669
 
557
- def parse_trade(self, trade, market: Market = None) -> Trade:
670
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
558
671
  #
559
672
  # fetchTrades(public)
560
673
  #
@@ -629,7 +742,9 @@ class bithumb(Exchange, ImplicitAPI):
629
742
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
630
743
  """
631
744
  get the list of most recent trades for a particular symbol
632
- :see: https://apidocs.bithumb.com/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
745
+
746
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
747
+
633
748
  :param str symbol: unified symbol of the market to fetch trades for
634
749
  :param int [since]: timestamp in ms of the earliest trade to fetch
635
750
  :param int [limit]: the maximum amount of trades to fetch
@@ -638,7 +753,7 @@ class bithumb(Exchange, ImplicitAPI):
638
753
  """
639
754
  self.load_markets()
640
755
  market = self.market(symbol)
641
- request = {
756
+ request: dict = {
642
757
  'baseId': market['baseId'],
643
758
  'quoteId': market['quoteId'],
644
759
  }
@@ -659,26 +774,28 @@ class bithumb(Exchange, ImplicitAPI):
659
774
  # ]
660
775
  # }
661
776
  #
662
- data = self.safe_value(response, 'data', [])
777
+ data = self.safe_list(response, 'data', [])
663
778
  return self.parse_trades(data, market, since, limit)
664
779
 
665
780
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
666
781
  """
667
782
  create a trade order
668
- :see: https://apidocs.bithumb.com/reference/%EC%A7%80%EC%A0%95%EA%B0%80-%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
669
- :see: https://apidocs.bithumb.com/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EC%88%98%ED%95%98%EA%B8%B0
670
- :see: https://apidocs.bithumb.com/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EB%8F%84%ED%95%98%EA%B8%B0
783
+
784
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%A7%80%EC%A0%95%EA%B0%80-%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
785
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EC%88%98%ED%95%98%EA%B8%B0
786
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EB%8F%84%ED%95%98%EA%B8%B0
787
+
671
788
  :param str symbol: unified symbol of the market to create an order in
672
789
  :param str type: 'market' or 'limit'
673
790
  :param str side: 'buy' or 'sell'
674
791
  :param float amount: how much of currency you want to trade in units of base currency
675
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
792
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
676
793
  :param dict [params]: extra parameters specific to the exchange API endpoint
677
794
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
678
795
  """
679
796
  self.load_markets()
680
797
  market = self.market(symbol)
681
- request = {
798
+ request: dict = {
682
799
  'order_currency': market['id'],
683
800
  'payment_currency': market['quote'],
684
801
  'units': amount,
@@ -704,7 +821,10 @@ class bithumb(Exchange, ImplicitAPI):
704
821
  def fetch_order(self, id: str, symbol: Str = None, params={}):
705
822
  """
706
823
  fetches information on an order made by the user
707
- :see: https://apidocs.bithumb.com/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%83%81%EC%84%B8-%EC%A1%B0%ED%9A%8C
824
+
825
+ https://apidocs.bithumb.com/v1.2.0/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%83%81%EC%84%B8-%EC%A1%B0%ED%9A%8C
826
+
827
+ :param str id: order id
708
828
  :param str symbol: unified symbol of the market the order was made in
709
829
  :param dict [params]: extra parameters specific to the exchange API endpoint
710
830
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -713,7 +833,7 @@ class bithumb(Exchange, ImplicitAPI):
713
833
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
714
834
  self.load_markets()
715
835
  market = self.market(symbol)
716
- request = {
836
+ request: dict = {
717
837
  'order_id': id,
718
838
  'count': 1,
719
839
  'order_currency': market['base'],
@@ -747,18 +867,18 @@ class bithumb(Exchange, ImplicitAPI):
747
867
  # }
748
868
  # }
749
869
  #
750
- data = self.safe_value(response, 'data')
870
+ data = self.safe_dict(response, 'data')
751
871
  return self.parse_order(self.extend(data, {'order_id': id}), market)
752
872
 
753
- def parse_order_status(self, status):
754
- statuses = {
873
+ def parse_order_status(self, status: Str):
874
+ statuses: dict = {
755
875
  'Pending': 'open',
756
876
  'Completed': 'closed',
757
877
  'Cancel': 'canceled',
758
878
  }
759
879
  return self.safe_string(statuses, status, status)
760
880
 
761
- def parse_order(self, order, market: Market = None) -> Order:
881
+ def parse_order(self, order: dict, market: Market = None) -> Order:
762
882
  #
763
883
  #
764
884
  # fetchOrder
@@ -800,7 +920,7 @@ class bithumb(Exchange, ImplicitAPI):
800
920
  # }
801
921
  #
802
922
  timestamp = self.safe_integer_product(order, 'order_date', 0.001)
803
- sideProperty = self.safe_value_2(order, 'type', 'side')
923
+ sideProperty = self.safe_string_2(order, 'type', 'side')
804
924
  side = 'buy' if (sideProperty == 'bid') else 'sell'
805
925
  status = self.parse_order_status(self.safe_string(order, 'order_status'))
806
926
  price = self.safe_string_2(order, 'order_price', 'price')
@@ -825,7 +945,7 @@ class bithumb(Exchange, ImplicitAPI):
825
945
  market = self.safe_market(None, market)
826
946
  symbol = market['symbol']
827
947
  id = self.safe_string(order, 'order_id')
828
- rawTrades = self.safe_value(order, 'contract', [])
948
+ rawTrades = self.safe_list(order, 'contract', [])
829
949
  return self.safe_order({
830
950
  'info': order,
831
951
  'id': id,
@@ -839,7 +959,6 @@ class bithumb(Exchange, ImplicitAPI):
839
959
  'postOnly': None,
840
960
  'side': side,
841
961
  'price': price,
842
- 'stopPrice': None,
843
962
  'triggerPrice': None,
844
963
  'amount': amount,
845
964
  'cost': None,
@@ -854,7 +973,9 @@ class bithumb(Exchange, ImplicitAPI):
854
973
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
855
974
  """
856
975
  fetch all unfilled currently open orders
857
- :see: https://apidocs.bithumb.com/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%A1%B0%ED%9A%8C
976
+
977
+ https://apidocs.bithumb.com/v1.2.0/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%A1%B0%ED%9A%8C
978
+
858
979
  :param str symbol: unified market symbol
859
980
  :param int [since]: the earliest time in ms to fetch open orders for
860
981
  :param int [limit]: the maximum number of open order structures to retrieve
@@ -867,7 +988,7 @@ class bithumb(Exchange, ImplicitAPI):
867
988
  market = self.market(symbol)
868
989
  if limit is None:
869
990
  limit = 100
870
- request = {
991
+ request: dict = {
871
992
  'count': limit,
872
993
  'order_currency': market['base'],
873
994
  'payment_currency': market['quote'],
@@ -892,13 +1013,15 @@ class bithumb(Exchange, ImplicitAPI):
892
1013
  # ]
893
1014
  # }
894
1015
  #
895
- data = self.safe_value(response, 'data', [])
1016
+ data = self.safe_list(response, 'data', [])
896
1017
  return self.parse_orders(data, market, since, limit)
897
1018
 
898
1019
  def cancel_order(self, id: str, symbol: Str = None, params={}):
899
1020
  """
900
1021
  cancels an open order
901
- :see: https://apidocs.bithumb.com/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0
1022
+
1023
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0
1024
+
902
1025
  :param str id: order id
903
1026
  :param str symbol: unified symbol of the market the order was made in
904
1027
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -913,24 +1036,34 @@ class bithumb(Exchange, ImplicitAPI):
913
1036
  side = 'bid' if (params['side'] == 'buy') else 'ask'
914
1037
  params = self.omit(params, ['side', 'currency'])
915
1038
  # https://github.com/ccxt/ccxt/issues/6771
916
- request = {
1039
+ request: dict = {
917
1040
  'order_id': id,
918
1041
  'type': side,
919
1042
  'order_currency': market['base'],
920
1043
  'payment_currency': market['quote'],
921
1044
  }
922
- return self.privatePostTradeCancel(self.extend(request, params))
1045
+ response = self.privatePostTradeCancel(self.extend(request, params))
1046
+ #
1047
+ # {
1048
+ # 'status': 'string',
1049
+ # }
1050
+ #
1051
+ return self.safe_order({
1052
+ 'info': response,
1053
+ })
923
1054
 
924
1055
  def cancel_unified_order(self, order, params={}):
925
- request = {
1056
+ request: dict = {
926
1057
  'side': order['side'],
927
1058
  }
928
1059
  return self.cancel_order(order['id'], order['symbol'], self.extend(request, params))
929
1060
 
930
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1061
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
931
1062
  """
932
1063
  make a withdrawal
933
- :see: https://apidocs.bithumb.com/reference/%EC%BD%94%EC%9D%B8-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0-%EA%B0%9C%EC%9D%B8
1064
+
1065
+ https://apidocs.bithumb.com/v1.2.0/reference/%EC%BD%94%EC%9D%B8-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0-%EA%B0%9C%EC%9D%B8
1066
+
934
1067
  :param str code: unified currency code
935
1068
  :param float amount: the amount to withdraw
936
1069
  :param str address: the address to withdraw to
@@ -942,12 +1075,12 @@ class bithumb(Exchange, ImplicitAPI):
942
1075
  self.check_address(address)
943
1076
  self.load_markets()
944
1077
  currency = self.currency(code)
945
- request = {
1078
+ request: dict = {
946
1079
  'units': amount,
947
1080
  'address': address,
948
1081
  'currency': currency['id'],
949
1082
  }
950
- if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM':
1083
+ if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM' or code == 'TON':
951
1084
  destination = self.safe_string(params, 'destination')
952
1085
  if (tag is None) and (destination is None):
953
1086
  raise ArgumentsRequired(self.id + ' ' + code + ' withdraw() requires a tag argument or an extra destination param')
@@ -959,7 +1092,7 @@ class bithumb(Exchange, ImplicitAPI):
959
1092
  #
960
1093
  return self.parse_transaction(response, currency)
961
1094
 
962
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1095
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
963
1096
  #
964
1097
  # withdraw
965
1098
  #
@@ -1026,7 +1159,7 @@ class bithumb(Exchange, ImplicitAPI):
1026
1159
  }
1027
1160
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1028
1161
 
1029
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1162
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1030
1163
  if response is None:
1031
1164
  return None # fallback to default error handler
1032
1165
  if 'status' in response: