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