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,9 +5,11 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.independentreserve import ImplicitAPI
8
+ import asyncio
8
9
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade
10
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees, Transaction
10
11
  from typing import List
12
+ from ccxt.base.errors import BadRequest
11
13
  from ccxt.base.decimal_to_precision import TICK_SIZE
12
14
  from ccxt.base.precise import Precise
13
15
 
@@ -64,8 +66,11 @@ class independentreserve(Exchange, ImplicitAPI):
64
66
  'fetchOrder': True,
65
67
  'fetchOrderBook': True,
66
68
  'fetchPosition': False,
69
+ 'fetchPositionHistory': False,
67
70
  'fetchPositionMode': False,
68
71
  'fetchPositions': False,
72
+ 'fetchPositionsForSymbol': False,
73
+ 'fetchPositionsHistory': False,
69
74
  'fetchPositionsRisk': False,
70
75
  'fetchPremiumIndexOHLCV': False,
71
76
  'fetchTicker': True,
@@ -76,6 +81,7 @@ class independentreserve(Exchange, ImplicitAPI):
76
81
  'setLeverage': False,
77
82
  'setMarginMode': False,
78
83
  'setPositionMode': False,
84
+ 'withdraw': True,
79
85
  },
80
86
  'urls': {
81
87
  'logo': 'https://user-images.githubusercontent.com/51840849/87182090-1e9e9080-c2ec-11ea-8e49-563db9a38f37.jpg',
@@ -102,7 +108,10 @@ class independentreserve(Exchange, ImplicitAPI):
102
108
  'GetRecentTrades',
103
109
  'GetFxRates',
104
110
  'GetOrderMinimumVolumes',
105
- 'GetCryptoWithdrawalFees',
111
+ 'GetCryptoWithdrawalFees', # deprecated - replaced by GetCryptoWithdrawalFees2(docs removed)
112
+ 'GetCryptoWithdrawalFees2',
113
+ 'GetNetworks',
114
+ 'GetPrimaryCurrencyConfig2',
106
115
  ],
107
116
  },
108
117
  'private': {
@@ -114,8 +123,10 @@ class independentreserve(Exchange, ImplicitAPI):
114
123
  'GetAccounts',
115
124
  'GetTransactions',
116
125
  'GetFiatBankAccounts',
117
- 'GetDigitalCurrencyDepositAddress',
118
- 'GetDigitalCurrencyDepositAddresses',
126
+ 'GetDigitalCurrencyDepositAddress', # deprecated - replaced by GetDigitalCurrencyDepositAddress2(docs removed)
127
+ 'GetDigitalCurrencyDepositAddress2',
128
+ 'GetDigitalCurrencyDepositAddresses', # deprecated - replaced by GetDigitalCurrencyDepositAddresses2(docs removed)
129
+ 'GetDigitalCurrencyDepositAddresses2',
119
130
  'GetTrades',
120
131
  'GetBrokerageFees',
121
132
  'GetDigitalCurrencyWithdrawal',
@@ -125,7 +136,8 @@ class independentreserve(Exchange, ImplicitAPI):
125
136
  'SynchDigitalCurrencyDepositAddressWithBlockchain',
126
137
  'RequestFiatWithdrawal',
127
138
  'WithdrawFiatCurrency',
128
- 'WithdrawDigitalCurrency',
139
+ 'WithdrawDigitalCurrency', # deprecated - replaced by WithdrawCrypto(docs removed)
140
+ 'WithdrawCrypto',
129
141
  ],
130
142
  },
131
143
  },
@@ -137,23 +149,142 @@ class independentreserve(Exchange, ImplicitAPI):
137
149
  'tierBased': False,
138
150
  },
139
151
  },
