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
@@ -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
  },
@@ -141,19 +152,74 @@ class independentreserve(Exchange, ImplicitAPI):
141
152
  'PLA': 'PlayChip',
142
153
  },
143
154
  'precisionMode': TICK_SIZE,
155
+ 'options': {
156
+ 'defaultNetworks': {
157
+ 'USDT': 'Ethereum',
158
+ 'USDC': 'Ethereum',
159
+ 'BTC': 'Bitcoin',
160
+ 'BCH': 'BitcoinCash',
161
+ 'ETH': 'Ethereum',
162
+ 'LTC': 'Litecoin',
163
+ 'XRP': 'XrpLedger',
164
+ 'ZRX': 'Ethereum',
165
+ 'EOS': 'EosIo',
166
+ 'XLM': 'Stellar',
167
+ 'BAT': 'Ethereum',
168
+ 'ETC': 'EthereumClassic',
169
+ 'LINK': 'Ethereum',
170
+ 'MKR': 'Ethereum',
171
+ 'DAI': 'Ethereum',
172
+ 'COMP': 'Ethereum',
173
+ 'SNX': 'Ethereum',
174
+ 'YFI': 'Ethereum',
175
+ 'AAVE': 'Ethereum',
176
+ 'GRT': 'Ethereum',
177
+ 'DOT': 'Polkadot',
178
+ 'UNI': 'Ethereum',
179
+ 'ADA': 'Cardano',
180
+ 'MATIC': 'Ethereum',
181
+ 'DOGE': 'Dogecoin',
182
+ 'SOL': 'Solana',
183
+ 'MANA': 'Ethereum',
184
+ 'SAND': 'Ethereum',
185
+ 'SHIB': 'Ethereum',
186
+ 'TRX': 'Tron',
187
+ 'RENDER': 'Solana',
188
+ 'WIF': 'Solana',
189
+ 'RLUSD': 'Ethereum',
190
+ 'PEPE': 'Ethereum',
191
+ },
192
+ 'networks': {
193
+ 'BTC': 'Bitcoin',
194
+ 'ETH': 'Ethereum',
195
+ 'BCH': 'BitcoinCash',
196
+ 'LTC': 'Litecoin',
197
+ 'XRP': 'XrpLedger',
198
+ 'EOS': 'EosIo',
199
+ 'XLM': 'Stellar',
200
+ 'ETC': 'EthereumClassic',
201
+ 'BSV': 'BitcoinSV',
202
+ 'DOGE': 'Dogecoin',
203
+ 'DOT': 'Polkadot',
204
+ 'ADA': 'Cardano',
205
+ 'SOL': 'Solana',
206
+ 'TRX': 'Tron',
207
+ },
208
+ },
144
209
  })
145
210
 
146
- def fetch_markets(self, params={}):
211
+ def fetch_markets(self, params={}) -> List[Market]:
147
212
  """
148
213
  retrieves data on all markets for independentreserve
149
214
  :param dict [params]: extra parameters specific to the exchange API endpoint
150
215
  :returns dict[]: an array of objects representing market data
151
216
  """
152
- baseCurrencies = self.publicGetGetValidPrimaryCurrencyCodes(params)
217
+ baseCurrenciesPromise = self.publicGetGetValidPrimaryCurrencyCodes(params)
153
218
  # ['Xbt', 'Eth', 'Usdt', ...]
154
- quoteCurrencies = self.publicGetGetValidSecondaryCurrencyCodes(params)
219
+ quoteCurrenciesPromise = self.publicGetGetValidSecondaryCurrencyCodes(params)
155
220
  # ['Aud', 'Usd', 'Nzd', 'Sgd']
156
- limits = self.publicGetGetOrderMinimumVolumes(params)
221
+ limitsPromise = self.publicGetGetOrderMinimumVolumes(params)
222
+ baseCurrencies, quoteCurrencies, limits = [baseCurrenciesPromise, quoteCurrenciesPromise, limitsPromise]
157
223
  #
158
224
  # {
159
225
  # "Xbt": 0.0001,
@@ -223,7 +289,7 @@ class independentreserve(Exchange, ImplicitAPI):
223
289
  return result
224
290
 
225
291
  def parse_balance(self, response) -> Balances:
226
- result = {'info': response}
292
+ result: dict = {'info': response}
227
293
  for i in range(0, len(response)):
228
294
  balance = response[i]
229
295
  currencyId = self.safe_string(balance, 'CurrencyCode')
