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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +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 +3104 -880
  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 +1513 -563
  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 +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +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 +3104 -880
  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 +1513 -563
  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 +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +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 +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +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.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.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.48.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
  },
@@ -141,19 +153,74 @@ class independentreserve(Exchange, ImplicitAPI):
141
153
  'PLA': 'PlayChip',
142
154
  },
143
155
  'precisionMode': TICK_SIZE,
156
+ 'options': {
157
+ 'defaultNetworks': {
158
+ 'USDT': 'Ethereum',
159
+ 'USDC': 'Ethereum',
160
+ 'BTC': 'Bitcoin',
161
+ 'BCH': 'BitcoinCash',
162
+ 'ETH': 'Ethereum',
163
+ 'LTC': 'Litecoin',
164
+ 'XRP': 'XrpLedger',
165
+ 'ZRX': 'Ethereum',
166
+ 'EOS': 'EosIo',
167
+ 'XLM': 'Stellar',
168
+ 'BAT': 'Ethereum',
169
+ 'ETC': 'EthereumClassic',
170
+ 'LINK': 'Ethereum',
171
+ 'MKR': 'Ethereum',
172
+ 'DAI': 'Ethereum',
173
+ 'COMP': 'Ethereum',
174
+ 'SNX': 'Ethereum',
175
+ 'YFI': 'Ethereum',
176
+ 'AAVE': 'Ethereum',
177
+ 'GRT': 'Ethereum',
178
+ 'DOT': 'Polkadot',
179
+ 'UNI': 'Ethereum',
180
+ 'ADA': 'Cardano',
181
+ 'MATIC': 'Ethereum',
182
+ 'DOGE': 'Dogecoin',
183
+ 'SOL': 'Solana',
184
+ 'MANA': 'Ethereum',
185
+ 'SAND': 'Ethereum',
186
+ 'SHIB': 'Ethereum',
187
+ 'TRX': 'Tron',
188
+ 'RENDER': 'Solana',
189
+ 'WIF': 'Solana',
190
+ 'RLUSD': 'Ethereum',
191
+ 'PEPE': 'Ethereum',
192
+ },
193
+ 'networks': {
194
+ 'BTC': 'Bitcoin',
195
+ 'ETH': 'Ethereum',
196
+ 'BCH': 'BitcoinCash',
197
+ 'LTC': 'Litecoin',
198
+ 'XRP': 'XrpLedger',
199
+ 'EOS': 'EosIo',
200
+ 'XLM': 'Stellar',
201
+ 'ETC': 'EthereumClassic',
202
+ 'BSV': 'BitcoinSV',
203
+ 'DOGE': 'Dogecoin',
204
+ 'DOT': 'Polkadot',
205
+ 'ADA': 'Cardano',
206
+ 'SOL': 'Solana',
207
+ 'TRX': 'Tron',
208
+ },
209
+ },
144
210
  })
145
211
 
146
- async def fetch_markets(self, params={}):
212
+ async def fetch_markets(self, params={}) -> List[Market]:
147
213
  """
148
214
  retrieves data on all markets for independentreserve
149
215
  :param dict [params]: extra parameters specific to the exchange API endpoint
150
216
  :returns dict[]: an array of objects representing market data
151
217
  """
152
- baseCurrencies = await self.publicGetGetValidPrimaryCurrencyCodes(params)
218
+ baseCurrenciesPromise = self.publicGetGetValidPrimaryCurrencyCodes(params)
153
219
  # ['Xbt', 'Eth', 'Usdt', ...]
154
- quoteCurrencies = await self.publicGetGetValidSecondaryCurrencyCodes(params)
220
+ quoteCurrenciesPromise = self.publicGetGetValidSecondaryCurrencyCodes(params)
155
221
  # ['Aud', 'Usd', 'Nzd', 'Sgd']
156
- limits = await self.publicGetGetOrderMinimumVolumes(params)
222
+ limitsPromise = self.publicGetGetOrderMinimumVolumes(params)
223
+ baseCurrencies, quoteCurrencies, limits = await asyncio.gather(*[baseCurrenciesPromise, quoteCurrenciesPromise, limitsPromise])
157
224
  #
158
225
  # {
159
226
  # "Xbt": 0.0001,
@@ -223,7 +290,7 @@ class independentreserve(Exchange, ImplicitAPI):
223
290
  return result
224
291
 
225
292
  def parse_balance(self, response) -> Balances:
226
- result = {'info': response}
293
+ result: dict = {'info': response}
227
294
  for i in range(0, len(response)):
228
295
  balance = response[i]
