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,16 +5,16 @@
5
5
 
6
6
  from ccxt.async_support.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
  },
@@ -132,6 +139,75 @@ class oceanex(Exchange, ImplicitAPI):
132
139
  'PLA': 'Plair',
133
140
  },
134
141
  'precisionMode': TICK_SIZE,
142
+ 'features': {
143
+ 'spot': {
144
+ 'sandbox': False,
145
+ 'createOrder': {
146
+ 'marginMode': False,
147
+ 'triggerPrice': True, # todo
148
+ 'triggerDirection': True, # todo
149
+ 'triggerPriceType': None,
150
+ 'stopLossPrice': False, # todo
151
+ 'takeProfitPrice': False, # todo
152
+ 'attachedStopLossTakeProfit': None,
153
+ 'timeInForce': {
154
+ 'IOC': False,
155
+ 'FOK': False,
156
+ 'PO': False,
157
+ 'GTD': False,
158
+ },
159
+ 'hedged': False,
160
+ 'trailing': False,
161
+ 'leverage': False,
162
+ 'marketBuyByCost': False,
163
+ 'marketBuyRequiresPrice': False,
164
+ 'selfTradePrevention': False,
165
+ 'iceberg': False,
166
+ },
167
+ 'createOrders': None,
168
+ 'fetchMyTrades': None,
169
+ 'fetchOrder': {
170
+ 'marginMode': False,
171
+ 'trigger': False,
172
+ 'trailing': False,
173
+ },
174
+ 'fetchOpenOrders': {
175
+ 'marginMode': False,
176
+ 'limit': 100, # todo: max unknown
177
+ 'trigger': False,
178
+ 'trailing': False,
179
+ },
180
+ 'fetchOrders': {
181
+ 'marginMode': False,
182
+ 'limit': 100,
183
+ 'daysBack': 100000, # todo
184
+ 'untilDays': 100000, # todo
185
+ 'trigger': False,
186
+ 'trailing': False,
187
+ },
188
+ 'fetchClosedOrders': {
189
+ 'marginMode': False,
190
+ 'limit': 100,
191
+ 'daysBack': 100000, # todo
192
+ 'daysBackCanceled': 1, # todo
193
+ 'untilDays': 100000, # todo
194
+ 'trigger': False,
195
+ 'trailing': False,
196
+ },
197
+ 'fetchOHLCV': {
198
+ 'limit': 100,
199
+ },
200
+ },
201
+ # todo implement swap
202
+ 'swap': {
203
+ 'linear': None,
204
+ 'inverse': None,
205
+ },
206
+ 'future': {
207
+ 'linear': None,
208
+ 'inverse': None,
209
+ },
210
+ },
135
211
  'exceptions': {
136
212
  'codes': {
137
213
  '-1': BadRequest,
@@ -156,14 +232,16 @@ class oceanex(Exchange, ImplicitAPI):
156
232
  },
157
233
  })
158
234
 
159
- async def fetch_markets(self, params={}):
235
+ async def fetch_markets(self, params={}) -> List[Market]:
160
236
  """
161
237
  retrieves data on all markets for oceanex
162
- :see: https://api.oceanex.pro/doc/v1/#markets-post
238
+
239
+ https://api.oceanex.pro/doc/v1/#markets-post
240
+
163
241
  :param dict [params]: extra parameters specific to the exchange API endpoint
164
242
  :returns dict[]: an array of objects representing market data
165
243
  """
166
- request = {'show_details': True}
244
+ request: dict = {'show_details': True}
167
245
  response = await self.publicGetMarkets(self.extend(request, params))
168
246
  #
169
247
  # {
@@ -181,7 +259,7 @@ class oceanex(Exchange, ImplicitAPI):
181
259
  markets = self.safe_value(response, 'data', [])
182
260
  return self.parse_markets(markets)
183
261
 
184
- def parse_market(self, market) -> Market:
262
+ def parse_market(self, market: dict) -> Market:
185
263
  id = self.safe_value(market, 'id')
186
264
  name = self.safe_value(market, 'name')
187
265
  baseId, quoteId = name.split('/')