@@ -254,7 +320,7 @@ class independentreserve(Exchange, ImplicitAPI):
254
320
  """
255
321
  self.load_markets()
256
322
  market = self.market(symbol)
257
- request = {
323
+ request: dict = {
258
324
  'primaryCurrencyCode': market['baseId'],
259
325
  'secondaryCurrencyCode': market['quoteId'],
260
326
  }
@@ -262,7 +328,7 @@ class independentreserve(Exchange, ImplicitAPI):
262
328
  timestamp = self.parse8601(self.safe_string(response, 'CreatedTimestampUtc'))
263
329
  return self.parse_order_book(response, market['symbol'], timestamp, 'BuyOrders', 'SellOrders', 'Price', 'Volume')
264
330
 
265
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
331
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
266
332
  # {
267
333
  # "DayHighestPrice":43489.49,
268
334
  # "DayLowestPrice":41998.32,
@@ -317,7 +383,7 @@ class independentreserve(Exchange, ImplicitAPI):
317
383
  """
318
384
  self.load_markets()
319
385
  market = self.market(symbol)
320
- request = {
386
+ request: dict = {
321
387
  'primaryCurrencyCode': market['baseId'],
322
388
  'secondaryCurrencyCode': market['quoteId'],
323
389
  }
@@ -337,7 +403,7 @@ class independentreserve(Exchange, ImplicitAPI):
337
403
  # }
338
404
  return self.parse_ticker(response, market)
339
405
 
340
- def parse_order(self, order, market: Market = None) -> Order:
406
+ def parse_order(self, order: dict, market: Market = None) -> Order:
341
407
  #
342
408
  # fetchOrder
343
409
  #
@@ -372,6 +438,21 @@ class independentreserve(Exchange, ImplicitAPI):
372
438
  # "FeePercent": 0.005,
373
439
  # }
374
440
  #
441
+ # cancelOrder
442
+ #
443
+ # {
444
+ # "AvgPrice": 455.48,
445
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
446
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
447
+ # "Price": 485.76,
448
+ # "PrimaryCurrencyCode": "Xbt",
449
+ # "ReservedAmount": 0.358,
450
+ # "SecondaryCurrencyCode": "Usd",
451
+ # "Status": "Cancelled",
452
+ # "Type": "LimitOffer",
453
+ # "VolumeFilled": 0,
454
+ # "VolumeOrdered": 0.358
455
+ # }
375
456
  symbol = None
376
457
  baseId = self.safe_string(order, 'PrimaryCurrencyCode')
377
458
  quoteId = self.safe_string(order, 'SecondaryCurrencyCode')
@@ -415,7 +496,6 @@ class independentreserve(Exchange, ImplicitAPI):
415
496
  'postOnly': None,
416
497
  'side': side,
417
498
  'price': self.safe_string(order, 'Price'),
418
- 'stopPrice': None,
419
499
  'triggerPrice': None,
420
500
  'cost': self.safe_string(order, 'Value'),
421
501
  'average': self.safe_string(order, 'AvgPrice'),
@@ -431,8 +511,8 @@ class independentreserve(Exchange, ImplicitAPI):
431
511
  'trades': None,
432
512
  }, market)
433
513
 