229
296
  currencyId = self.safe_string(balance, 'CurrencyCode')
@@ -254,7 +321,7 @@ class independentreserve(Exchange, ImplicitAPI):
254
321
  """
255
322
  await self.load_markets()
256
323
  market = self.market(symbol)
257
- request = {
324
+ request: dict = {
258
325
  'primaryCurrencyCode': market['baseId'],
259
326
  'secondaryCurrencyCode': market['quoteId'],
260
327
  }
@@ -262,7 +329,7 @@ class independentreserve(Exchange, ImplicitAPI):
262
329
  timestamp = self.parse8601(self.safe_string(response, 'CreatedTimestampUtc'))
263
330
  return self.parse_order_book(response, market['symbol'], timestamp, 'BuyOrders', 'SellOrders', 'Price', 'Volume')
264
331
 
265
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
332
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
266
333
  # {
267
334
  # "DayHighestPrice":43489.49,
268
335
  # "DayLowestPrice":41998.32,
@@ -317,7 +384,7 @@ class independentreserve(Exchange, ImplicitAPI):
317
384
  """
318
385
  await self.load_markets()
319
386
  market = self.market(symbol)
320
- request = {
387
+ request: dict = {
321
388
  'primaryCurrencyCode': market['baseId'],
322
389
  'secondaryCurrencyCode': market['quoteId'],
323
390
  }
@@ -337,7 +404,7 @@ class independentreserve(Exchange, ImplicitAPI):
337
404
  # }
338
405
  return self.parse_ticker(response, market)
339
406
 
340
- def parse_order(self, order, market: Market = None) -> Order:
407
+ def parse_order(self, order: dict, market: Market = None) -> Order:
341
408
  #
342
409
  # fetchOrder
343
410
  #
@@ -372,6 +439,21 @@ class independentreserve(Exchange, ImplicitAPI):
372
439
  # "FeePercent": 0.005,
373
440
  # }
374
441
  #
442
+ # cancelOrder
443
+ #
444
+ # {
445
+ # "AvgPrice": 455.48,
446
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
447
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
448
+ # "Price": 485.76,
449
+ # "PrimaryCurrencyCode": "Xbt",
450
+ # "ReservedAmount": 0.358,
451
+ # "SecondaryCurrencyCode": "Usd",
452
+ # "Status": "Cancelled",
453
+ # "Type": "LimitOffer",
454
+ # "VolumeFilled": 0,
455
+ # "VolumeOrdered": 0.358
456
+ # }
375
457
  symbol = None
376
458
  baseId = self.safe_string(order, 'PrimaryCurrencyCode')
377
459
  quoteId = self.safe_string(order, 'SecondaryCurrencyCode')
@@ -415,7 +497,6 @@ class independentreserve(Exchange, ImplicitAPI):
415
497
  'postOnly': None,
416
498
  'side': side,
417
499
  'price': self.safe_string(order, 'Price'),
418
- 'stopPrice': None,
419
500
  'triggerPrice': None,
420
501
  'cost': self.safe_string(order, 'Value'),
421
502
  'average': self.safe_string(order, 'AvgPrice'),
@@ -431,8 +512,8 @@ class independentreserve(Exchange, ImplicitAPI):
431
512
  'trades': None,
432
513
  }, market)
433
514
 