152
+ 'features': {
153
+ 'spot': {
154
+ 'sandbox': False,
155
+ 'createOrder': {
156
+ 'marginMode': False,
157
+ 'triggerPrice': False,
158
+ 'triggerPriceType': None,
159
+ 'triggerDirection': False,
160
+ 'stopLossPrice': False,
161
+ 'takeProfitPrice': False,
162
+ 'attachedStopLossTakeProfit': None,
163
+ 'timeInForce': {
164
+ 'IOC': False,
165
+ 'FOK': False,
166
+ 'PO': False,
167
+ 'GTD': False,
168
+ },
169
+ 'hedged': False,
170
+ 'selfTradePrevention': False,
171
+ 'trailing': False,
172
+ 'leverage': False,
173
+ 'marketBuyByCost': False,
174
+ 'marketBuyRequiresPrice': False,
175
+ 'iceberg': False,
176
+ },
177
+ 'createOrders': None,
178
+ 'fetchMyTrades': {
179
+ 'marginMode': False,
180
+ 'limit': 100, # todo
181
+ 'daysBack': None,
182
+ 'untilDays': None,
183
+ },
184
+ 'fetchOrder': {
185
+ 'marginMode': False,
186
+ 'trigger': False,
187
+ 'trailing': False,
188
+ },
189
+ 'fetchOpenOrders': {
190
+ 'marginMode': False,
191
+ 'limit': 100, # todo
192
+ 'trigger': False,
193
+ 'trailing': False,
194
+ },
195
+ 'fetchOrders': None,
196
+ 'fetchClosedOrders': {
197
+ 'marginMode': False,
198
+ 'limit': 100, # todo
199
+ 'daysBack': None,
200
+ 'daysBackCanceled': None,
201
+ 'untilDays': None,
202
+ 'trigger': False,
203
+ 'trailing': False,
204
+ },
205
+ 'fetchOHLCV': None,
206
+ },
207
+ 'swap': {
208
+ 'linear': None,
209
+ 'inverse': None,
210
+ },
211
+ 'future': {
212
+ 'linear': None,
213
+ 'inverse': None,
214
+ },
215
+ },
140
216
  'commonCurrencies': {
141
217
  'PLA': 'PlayChip',
142
218
  },
143
219
  'precisionMode': TICK_SIZE,
220
+ 'options': {
221
+ 'defaultNetworks': {
222
+ 'USDT': 'Ethereum',
223
+ 'USDC': 'Ethereum',
224
+ 'BTC': 'Bitcoin',
225
+ 'BCH': 'BitcoinCash',
226
+ 'ETH': 'Ethereum',
227
+ 'LTC': 'Litecoin',
228
+ 'XRP': 'XrpLedger',
229
+ 'ZRX': 'Ethereum',
230
+ 'EOS': 'EosIo',
231
+ 'XLM': 'Stellar',
232
+ 'BAT': 'Ethereum',
233
+ 'ETC': 'EthereumClassic',
234
+ 'LINK': 'Ethereum',
235
+ 'MKR': 'Ethereum',
236
+ 'DAI': 'Ethereum',
237
+ 'COMP': 'Ethereum',
238
+ 'SNX': 'Ethereum',
239
+ 'YFI': 'Ethereum',
240
+ 'AAVE': 'Ethereum',
241
+ 'GRT': 'Ethereum',
242
+ 'DOT': 'Polkadot',
243
+ 'UNI': 'Ethereum',
244
+ 'ADA': 'Cardano',
245
+ 'MATIC': 'Ethereum',
246
+ 'DOGE': 'Dogecoin',
247
+ 'SOL': 'Solana',
248
+ 'MANA': 'Ethereum',
249
+ 'SAND': 'Ethereum',
250
+ 'SHIB': 'Ethereum',
251
+ 'TRX': 'Tron',
252
+ 'RENDER': 'Solana',
253
+ 'WIF': 'Solana',
254
+ 'RLUSD': 'Ethereum',
255
+ 'PEPE': 'Ethereum',
256
+ },
257
+ 'networks': {
258
+ 'BTC': 'Bitcoin',
259
+ 'ETH': 'Ethereum',
260
+ 'BCH': 'BitcoinCash',
261
+ 'LTC': 'Litecoin',
262
+ 'XRP': 'XrpLedger',
263
+ 'EOS': 'EosIo',
264
+ 'XLM': 'Stellar',
265
+ 'ETC': 'EthereumClassic',
266
+ 'BSV': 'BitcoinSV',
267
+ 'DOGE': 'Dogecoin',
268
+ 'DOT': 'Polkadot',
269
+ 'ADA': 'Cardano',
270
+ 'SOL': 'Solana',
271
+ 'TRX': 'Tron',
272
+ },
273
+ },
144
274
  })
