ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3513 -1511
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3105 -881
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +403 -150
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1473 -464
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1634 -269
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +1050 -355
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1777 -455
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1155 -295
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1729 -482
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +403 -150
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1633 -269
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +1050 -355
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1777 -455
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +63 -15
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +204 -82
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +967 -661
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +168 -32
  309. ccxt/pro/exmo.py +253 -21
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +486 -70
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +465 -407
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +465 -409
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1155 -295
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/oceanex.py CHANGED
@@ -5,16 +5,16 @@
5
5
 
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.oceanex import ImplicitAPI
8
- from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
8
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
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
15
16
  from ccxt.base.errors import InvalidOrder
16
17
  from ccxt.base.errors import OrderNotFound
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
 
20
20
 
@@ -54,9 +54,11 @@ class oceanex(Exchange, ImplicitAPI):
54
54
  'fetchClosedOrders': True,
55
55
  'fetchCrossBorrowRate': False,
56
56
  'fetchCrossBorrowRates': False,
57
- 'fetchDepositAddress': False,
58
- 'fetchDepositAddresses': False,
59
- 'fetchDepositAddressesByNetwork': False,
57
+ 'fetchDepositAddress': 'emulated',
58
+ 'fetchDepositAddresses': None,
59
+ 'fetchDepositAddressesByNetwork': True,
60
+ 'fetchFundingRateHistory': False,
61
+ 'fetchFundingRates': False,
60
62
  'fetchIsolatedBorrowRate': False,
61
63
  'fetchIsolatedBorrowRates': False,
62
64
  'fetchMarkets': True,
@@ -117,6 +119,11 @@ class oceanex(Exchange, ImplicitAPI):
117
119
  'order/delete',
118
120
  'order/delete/multi',
119
121
  'orders/clear',
122
+ '/withdraws/special/new',
123
+ '/deposit_address',
124
+ '/deposit_addresses',
125
+ '/deposit_history',
126
+ '/withdraw_history',
120
127
  ],
121
128
  },
122
129
  },
@@ -156,14 +163,16 @@ class oceanex(Exchange, ImplicitAPI):
156
163
  },
157
164
  })
158
165
 
159
- def fetch_markets(self, params={}):
166
+ def fetch_markets(self, params={}) -> List[Market]:
160
167
  """
161
168
  retrieves data on all markets for oceanex
162
- :see: https://api.oceanex.pro/doc/v1/#markets-post
169
+
170
+ https://api.oceanex.pro/doc/v1/#markets-post
171
+
163
172
  :param dict [params]: extra parameters specific to the exchange API endpoint
164
173
  :returns dict[]: an array of objects representing market data
165
174
  """
166
- request = {'show_details': True}
175
+ request: dict = {'show_details': True}
167
176
  response = self.publicGetMarkets(self.extend(request, params))
168
177
  #
169
178
  # {
@@ -181,7 +190,7 @@ class oceanex(Exchange, ImplicitAPI):
181
190
  markets = self.safe_value(response, 'data', [])
182
191
  return self.parse_markets(markets)
183
192
 
184
- def parse_market(self, market) -> Market:
193
+ def parse_market(self, market: dict) -> Market:
185
194
  id = self.safe_value(market, 'id')
186
195
  name = self.safe_value(market, 'name')
187
196
  baseId, quoteId = name.split('/')
@@ -243,14 +252,16 @@ class oceanex(Exchange, ImplicitAPI):
243
252
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
244
253
  """
245
254
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
246
- :see: https://api.oceanex.pro/doc/v1/#ticker-post
255
+
256
+ https://api.oceanex.pro/doc/v1/#ticker-post
257
+
247
258
  :param str symbol: unified symbol of the market to fetch the ticker for
248
259
  :param dict [params]: extra parameters specific to the exchange API endpoint
249
260
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
250
261
  """
251
262
  self.load_markets()
252
263
  market = self.market(symbol)