434
- def parse_order_status(self, status):
435
- statuses = {
515
+ def parse_order_status(self, status: Str):
516
+ statuses: dict = {
436
517
  'Open': 'open',
437
518
  'PartiallyFilled': 'open',
438
519
  'Filled': 'closed',
@@ -446,6 +527,7 @@ class independentreserve(Exchange, ImplicitAPI):
446
527
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
447
528
  """
448
529
  fetches information on an order made by the user
530
+ :param str id: order id
449
531
  :param str symbol: unified symbol of the market the order was made in
450
532
  :param dict [params]: extra parameters specific to the exchange API endpoint
451
533
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -480,7 +562,7 @@ class independentreserve(Exchange, ImplicitAPI):
480
562
  request['pageIndex'] = 1
481
563
  request['pageSize'] = limit
482
564
  response = await self.privatePostGetOpenOrders(self.extend(request, params))
483
- data = self.safe_value(response, 'Data', [])
565
+ data = self.safe_list(response, 'Data', [])
484
566
  return self.parse_orders(data, market, since, limit)
485
567
 
486
568
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -504,7 +586,7 @@ class independentreserve(Exchange, ImplicitAPI):
504
586
  request['pageIndex'] = 1
505
587
  request['pageSize'] = limit
506
588
  response = await self.privatePostGetClosedOrders(self.extend(request, params))
507
- data = self.safe_value(response, 'Data', [])
589
+ data = self.safe_list(response, 'Data', [])
508
590
  return self.parse_orders(data, market, since, limit)
509
591
 
510
592
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 50, params={}):
@@ -530,7 +612,7 @@ class independentreserve(Exchange, ImplicitAPI):
530
612
  market = self.market(symbol)
531
613
  return self.parse_trades(response['Data'], market, since, limit)
532
614
 
533
- def parse_trade(self, trade, market: Market = None) -> Trade:
615
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
534
616
  timestamp = self.parse8601(trade['TradeTimestampUtc'])
535
617
  id = self.safe_string(trade, 'TradeGuid')
536
618
  orderId = self.safe_string(trade, 'OrderGuid')
@@ -578,7 +660,7 @@ class independentreserve(Exchange, ImplicitAPI):
578
660
  """
579
661
  await self.load_markets()
580
662
  market = self.market(symbol)
581
- request = {
663
+ request: dict = {
582
664
  'primaryCurrencyCode': market['baseId'],
583
665
  'secondaryCurrencyCode': market['quoteId'],
584
666
  'numberOfRecentTradesToRetrieve': 50, # max = 50
@@ -586,7 +668,7 @@ class independentreserve(Exchange, ImplicitAPI):
586
668
  response = await self.publicGetGetRecentTrades(self.extend(request, params))
587
669
  return self.parse_trades(response['Trades'], market, since, limit)
588
670
 
589
- async def fetch_trading_fees(self, params={}):
671
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
590
672
  """
591
673
  fetch the trading fees for multiple markets
592
674
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -603,7 +685,7 @@ class independentreserve(Exchange, ImplicitAPI):
603
685
  # ...
604
686
  # ]
605
687
  #
606
- fees = {}
688
+ fees: dict = {}
607
689
  for i in range(0, len(response)):
608
690
  fee = response[i]
609
691
  currencyId = self.safe_string(fee, 'CurrencyCode')
@@ -613,7 +695,7 @@ class independentreserve(Exchange, ImplicitAPI):
613
695
  'info': fee,
614
696
  'fee': tradingFee,
615
697
  }
616
- result = {}
698
+ result: dict = {}
617
699
  for i in range(0, len(self.symbols)):
618
700
  symbol = self.symbols[i]
619
701
  market = self.market(symbol)
@@ -635,7 +717,7 @@ class independentreserve(Exchange, ImplicitAPI):
635
717
  :param str type: 'market' or 'limit'
636
718
  :param str side: 'buy' or 'sell'
637
719
  :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
720
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
639
721
  :param dict [params]: extra parameters specific to the exchange API endpoint
640
722
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
641
723
  """
@@ -663,28 +745,49 @@ class independentreserve(Exchange, ImplicitAPI):
663
745
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
664
746
  """
665
747
  cancels an open order
748
+
749
+ https://www.independentreserve.com/features/api#CancelOrder
750
+
666
751
  :param str id: order id
667
752
  :param str symbol: unified symbol of the market the order was made in
668
753
  :param dict [params]: extra parameters specific to the exchange API endpoint
669
754
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
670
755
  """
671
756
  await self.load_markets()
672
- request = {
757
+ request: dict = {
673
758
  'orderGuid': id,
674
759
  }
675
- return await self.privatePostCancelOrder(self.extend(request, params))
760
+ response = await self.privatePostCancelOrder(self.extend(request, params))
761
+ #
762
+ # {
763
+ # "AvgPrice": 455.48,
764
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
765
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
766
+ # "Price": 485.76,
767
+ # "PrimaryCurrencyCode": "Xbt",
768
+ # "ReservedAmount": 0.358,
769
+ # "SecondaryCurrencyCode": "Usd",
770
+ # "Status": "Cancelled",
771
+ # "Type": "LimitOffer",
772
+ # "VolumeFilled": 0,
773
+ # "VolumeOrdered": 0.358
774
+ # }
775
+ #
776
+ return self.parse_order(response)
676
777
 
677
- async def fetch_deposit_address(self, code: str, params={}):
778
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
678
779
  """
679
780
  fetch the deposit address for a currency associated with self account
680
- :see: https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
781
+
782
+ https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
783
+
681
784
  :param str code: unified currency code
682
785
  :param dict [params]: extra parameters specific to the exchange API endpoint
683
786
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
684
787
  """
685
788
  await self.load_markets()
686
789
  currency = self.currency(code)
687
- request = {
790
+ request: dict = {
688
791
  'primaryCurrencyCode': currency['id'],
689
792
  }
690
793
  response = await self.privatePostGetDigitalCurrencyDepositAddress(self.extend(request, params))
@@ -698,7 +801,7 @@ class independentreserve(Exchange, ImplicitAPI):
698
801
  #
699
802
  return self.parse_deposit_address(response)
700
803
 
701
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
804
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
702
805
  #
703
806
  # {
704
807
  # Tag: '3307446684',
@@ -712,9 +815,111 @@ class independentreserve(Exchange, ImplicitAPI):
712
815
  return {
713
816
  'info': depositAddress,
714
817
  'currency': self.safe_string(currency, 'code'),
818
+ 'network': None,
715
819
  'address': address,
716
820
  'tag': self.safe_string(depositAddress, 'Tag'),
821
+ }
822
+
823
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
824
+ """
825
+ make a withdrawal
826
+
827
+ https://www.independentreserve.com/features/api#WithdrawDigitalCurrency
828
+
829
+ :param str code: unified currency code
830
+ :param float amount: the amount to withdraw
831
+ :param str address: the address to withdraw to
832
+ :param str tag:
833
+ :param dict [params]: extra parameters specific to the exchange API endpoint
834
+
835
+ EXCHANGE SPECIFIC PARAMETERS
836
+ :param dict [params.comment]: withdrawal comment, should not exceed 500 characters
837
+ :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
838
+ """
839
+ tag, params = self.handle_withdraw_tag_and_params(tag, params)
840
+ await self.load_markets()
841
+ currency = self.currency(code)
842
+ request: dict = {
843
+ 'primaryCurrencyCode': currency['id'],
844
+ 'withdrawalAddress': address,
845
+ 'amount': self.currency_to_precision(code, amount),
846
+ }
847
+ if tag is not None:
848
+ request['destinationTag'] = tag
849
+ networkCode = None
850
+ networkCode, params = self.handle_network_code_and_params(params)
851
+ if networkCode is not None:
852
+ raise BadRequest(self.id + ' withdraw() does not accept params["networkCode"]')
853
+ response = await self.privatePostWithdrawDigitalCurrency(self.extend(request, params))
854
+ #
855
+ # {
856
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
857
+ # "PrimaryCurrencyCode": "Bch",
858
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
859
+ # "Amount": {
860
+ # "Total": 0.1231,
861
+ # "Fee": 0.0001
862
+ # },
863
+ # "Destination": {
864
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
865
+ # "Tag": null
866
+ # },
867
+ # "Status": "Pending",
868
+ # "Transaction": null
869
+ # }
870
+ #
871
+ return self.parse_transaction(response, currency)
872
+
873
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
874
+ #
875
+ # {
876
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
877
+ # "PrimaryCurrencyCode": "Bch",
878
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
879
+ # "Amount": {
880
+ # "Total": 0.1231,
881
+ # "Fee": 0.0001
882
+ # },
883
+ # "Destination": {
884
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
885
+ # "Tag": null
886
+ # },
887
+ # "Status": "Pending",
888
+ # "Transaction": null
889
+ # }
890
+ #
891
+ amount = self.safe_dict(transaction, 'Amount')
892
+ destination = self.safe_dict(transaction, 'Destination')
893
+ currencyId = self.safe_string(transaction, 'PrimaryCurrencyCode')
894
+ datetime = self.safe_string(transaction, 'CreatedTimestampUtc')
895
+ address = self.safe_string(destination, 'Address')
896
+ tag = self.safe_string(destination, 'Tag')
897
+ code = self.safe_currency_code(currencyId, currency)
898
+ return {
899
+ 'info': transaction,
900
+ 'id': self.safe_string(transaction, 'TransactionGuid'),
901
+ 'txid': None,
902
+ 'type': 'withdraw',
903
+ 'currency': code,
717
904
  'network': None,
905
+ 'amount': self.safe_number(amount, 'Total'),
906
+ 'status': self.safe_string(transaction, 'Status'),
907
+ 'timestamp': self.parse8601(datetime),
908
+ 'datetime': datetime,
909
+ 'address': address,
910
+ 'addressFrom': None,
911
+ 'addressTo': address,
912
+ 'tag': tag,
913
+ 'tagFrom': None,
914
+ 'tagTo': tag,
915
+ 'updated': None,
916
+ 'comment': None,
917
+ 'fee': {
918
+ 'currency': code,
919
+ 'cost': self.safe_number(amount, 'Fee'),
920
+ 'rate': None,
921
+ },
922
+ 'internal': False,
718
923
  }
719
924
 
720
925
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):