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