145
275
 
146
- async def fetch_markets(self, params={}):
276
+ async def fetch_markets(self, params={}) -> List[Market]:
147
277
  """
148
278
  retrieves data on all markets for independentreserve
149
279
  :param dict [params]: extra parameters specific to the exchange API endpoint
150
280
  :returns dict[]: an array of objects representing market data
151
281
  """
152
- baseCurrencies = await self.publicGetGetValidPrimaryCurrencyCodes(params)
282
+ baseCurrenciesPromise = self.publicGetGetValidPrimaryCurrencyCodes(params)
153
283
  # ['Xbt', 'Eth', 'Usdt', ...]
154
- quoteCurrencies = await self.publicGetGetValidSecondaryCurrencyCodes(params)
284
+ quoteCurrenciesPromise = self.publicGetGetValidSecondaryCurrencyCodes(params)
155
285
  # ['Aud', 'Usd', 'Nzd', 'Sgd']
156
- limits = await self.publicGetGetOrderMinimumVolumes(params)
286
+ limitsPromise = self.publicGetGetOrderMinimumVolumes(params)
287
+ baseCurrencies, quoteCurrencies, limits = await asyncio.gather(*[baseCurrenciesPromise, quoteCurrenciesPromise, limitsPromise])
157
288
  #
158
289
  # {
159
290
  # "Xbt": 0.0001,
@@ -223,7 +354,7 @@ class independentreserve(Exchange, ImplicitAPI):
223
354
  return result
224
355
 
225
356
  def parse_balance(self, response) -> Balances:
226
- result = {'info': response}
357
+ result: dict = {'info': response}
227
358
  for i in range(0, len(response)):
228
359
  balance = response[i]
229
360
  currencyId = self.safe_string(balance, 'CurrencyCode')
@@ -254,7 +385,7 @@ class independentreserve(Exchange, ImplicitAPI):
254
385
  """
255
386
  await self.load_markets()
256
387
  market = self.market(symbol)
257
- request = {
388
+ request: dict = {
258
389
  'primaryCurrencyCode': market['baseId'],
259
390
  'secondaryCurrencyCode': market['quoteId'],
260
391
  }
@@ -262,7 +393,7 @@ class independentreserve(Exchange, ImplicitAPI):
262
393
  timestamp = self.parse8601(self.safe_string(response, 'CreatedTimestampUtc'))
263
394
  return self.parse_order_book(response, market['symbol'], timestamp, 'BuyOrders', 'SellOrders', 'Price', 'Volume')
264
395
 
265
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
396
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
266
397
  # {
267
398
  # "DayHighestPrice":43489.49,
268
399
  # "DayLowestPrice":41998.32,
@@ -317,7 +448,7 @@ class independentreserve(Exchange, ImplicitAPI):
317
448
  """
318
449
  await self.load_markets()
319
450
  market = self.market(symbol)