@@ -243,14 +321,16 @@ class oceanex(Exchange, ImplicitAPI):
243
321
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
244
322
  """
245
323
  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
324
+
325
+ https://api.oceanex.pro/doc/v1/#ticker-post
326
+
247
327
  :param str symbol: unified symbol of the market to fetch the ticker for
248
328
  :param dict [params]: extra parameters specific to the exchange API endpoint
249
329
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
250
330
  """
251
331
  await self.load_markets()
252
332
  market = self.market(symbol)
253
- request = {
333
+ request: dict = {
254
334
  'pair': market['id'],
255
335
  }
256
336
  response = await self.publicGetTickersPair(self.extend(request, params))
@@ -271,13 +351,15 @@ class oceanex(Exchange, ImplicitAPI):
271
351
  # }
272
352
  # }
273
353
  #
274
- data = self.safe_value(response, 'data', {})
354
+ data = self.safe_dict(response, 'data', {})
275
355
  return self.parse_ticker(data, market)
276
356
 
277
357
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
278
358
  """
279
359
  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
360
+
361
+ https://api.oceanex.pro/doc/v1/#multiple-tickers-post
362
+
281
363
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
282
364
  :param dict [params]: extra parameters specific to the exchange API endpoint
283
365
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -287,7 +369,7 @@ class oceanex(Exchange, ImplicitAPI):
287
369
  if symbols is None:
288
370
  symbols = self.symbols
289
371
  marketIds = self.market_ids(symbols)
290
- request = {'markets': marketIds}
372
+ request: dict = {'markets': marketIds}
291
373
  response = await self.publicGetTickersMulti(self.extend(request, params))
292
374
  #
293
375
  # {
@@ -307,7 +389,7 @@ class oceanex(Exchange, ImplicitAPI):
307
389
  # }
308
390
  #
309
391
  data = self.safe_value(response, 'data', [])
310
- result = {}
392
+ result: dict = {}
311
393
  for i in range(0, len(data)):
312
394
  ticker = data[i]
313
395
  marketId = self.safe_string(ticker, 'market')
@@ -359,7 +441,9 @@ class oceanex(Exchange, ImplicitAPI):
359
441
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
360
442
  """
361
443
  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
444
+
445
+ https://api.oceanex.pro/doc/v1/#order-book-post
446
+
363
447
  :param str symbol: unified symbol of the market to fetch the order book for
364
448
  :param int [limit]: the maximum amount of order book entries to return
365
449
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -367,7 +451,7 @@ class oceanex(Exchange, ImplicitAPI):
367
451
  """
368
452
  await self.load_markets()
369
453
  market = self.market(symbol)
370
- request = {
454
+ request: dict = {
371
455
  'market': market['id'],
372
456
  }
373
457
  if limit is not None:
@@ -399,7 +483,9 @@ class oceanex(Exchange, ImplicitAPI):
399
483
  async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
400
484
  """
401
485
  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
486
+
487
+ https://api.oceanex.pro/doc/v1/#multiple-order-books-post
488
+
403
489
  :param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
404
490
  :param int [limit]: max number of entries per orderbook to return, default is None
405
491
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -409,7 +495,7 @@ class oceanex(Exchange, ImplicitAPI):
409
495
  if symbols is None:
410
496
  symbols = self.symbols
411
497
  marketIds = self.market_ids(symbols)
412
- request = {
498
+ request: dict = {
413
499
  'markets': marketIds,
414
500
  }
415
501
  if limit is not None:
@@ -439,7 +525,7 @@ class oceanex(Exchange, ImplicitAPI):
439
525
  # }
440
526
  #
441
527
  data = self.safe_value(response, 'data', [])
442
- result = {}
528
+ result: dict = {}
443
529
  for i in range(0, len(data)):
444
530
  orderbook = data[i]
445
531
  marketId = self.safe_string(orderbook, 'market')
@@ -451,7 +537,9 @@ class oceanex(Exchange, ImplicitAPI):
451
537
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
452
538
  """
453
539
  get the list of most recent trades for a particular symbol
454
- :see: https://api.oceanex.pro/doc/v1/#trades-post
540
+
541
+ https://api.oceanex.pro/doc/v1/#trades-post
542
+
455
543
  :param str symbol: unified symbol of the market to fetch trades for
456
544
  :param int [since]: timestamp in ms of the earliest trade to fetch
457
545
  :param int [limit]: the maximum amount of trades to fetch
@@ -460,7 +548,7 @@ class oceanex(Exchange, ImplicitAPI):
460
548
  """
461
549
  await self.load_markets()
462
550
  market = self.market(symbol)
463
- request = {
551
+ request: dict = {
464
552
  'market': market['id'],
465
553
  }
466
554
  if limit is not None:
@@ -478,16 +566,16 @@ class oceanex(Exchange, ImplicitAPI):
478
566
  # "funds":"6.0732952",
479
567
  # "market":"ethusdt",
480
568
  # "created_at":"2022-04-19T19:03:15Z",
481
- # "created_on":1650394995,
569
+ # "created_on":1650394994,
482
570
  # "side":"bid"
483
571
  # },
484
572
  # ]
485
573
  # }
486
574
  #
487
- data = self.safe_value(response, 'data')
575
+ data = self.safe_list(response, 'data')
488
576
  return self.parse_trades(data, market, since, limit)
489
577
 
490
- def parse_trade(self, trade, market: Market = None) -> Trade:
578
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
491
579
  #
492
580
  # fetchTrades(public)
493
581
  #
@@ -533,7 +621,9 @@ class oceanex(Exchange, ImplicitAPI):
533
621
  async def fetch_time(self, params={}):
534
622
  """
535
623
  fetches the current integer timestamp in milliseconds from the exchange server
536
- :see: https://api.oceanex.pro/doc/v1/#api-server-time-post
624
+
625
+ https://api.oceanex.pro/doc/v1/#api-server-time-post
626
+
537
627
  :param dict [params]: extra parameters specific to the exchange API endpoint
538
628
  :returns int: the current integer timestamp in milliseconds from the exchange server
539
629
  """
@@ -543,16 +633,18 @@ class oceanex(Exchange, ImplicitAPI):
543
633
  #
544
634
  return self.safe_timestamp(response, 'data')
545
635
 
546
- async def fetch_trading_fees(self, params={}):
636
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
547
637
  """
548
638
  fetch the trading fees for multiple markets
549
- :see: https://api.oceanex.pro/doc/v1/#trading-fees-post
639
+
640
+ https://api.oceanex.pro/doc/v1/#trading-fees-post
641
+
550
642
  :param dict [params]: extra parameters specific to the exchange API endpoint
551
643
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
552
644
  """
553
645
  response = await self.publicGetFeesTrading(params)
554
646
  data = self.safe_value(response, 'data', [])
555
- result = {}
647
+ result: dict = {}
556
648
  for i in range(0, len(data)):
557
649
  group = data[i]
558
650
  maker = self.safe_value(group, 'ask_fee', {})
@@ -575,7 +667,7 @@ class oceanex(Exchange, ImplicitAPI):
575
667
  def parse_balance(self, response) -> Balances:
576
668
  data = self.safe_value(response, 'data')
577
669
  balances = self.safe_value(data, 'accounts', [])
578
- result = {'info': response}
670
+ result: dict = {'info': response}
579
671
  for i in range(0, len(balances)):
580
672
  balance = balances[i]
581
673
  currencyId = self.safe_value(balance, 'currency')
@@ -589,7 +681,9 @@ class oceanex(Exchange, ImplicitAPI):
589
681
  async def fetch_balance(self, params={}) -> Balances:
590
682
  """
591
683
  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
684
+
685
+ https://api.oceanex.pro/doc/v1/#account-info-post
686
+
593
687
  :param dict [params]: extra parameters specific to the exchange API endpoint
594
688
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
595
689
  """
@@ -600,18 +694,20 @@ class oceanex(Exchange, ImplicitAPI):
600
694
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
601
695
  """
602
696
  create a trade order
603
- :see: https://api.oceanex.pro/doc/v1/#new-order-post
697
+
698
+ https://api.oceanex.pro/doc/v1/#new-order-post
699
+
604
700
  :param str symbol: unified symbol of the market to create an order in
605
701
  :param str type: 'market' or 'limit'
606
702
  :param str side: 'buy' or 'sell'
607
703
  :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
704
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
609
705
  :param dict [params]: extra parameters specific to the exchange API endpoint
610
706
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
611
707
  """
612
708
  await self.load_markets()
613
709
  market = self.market(symbol)
614
- request = {
710
+ request: dict = {
615
711
  'market': market['id'],
616
712
  'side': side,
617
713
  'ord_type': type,
@@ -620,13 +716,16 @@ class oceanex(Exchange, ImplicitAPI):
620
716
  if type == 'limit':
621
717
  request['price'] = self.price_to_precision(symbol, price)
622
718
  response = await self.privatePostOrders(self.extend(request, params))
623
- data = self.safe_value(response, 'data')
719
+ data = self.safe_dict(response, 'data')
624
720
  return self.parse_order(data, market)
625
721
 
626
722
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
627
723
  """
628
724
  fetches information on an order made by the user
629
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
725
+
726
+ https://api.oceanex.pro/doc/v1/#order-status-get
727
+
728
+ :param str id: order id
630
729
  :param str symbol: unified symbol of the market the order was made in
631
730
  :param dict [params]: extra parameters specific to the exchange API endpoint
632
731
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -636,7 +735,7 @@ class oceanex(Exchange, ImplicitAPI):
636
735
  if symbol is not None:
637
736
  market = self.market(symbol)
638
737
  ids = [id]
639
- request = {'ids': ids}
738
+ request: dict = {'ids': ids}
640
739
  response = await self.privateGetOrders(self.extend(request, params))
641
740
  data = self.safe_value(response, 'data')
642
741
  dataLength = len(data)
@@ -652,14 +751,16 @@ class oceanex(Exchange, ImplicitAPI):
652
751
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
653
752
  """
654
753
  fetch all unfilled currently open orders
655
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
754
+
755
+ https://api.oceanex.pro/doc/v1/#order-status-get
756
+
656
757
  :param str symbol: unified market symbol
657
758
  :param int [since]: the earliest time in ms to fetch open orders for
658
759
  :param int [limit]: the maximum number of open orders structures to retrieve
659
760
  :param dict [params]: extra parameters specific to the exchange API endpoint
660
761
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
661
762
  """
662
- request = {
763
+ request: dict = {
663
764
  'states': ['wait'],
664
765
  }
665
766
  return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -667,14 +768,16 @@ class oceanex(Exchange, ImplicitAPI):
667
768
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
668
769
  """
669
770
  fetches information on multiple closed orders made by the user
670
- :see: https://api.oceanex.pro/doc/v1/#order-status-get
771
+
772
+ https://api.oceanex.pro/doc/v1/#order-status-get
773
+
671
774
  :param str symbol: unified market symbol of the market orders were made in
672
775
  :param int [since]: the earliest time in ms to fetch orders for
673
776
  :param int [limit]: the maximum number of order structures to retrieve
674
777
  :param dict [params]: extra parameters specific to the exchange API endpoint
675
778
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
676
779
  """
677
- request = {
780
+ request: dict = {
678
781
  'states': ['done', 'cancel'],
679
782
  }
680
783
  return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -682,7 +785,9 @@ class oceanex(Exchange, ImplicitAPI):
682
785
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
683
786
  """
684
787
  fetches information on multiple orders made by the user
685
- :see: https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
788
+
789
+ https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
790
+
686
791
  :param str symbol: unified market symbol of the market orders were made in
687
792
  :param int [since]: the earliest time in ms to fetch orders for
688
793
  :param int [limit]: the maximum number of order structures to retrieve
@@ -695,7 +800,7 @@ class oceanex(Exchange, ImplicitAPI):
695
800
  market = self.market(symbol)
696
801
  states = self.safe_value(params, 'states', ['wait', 'done', 'cancel'])
697
802
  query = self.omit(params, 'states')
698
- request = {
803
+ request: dict = {
699
804
  'market': market['id'],
700
805
  'states': states,
701
806
  'need_price': 'True',
@@ -733,7 +838,9 @@ class oceanex(Exchange, ImplicitAPI):
733
838
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
734
839
  """
735
840
  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
841
+
842
+ https://api.oceanex.pro/doc/v1/#k-line-post
843
+
737
844
  :param str symbol: unified symbol of the market to fetch OHLCV data for
738
845
  :param str timeframe: the length of time each candle represents
739
846
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -743,19 +850,19 @@ class oceanex(Exchange, ImplicitAPI):
743
850
  """
744
851
  await self.load_markets()
745
852
  market = self.market(symbol)
746
- request = {
853
+ request: dict = {
747
854
  'market': market['id'],
748
855
  'period': self.safe_string(self.timeframes, timeframe, timeframe),
749
856
  }
750
857
  if since is not None:
751
858
  request['timestamp'] = since
752
859
  if limit is not None:
753
- request['limit'] = limit
860
+ request['limit'] = min(limit, 10000)
754
861
  response = await self.publicPostK(self.extend(request, params))
755
- ohlcvs = self.safe_value(response, 'data', [])
862
+ ohlcvs = self.safe_list(response, 'data', [])
756
863
  return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
757
864
 
758
- def parse_order(self, order, market: Market = None) -> Order:
865
+ def parse_order(self, order: dict, market: Market = None) -> Order:
759
866
  #
760
867
  # {
761
868
  # "created_at": "2019-01-18T00:38:18Z",
@@ -797,7 +904,6 @@ class oceanex(Exchange, ImplicitAPI):
797
904
  'postOnly': None,
798
905
  'side': self.safe_value(order, 'side'),
799
906
  'price': price,
800
- 'stopPrice': None,
801
907
  'triggerPrice': None,
802
908
  'average': average,
803
909
  'amount': amount,
@@ -809,8 +915,8 @@ class oceanex(Exchange, ImplicitAPI):
809
915
  'fee': None,
810
916
  }, market)
811
917
 
812
- def parse_order_status(self, status):
813
- statuses = {
918
+ def parse_order_status(self, status: Str):
919
+ statuses: dict = {
814
920
  'wait': 'open',
815
921
  'done': 'closed',
816
922
  'cancel': 'canceled',
@@ -820,7 +926,9 @@ class oceanex(Exchange, ImplicitAPI):
820
926
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
821
927
  """
822
928
  cancels an open order
823
- :see: https://api.oceanex.pro/doc/v1/#cancel-order-post
929
+
930
+ https://api.oceanex.pro/doc/v1/#cancel-order-post
931
+
824
932
  :param str id: order id
825
933
  :param str symbol: not used by oceanex cancelOrder()
826
934
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -828,13 +936,15 @@ class oceanex(Exchange, ImplicitAPI):
828
936
  """
829
937
  await self.load_markets()
830
938
  response = await self.privatePostOrderDelete(self.extend({'id': id}, params))
831
- data = self.safe_value(response, 'data')
939
+ data = self.safe_dict(response, 'data')
832
940
  return self.parse_order(data)
833
941
 
834
942
  async def cancel_orders(self, ids, symbol: Str = None, params={}):
835
943
  """
836
944
  cancel multiple orders
837
- :see: https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
945
+
946
+ https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
947
+
838
948
  :param str[] ids: order ids
839
949
  :param str symbol: not used by oceanex cancelOrders()
840
950
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -842,22 +952,97 @@ class oceanex(Exchange, ImplicitAPI):
842
952
  """
843
953
  await self.load_markets()
844
954
  response = await self.privatePostOrderDeleteMulti(self.extend({'ids': ids}, params))
845
- data = self.safe_value(response, 'data')
955
+ data = self.safe_list(response, 'data')
846
956
  return self.parse_orders(data)
847
957
 
848
958
  async def cancel_all_orders(self, symbol: Str = None, params={}):
849
959
  """
850
960
  cancel all open orders
851
- :see: https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
961
+
962
+ https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
963
+
852
964
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
853
965
  :param dict [params]: extra parameters specific to the exchange API endpoint
854
966
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
855
967
  """
856
968
  await self.load_markets()
857
969
  response = await self.privatePostOrdersClear(params)
858
- data = self.safe_value(response, 'data')
970
+ data = self.safe_list(response, 'data')
859
971
  return self.parse_orders(data)
860
972
 
973
+ async def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
974
+ """
975
+ fetch the deposit addresses for a currency associated with self account
976
+
977
+ https://api.oceanex.pro/doc/v1/#deposit-addresses-post
978
+
979
+ :param str code: unified currency code
980
+ :param dict [params]: extra parameters specific to the exchange API endpoint
981
+ :returns dict: a dictionary `address structures <https://docs.ccxt.com/#/?id=address-structure>`, indexed by the network
982
+ """
983
+ await self.load_markets()
984
+ currency = self.currency(code)
985
+ request: dict = {
986
+ 'currency': currency['id'],
987
+ }
988
+ response = await self.privatePostDepositAddresses(self.extend(request, params))
989
+ #
990
+ # {
991
+ # code: '0',
992
+ # message: 'Operation successful',
993
+ # data: {
994
+ # data: {
995
+ # currency_id: 'usdt',
996
+ # display_name: 'USDT',
997
+ # num_of_resources: '3',
998
+ # resources: [
999
+ # {
1000
+ # chain_name: 'TRC20',
1001
+ # currency_id: 'usdt',
1002
+ # address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
1003
+ # memo: '',
1004
+ # deposit_status: 'enabled'
1005
+ # },
1006
+ # ...
1007
+ # ]
1008
+ # }
1009
+ # }
1010
+ # }
1011
+ #
1012
+ data = self.safe_dict(response, 'data', {})
1013
+ data2 = self.safe_dict(data, 'data', {})
1014
+ resources = self.safe_list(data2, 'resources', [])
1015
+ result = {}
1016
+ for i in range(0, len(resources)):
1017
+ resource = resources[i]
1018
+ enabled = self.safe_string(resource, 'deposit_status')
1019
+ if enabled == 'enabled':
1020
+ parsedAddress = self.parse_deposit_address(resource, currency)
1021
+ result[parsedAddress['currency']] = parsedAddress
1022
+ return result
1023
+
1024
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1025
+ #
1026
+ # {
1027
+ # chain_name: 'TRC20',
1028
+ # currency_id: 'usdt',
1029
+ # address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
1030
+ # memo: '',
1031
+ # deposit_status: 'enabled'
1032
+ # }
1033
+ #
1034
+ address = self.safe_string(depositAddress, 'address')
1035
+ self.check_address(address)
1036
+ currencyId = self.safe_string(depositAddress, 'currency_id')
1037
+ networkId = self.safe_string(depositAddress, 'chain_name')
1038
+ return {
1039
+ 'info': depositAddress,
1040
+ 'currency': self.safe_currency_code(currencyId, currency),
1041
+ 'network': self.network_id_to_code(networkId),
1042
+ 'address': address,
1043
+ 'tag': self.safe_string(depositAddress, 'memo'),
1044
+ }
1045
+
861
1046
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
862
1047
  url = self.urls['api']['rest'] + '/' + self.version + '/' + self.implode_params(path, params)
863
1048
  query = self.omit(params, self.extract_params(path))
@@ -875,7 +1060,7 @@ class oceanex(Exchange, ImplicitAPI):
875
1060
  url += '?' + self.urlencode(query)
876
1061
  elif api == 'private':
877
1062
  self.check_required_credentials()
878
- request = {
1063
+ request: dict = {
879
1064
  'uid': self.apiKey,
880
1065
  'data': query,
881
1066
  }
@@ -887,7 +1072,7 @@ class oceanex(Exchange, ImplicitAPI):
887
1072
  headers = {'Content-Type': 'application/json'}
888
1073
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
889
1074
 
890
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1075
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
891
1076
  #
892
1077
  # {"code":1011,"message":"This IP 'x.x.x.x' is not allowed","data":{}}
893
1078
  #