434
- def parse_order_status(self, status):
435
- statuses = {
514
+ def parse_order_status(self, status: Str):
515
+ statuses: dict = {
436
516
  'Open': 'open',
437
517
  'PartiallyFilled': 'open',
438
518
  'Filled': 'closed',
@@ -446,6 +526,7 @@ class independentreserve(Exchange, ImplicitAPI):
446
526
  def fetch_order(self, id: str, symbol: Str = None, params={}):
447
527
  """
448
528
  fetches information on an order made by the user
529
+ :param str id: order id
449
530
  :param str symbol: unified symbol of the market the order was made in
450
531
  :param dict [params]: extra parameters specific to the exchange API endpoint
451
532
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -480,7 +561,7 @@ class independentreserve(Exchange, ImplicitAPI):
480
561
  request['pageIndex'] = 1
481
562
  request['pageSize'] = limit
482
563
  response = self.privatePostGetOpenOrders(self.extend(request, params))
483
- data = self.safe_value(response, 'Data', [])
564
+ data = self.safe_list(response, 'Data', [])
484
565
  return self.parse_orders(data, market, since, limit)
485
566
 
486
567
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -504,7 +585,7 @@ class independentreserve(Exchange, ImplicitAPI):
504
585
  request['pageIndex'] = 1
505
586
  request['pageSize'] = limit
506
587
  response = self.privatePostGetClosedOrders(self.extend(request, params))
507
- data = self.safe_value(response, 'Data', [])
588
+ data = self.safe_list(response, 'Data', [])
508
589
  return self.parse_orders(data, market, since, limit)
509
590
 
510
591
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 50, params={}):
@@ -530,7 +611,7 @@ class independentreserve(Exchange, ImplicitAPI):
530
611
  market = self.market(symbol)
531
612
  return self.parse_trades(response['Data'], market, since, limit)
532
613
 
533
- def parse_trade(self, trade, market: Market = None) -> Trade:
614
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
534
615
  timestamp = self.parse8601(trade['TradeTimestampUtc'])
535
616
  id = self.safe_string(trade, 'TradeGuid')
536
617
  orderId = self.safe_string(trade, 'OrderGuid')
@@ -578,7 +659,7 @@ class independentreserve(Exchange, ImplicitAPI):
578
659
  """
579
660
  self.load_markets()
580
661
  market = self.market(symbol)
581
- request = {
662
+ request: dict = {
582
663
  'primaryCurrencyCode': market['baseId'],
583
664
  'secondaryCurrencyCode': market['quoteId'],
584
665
  'numberOfRecentTradesToRetrieve': 50, # max = 50
@@ -586,7 +667,7 @@ class independentreserve(Exchange, ImplicitAPI):
586
667
  response = self.publicGetGetRecentTrades(self.extend(request, params))
587
668
  return self.parse_trades(response['Trades'], market, since, limit)
588
669
 
589
- def fetch_trading_fees(self, params={}):
670
+ def fetch_trading_fees(self, params={}) -> TradingFees:
590
671
  """
591
672
  fetch the trading fees for multiple markets
592
673
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -603,7 +684,7 @@ class independentreserve(Exchange, ImplicitAPI):
603
684
  # ...
604
685
  # ]
605
686
  #
606
- fees = {}
687
+ fees: dict = {}
607
688
  for i in range(0, len(response)):
608
689
  fee = response[i]
609
690
  currencyId = self.safe_string(fee, 'CurrencyCode')
@@ -613,7 +694,7 @@ class independentreserve(Exchange, ImplicitAPI):
613
694
  'info': fee,
614
695
  'fee': tradingFee,
615
696
  }
616
- result = {}
697
+ result: dict = {}
617
698
  for i in range(0, len(self.symbols)):
618
699
  symbol = self.symbols[i]
619
700
  market = self.market(symbol)
@@ -635,7 +716,7 @@ class independentreserve(Exchange, ImplicitAPI):
635
716
  :param str type: 'market' or 'limit'
636
717
  :param str side: 'buy' or 'sell'
637
718
  :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
719
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
639
720
  :param dict [params]: extra parameters specific to the exchange API endpoint
640
721
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
641
722
  """
@@ -663,28 +744,49 @@ class independentreserve(Exchange, ImplicitAPI):
663
744
  def cancel_order(self, id: str, symbol: Str = None, params={}):
664
745
  """
665
746
  cancels an open order
747
+
748
+ https://www.independentreserve.com/features/api#CancelOrder
749
+
666
750
  :param str id: order id
667
751
  :param str symbol: unified symbol of the market the order was made in
668
752
  :param dict [params]: extra parameters specific to the exchange API endpoint
669
753
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
670
754
  """
671
755
  self.load_markets()
672
- request = {
756
+ request: dict = {
673
757
  'orderGuid': id,
674
758
  }
675
- return self.privatePostCancelOrder(self.extend(request, params))
759
+ response = self.privatePostCancelOrder(self.extend(request, params))
760
+ #
761
+ # {
762
+ # "AvgPrice": 455.48,
763
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
764
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
765
+ # "Price": 485.76,
766
+ # "PrimaryCurrencyCode": "Xbt",
767
+ # "ReservedAmount": 0.358,
768
+ # "SecondaryCurrencyCode": "Usd",
769
+ # "Status": "Cancelled",
770
+ # "Type": "LimitOffer",
771
+ # "VolumeFilled": 0,
772
+ # "VolumeOrdered": 0.358
773
+ # }
774
+ #
775
+ return self.parse_order(response)
676
776
 
677
- def fetch_deposit_address(self, code: str, params={}):
777
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
678
778
  """
679
779
  fetch the deposit address for a currency associated with self account
680
- :see: https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
780
+
781
+ https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
782
+
681
783
  :param str code: unified currency code
682
784
  :param dict [params]: extra parameters specific to the exchange API endpoint
683
785
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
684
786
  """
685
787
  self.load_markets()
686
788
  currency = self.currency(code)
687
- request = {
789
+ request: dict = {
688
790
  'primaryCurrencyCode': currency['id'],
689
791
  }
690
792
  response = self.privatePostGetDigitalCurrencyDepositAddress(self.extend(request, params))
@@ -698,7 +800,7 @@ class independentreserve(Exchange, ImplicitAPI):
698
800
  #
699
801
  return self.parse_deposit_address(response)
700
802
 
701
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
803
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
702
804
  #
703
805
  # {
704
806
  # Tag: '3307446684',
@@ -712,9 +814,111 @@ class independentreserve(Exchange, ImplicitAPI):
712
814
  return {
713
815
  'info': depositAddress,
714
816
  'currency': self.safe_string(currency, 'code'),
817
+ 'network': None,
715
818
  'address': address,
716
819
  'tag': self.safe_string(depositAddress, 'Tag'),
820
+ }
821
+
822
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
823
+ """
824
+ make a withdrawal
825
+
826
+ https://www.independentreserve.com/features/api#WithdrawDigitalCurrency
827
+
828
+ :param str code: unified currency code
829
+ :param float amount: the amount to withdraw
830
+ :param str address: the address to withdraw to
831
+ :param str tag:
832
+ :param dict [params]: extra parameters specific to the exchange API endpoint
833
+
834
+ EXCHANGE SPECIFIC PARAMETERS
835
+ :param dict [params.comment]: withdrawal comment, should not exceed 500 characters
836
+ :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
837
+ """
838
+ tag, params = self.handle_withdraw_tag_and_params(tag, params)
839
+ self.load_markets()
840
+ currency = self.currency(code)
841
+ request: dict = {
842
+ 'primaryCurrencyCode': currency['id'],
843
+ 'withdrawalAddress': address,
844
+ 'amount': self.currency_to_precision(code, amount),
845
+ }
846
+ if tag is not None:
847
+ request['destinationTag'] = tag
848
+ networkCode = None
849
+ networkCode, params = self.handle_network_code_and_params(params)
850
+ if networkCode is not None:
851
+ raise BadRequest(self.id + ' withdraw() does not accept params["networkCode"]')
852
+ response = self.privatePostWithdrawDigitalCurrency(self.extend(request, params))
853
+ #
854
+ # {
855
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
856
+ # "PrimaryCurrencyCode": "Bch",
857
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
858
+ # "Amount": {
859
+ # "Total": 0.1231,
860
+ # "Fee": 0.0001
861
+ # },
862
+ # "Destination": {
863
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
864
+ # "Tag": null
865
+ # },
866
+ # "Status": "Pending",
867
+ # "Transaction": null
868
+ # }
869
+ #
870
+ return self.parse_transaction(response, currency)
871
+
872
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
873
+ #
874
+ # {
875
+ # "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
876
+ # "PrimaryCurrencyCode": "Bch",
877
+ # "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
878
+ # "Amount": {
879
+ # "Total": 0.1231,
880
+ # "Fee": 0.0001
881
+ # },
882
+ # "Destination": {
883
+ # "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
884
+ # "Tag": null
885
+ # },
886
+ # "Status": "Pending",
887
+ # "Transaction": null
888
+ # }
889
+ #
890
+ amount = self.safe_dict(transaction, 'Amount')
891
+ destination = self.safe_dict(transaction, 'Destination')
892
+ currencyId = self.safe_string(transaction, 'PrimaryCurrencyCode')
893
+ datetime = self.safe_string(transaction, 'CreatedTimestampUtc')
894
+ address = self.safe_string(destination, 'Address')
895
+ tag = self.safe_string(destination, 'Tag')
896
+ code = self.safe_currency_code(currencyId, currency)
897
+ return {
898
+ 'info': transaction,
899
+ 'id': self.safe_string(transaction, 'TransactionGuid'),
900
+ 'txid': None,
901
+ 'type': 'withdraw',
902
+ 'currency': code,
717
903
  'network': None,
904
+ 'amount': self.safe_number(amount, 'Total'),
905
+ 'status': self.safe_string(transaction, 'Status'),
906
+ 'timestamp': self.parse8601(datetime),
907
+ 'datetime': datetime,
908
+ 'address': address,
909
+ 'addressFrom': None,
910
+ 'addressTo': address,
911
+ 'tag': tag,
912
+ 'tagFrom': None,
913
+ 'tagTo': tag,
914
+ 'updated': None,
915
+ 'comment': None,
916
+ 'fee': {
917
+ 'currency': code,
918
+ 'cost': self.safe_number(amount, 'Fee'),
919
+ 'rate': None,
920
+ },
921
+ 'internal': False,
718
922
  }
719
923
 
720
924
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):