320
- request = {
451
+ request: dict = {
321
452
  'primaryCurrencyCode': market['baseId'],
322
453
  'secondaryCurrencyCode': market['quoteId'],
323
454
  }
@@ -337,7 +468,7 @@ class independentreserve(Exchange, ImplicitAPI):
337
468
  # }
338
469
  return self.parse_ticker(response, market)
339
470
 
340
- def parse_order(self, order, market: Market = None) -> Order:
471
+ def parse_order(self, order: dict, market: Market = None) -> Order:
341
472
  #
342
473
  # fetchOrder
343
474
  #
@@ -372,6 +503,21 @@ class independentreserve(Exchange, ImplicitAPI):
372
503
  # "FeePercent": 0.005,
373
504
  # }
374
505
  #
506
+ # cancelOrder
507
+ #
508
+ # {
509
+ # "AvgPrice": 455.48,
510
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
511
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
512
+ # "Price": 485.76,
513
+ # "PrimaryCurrencyCode": "Xbt",
514
+ # "ReservedAmount": 0.358,
515
+ # "SecondaryCurrencyCode": "Usd",
516
+ # "Status": "Cancelled",
517
+ # "Type": "LimitOffer",
518
+ # "VolumeFilled": 0,
519
+ # "VolumeOrdered": 0.358
520
+ # }
375
521
  symbol = None
376
522
  baseId = self.safe_string(order, 'PrimaryCurrencyCode')
377
523
  quoteId = self.safe_string(order, 'SecondaryCurrencyCode')
@@ -415,7 +561,6 @@ class independentreserve(Exchange, ImplicitAPI):
415
561
  'postOnly': None,
416
562
  'side': side,
417
563
  'price': self.safe_string(order, 'Price'),
418
- 'stopPrice': None,
419
564
  'triggerPrice': None,
420
565
  'cost': self.safe_string(order, 'Value'),
421
566
  'average': self.safe_string(order, 'AvgPrice'),
@@ -431,8 +576,8 @@ class independentreserve(Exchange, ImplicitAPI):
431
576
  'trades': None,
432
577
  }, market)
433
578
 