253
- request = {
264
+ request: dict = {
254
265
  'pair': market['id'],
255
266
  }
256
267
  response = self.publicGetTickersPair(self.extend(request, params))
@@ -271,13 +282,15 @@ class oceanex(Exchange, ImplicitAPI):
271
282
  # }
272
283
  # }
273
284
  #
274
- data = self.safe_value(response, 'data', {})
285
+ data = self.safe_dict(response, 'data', {})
275
286
  return self.parse_ticker(data, market)
276
287
 
277
288
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
278
289
  """
279
290
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
280
- :see: https://api.oceanex.pro/doc/v1/#multiple-tickers-post
291
+
292
+ https://api.oceanex.pro/doc/v1/#multiple-tickers-post
293
+
281
294
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
282
295
  :param dict [params]: extra parameters specific to the exchange API endpoint
283
296
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -287,7 +300,7 @@ class oceanex(Exchange, ImplicitAPI):
287
300
  if symbols is None:
288
301
  symbols = self.symbols
289
302
  marketIds = self.market_ids(symbols)
290
- request = {'markets': marketIds}
303
+ request: dict = {'markets': marketIds}
291
304
  response = self.publicGetTickersMulti(self.extend(request, params))
292
305
  #
293
306
  # {
@@ -307,7 +320,7 @@ class oceanex(Exchange, ImplicitAPI):
307
320
  # }
308
321
  #
309
322
  data = self.safe_value(response, 'data', [])
310
- result = {}
323
+ result: dict = {}
311
324
  for i in range(0, len(data)):
312
325
  ticker = data[i]
313
326
  marketId = self.safe_string(ticker, 'market')
@@ -359,7 +372,9 @@ class oceanex(Exchange, ImplicitAPI):
359
372
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
360
373
  """
361
374
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
362
- :see: https://api.oceanex.pro/doc/v1/#order-book-post
375
+
376
+ https://api.oceanex.pro/doc/v1/#order-book-post
377
+
363
378
  :param str symbol: unified symbol of the market to fetch the order book for
364
379
  :param int [limit]: the maximum amount of order book entries to return
365
380
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -367,7 +382,7 @@ class oceanex(Exchange, ImplicitAPI):
367
382
  """
368
383
  self.load_markets()
369
384
  market = self.market(symbol)
370
- request = {
385
+ request: dict = {
371
386
  'market': market['id'],
372
387
  }
373
388
  if limit is not None:
@@ -399,7 +414,9 @@ class oceanex(Exchange, ImplicitAPI):
399
414
  def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
400
415
  """
401
416
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
402
- :see: https://api.oceanex.pro/doc/v1/#multiple-order-books-post
417
+
418
+ https://api.oceanex.pro/doc/v1/#multiple-order-books-post
419
+
403
420
  :param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
404
421
  :param int [limit]: max number of entries per orderbook to return, default is None
405
422
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -409,7 +426,7 @@ class oceanex(Exchange, ImplicitAPI):
409
426
  if symbols is None:
410
427
  symbols = self.symbols
411
428
  marketIds = self.market_ids(symbols)
412
- request = {
429
+ request: dict = {
413
430
  'markets': marketIds,
414
431
  }
415
432
  if limit is not None:
@@ -439,7 +456,7 @@ class oceanex(Exchange, ImplicitAPI):
439
456
  # }
440
457
  #
441
458
  data = self.safe_value(response, 'data', [])
442
- result = {}
459
+ result: dict = {}
443
460
  for i in range(0, len(data)):
444
461
  orderbook = data[i]
445
462
  marketId = self.safe_string(orderbook, 'market')
@@ -451,7 +468,9 @@ class oceanex(Exchange, ImplicitAPI):
451
468
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
452
469
  """
453
470
  get the list of most recent trades for a particular symbol
454
- :see: https://api.oceanex.pro/doc/v1/#trades-post
471
+
472
+ https://api.oceanex.pro/doc/v1/#trades-post
473
+
455
474
  :param str symbol: unified symbol of the market to fetch trades for
456
475
  :param int [since]: timestamp in ms of the earliest trade to fetch
457
476
  :param int [limit]: the maximum amount of trades to fetch
@@ -460,7 +479,7 @@ class oceanex(Exchange, ImplicitAPI):
460
479
  """
461
480
  self.load_markets()
462
481
  market = self.market(symbol)
463
- request = {
482
+ request: dict = {
464
483
  'market': market['id'],
465
484
  }
466
485
  if limit is not None:
@@ -478,16 +497,16 @@ class oceanex(Exchange, ImplicitAPI):
478
497
  # "funds":"6.0732952",
479
498
  # "market":"ethusdt",
480
499
  # "created_at":"2022-04-19T19:03:15Z",
481
- # "created_on":1650394995,
500
+ # "created_on":1650394994,
482
501
  # "side":"bid"
483
502
  # },
484
503
  # ]
485
504
  # }
486
505
  #
487
- data = self.safe_value(response, 'data')
506
+ data = self.safe_list(response, 'data')
488
507
  return self.parse_trades(data, market, since, limit)
489
508
 
490
- def parse_trade(self, trade, market: Market = None) -> Trade:
509
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
491
510
  #
492
511
  # fetchTrades(public)
493
512
  #
@@ -533,7 +552,9 @@ class oceanex(Exchange, ImplicitAPI):
533
552
  def fetch_time(self, params={}):
534
553
  """
535
554
  fetches the current integer timestamp in milliseconds from the exchange server
536
- :see: https://api.oceanex.pro/doc/v1/#api-server-time-post
555
+
556
+ https://api.oceanex.pro/doc/v1/#api-server-time-post
557
+
537
558
  :param dict [params]: extra parameters specific to the exchange API endpoint
538
559
  :returns int: the current integer timestamp in milliseconds from the exchange server
539
560
  """
@@ -543,16 +564,18 @@ class oceanex(Exchange, ImplicitAPI):
543
564
  #
544
565
  return self.safe_timestamp(response, 'data')
545
566
 
546
- def fetch_trading_fees(self, params={}):
567
+ def fetch_trading_fees(self, params={}) -> TradingFees:
547
568
  """
548
569
  fetch the trading fees for multiple markets
549
- :see: https://api.oceanex.pro/doc/v1/#trading-fees-post
570
+
571
+ https://api.oceanex.pro/doc/v1/#trading-fees-post
572
+
550
573
  :param dict [params]: extra parameters specific to the exchange API endpoint
551
574
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
552
575
  """
553
576
  response = self.publicGetFeesTrading(params)
554
577
  data = self.safe_value(response, 'data', [])
555
- result = {}
578
+ result: dict = {}
556
579
  for i in range(0, len(data)):
557
580
  group = data[i]
558
581
  maker = self.safe_value(group, 'ask_fee', {})
@@ -575,7 +598,7 @@ class oceanex(Exchange, ImplicitAPI):
575
598
  def parse_balance(self, response) -> Balances:
576
599
  data = self.safe_value(response, 'data')
577
600
  balances = self.safe_value(data, 'accounts', [])
578
- result = {'info': response}
601
+ result: dict = {'info': response}
579
602
  for i in range(0, len(balances)):
580
603
  balance = balances[i]
581
604
  currencyId = self.safe_value(balance, 'currency')
@@ -589,7 +612,9 @@ class oceanex(Exchange, ImplicitAPI):
589
612
  def fetch_balance(self, params={}) -> Balances:
590
613
  """
591
614
  query for balance and get the amount of funds available for trading or funds locked in orders
592
- :see: https://api.oceanex.pro/doc/v1/#account-info-post
615
+
616
+ https://api.oceanex.pro/doc/v1/#account-info-post
617
+
593
618
  :param dict [params]: extra parameters specific to the exchange API endpoint
594
619
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
595
620
  """
@@ -600,18 +625,20 @@ class oceanex(Exchange, ImplicitAPI):
600
625
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
601
626
  """
602
627
  create a trade order
603
- :see: https://api.oceanex.pro/doc/v1/#new-order-post
628
+
629
+ https://api.oceanex.pro/doc/v1/#new-order-post
630
+
604
631
  :param str symbol: unified symbol of the market to create an order in
605
632
  :param str type: 'market' or 'limit'
606
633
  :param str side: 'buy' or 'sell'
607
634
  :param float amount: how much of currency you want to trade in units of base currency
608
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
635
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
609
636
  :param dict [params]: extra parameters specific to the exchange API endpoint
610
637
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
611
638
  """
612
639
  self.load_markets()
613
640
  market = self.market(symbol)
614
- request = {
641
+ request: dict = {
615
642
  'market': market['id'],
616
643
  'side': side,
617
644
  'ord_type': type,
@@ -620,13 +647,16 @@ class oceanex(Exchange, ImplicitAPI):
620
647
  if type == 'limit':
621
648
  request['price'] = self.price_to_precision(symbol, price)
622
649
  response = self.privatePostOrders(self.extend(request, params))
623
- data = self.safe_value(response, 'data')
650
+ data = self.safe_dict(response, 'data')
624
651
  return self.parse_order(data, market)
625
652
 
626
653
  def fetch_order(self, id: str, symbol: Str = None, params={}):
627
654
  """
628
655
  fetches information on an order made by the user
629
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
656
+
657
+ https://api.oceanex.pro/doc/v1/#order-status-get
658
+
659
+ :param str id: order id
630
660
  :param str symbol: unified symbol of the market the order was made in
631
661
  :param dict [params]: extra parameters specific to the exchange API endpoint
632
662
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -636,7 +666,7 @@ class oceanex(Exchange, ImplicitAPI):
636
666
  if symbol is not None:
637
667
  market = self.market(symbol)
638
668
  ids = [id]
639
- request = {'ids': ids}
669
+ request: dict = {'ids': ids}
640
670
  response = self.privateGetOrders(self.extend(request, params))
641
671
  data = self.safe_value(response, 'data')
642
672
  dataLength = len(data)
@@ -652,14 +682,16 @@ class oceanex(Exchange, ImplicitAPI):
652
682
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
653
683
  """
654
684
  fetch all unfilled currently open orders
655
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
685
+
686
+ https://api.oceanex.pro/doc/v1/#order-status-get
687
+
656
688
  :param str symbol: unified market symbol
657
689
  :param int [since]: the earliest time in ms to fetch open orders for
658
690
  :param int [limit]: the maximum number of open orders structures to retrieve
659
691
  :param dict [params]: extra parameters specific to the exchange API endpoint
660
692
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
661
693
  """
662
- request = {
694
+ request: dict = {
663
695
  'states': ['wait'],
664
696
  }
665
697
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -667,14 +699,16 @@ class oceanex(Exchange, ImplicitAPI):
667
699
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
668
700
  """
669
701
  fetches information on multiple closed orders made by the user
670
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
702
+
703
+ https://api.oceanex.pro/doc/v1/#order-status-get
704
+
671
705
  :param str symbol: unified market symbol of the market orders were made in
672
706
  :param int [since]: the earliest time in ms to fetch orders for
673
707
  :param int [limit]: the maximum number of order structures to retrieve
674
708
  :param dict [params]: extra parameters specific to the exchange API endpoint
675
709
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
676
710
  """
677
- request = {
711
+ request: dict = {
678
712
  'states': ['done', 'cancel'],
679
713
  }
680
714
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -682,7 +716,9 @@ class oceanex(Exchange, ImplicitAPI):
682
716
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
683
717
  """
684
718
  fetches information on multiple orders made by the user
685
- :see: https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
719
+
720
+ https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
721
+
686
722
  :param str symbol: unified market symbol of the market orders were made in
687
723
  :param int [since]: the earliest time in ms to fetch orders for
688
724
  :param int [limit]: the maximum number of order structures to retrieve
@@ -695,7 +731,7 @@ class oceanex(Exchange, ImplicitAPI):
695
731
  market = self.market(symbol)
696
732
  states = self.safe_value(params, 'states', ['wait', 'done', 'cancel'])
697
733
  query = self.omit(params, 'states')
698
- request = {
734
+ request: dict = {
699
735
  'market': market['id'],
700
736
  'states': states,
701
737
  'need_price': 'True',
@@ -733,7 +769,9 @@ class oceanex(Exchange, ImplicitAPI):
733
769
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
734
770
  """
735
771
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
736
- :see: https://api.oceanex.pro/doc/v1/#k-line-post
772
+
773
+ https://api.oceanex.pro/doc/v1/#k-line-post
774
+
737
775
  :param str symbol: unified symbol of the market to fetch OHLCV data for
738
776
  :param str timeframe: the length of time each candle represents
739
777
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -743,19 +781,19 @@ class oceanex(Exchange, ImplicitAPI):
743
781
  """
744
782
  self.load_markets()
745
783
  market = self.market(symbol)
746
- request = {
784
+ request: dict = {
747
785
  'market': market['id'],
748
786
  'period': self.safe_string(self.timeframes, timeframe, timeframe),
749
787
  }
750
788
  if since is not None:
751
789
  request['timestamp'] = since
752
790
  if limit is not None:
753
- request['limit'] = limit
791
+ request['limit'] = min(limit, 10000)
754
792
  response = self.publicPostK(self.extend(request, params))
755
- ohlcvs = self.safe_value(response, 'data', [])
793
+ ohlcvs = self.safe_list(response, 'data', [])
756
794
  return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
757
795
 
758
- def parse_order(self, order, market: Market = None) -> Order:
796
+ def parse_order(self, order: dict, market: Market = None) -> Order:
759
797
  #
760
798
  # {
761
799
  # "created_at": "2019-01-18T00:38:18Z",
@@ -797,7 +835,6 @@ class oceanex(Exchange, ImplicitAPI):
797
835
  'postOnly': None,
798
836
  'side': self.safe_value(order, 'side'),
799
837
  'price': price,
800
- 'stopPrice': None,
801
838
  'triggerPrice': None,
802
839
  'average': average,
803
840
  'amount': amount,
@@ -809,8 +846,8 @@ class oceanex(Exchange, ImplicitAPI):
809
846
  'fee': None,
810
847
  }, market)
811
848
 
812
- def parse_order_status(self, status):
813
- statuses = {
849
+ def parse_order_status(self, status: Str):
850
+ statuses: dict = {
814
851
  'wait': 'open',
815
852
  'done': 'closed',
816
853
  'cancel': 'canceled',
@@ -820,7 +857,9 @@ class oceanex(Exchange, ImplicitAPI):
820
857
  def cancel_order(self, id: str, symbol: Str = None, params={}):
821
858
  """
822
859
  cancels an open order
823
- :see: https://api.oceanex.pro/doc/v1/#cancel-order-post
860
+
861
+ https://api.oceanex.pro/doc/v1/#cancel-order-post
862
+
824
863
  :param str id: order id
825
864
  :param str symbol: not used by oceanex cancelOrder()
826
865
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -828,13 +867,15 @@ class oceanex(Exchange, ImplicitAPI):
828
867
  """
829
868
  self.load_markets()
830
869
  response = self.privatePostOrderDelete(self.extend({'id': id}, params))
831
- data = self.safe_value(response, 'data')
870
+ data = self.safe_dict(response, 'data')
832
871
  return self.parse_order(data)
833
872
 
834
873
  def cancel_orders(self, ids, symbol: Str = None, params={}):
835
874
  """
836
875
  cancel multiple orders
837
- :see: https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
876
+
877
+ https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
878
+
838
879
  :param str[] ids: order ids
839
880
  :param str symbol: not used by oceanex cancelOrders()
840
881
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -842,22 +883,97 @@ class oceanex(Exchange, ImplicitAPI):
842
883
  """
843
884
  self.load_markets()
844
885
  response = self.privatePostOrderDeleteMulti(self.extend({'ids': ids}, params))
845
- data = self.safe_value(response, 'data')
886
+ data = self.safe_list(response, 'data')
846
887
  return self.parse_orders(data)
847
888
 
848
889
  def cancel_all_orders(self, symbol: Str = None, params={}):
849
890
  """
850
891
  cancel all open orders
851
- :see: https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
892
+
893
+ https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
894
+
852
895
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
853
896
  :param dict [params]: extra parameters specific to the exchange API endpoint
854
897
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
855
898
  """
856
899
  self.load_markets()
857
900
  response = self.privatePostOrdersClear(params)
858
- data = self.safe_value(response, 'data')
901
+ data = self.safe_list(response, 'data')
859
902
  return self.parse_orders(data)
860
903
 
904
+ def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
905
+ """
906
+ fetch the deposit addresses for a currency associated with self account
907
+
908
+ https://api.oceanex.pro/doc/v1/#deposit-addresses-post
909
+
910
+ :param str code: unified currency code
911
+ :param dict [params]: extra parameters specific to the exchange API endpoint
912
+ :returns dict: a dictionary `address structures <https://docs.ccxt.com/#/?id=address-structure>`, indexed by the network
913
+ """
914
+ self.load_markets()
915
+ currency = self.currency(code)
916
+ request: dict = {
917
+ 'currency': currency['id'],
918
+ }
919
+ response = self.privatePostDepositAddresses(self.extend(request, params))
920
+ #
921
+ # {
922
+ # code: '0',
923
+ # message: 'Operation successful',
924
+ # data: {
925
+ # data: {
926
+ # currency_id: 'usdt',
927
+ # display_name: 'USDT',
928
+ # num_of_resources: '3',
929
+ # resources: [
930
+ # {
931
+ # chain_name: 'TRC20',
932
+ # currency_id: 'usdt',
933
+ # address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
934
+ # memo: '',
935
+ # deposit_status: 'enabled'
936
+ # },
937
+ # ...
938
+ # ]
939
+ # }
940
+ # }
941
+ # }
942
+ #
943
+ data = self.safe_dict(response, 'data', {})
944
+ data2 = self.safe_dict(data, 'data', {})
945
+ resources = self.safe_list(data2, 'resources', [])
946
+ result = {}
947
+ for i in range(0, len(resources)):
948
+ resource = resources[i]
949
+ enabled = self.safe_string(resource, 'deposit_status')
950
+ if enabled == 'enabled':
951
+ parsedAddress = self.parse_deposit_address(resource, currency)
952
+ result[parsedAddress['currency']] = parsedAddress
953
+ return result
954
+
955
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
956
+ #
957
+ # {
958
+ # chain_name: 'TRC20',
959
+ # currency_id: 'usdt',
960
+ # address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
961
+ # memo: '',
962
+ # deposit_status: 'enabled'
963
+ # }
964
+ #
965
+ address = self.safe_string(depositAddress, 'address')
966
+ self.check_address(address)
967
+ currencyId = self.safe_string(depositAddress, 'currency_id')
968
+ networkId = self.safe_string(depositAddress, 'chain_name')
969
+ return {
970
+ 'info': depositAddress,
971
+ 'currency': self.safe_currency_code(currencyId, currency),
972
+ 'network': self.network_id_to_code(networkId),
973
+ 'address': address,
974
+ 'tag': self.safe_string(depositAddress, 'memo'),
975
+ }
976
+
861
977
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
862
978
  url = self.urls['api']['rest'] + '/' + self.version + '/' + self.implode_params(path, params)
863
979
  query = self.omit(params, self.extract_params(path))
@@ -875,7 +991,7 @@ class oceanex(Exchange, ImplicitAPI):
875
991
  url += '?' + self.urlencode(query)
876
992
  elif api == 'private':
877
993
  self.check_required_credentials()
878
- request = {
994
+ request: dict = {
879
995
  'uid': self.apiKey,
880
996
  'data': query,
881
997
  }
@@ -887,7 +1003,7 @@ class oceanex(Exchange, ImplicitAPI):
887
1003
  headers = {'Content-Type': 'application/json'}
888
1004
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
889
1005
 
890
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1006
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
891
1007
  #
892
1008
  # {"code":1011,"message":"This IP 'x.x.x.x' is not allowed","data":{}}
893
1009
  #