ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -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 +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -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 +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -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 +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -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 +143 -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.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.49.dist-info}/top_level.txt +0 -0
@@ -5,17 +5,17 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.upbit import ImplicitAPI
8
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
8
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
+ from ccxt.base.errors import AuthenticationError
11
12
  from ccxt.base.errors import PermissionDenied
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
14
15
  from ccxt.base.errors import InsufficientFunds
16
+ from ccxt.base.errors import AddressPending
15
17
  from ccxt.base.errors import InvalidOrder
16
18
  from ccxt.base.errors import OrderNotFound
17
- from ccxt.base.errors import AuthenticationError
18
- from ccxt.base.errors import AddressPending
19
19
  from ccxt.base.decimal_to_precision import TICK_SIZE
20
20
  from ccxt.base.precise import Precise
21
21
 
@@ -51,6 +51,7 @@ class upbit(Exchange, ImplicitAPI):
51
51
  'fetchDeposit': True,
52
52
  'fetchDepositAddress': True,
53
53
  'fetchDepositAddresses': True,
54
+ 'fetchDepositAddressesByNetwork': False,
54
55
  'fetchDeposits': True,
55
56
  'fetchFundingHistory': False,
56
57
  'fetchFundingRate': False,
@@ -85,6 +86,7 @@ class upbit(Exchange, ImplicitAPI):
85
86
  '1m': 'minutes',
86
87
  '3m': 'minutes',
87
88
  '5m': 'minutes',
89
+ '10m': 'minutes',
88
90
  '15m': 'minutes',
89
91
  '30m': 'minutes',
90
92
  '1h': 'minutes',
@@ -114,6 +116,7 @@ class upbit(Exchange, ImplicitAPI):
114
116
  'candles/minutes/1',
115
117
  'candles/minutes/3',
116
118
  'candles/minutes/5',
119
+ 'candles/minutes/10',
117
120
  'candles/minutes/15',
118
121
  'candles/minutes/30',
119
122
  'candles/minutes/60',
@@ -132,6 +135,9 @@ class upbit(Exchange, ImplicitAPI):
132
135
  'orders/chance',
133
136
  'order',
134
137
  'orders',
138
+ 'orders/closed',
139
+ 'orders/open',
140
+ 'orders/uuids',
135
141
  'withdraws',
136
142
  'withdraw',
137
143
  'withdraws/chance',
@@ -165,6 +171,67 @@ class upbit(Exchange, ImplicitAPI):
165
171
  'deposit': {},
166
172
  },
167
173
  },
174
+ 'features': {
175
+ 'spot': {
176
+ 'sandbox': False,
177
+ 'createOrder': {
178
+ 'marginMode': False,
179
+ 'triggerPrice': False,
180
+ 'triggerPriceType': None,
181
+ 'triggerDirection': False,
182
+ 'stopLossPrice': False,
183
+ 'takeProfitPrice': False,
184
+ 'attachedStopLossTakeProfit': None,
185
+ 'timeInForce': {
186
+ 'IOC': True,
187
+ 'FOK': True,
188
+ 'PO': False,
189
+ 'GTD': False,
190
+ },
191
+ 'hedged': False,
192
+ 'leverage': False,
193
+ 'marketBuyByCost': False,
194
+ 'marketBuyRequiresPrice': False,
195
+ 'selfTradePrevention': False,
196
+ 'trailing': False,
197
+ 'iceberg': False,
198
+ },
199
+ 'createOrders': None,
200
+ 'fetchMyTrades': None,
201
+ 'fetchOrder': {
202
+ 'marginMode': False,
203
+ 'trigger': False,
204
+ 'trailing': False,
205
+ },
206
+ 'fetchOpenOrders': {
207
+ 'marginMode': True,
208
+ 'limit': 100,
209
+ 'trigger': False,
210
+ 'trailing': False,
211
+ },
212
+ 'fetchOrders': None, # todo
213
+ 'fetchClosedOrders': {
214
+ 'marginMode': False,
215
+ 'limit': 1000,
216
+ 'daysBack': 100000,
217
+ 'daysBackCanceled': 1,
218
+ 'untilDays': 7,
219
+ 'trigger': False,
220
+ 'trailing': False,
221
+ },
222
+ 'fetchOHLCV': {
223
+ 'limit': 200,
224
+ },
225
+ },
226
+ 'swap': {
227
+ 'linear': None,
228
+ 'inverse': None,
229
+ },
230
+ 'future': {
231
+ 'linear': None,
232
+ 'inverse': None,
233
+ },
234
+ },
168
235
  'precisionMode': TICK_SIZE,