434
- def parse_order_status(self, status):
435
- statuses = {
579
+ def parse_order_status(self, status: Str):
580
+ statuses: dict = {
436
581
  'Open': 'open',
437
582
  'PartiallyFilled': 'open',
438
583
  'Filled': 'closed',
@@ -446,6 +591,7 @@ class independentreserve(Exchange, ImplicitAPI):
446
591
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
447
592
  """
448
593
  fetches information on an order made by the user
594
+ :param str id: order id
449
595
  :param str symbol: unified symbol of the market the order was made in
450
596
  :param dict [params]: extra parameters specific to the exchange API endpoint
451
597
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -480,7 +626,7 @@ class independentreserve(Exchange, ImplicitAPI):
480
626
  request['pageIndex'] = 1
481
627
  request['pageSize'] = limit
482
628
  response = await self.privatePostGetOpenOrders(self.extend(request, params))
483
- data = self.safe_value(response, 'Data', [])
629
+ data = self.safe_list(response, 'Data', [])
484
630
  return self.parse_orders(data, market, since, limit)
485
631
 
486
632
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -504,7 +650,7 @@ class independentreserve(Exchange, ImplicitAPI):
504
650
  request['pageIndex'] = 1
505
651
  request['pageSize'] = limit
506
652
  response = await self.privatePostGetClosedOrders(self.extend(request, params))
507
- data = self.safe_value(response, 'Data', [])
653
+ data = self.safe_list(response, 'Data', [])
508
654
  return self.parse_orders(data, market, since, limit)
509
655
 
510
656
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 50, params={}):
@@ -530,7 +676,7 @@ class independentreserve(Exchange, ImplicitAPI):
530
676
  market = self.market(symbol)
531
677
  return self.parse_trades(response['Data'], market, since, limit)
532
678
 
533
- def parse_trade(self, trade, market: Market = None) -> Trade:
679
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
534
680
  timestamp = self.parse8601(trade['TradeTimestampUtc'])
535
681
  id = self.safe_string(trade, 'TradeGuid')
536
682
  orderId = self.safe_string(trade, 'OrderGuid')
@@ -578,7 +724,7 @@ class independentreserve(Exchange, ImplicitAPI):
578
724
  """
579
725
  await self.load_markets()
580
726
  market = self.market(symbol)
581
- request = {
727
+ request: dict = {
582
728
  'primaryCurrencyCode': market['baseId'],
583
729
  'secondaryCurrencyCode': market['quoteId'],
584
730
  'numberOfRecentTradesToRetrieve': 50, # max = 50
@@ -586,7 +732,7 @@ class independentreserve(Exchange, ImplicitAPI):
586
732
  response = await self.publicGetGetRecentTrades(self.extend(request, params))
587
733
  return self.parse_trades(response['Trades'], market, since, limit)
588
734
 
589
- async def fetch_trading_fees(self, params={}):
735
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
590
736
  """
591
737
  fetch the trading fees for multiple markets
592
738
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -603,7 +749,7 @@ class independentreserve(Exchange, ImplicitAPI):
603
749
  # ...
604
750
  # ]
605
751
  #
606
- fees = {}
752
+ fees: dict = {}
607
753
  for i in range(0, len(response)):
608
754
  fee = response[i]
609
755
  currencyId = self.safe_string(fee, 'CurrencyCode')
@@ -613,7 +759,7 @@ class independentreserve(Exchange, ImplicitAPI):
613
759
  'info': fee,
614
760
  'fee': tradingFee,
615
761
  }
616
- result = {}
762
+ result: dict = {}
617
763
  for i in range(0, len(self.symbols)):
618
764
  symbol = self.symbols[i]
619
765
  market = self.market(symbol)
@@ -635,7 +781,7 @@ class independentreserve(Exchange, ImplicitAPI):
635
781
  :param str type: 'market' or 'limit'
636
782
  :param str side: 'buy' or 'sell'
637
783
  :param float amount: how much of currency you want to trade in units of base currency
638
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
784
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
639
785
  :param dict [params]: extra parameters specific to the exchange API endpoint
640
786
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
641
787
  """
@@ -663,28 +809,49 @@ class independentreserve(Exchange, ImplicitAPI):
663
809
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
664
810
  """
665
811
  cancels an open order
812
+
813
+ https://www.independentreserve.com/features/api#CancelOrder
814
+
666
815
  :param str id: order id
667
816
  :param str symbol: unified symbol of the market the order was made in
668
817
  :param dict [params]: extra parameters specific to the exchange API endpoint
669
818
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
670
819
  """
671
820
  await self.load_markets()
672
- request = {
821
+ request: dict = {
673
822
  'orderGuid': id,
674
823
  }
675
- return await self.privatePostCancelOrder(self.extend(request, params))
824
+ response = await self.privatePostCancelOrder(self.extend(request, params))
825
+ #
826
+ # {
827
+ # "AvgPrice": 455.48,
828
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
829
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
830
+ # "Price": 485.76,
831
+ # "PrimaryCurrencyCode": "Xbt",
832
+ # "ReservedAmount": 0.358,
833
+ # "SecondaryCurrencyCode": "Usd",
834
+ # "Status": "Cancelled",
835
+ # "Type": "LimitOffer",
836
+ # "VolumeFilled": 0,
837
+ # "VolumeOrdered": 0.358
838
+ # }
839
+ #
840
+ return self.parse_order(response)
676
841
 
677
- async def fetch_deposit_address(self, code: str, params={}):
842
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
678
843
  """
679
844
  fetch the deposit address for a currency associated with self account
680
- :see: https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
845
+
846
+ https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
847
+
681
848
  :param str code: unified currency code
682
849
  :param dict [params]: extra parameters specific to the exchange API endpoint
683
850
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
684
851
  """
685
852
  await self.load_markets()
686
853
  currency = self.currency(code)
687
- request = {
854
+ request: dict = {
688
855
  'primaryCurrencyCode': currency['id'],
689
856
  }
690
857
  response = await self.privatePostGetDigitalCurrencyDepositAddress(self.extend(request, params))
@@ -698,7 +865,7 @@ class independentreserve(Exchange, ImplicitAPI):
698
865
  #
699
866
  return self.parse_deposit_address(response)
700
867
 
701
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
868
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
702
869
  #
703
870
  # {
704
871
  # Tag: '3307446684',
@@ -712,9 +879,111 @@ class independentreserve(Exchange, ImplicitAPI):
712
879
  return {
713
880
  'info': depositAddress,
714
881
  'currency': self.safe_string(currency, 'code'),
882
+ 'network': None,
715
883
  'address': address,
716
884
  'tag': self.safe_string(depositAddress, 'Tag'),
885
+ }
886
+
887
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
888
+ """
889
+ make a withdrawal
890
+
891
+ https://www.independentreserve.com/features/api#WithdrawDigitalCurrency
892
+
893
+ :param str code: unified currency code
894
+ :param float amount: the amount to withdraw
895
+ :param str address: the address to withdraw to
896
+ :param str tag:
897
+ :param dict [params]: extra parameters specific to the exchange API endpoint
898
+
899
+ EXCHANGE SPECIFIC PARAMETERS
900
+ :param dict [params.comment]: withdrawal comment, should not exceed 500 characters
901
+ :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
902
+ """
903
+ tag, params = self.handle_withdraw_tag_and_params(tag, params)
904
+ await self.load_markets()
905
+ currency = self.currency(code)
906
+ request: dict = {
907
+ 'primaryCurrencyCode': currency['id'],
908
+ 'withdrawalAddress': address,
909
+ 'amount': self.currency_to_precision(code, amount),
910
+ }
911
+ if tag is not None:
912
+ request['destinationTag'] = tag
913
+ networkCode = None
914
+ networkCode, params = self.handle_network_code_and_params(params)
915
+ if networkCode is not None:
916
+ raise BadRequest(self.id + ' withdraw() does not accept params["networkCode"]')
917
+ response = await self.privatePostWithdrawDigitalCurrency(self.extend(request, params))
918
+ #
919
+ # {
920
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
921
+ # "PrimaryCurrencyCode": "Bch",
922
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
923
+ # "Amount": {
924
+ # "Total": 0.1231,
925
+ # "Fee": 0.0001
926
+ # },
927
+ # "Destination": {
928
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
929
+ # "Tag": null
930
+ # },
931
+ # "Status": "Pending",
932
+ # "Transaction": null
933
+ # }
934
+ #
935
+ return self.parse_transaction(response, currency)
936
+
937
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
938
+ #
939
+ # {
940
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
941
+ # "PrimaryCurrencyCode": "Bch",
942
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
943
+ # "Amount": {
944
+ # "Total": 0.1231,
945
+ # "Fee": 0.0001
946
+ # },
947
+ # "Destination": {
948
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
949
+ # "Tag": null
950
+ # },
951
+ # "Status": "Pending",
952
+ # "Transaction": null
953
+ # }
954
+ #
955
+ amount = self.safe_dict(transaction, 'Amount')
956
+ destination = self.safe_dict(transaction, 'Destination')
957
+ currencyId = self.safe_string(transaction, 'PrimaryCurrencyCode')
958
+ datetime = self.safe_string(transaction, 'CreatedTimestampUtc')
959
+ address = self.safe_string(destination, 'Address')
960
+ tag = self.safe_string(destination, 'Tag')
961
+ code = self.safe_currency_code(currencyId, currency)
962
+ return {
963
+ 'info': transaction,
964
+ 'id': self.safe_string(transaction, 'TransactionGuid'),
965
+ 'txid': None,
966
+ 'type': 'withdraw',
967
+ 'currency': code,
717
968
  'network': None,
969
+ 'amount': self.safe_number(amount, 'Total'),
970
+ 'status': self.safe_string(transaction, 'Status'),
971
+ 'timestamp': self.parse8601(datetime),
972
+ 'datetime': datetime,
973
+ 'address': address,
974
+ 'addressFrom': None,
975
+ 'addressTo': address,
976
+ 'tag': tag,
977
+ 'tagFrom': None,
978
+ 'tagTo': tag,
979
+ 'updated': None,
980
+ 'comment': None,
981
+ 'fee': {
982
+ 'currency': code,
983
+ 'cost': self.safe_number(amount, 'Fee'),
984
+ 'rate': None,
985
+ },
986
+ 'internal': False,
718
987
  }
719
988
 
720
989
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):