169
236
  'exceptions': {
170
237
  'exact': {
@@ -208,7 +275,7 @@ class upbit(Exchange, ImplicitAPI):
208
275
  async def fetch_currency_by_id(self, id: str, params={}):
209
276
  # self method is for retrieving funding fees and limits per currency
210
277
  # it requires private access and API keys properly set up
211
- request = {
278
+ request: dict = {
212
279
  'currency': id,
213
280
  }
214
281
  response = await self.privateGetWithdrawsChance(self.extend(request, params))
@@ -302,7 +369,7 @@ class upbit(Exchange, ImplicitAPI):
302
369
  async def fetch_market_by_id(self, id: str, params={}):
303
370
  # self method is for retrieving trading fees and limits per market
304
371
  # it requires private access and API keys properly set up
305
- request = {
372
+ request: dict = {
306
373
  'market': id,
307
374
  }
308
375
  response = await self.privateGetOrdersChance(self.extend(request, params))
@@ -401,9 +468,11 @@ class upbit(Exchange, ImplicitAPI):
401
468
  },
402
469
  })
403
470
 
404
- async def fetch_markets(self, params={}):
471
+ async def fetch_markets(self, params={}) -> List[Market]:
405
472
  """
406
- :see: https://docs.upbit.com/reference/%EB%A7%88%EC%BC%93-%EC%BD%94%EB%93%9C-%EC%A1%B0%ED%9A%8C
473
+
474
+ https://docs.upbit.com/reference/%EB%A7%88%EC%BC%93-%EC%BD%94%EB%93%9C-%EC%A1%B0%ED%9A%8C
475
+
407
476
  retrieves data on all markets for upbit
408
477
  :param dict [params]: extra parameters specific to the exchange API endpoint
409
478
  :returns dict[]: an array of objects representing market data
@@ -421,7 +490,7 @@ class upbit(Exchange, ImplicitAPI):
421
490
  #
422
491
  return self.parse_markets(response)
423
492
 
424
- def parse_market(self, market) -> Market:
493
+ def parse_market(self, market: dict) -> Market:
425
494
  id = self.safe_string(market, 'market')
426
495
  quoteId, baseId = id.split('-')
427
496
  base = self.safe_currency_code(baseId)
@@ -479,7 +548,7 @@ class upbit(Exchange, ImplicitAPI):
479
548
  })
480
549
 
481
550
  def parse_balance(self, response) -> Balances:
482
- result = {
551
+ result: dict = {
483
552
  'info': response,
484
553
  'timestamp': None,
485
554
  'datetime': None,
@@ -496,7 +565,9 @@ class upbit(Exchange, ImplicitAPI):
496
565
 
497
566
  async def fetch_balance(self, params={}) -> Balances:
498
567
  """
499
- :see: https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EA%B3%84%EC%A2%8C-%EC%A1%B0%ED%9A%8C
568
+
569
+ https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EA%B3%84%EC%A2%8C-%EC%A1%B0%ED%9A%8C
570
+
500
571
  query for balance and get the amount of funds available for trading or funds locked in orders
501
572
  :param dict [params]: extra parameters specific to the exchange API endpoint
502
573
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -519,7 +590,9 @@ class upbit(Exchange, ImplicitAPI):
519
590
 
520
591
  async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
521
592
  """
522
- :see: https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
593
+
594
+ https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
595
+
523
596
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
524
597
  :param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
525
598
  :param int [limit]: not used by upbit fetchOrderBooks()
@@ -537,7 +610,7 @@ class upbit(Exchange, ImplicitAPI):
537
610
  else:
538
611
  ids = self.market_ids(symbols)
539
612
  ids = ','.join(ids)
540
- request = {
613
+ request: dict = {
541
614
  'markets': ids,
542
615
  }
543
616
  response = await self.publicGetOrderbook(self.extend(request, params))
@@ -569,7 +642,7 @@ class upbit(Exchange, ImplicitAPI):
569
642
  # "ask_size": 2.752,
570
643
  # "bid_size": 0.4650305} ]} ]
571
644
  #
572
- result = {}
645
+ result: dict = {}
573
646
  for i in range(0, len(response)):
574
647
  orderbook = response[i]
575
648
  marketId = self.safe_string(orderbook, 'market')
@@ -587,7 +660,9 @@ class upbit(Exchange, ImplicitAPI):
587
660
 
588
661
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
589
662
  """
590
- :see: https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
663
+
664
+ https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
665
+
591
666
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
592
667
  :param str symbol: unified symbol of the market to fetch the order book for
593
668
  :param int [limit]: the maximum amount of order book entries to return
@@ -597,7 +672,7 @@ class upbit(Exchange, ImplicitAPI):
597
672
  orderbooks = await self.fetch_order_books([symbol], limit, params)
598
673
  return self.safe_value(orderbooks, symbol)
599
674
 
600
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
675
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
601
676
  #
602
677
  # { market: "BTC-ETH",
603
678
  # "trade_date": "20181122",
@@ -655,7 +730,9 @@ class upbit(Exchange, ImplicitAPI):
655
730
 
656
731
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
657
732
  """
658
- :see: https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
733
+
734
+ https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
735
+
659
736
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
660
737
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
661
738
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -673,7 +750,7 @@ class upbit(Exchange, ImplicitAPI):
673
750
  else:
674
751
  ids = self.market_ids(symbols)
675
752
  ids = ','.join(ids)
676
- request = {
753
+ request: dict = {
677
754
  'markets': ids,
678
755
  }
679
756
  response = await self.publicGetTicker(self.extend(request, params))
@@ -705,7 +782,7 @@ class upbit(Exchange, ImplicitAPI):
705
782
  # "lowest_52_week_date": "2017-12-08",
706
783
  # "timestamp": 1542883543813 }]
707
784
  #
708
- result = {}
785
+ result: dict = {}
709
786
  for t in range(0, len(response)):
710
787
  ticker = self.parse_ticker(response[t])
711
788
  symbol = ticker['symbol']
@@ -714,7 +791,9 @@ class upbit(Exchange, ImplicitAPI):
714
791
 
715
792
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
716
793
  """
717
- :see: https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
794
+
795
+ https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
796
+
718
797
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
719
798
  :param str symbol: unified symbol of the market to fetch the ticker for
720
799
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -723,7 +802,7 @@ class upbit(Exchange, ImplicitAPI):
723
802
  tickers = await self.fetch_tickers([symbol], params)
724
803
  return self.safe_value(tickers, symbol)
725
804
 
726
- def parse_trade(self, trade, market: Market = None) -> Trade:
805
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
727
806
  #
728
807
  # fetchTrades
729
808
  #
@@ -793,7 +872,9 @@ class upbit(Exchange, ImplicitAPI):
793
872
 
794
873
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
795
874
  """
796
- :see: https://docs.upbit.com/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
875
+
876
+ https://docs.upbit.com/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
877
+
797
878
  get the list of most recent trades for a particular symbol
798
879
  :param str symbol: unified symbol of the market to fetch trades for
799
880
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -805,7 +886,7 @@ class upbit(Exchange, ImplicitAPI):
805
886
  market = self.market(symbol)
806
887
  if limit is None:
807
888
  limit = 200
808
- request = {
889
+ request: dict = {
809
890
  'market': market['id'],
810
891
  'count': limit,
811
892
  }
@@ -834,9 +915,11 @@ class upbit(Exchange, ImplicitAPI):
834
915
  #
835
916
  return self.parse_trades(response, market, since, limit)
836
917
 
837
- async def fetch_trading_fee(self, symbol: str, params={}):
918
+ async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
838
919
  """
839
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EA%B0%80%EB%8A%A5-%EC%A0%95%EB%B3%B4
920
+
921
+ https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EA%B0%80%EB%8A%A5-%EC%A0%95%EB%B3%B4
922
+
840
923
  fetch the trading fees for a market
841
924
  :param str symbol: unified market symbol
842
925
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -844,7 +927,7 @@ class upbit(Exchange, ImplicitAPI):
844
927
  """
845
928
  await self.load_markets()
846
929
  market = self.market(symbol)
847
- request = {
930
+ request: dict = {
848
931
  'market': market['id'],
849
932
  }
850
933
  response = await self.privateGetOrdersChance(self.extend(request, params))
@@ -924,7 +1007,9 @@ class upbit(Exchange, ImplicitAPI):
924
1007
 
925
1008
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
926
1009
  """
927
- :see: https://docs.upbit.com/reference/%EB%B6%84minute-%EC%BA%94%EB%93%A4-1
1010
+
1011
+ https://docs.upbit.com/reference/%EB%B6%84minute-%EC%BA%94%EB%93%A4-1
1012
+
928
1013
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
929
1014
  :param str symbol: unified symbol of the market to fetch OHLCV data for
930
1015
  :param str timeframe: the length of time each candle represents
@@ -939,7 +1024,7 @@ class upbit(Exchange, ImplicitAPI):
939
1024
  timeframeValue = self.safe_string(self.timeframes, timeframe, timeframe)
940
1025
  if limit is None:
941
1026
  limit = 200
942
- request = {
1027
+ request: dict = {
943
1028
  'market': market['id'],
944
1029
  'timeframe': timeframeValue,
945
1030
  'count': limit,
@@ -989,13 +1074,15 @@ class upbit(Exchange, ImplicitAPI):
989
1074
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
990
1075
  """
991
1076
  create a trade order
992
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
993
- :see: https://global-docs.upbit.com/reference/order
1077
+
1078
+ https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
1079
+ https://global-docs.upbit.com/reference/order
1080
+
994
1081
  :param str symbol: unified symbol of the market to create an order in
995
1082
  :param str type: 'market' or 'limit'
996
1083
  :param str side: 'buy' or 'sell'
997
1084
  :param float amount: how much you want to trade in units of the base currency
998
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1085
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
999
1086
  :param dict [params]: extra parameters specific to the exchange API endpoint
1000
1087
  :param float [params.cost]: for market buy orders, the quote quantity that can be used alternative for the amount
1001
1088
  :param str [params.timeInForce]: 'IOC' or 'FOK'
@@ -1010,7 +1097,7 @@ class upbit(Exchange, ImplicitAPI):
1010
1097
  orderSide = 'ask'
1011
1098
  else:
1012
1099
  raise InvalidOrder(self.id + ' createOrder() allows buy or sell side only!')
1013
- request = {
1100
+ request: dict = {
1014
1101
  'market': market['id'],
1015
1102
  'side': orderSide,
1016
1103
  }
@@ -1074,7 +1161,9 @@ class upbit(Exchange, ImplicitAPI):
1074
1161
 
1075
1162
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1076
1163
  """
1077
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C
1164
+
1165
+ https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C
1166
+
1078
1167
  cancels an open order
1079
1168
  :param str id: order id
1080
1169
  :param str symbol: not used by upbit cancelOrder()
@@ -1082,7 +1171,7 @@ class upbit(Exchange, ImplicitAPI):
1082
1171
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1083
1172
  """
1084
1173
  await self.load_markets()
1085
- request = {
1174
+ request: dict = {
1086
1175
  'uuid': id,
1087
1176
  }
1088
1177
  response = await self.privateDeleteOrder(self.extend(request, params))
@@ -1109,7 +1198,9 @@ class upbit(Exchange, ImplicitAPI):
1109
1198
 
1110
1199
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1111
1200
  """
1112
- :see: https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1201
+
1202
+ https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1203
+
1113
1204
  fetch all deposits made to an account
1114
1205
  :param str code: unified currency code
1115
1206
  :param int [since]: the earliest time in ms to fetch deposits for
@@ -1118,7 +1209,7 @@ class upbit(Exchange, ImplicitAPI):
1118
1209
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1119
1210
  """
1120
1211
  await self.load_markets()
1121
- request = {
1212
+ request: dict = {
1122
1213
  # 'page': 1,
1123
1214
  # 'order_by': 'asc', # 'desc'
1124
1215
  }
@@ -1150,7 +1241,9 @@ class upbit(Exchange, ImplicitAPI):
1150
1241
  async def fetch_deposit(self, id: str, code: Str = None, params={}):
1151
1242
  """
1152
1243
  fetch information on a deposit
1153
- :see: https://global-docs.upbit.com/reference/individual-deposit-inquiry
1244
+
1245
+ https://global-docs.upbit.com/reference/individual-deposit-inquiry
1246
+
1154
1247
  :param str id: the unique id for the deposit
1155
1248
  :param str [code]: unified currency code of the currency deposited
1156
1249
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1158,7 +1251,7 @@ class upbit(Exchange, ImplicitAPI):
1158
1251
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1159
1252
  """
1160
1253
  await self.load_markets()
1161
- request = {
1254
+ request: dict = {
1162
1255
  'uuid': id,
1163
1256
  }
1164
1257
  currency = None
@@ -1185,7 +1278,9 @@ class upbit(Exchange, ImplicitAPI):
1185
1278
 
1186
1279
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1187
1280
  """
1188
- :see: https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%B6%9C%EA%B8%88-%EC%A1%B0%ED%9A%8C
1281
+
1282
+ https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%B6%9C%EA%B8%88-%EC%A1%B0%ED%9A%8C
1283
+
1189
1284
  fetch all withdrawals made from an account
1190
1285
  :param str code: unified currency code
1191
1286
  :param int [since]: the earliest time in ms to fetch withdrawals for
@@ -1194,7 +1289,7 @@ class upbit(Exchange, ImplicitAPI):
1194
1289
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1195
1290
  """
1196
1291
  await self.load_markets()
1197
- request = {
1292
+ request: dict = {
1198
1293
  # 'state': 'submitting', # 'submitted', 'almost_accepted', 'rejected', 'accepted', 'processing', 'done', 'canceled'
1199
1294
  }
1200
1295
  currency = None
@@ -1226,7 +1321,9 @@ class upbit(Exchange, ImplicitAPI):
1226
1321
  async def fetch_withdrawal(self, id: str, code: Str = None, params={}):
1227
1322
  """
1228
1323
  fetch data on a currency withdrawal via the withdrawal id
1229
- :see: https://global-docs.upbit.com/reference/individual-withdrawal-inquiry
1324
+
1325
+ https://global-docs.upbit.com/reference/individual-withdrawal-inquiry
1326
+
1230
1327
  :param str id: the unique id for the withdrawal
1231
1328
  :param str [code]: unified currency code of the currency withdrawn
1232
1329
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1234,7 +1331,7 @@ class upbit(Exchange, ImplicitAPI):
1234
1331
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1235
1332
  """
1236
1333
  await self.load_markets()
1237
- request = {
1334
+ request: dict = {
1238
1335
  'uuid': id,
1239
1336
  }
1240
1337
  currency = None
@@ -1259,8 +1356,8 @@ class upbit(Exchange, ImplicitAPI):
1259
1356
  #
1260
1357
  return self.parse_transaction(response, currency)
1261
1358
 
1262
- def parse_transaction_status(self, status):
1263
- statuses = {
1359
+ def parse_transaction_status(self, status: Str):
1360
+ statuses: dict = {
1264
1361
  'submitting': 'pending', # 처리 중
1265
1362
  'submitted': 'pending', # 처리 완료
1266
1363
  'almost_accepted': 'pending', # 출금대기중
@@ -1272,7 +1369,7 @@ class upbit(Exchange, ImplicitAPI):
1272
1369
  }
1273
1370
  return self.safe_string(statuses, status, status)
1274
1371
 
1275
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1372
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1276
1373
  #
1277
1374
  # fetchDeposits, fetchDeposit
1278
1375
  #
@@ -1338,15 +1435,15 @@ class upbit(Exchange, ImplicitAPI):
1338
1435
  },
1339
1436
  }
1340
1437
 
1341
- def parse_order_status(self, status):
1342
- statuses = {
1438
+ def parse_order_status(self, status: Str):
1439
+ statuses: dict = {
1343
1440
  'wait': 'open',
1344
1441
  'done': 'closed',
1345
1442
  'cancel': 'canceled',
1346
1443
  }
1347
1444
  return self.safe_string(statuses, status, status)
1348
1445
 
1349
- def parse_order(self, order, market: Market = None) -> Order:
1446
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1350
1447
  #
1351
1448
  # {
1352
1449
  # "uuid": "a08f09b1-1718-42e2-9358-f0e5e083d3ee",
@@ -1390,6 +1487,28 @@ class upbit(Exchange, ImplicitAPI):
1390
1487
  # ],
1391
1488
  # }
1392
1489
  #
1490
+ # fetchOpenOrders, fetchClosedOrders, fetchCanceledOrders
1491
+ #
1492
+ # {
1493
+ # "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1494
+ # "side": "ask",
1495
+ # "ord_type": "limit",
1496
+ # "price": "1.5",
1497
+ # "state": "wait",
1498
+ # "market": "SGD-XRP",
1499
+ # "created_at": "2024-06-05T09:37:10Z",
1500
+ # "volume": "10",
1501
+ # "remaining_volume": "10",
1502
+ # "reserved_fee": "0",
1503
+ # "remaining_fee": "0",
1504
+ # "paid_fee": "0",
1505
+ # "locked": "10",
1506
+ # "executed_volume": "0",
1507
+ # "executed_funds": "0",
1508
+ # "trades_count": 0,
1509
+ # "time_in_force": "ioc"
1510
+ # }
1511
+ #
1393
1512
  id = self.safe_string(order, 'uuid')
1394
1513
  side = self.safe_string(order, 'side')
1395
1514
  if side == 'bid':
@@ -1451,11 +1570,10 @@ class upbit(Exchange, ImplicitAPI):
1451
1570
  'lastTradeTimestamp': lastTradeTimestamp,
1452
1571
  'symbol': market['symbol'],
1453
1572
  'type': type,
1454
- 'timeInForce': None,
1573
+ 'timeInForce': self.safe_string_upper(order, 'time_in_force'),
1455
1574
  'postOnly': None,
1456
1575
  'side': side,
1457
1576
  'price': price,
1458
- 'stopPrice': None,
1459
1577
  'triggerPrice': None,
1460
1578
  'cost': self.parse_number(cost),
1461
1579
  'average': self.parse_number(average),
@@ -1467,88 +1585,169 @@ class upbit(Exchange, ImplicitAPI):
1467
1585
  'trades': trades,
1468
1586
  })
1469
1587
 
1470
- async def fetch_orders_by_state(self, state, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1588
+ async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1589
+ """
1590
+ fetch all unfilled currently open orders
1591
+
1592
+ https://global-docs.upbit.com/reference/open-order
1593
+
1594
+ :param str symbol: unified market symbol
1595
+ :param int [since]: the earliest time in ms to fetch open orders for
1596
+ :param int [limit]: the maximum number of open order structures to retrieve
1597
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1598
+ :param str [params.state]: default is 'wait', set to 'watch' for stop limit orders
1599
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1600
+ """
1471
1601
  await self.load_markets()
1472
- request = {
1473
- # 'market': self.market_id(symbol),
1474
- 'state': state,
1475
- # 'page': 1,
1476
- # 'order_by': 'asc',
1477
- }
1602
+ request: dict = {}
1478
1603
  market = None
1479
1604
  if symbol is not None:
1480
1605
  market = self.market(symbol)
1481
1606
  request['market'] = market['id']
1482
- response = await self.privateGetOrders(self.extend(request, params))
1607
+ if limit is not None:
1608
+ request['limit'] = limit
1609
+ response = await self.privateGetOrdersOpen(self.extend(request, params))
1483
1610
  #
1484
1611
  # [
1485
1612
  # {
1486
- # "uuid": "a08f09b1-1718-42e2-9358-f0e5e083d3ee",
1487
- # "side": "bid",
1613
+ # "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1614
+ # "side": "ask",
1488
1615
  # "ord_type": "limit",
1489
- # "price": "17417000.0",
1490
- # "state": "done",
1491
- # "market": "KRW-BTC",
1492
- # "created_at": "2018-04-05T14:09:14+09:00",
1493
- # "volume": "1.0",
1494
- # "remaining_volume": "0.0",
1495
- # "reserved_fee": "26125.5",
1496
- # "remaining_fee": "25974.0",
1497
- # "paid_fee": "151.5",
1498
- # "locked": "17341974.0",
1499
- # "executed_volume": "1.0",
1500
- # "trades_count":2
1501
- # },
1616
+ # "price": "1.5",
1617
+ # "state": "wait",
1618
+ # "market": "SGD-XRP",
1619
+ # "created_at": "2024-06-05T09:37:10Z",
1620
+ # "volume": "10",
1621
+ # "remaining_volume": "10",
1622
+ # "reserved_fee": "0",
1623
+ # "remaining_fee": "0",
1624
+ # "paid_fee": "0",
1625
+ # "locked": "10",
1626
+ # "executed_volume": "0",
1627
+ # "executed_funds": "0",
1628
+ # "trades_count": 0
1629
+ # }
1502
1630
  # ]
1503
1631
  #
1504
1632
  return self.parse_orders(response, market, since, limit)
1505
1633
 
1506
- async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1507
- """
1508
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1509
- fetch all unfilled currently open orders
1510
- :param str symbol: unified market symbol
1511
- :param int [since]: the earliest time in ms to fetch open orders for
1512
- :param int [limit]: the maximum number of open orders structures to retrieve
1513
- :param dict [params]: extra parameters specific to the exchange API endpoint
1514
- :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1515
- """
1516
- return await self.fetch_orders_by_state('wait', symbol, since, limit, params)
1517
-
1518
1634
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1519
1635
  """
1520
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1521
1636
  fetches information on multiple closed orders made by the user
1637
+
1638
+ https://global-docs.upbit.com/reference/closed-order
1639
+
1522
1640
  :param str symbol: unified market symbol of the market orders were made in
1523
1641
  :param int [since]: the earliest time in ms to fetch orders for
1524
1642
  :param int [limit]: the maximum number of order structures to retrieve
1525
1643
  :param dict [params]: extra parameters specific to the exchange API endpoint
1644
+ :param int [params.until]: timestamp in ms of the latest order
1526
1645
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1527
1646
  """
1528
- return await self.fetch_orders_by_state('done', symbol, since, limit, params)
1647
+ await self.load_markets()
1648
+ request: dict = {
1649
+ 'state': 'done',
1650
+ }
1651
+ market = None
1652
+ if symbol is not None:
1653
+ market = self.market(symbol)
1654
+ request['market'] = market['id']
1655
+ if since is not None:
1656
+ request['start_time'] = since
1657
+ if limit is not None:
1658
+ request['limit'] = limit
1659
+ request, params = self.handle_until_option('end_time', request, params)
1660
+ response = await self.privateGetOrdersClosed(self.extend(request, params))
1661
+ #
1662
+ # [
1663
+ # {
1664
+ # "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1665
+ # "side": "ask",
1666
+ # "ord_type": "limit",
1667
+ # "price": "1.5",
1668
+ # "state": "done",
1669
+ # "market": "SGD-XRP",
1670
+ # "created_at": "2024-06-05T09:37:10Z",
1671
+ # "volume": "10",
1672
+ # "remaining_volume": "10",
1673
+ # "reserved_fee": "0",
1674
+ # "remaining_fee": "0",
1675
+ # "paid_fee": "0",
1676
+ # "locked": "10",
1677
+ # "executed_volume": "0",
1678
+ # "executed_funds": "0",
1679
+ # "trades_count": 0,
1680
+ # "time_in_force": "ioc"
1681
+ # }
1682
+ # ]
1683
+ #
1684
+ return self.parse_orders(response, market, since, limit)
1529
1685
 
1530
1686
  async def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1531
1687
  """
1532
- :see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
1533
1688
  fetches information on multiple canceled orders made by the user
1689
+
1690
+ https://global-docs.upbit.com/reference/closed-order
1691
+
1534
1692
  :param str symbol: unified market symbol of the market orders were made in
1535
1693
  :param int [since]: timestamp in ms of the earliest order, default is None
1536
1694
  :param int [limit]: max number of orders to return, default is None
1537
1695
  :param dict [params]: extra parameters specific to the exchange API endpoint
1696
+ :param int [params.until]: timestamp in ms of the latest order
1538
1697
  :returns dict: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1539
1698
  """
1540
- return await self.fetch_orders_by_state('cancel', symbol, since, limit, params)
1699
+ await self.load_markets()
1700
+ request: dict = {
1701
+ 'state': 'cancel',
1702
+ }
1703
+ market = None
1704
+ if symbol is not None:
1705
+ market = self.market(symbol)
1706
+ request['market'] = market['id']
1707
+ if since is not None:
1708
+ request['start_time'] = since
1709
+ if limit is not None:
1710
+ request['limit'] = limit
1711
+ request, params = self.handle_until_option('end_time', request, params)
1712
+ response = await self.privateGetOrdersClosed(self.extend(request, params))
1713
+ #
1714
+ # [
1715
+ # {
1716
+ # "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
1717
+ # "side": "ask",
1718
+ # "ord_type": "limit",
1719
+ # "price": "1.5",
1720
+ # "state": "cancel",
1721
+ # "market": "SGD-XRP",
1722
+ # "created_at": "2024-06-05T09:37:10Z",
1723
+ # "volume": "10",
1724
+ # "remaining_volume": "10",
1725
+ # "reserved_fee": "0",
1726
+ # "remaining_fee": "0",
1727
+ # "paid_fee": "0",
1728
+ # "locked": "10",
1729
+ # "executed_volume": "0",
1730
+ # "executed_funds": "0",
1731
+ # "trades_count": 0,
1732
+ # "time_in_force": "ioc"
1733
+ # }
1734
+ # ]
1735
+ #
1736
+ return self.parse_orders(response, market, since, limit)
1541
1737
 
1542
1738
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1543
1739
  """
1544
- :see: https://docs.upbit.com/reference/%EA%B0%9C%EB%B3%84-%EC%A3%BC%EB%AC%B8-%EC%A1%B0%ED%9A%8C
1740
+
1741
+ https://docs.upbit.com/reference/%EA%B0%9C%EB%B3%84-%EC%A3%BC%EB%AC%B8-%EC%A1%B0%ED%9A%8C
1742
+
1545
1743
  fetches information on an order made by the user
1744
+ :param str id: order id
1546
1745
  :param str symbol: not used by upbit fetchOrder
1547
1746
  :param dict [params]: extra parameters specific to the exchange API endpoint
1548
1747
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1549
1748
  """
1550
1749
  await self.load_markets()
1551
- request = {
1750
+ request: dict = {
1552
1751
  'uuid': id,
1553
1752
  }
1554
1753
  response = await self.privateGetOrder(self.extend(request, params))
@@ -1597,9 +1796,11 @@ class upbit(Exchange, ImplicitAPI):
1597
1796
  #
1598
1797
  return self.parse_order(response)
1599
1798
 
1600
- async def fetch_deposit_addresses(self, codes: List[str] = None, params={}):
1799
+ async def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
1601
1800
  """
1602
- :see: https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
1801
+
1802
+ https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
1803
+
1603
1804
  fetch deposit addresses for multiple currencies and chain types
1604
1805
  :param str[]|None codes: list of unified currency codes, default is None
1605
1806
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1628,7 +1829,7 @@ class upbit(Exchange, ImplicitAPI):
1628
1829
  #
1629
1830
  return self.parse_deposit_addresses(response, codes)
1630
1831
 
1631
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1832
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1632
1833
  #
1633
1834
  # {
1634
1835
  # currency: 'XRP',
@@ -1644,16 +1845,18 @@ class upbit(Exchange, ImplicitAPI):
1644
1845
  networkId = self.safe_string(depositAddress, 'net_type')
1645
1846
  self.check_address(address)
1646
1847
  return {
1848
+ 'info': depositAddress,
1647
1849
  'currency': code,
1850
+ 'network': self.network_id_to_code(networkId),
1648
1851
  'address': address,
1649
1852
  'tag': tag,
1650
- 'network': self.network_id_to_code(networkId),
1651
- 'info': depositAddress,
1652
1853
  }
1653
1854
 
1654
- async def fetch_deposit_address(self, code: str, params={}):
1855
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1655
1856
  """
1656
- :see: https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
1857
+
1858
+ https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
1859
+
1657
1860
  fetch the deposit address for a currency associated with self account
1658
1861
  :param str code: unified currency code
1659
1862
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1682,7 +1885,9 @@ class upbit(Exchange, ImplicitAPI):
1682
1885
 
1683
1886
  async def create_deposit_address(self, code: str, params={}):
1684
1887
  """
1685
- :see: https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%83%9D%EC%84%B1-%EC%9A%94%EC%B2%AD
1888
+
1889
+ https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%83%9D%EC%84%B1-%EC%9A%94%EC%B2%AD
1890
+
1686
1891
  create a currency deposit address
1687
1892
  :param str code: unified currency code of the currency for the deposit address
1688
1893
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1690,7 +1895,7 @@ class upbit(Exchange, ImplicitAPI):
1690
1895
  """
1691
1896
  await self.load_markets()
1692
1897
  currency = self.currency(code)
1693
- request = {
1898
+ request: dict = {
1694
1899
  'currency': currency['id'],
1695
1900
  }
1696
1901
  # https://github.com/ccxt/ccxt/issues/6452
@@ -1715,10 +1920,12 @@ class upbit(Exchange, ImplicitAPI):
1715
1920
  raise AddressPending(self.id + ' is generating ' + code + ' deposit address, call fetchDepositAddress or createDepositAddress one more time later to retrieve the generated address')
1716
1921
  return self.parse_deposit_address(response)
1717
1922
 
1718
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1923
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1719
1924
  """
1720
- :see: https://docs.upbit.com/reference/디지털자산-출금하기
1721
- :see: https://docs.upbit.com/reference/%EC%9B%90%ED%99%94-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0
1925
+
1926
+ https://docs.upbit.com/reference/디지털자산-출금하기
1927
+ https://docs.upbit.com/reference/%EC%9B%90%ED%99%94-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0
1928
+
1722
1929
  make a withdrawal
1723
1930
  :param str code: unified currency code
1724
1931
  :param float amount: the amount to withdraw
@@ -1730,7 +1937,7 @@ class upbit(Exchange, ImplicitAPI):
1730
1937
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
1731
1938
  await self.load_markets()
1732
1939
  currency = self.currency(code)
1733
- request = {
1940
+ request: dict = {
1734
1941
  'amount': amount,
1735
1942
  }
1736
1943
  response = None
@@ -1780,26 +1987,28 @@ class upbit(Exchange, ImplicitAPI):
1780
1987
  url += '?' + self.urlencode(query)
1781
1988
  if api == 'private':
1782
1989
  self.check_required_credentials()
1990
+ headers = {}
1783
1991
  nonce = self.uuid()
1784
- request = {
1992
+ request: dict = {
1785
1993
  'access_key': self.apiKey,
1786
1994
  'nonce': nonce,
1787
1995
  }
1788
- if query:
1789
- auth = self.urlencode(query)
1996
+ hasQuery = query
1997
+ auth = None
1998
+ if (method != 'GET') and (method != 'DELETE'):
1999
+ body = self.json(params)
2000
+ headers['Content-Type'] = 'application/json'
2001
+ if hasQuery:
2002
+ auth = self.rawencode(query)
2003
+ if auth is not None:
1790
2004
  hash = self.hash(self.encode(auth), 'sha512')
1791
2005
  request['query_hash'] = hash
1792
2006
  request['query_hash_alg'] = 'SHA512'
1793
2007
  token = self.jwt(request, self.encode(self.secret), 'sha256')
1794
- headers = {
1795
- 'Authorization': 'Bearer ' + token,
1796
- }
1797
- if (method != 'GET') and (method != 'DELETE'):
1798
- body = self.json(params)
1799
- headers['Content-Type'] = 'application/json'
2008
+ headers['Authorization'] = 'Bearer ' + token
1800
2009
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1801
2010
 
1802
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2011
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1803
2012
  if response is None:
1804
2013
  return None # fallback to default error handler
1805
2014
  #