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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3205 -937
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1525 -573
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +223 -97
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3205 -937
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1525 -573
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +223 -97
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +143 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
@@ -6,15 +6,15 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitso import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
14
15
  from ccxt.base.errors import OrderNotFound
15
16
  from ccxt.base.errors import NotSupported
16
17
  from ccxt.base.errors import InvalidNonce
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
  from ccxt.base.precise import Precise
20
20
 
@@ -53,6 +53,7 @@ class bitso(Exchange, ImplicitAPI):
53
53
  'fetchDeposit': True,
54
54
  'fetchDepositAddress': True,
55
55
  'fetchDepositAddresses': False,
56
+ 'fetchDepositAddressesByNetwork': False,
56
57
  'fetchDeposits': True,
57
58
  'fetchDepositsWithdrawals': False,
58
59
  'fetchDepositWithdrawFee': 'emulated',
@@ -77,8 +78,11 @@ class bitso(Exchange, ImplicitAPI):
77
78
  'fetchOrderBook': True,
78
79
  'fetchOrderTrades': True,
79
80
  'fetchPosition': False,
81
+ 'fetchPositionHistory': False,
80
82
  'fetchPositionMode': False,
81
83
  'fetchPositions': False,
84
+ 'fetchPositionsForSymbol': False,
85
+ 'fetchPositionsHistory': False,
82
86
  'fetchPositionsRisk': False,
83
87
  'fetchPremiumIndexOHLCV': False,
84
88
  'fetchTicker': True,
@@ -100,9 +104,12 @@ class bitso(Exchange, ImplicitAPI):
100
104
  'withdraw': True,
101
105
  },
102
106
  'urls': {
103
- 'logo': 'https://user-images.githubusercontent.com/51840849/87295554-11f98280-c50e-11ea-80d6-15b3bafa8cbf.jpg',
107
+ 'logo': 'https://github.com/user-attachments/assets/178c8e56-9054-4107-b192-5e5053d4f975',
104
108
  'api': {
105
- 'rest': 'https://api.bitso.com',
109
+ 'rest': 'https://bitso.com/api',
110
+ },
111
+ 'test': {
112
+ 'rest': 'https://stage.bitso.com/api',
106
113
  },
107
114
  'www': 'https://bitso.com',
108
115
  'doc': 'https://bitso.com/api_info',
@@ -117,6 +124,12 @@ class bitso(Exchange, ImplicitAPI):
117
124
  'TUSD': 0.01,
118
125
  },
119
126
  'defaultPrecision': 0.00000001,
127
+ 'networks': {
128
+ 'TRC20': 'trx',
129
+ 'ERC20': 'erc20',
130
+ 'BEP20': 'bsc',
131
+ 'BEP2': 'bep2',
132
+ },
120
133
  },
121
134
  'timeframes': {
122
135
  '1m': '60',
@@ -182,6 +195,65 @@ class bitso(Exchange, ImplicitAPI):
182
195
  ],
183
196
  },
184
197
  },
198
+ 'features': {
199
+ 'spot': {
200
+ 'sandbox': False,
201
+ 'createOrder': {
202
+ 'marginMode': False,
203
+ 'triggerPrice': True, # todo implementation
204
+ 'triggerPriceType': None,
205
+ 'triggerDirection': None,
206
+ 'stopLossPrice': False, # todo
207
+ 'takeProfitPrice': False, # todo
208
+ 'attachedStopLossTakeProfit': None,
209
+ # todo: implementation for TIF
210
+ 'timeInForce': {
211
+ 'IOC': True,
212
+ 'FOK': True,
213
+ 'PO': True,
214
+ 'GTD': False,
215
+ },
216
+ 'hedged': False,
217
+ 'trailing': False,
218
+ 'leverage': False,
219
+ 'marketBuyRequiresPrice': False,
220
+ 'marketBuyByCost': False,
221
+ 'selfTradePrevention': False,
222
+ 'iceberg': False,
223
+ },
224
+ 'createOrders': None,
225
+ 'fetchMyTrades': {
226
+ 'marginMode': False,
227
+ 'limit': 100,
228
+ 'daysBack': None,
229
+ 'untilDays': None,
230
+ },
231
+ 'fetchOrder': {
232
+ 'marginMode': False,
233
+ 'trigger': False,
234
+ 'trailing': False,
235
+ },
236
+ 'fetchOpenOrders': {
237
+ 'marginMode': False,
238
+ 'limit': 500,
239
+ 'trigger': False,
240
+ 'trailing': False,
241
+ },
242
+ 'fetchOrders': None,
243
+ 'fetchClosedOrders': None,
244
+ 'fetchOHLCV': {
245
+ 'limit': 300,
246
+ },
247
+ },
248
+ 'swap': {
249
+ 'linear': None,
250
+ 'inverse': None,
251
+ },
252
+ 'future': {
253
+ 'linear': None,
254
+ 'inverse': None,
255
+ },
256
+ },
185
257
  'exceptions': {
186
258
  '0201': AuthenticationError, # Invalid Nonce or Invalid Credentials
187
259
  '104': InvalidNonce, # Cannot perform request - nonce must be higher than 1520307203724237
@@ -189,16 +261,16 @@ class bitso(Exchange, ImplicitAPI):
189
261
  },
190
262
  })
191
263
 
192
- async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
264
+ async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
193
265
  """
194
- fetch the history of changes, actions done by the user or operations that altered balance of the user
195
- :param str code: unified currency code, default is None
266
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
267
+ :param str [code]: unified currency code, default is None
196
268
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
197
- :param int [limit]: max number of ledger entrys to return, default is None
269
+ :param int [limit]: max number of ledger entries to return, default is None
198
270
  :param dict [params]: extra parameters specific to the exchange API endpoint
199
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
271
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
200
272
  """
201
- request = {}
273
+ request: dict = {}
202
274
  if limit is not None:
203
275
  request['limit'] = limit
204
276
  response = await self.privateGetLedger(self.extend(request, params))
@@ -230,7 +302,7 @@ class bitso(Exchange, ImplicitAPI):
230
302
  return self.parse_ledger(payload, currency, since, limit)
231
303
 
232
304
  def parse_ledger_entry_type(self, type):
233
- types = {
305
+ types: dict = {
234
306
  'funding': 'transaction',
235
307
  'withdrawal': 'transaction',
236
308
  'trade': 'trade',
@@ -238,7 +310,7 @@ class bitso(Exchange, ImplicitAPI):
238
310
  }
239
311
  return self.safe_string(types, type, type)
240
312
 
241
- def parse_ledger_entry(self, item, currency: Currency = None):
313
+ def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
242
314
  #
243
315
  # {
244
316
  # "eid": "2510b3e2bc1c87f584500a18084f35ed",
@@ -302,6 +374,7 @@ class bitso(Exchange, ImplicitAPI):
302
374
  amount = self.safe_string(firstBalance, 'amount')
303
375
  currencyId = self.safe_string(firstBalance, 'currency')
304
376
  code = self.safe_currency_code(currencyId, currency)
377
+ currency = self.safe_currency(currencyId, currency)
305
378
  details = self.safe_value(item, 'details', {})
306
379
  referenceId = self.safe_string_2(details, 'fid', 'wid')
307
380
  if referenceId is None:
@@ -321,6 +394,7 @@ class bitso(Exchange, ImplicitAPI):
321
394
  }
322
395
  timestamp = self.parse8601(self.safe_string(item, 'created_at'))
323
396
  return self.safe_ledger_entry({
397
+ 'info': item,
324
398
  'id': self.safe_string(item, 'eid'),
325
399
  'direction': direction,
326
400
  'account': None,
@@ -335,13 +409,14 @@ class bitso(Exchange, ImplicitAPI):
335
409
  'after': None,
336
410
  'status': 'ok',
337
411
  'fee': fee,
338
- 'info': item,
339
412
  }, currency)
340
413
 
341
- async def fetch_markets(self, params={}):
414
+ async def fetch_markets(self, params={}) -> List[Market]:
342
415
  """
343
416
  retrieves data on all markets for bitso
344
- :see: https://docs.bitso.com/bitso-api/docs/list-available-books
417
+
418
+ https://docs.bitso.com/bitso-api/docs/list-available-books
419
+
345
420
  :param dict [params]: extra parameters specific to the exchange API endpoint
346
421
  :returns dict[]: an array of objects representing market data
347
422
  """
@@ -413,7 +488,7 @@ class bitso(Exchange, ImplicitAPI):
413
488
  if j == 0:
414
489
  fee['taker'] = takerFee
415
490
  fee['maker'] = makerFee
416
- tiers = {
491
+ tiers: dict = {
417
492
  'taker': takerFees,
418
493
  'maker': makerFees,
419
494
  }
@@ -476,7 +551,7 @@ class bitso(Exchange, ImplicitAPI):
476
551
  def parse_balance(self, response) -> Balances:
477
552
  payload = self.safe_value(response, 'payload', {})
478
553
  balances = self.safe_value(payload, 'balances', [])
479
- result = {
554
+ result: dict = {
480
555
  'info': response,
481
556
  'timestamp': None,
482
557
  'datetime': None,
@@ -495,7 +570,9 @@ class bitso(Exchange, ImplicitAPI):
495
570
  async def fetch_balance(self, params={}) -> Balances:
496
571
  """
497
572
  query for balance and get the amount of funds available for trading or funds locked in orders
498
- :see: https://docs.bitso.com/bitso-api/docs/get-account-balance
573
+
574
+ https://docs.bitso.com/bitso-api/docs/get-account-balance
575
+
499
576
  :param dict [params]: extra parameters specific to the exchange API endpoint
500
577
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
501
578
  """
@@ -531,7 +608,9 @@ class bitso(Exchange, ImplicitAPI):
531
608
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
532
609
  """
533
610
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
534
- :see: https://docs.bitso.com/bitso-api/docs/list-order-book
611
+
612
+ https://docs.bitso.com/bitso-api/docs/list-order-book
613
+
535
614
  :param str symbol: unified symbol of the market to fetch the order book for
536
615
  :param int [limit]: the maximum amount of order book entries to return
537
616
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -539,7 +618,7 @@ class bitso(Exchange, ImplicitAPI):
539
618
  """
540
619
  await self.load_markets()
541
620
  market = self.market(symbol)
542
- request = {
621
+ request: dict = {
543
622
  'book': market['id'],
544
623
  }
545
624
  response = await self.publicGetOrderBook(self.extend(request, params))
@@ -547,7 +626,7 @@ class bitso(Exchange, ImplicitAPI):
547
626
  timestamp = self.parse8601(self.safe_string(orderbook, 'updated_at'))
548
627
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'amount')
549
628
 
550
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
629
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
551
630
  #
552
631
  # {
553
632
  # "high":"37446.85",
@@ -594,14 +673,16 @@ class bitso(Exchange, ImplicitAPI):
594
673
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
595
674
  """
596
675
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
597
- :see: https://docs.bitso.com/bitso-api/docs/ticker
676
+
677
+ https://docs.bitso.com/bitso-api/docs/ticker
678
+
598
679
  :param str symbol: unified symbol of the market to fetch the ticker for
599
680
  :param dict [params]: extra parameters specific to the exchange API endpoint
600
681
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
601
682
  """
602
683
  await self.load_markets()
603
684
  market = self.market(symbol)
604
- request = {
685
+ request: dict = {
605
686
  'book': market['id'],
606
687
  }
607
688
  response = await self.publicGetTicker(self.extend(request, params))
@@ -637,7 +718,7 @@ class bitso(Exchange, ImplicitAPI):
637
718
  """
638
719
  await self.load_markets()
639
720
  market = self.market(symbol)
640
- request = {
721
+ request: dict = {
641
722
  'book': market['id'],
642
723
  'time_bucket': self.safe_string(self.timeframes, timeframe, timeframe),
643
724
  }
@@ -670,7 +751,7 @@ class bitso(Exchange, ImplicitAPI):
670
751
  # ]
671
752
  # }
672
753
  #
673
- payload = self.safe_value(response, 'payload', [])
754
+ payload = self.safe_list(response, 'payload', [])
674
755
  return self.parse_ohlcvs(payload, market, timeframe, since, limit)
675
756
 
676
757
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -697,7 +778,7 @@ class bitso(Exchange, ImplicitAPI):
697
778
  self.safe_number(ohlcv, 'volume'),
698
779
  ]
699
780
 
700
- def parse_trade(self, trade, market: Market = None) -> Trade:
781
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
701
782
  #
702
783
  # fetchTrades(public)
703
784
  #
@@ -799,7 +880,9 @@ class bitso(Exchange, ImplicitAPI):
799
880
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
800
881
  """
801
882
  get the list of most recent trades for a particular symbol
802
- :see: https://docs.bitso.com/bitso-api/docs/list-trades
883
+
884
+ https://docs.bitso.com/bitso-api/docs/list-trades
885
+
803
886
  :param str symbol: unified symbol of the market to fetch trades for
804
887
  :param int [since]: timestamp in ms of the earliest trade to fetch
805
888
  :param int [limit]: the maximum amount of trades to fetch
@@ -808,16 +891,18 @@ class bitso(Exchange, ImplicitAPI):
808
891
  """
809
892
  await self.load_markets()
810
893
  market = self.market(symbol)
811
- request = {
894
+ request: dict = {
812
895
  'book': market['id'],
813
896
  }
814
897
  response = await self.publicGetTrades(self.extend(request, params))
815
898
  return self.parse_trades(response['payload'], market, since, limit)
816
899
 
817
- async def fetch_trading_fees(self, params={}):
900
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
818
901
  """
819
902
  fetch the trading fees for multiple markets
820
- :see: https://docs.bitso.com/bitso-api/docs/list-fees
903
+
904
+ https://docs.bitso.com/bitso-api/docs/list-fees
905
+
821
906
  :param dict [params]: extra parameters specific to the exchange API endpoint
822
907
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
823
908
  """
@@ -868,7 +953,7 @@ class bitso(Exchange, ImplicitAPI):
868
953
  #
869
954
  payload = self.safe_value(response, 'payload', {})
870
955
  fees = self.safe_value(payload, 'fees', [])
871
- result = {}
956
+ result: dict = {}
872
957
  for i in range(0, len(fees)):
873
958
  fee = fees[i]
874
959
  marketId = self.safe_string(fee, 'book')
@@ -886,7 +971,9 @@ class bitso(Exchange, ImplicitAPI):
886
971
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 25, params={}):
887
972
  """
888
973
  fetch all trades made by the user
889
- :see: https://docs.bitso.com/bitso-api/docs/user-trades
974
+
975
+ https://docs.bitso.com/bitso-api/docs/user-trades
976
+
890
977
  :param str symbol: unified market symbol
891
978
  :param int [since]: the earliest time in ms to fetch trades for
892
979
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -908,7 +995,7 @@ class bitso(Exchange, ImplicitAPI):
908
995
  params = self.extend(params, {
909
996
  'marker': int(params['marker']),
910
997
  })
911
- request = {
998
+ request: dict = {
912
999
  'book': market['id'],
913
1000
  'limit': limit, # default = 25, max = 100
914
1001
  # 'sort': 'desc', # default = desc
@@ -920,18 +1007,20 @@ class bitso(Exchange, ImplicitAPI):
920
1007
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
921
1008
  """
922
1009
  create a trade order
923
- :see: https://docs.bitso.com/bitso-api/docs/place-an-order
1010
+
1011
+ https://docs.bitso.com/bitso-api/docs/place-an-order
1012
+
924
1013
  :param str symbol: unified symbol of the market to create an order in
925
1014
  :param str type: 'market' or 'limit'
926
1015
  :param str side: 'buy' or 'sell'
927
1016
  :param float amount: how much of currency you want to trade in units of base currency
928
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1017
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
929
1018
  :param dict [params]: extra parameters specific to the exchange API endpoint
930
1019
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
931
1020
  """
932
1021
  await self.load_markets()
933
1022
  market = self.market(symbol)
934
- request = {
1023
+ request: dict = {
935
1024
  'book': market['id'],
936
1025
  'side': side,
937
1026
  'type': type,
@@ -949,22 +1038,38 @@ class bitso(Exchange, ImplicitAPI):
949
1038
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
950
1039
  """
951
1040
  cancels an open order
952
- :see: https://docs.bitso.com/bitso-api/docs/cancel-an-order
1041
+
1042
+ https://docs.bitso.com/bitso-api/docs/cancel-an-order
1043
+
953
1044
  :param str id: order id
954
1045
  :param str symbol: not used by bitso cancelOrder()
955
1046
  :param dict [params]: extra parameters specific to the exchange API endpoint
956
1047
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
957
1048
  """
958
1049
  await self.load_markets()
959
- request = {
1050
+ request: dict = {
960
1051
  'oid': id,
961
1052
  }
962
- return await self.privateDeleteOrdersOid(self.extend(request, params))
1053
+ response = await self.privateDeleteOrdersOid(self.extend(request, params))
1054
+ #
1055
+ # {
1056
+ # "success": True,
1057
+ # "payload": ["yWTQGxDMZ0VimZgZ"]
1058
+ # }
1059
+ #
1060
+ payload = self.safe_list(response, 'payload', [])
1061
+ orderId = self.safe_string(payload, 0)
1062
+ return self.safe_order({
1063
+ 'info': response,
1064
+ 'id': orderId,
1065
+ })
963
1066
 
964
1067
  async def cancel_orders(self, ids, symbol: Str = None, params={}):
965
1068
  """
966
1069
  cancel multiple orders
967
- :see: https://docs.bitso.com/bitso-api/docs/cancel-an-order
1070
+
1071
+ https://docs.bitso.com/bitso-api/docs/cancel-an-order
1072
+
968
1073
  :param str[] ids: order ids
969
1074
  :param str symbol: unified market symbol
970
1075
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -976,7 +1081,7 @@ class bitso(Exchange, ImplicitAPI):
976
1081
  if symbol is not None:
977
1082
  market = self.market(symbol)
978
1083
  oids = ','.join(ids)
979
- request = {
1084
+ request: dict = {
980
1085
  'oids': oids,
981
1086
  }
982
1087
  response = await self.privateDeleteOrders(self.extend(request, params))
@@ -996,7 +1101,9 @@ class bitso(Exchange, ImplicitAPI):
996
1101
  async def cancel_all_orders(self, symbol: Str = None, params={}):
997
1102
  """
998
1103
  cancel all open orders
999
- :see: https://docs.bitso.com/bitso-api/docs/cancel-an-order
1104
+
1105
+ https://docs.bitso.com/bitso-api/docs/cancel-an-order
1106
+
1000
1107
  :param None symbol: bitso does not support canceling orders for only a specific market
1001
1108
  :param dict [params]: extra parameters specific to the exchange API endpoint
1002
1109
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1017,8 +1124,8 @@ class bitso(Exchange, ImplicitAPI):
1017
1124
  canceledOrders.append(order)
1018
1125
  return canceledOrders
1019
1126
 
1020
- def parse_order_status(self, status):
1021
- statuses = {
1127
+ def parse_order_status(self, status: Str):
1128
+ statuses: dict = {
1022
1129
  'partial-fill': 'open', # self is a common substitution in ccxt
1023
1130
  'partially filled': 'open',
1024
1131
  'queued': 'open',
@@ -1026,7 +1133,7 @@ class bitso(Exchange, ImplicitAPI):
1026
1133
  }
1027
1134
  return self.safe_string(statuses, status, status)
1028
1135
 
1029
- def parse_order(self, order, market: Market = None) -> Order:
1136
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1030
1137
  #
1031
1138
  #
1032
1139
  # canceledOrder
@@ -1060,7 +1167,6 @@ class bitso(Exchange, ImplicitAPI):
1060
1167
  'postOnly': None,
1061
1168
  'side': side,
1062
1169
  'price': price,
1063
- 'stopPrice': None,
1064
1170
  'triggerPrice': None,
1065
1171
  'amount': amount,
1066
1172
  'cost': None,
@@ -1075,7 +1181,9 @@ class bitso(Exchange, ImplicitAPI):
1075
1181
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = 25, params={}) -> List[Order]:
1076
1182
  """
1077
1183
  fetch all unfilled currently open orders
1078
- :see: https://docs.bitso.com/bitso-api/docs/list-open-orders
1184
+
1185
+ https://docs.bitso.com/bitso-api/docs/list-open-orders
1186
+
1079
1187
  :param str symbol: unified market symbol
1080
1188
  :param int [since]: the earliest time in ms to fetch open orders for
1081
1189
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1097,7 +1205,7 @@ class bitso(Exchange, ImplicitAPI):
1097
1205
  params = self.extend(params, {
1098
1206
  'marker': int(params['marker']),
1099
1207
  })
1100
- request = {
1208
+ request: dict = {
1101
1209
  'book': market['id'],
1102
1210
  'limit': limit, # default = 25, max = 100
1103
1211
  # 'sort': 'desc', # default = desc
@@ -1110,7 +1218,10 @@ class bitso(Exchange, ImplicitAPI):
1110
1218
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1111
1219
  """
1112
1220
  fetches information on an order made by the user
1113
- :see: https://docs.bitso.com/bitso-api/docs/look-up-orders
1221
+
1222
+ https://docs.bitso.com/bitso-api/docs/look-up-orders
1223
+
1224
+ :param str id: the order id
1114
1225
  :param str symbol: not used by bitso fetchOrder
1115
1226
  :param dict [params]: extra parameters specific to the exchange API endpoint
1116
1227
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1129,7 +1240,9 @@ class bitso(Exchange, ImplicitAPI):
1129
1240
  async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1130
1241
  """
1131
1242
  fetch all the trades made from a single order
1132
- :see: https://docs.bitso.com/bitso-api/docs/list-user-trades
1243
+
1244
+ https://docs.bitso.com/bitso-api/docs/list-user-trades
1245
+
1133
1246
  :param str id: order id
1134
1247
  :param str symbol: unified market symbol
1135
1248
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1139,7 +1252,7 @@ class bitso(Exchange, ImplicitAPI):
1139
1252
  """
1140
1253
  await self.load_markets()
1141
1254
  market = self.market(symbol)
1142
- request = {
1255
+ request: dict = {
1143
1256
  'oid': id,
1144
1257
  }
1145
1258
  response = await self.privateGetOrderTradesOid(self.extend(request, params))
@@ -1148,14 +1261,16 @@ class bitso(Exchange, ImplicitAPI):
1148
1261
  async def fetch_deposit(self, id: str, code: Str = None, params={}):
1149
1262
  """
1150
1263
  fetch information on a deposit
1151
- :see: https://docs.bitso.com/bitso-payouts-funding/docs/fundings
1264
+
1265
+ https://docs.bitso.com/bitso-payouts-funding/docs/fundings
1266
+
1152
1267
  :param str id: deposit id
1153
1268
  :param str code: bitso does not support filtering by currency code and will ignore self argument
1154
1269
  :param dict [params]: extra parameters specific to the exchange API endpoint
1155
1270
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1156
1271
  """
1157
1272
  await self.load_markets()
1158
- request = {
1273
+ request: dict = {
1159
1274
  'fid': id,
1160
1275
  }
1161
1276
  response = await self.privateGetFundingsFid(self.extend(request, params))
@@ -1183,13 +1298,15 @@ class bitso(Exchange, ImplicitAPI):
1183
1298
  # }
1184
1299
  #
1185
1300
  transactions = self.safe_value(response, 'payload', [])
1186
- first = self.safe_value(transactions, 0, {})
1301
+ first = self.safe_dict(transactions, 0, {})
1187
1302
  return self.parse_transaction(first)
1188
1303
 
1189
1304
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1190
1305
  """
1191
1306
  fetch all deposits made to an account
1192
- :see: https://docs.bitso.com/bitso-payouts-funding/docs/fundings
1307
+
1308
+ https://docs.bitso.com/bitso-payouts-funding/docs/fundings
1309
+
1193
1310
  :param str code: unified currency code
1194
1311
  :param int [since]: the earliest time in ms to fetch deposits for
1195
1312
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1224,10 +1341,10 @@ class bitso(Exchange, ImplicitAPI):
1224
1341
  # }]
1225
1342
  # }
1226
1343
  #
1227
- transactions = self.safe_value(response, 'payload', [])
1344
+ transactions = self.safe_list(response, 'payload', [])
1228
1345
  return self.parse_transactions(transactions, currency, since, limit, params)
1229
1346
 
1230
- async def fetch_deposit_address(self, code: str, params={}):
1347
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1231
1348
  """
1232
1349
  fetch the deposit address for a currency associated with self account
1233
1350
  :param str code: unified currency code
@@ -1236,7 +1353,7 @@ class bitso(Exchange, ImplicitAPI):
1236
1353
  """
1237
1354
  await self.load_markets()
1238
1355
  currency = self.currency(code)
1239
- request = {
1356
+ request: dict = {
1240
1357
  'fund_currency': currency['id'],
1241
1358
  }
1242
1359
  response = await self.privateGetFundingDestination(self.extend(request, params))
@@ -1248,18 +1365,20 @@ class bitso(Exchange, ImplicitAPI):
1248
1365
  tag = self.safe_string(parts, 1)
1249
1366
  self.check_address(address)
1250
1367
  return {
1368
+ 'info': response,
1251
1369
  'currency': code,
1370
+ 'network': None,
1252
1371
  'address': address,
1253
1372
  'tag': tag,
1254
- 'network': None,
1255
- 'info': response,
1256
1373
  }
1257
1374
 
1258
- async def fetch_transaction_fees(self, codes: List[str] = None, params={}):
1375
+ async def fetch_transaction_fees(self, codes: Strings = None, params={}):
1259
1376
  """
1260
- * @deprecated
1377
+ @deprecated
1261
1378
  please use fetchDepositWithdrawFees instead
1262
- :see: https://docs.bitso.com/bitso-api/docs/list-fees
1379
+
1380
+ https://docs.bitso.com/bitso-api/docs/list-fees
1381
+
1263
1382
  :param str[]|None codes: list of unified currency codes
1264
1383
  :param dict [params]: extra parameters specific to the exchange API endpoint
1265
1384
  :returns dict[]: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1309,7 +1428,7 @@ class bitso(Exchange, ImplicitAPI):
1309
1428
  # }
1310
1429
  # }
1311
1430
  #
1312
- result = {}
1431
+ result: dict = {}
1313
1432
  payload = self.safe_value(response, 'payload', {})
1314
1433
  depositFees = self.safe_value(payload, 'deposit_fees', [])
1315
1434
  for i in range(0, len(depositFees)):
@@ -1346,7 +1465,9 @@ class bitso(Exchange, ImplicitAPI):
1346
1465
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
1347
1466
  """
1348
1467
  fetch deposit and withdraw fees
1349
- :see: https://docs.bitso.com/bitso-api/docs/list-fees
1468
+
1469
+ https://docs.bitso.com/bitso-api/docs/list-fees
1470
+
1350
1471
  :param str[]|None codes: list of unified currency codes
1351
1472
  :param dict [params]: extra parameters specific to the exchange API endpoint
1352
1473
  :returns dict[]: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1396,7 +1517,7 @@ class bitso(Exchange, ImplicitAPI):
1396
1517
  # }
1397
1518
  # }
1398
1519
  #
1399
- payload = self.safe_value(response, 'payload', {})
1520
+ payload = self.safe_list(response, 'payload', [])
1400
1521
  return self.parse_deposit_withdraw_fees(payload, codes)
1401
1522
 
1402
1523
  def parse_deposit_withdraw_fees(self, response, codes=None, currencyIdKey=None):
@@ -1440,7 +1561,7 @@ class bitso(Exchange, ImplicitAPI):
1440
1561
  # }
1441
1562
  # }
1442
1563
  #
1443
- result = {}
1564
+ result: dict = {}
1444
1565
  depositResponse = self.safe_value(response, 'deposit_fees', [])
1445
1566
  withdrawalResponse = self.safe_value(response, 'withdrawal_fees', [])
1446
1567
  for i in range(0, len(depositResponse)):
@@ -1473,7 +1594,7 @@ class bitso(Exchange, ImplicitAPI):
1473
1594
  result[code]['info'][code] = withdrawFee
1474
1595
  return result
1475
1596
 
1476
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1597
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1477
1598
  """
1478
1599
  make a withdrawal
1479
1600
  :param str code: unified currency code
@@ -1486,7 +1607,7 @@ class bitso(Exchange, ImplicitAPI):
1486
1607
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
1487
1608
  self.check_address(address)
1488
1609
  await self.load_markets()
1489
- methods = {
1610
+ methods: dict = {
1490
1611
  'BTC': 'Bitcoin',
1491
1612
  'ETH': 'Ether',
1492
1613
  'XRP': 'Ripple',
@@ -1497,7 +1618,7 @@ class bitso(Exchange, ImplicitAPI):
1497
1618
  method = methods[code] if (code in methods) else None
1498
1619
  if method is None:
1499
1620
  raise ExchangeError(self.id + ' not valid withdraw coin: ' + code)
1500
- request = {
1621
+ request: dict = {
1501
1622
  'amount': amount,
1502
1623
  'address': address,
1503
1624
  'destination_tag': tag,
@@ -1524,22 +1645,10 @@ class bitso(Exchange, ImplicitAPI):
1524
1645
  # }
1525
1646
  #
1526
1647
  payload = self.safe_value(response, 'payload', [])
1527
- first = self.safe_value(payload, 0)
1648
+ first = self.safe_dict(payload, 0)
1528
1649
  return self.parse_transaction(first, currency)
1529
1650
 
1530
- def safe_network(self, networkId):
1531
- if networkId is None:
1532
- return None
1533
- networkId = networkId.upper()
1534
- networksById = {
1535
- 'trx': 'TRC20',
1536
- 'erc20': 'ERC20',
1537
- 'bsc': 'BEP20',
1538
- 'bep2': 'BEP2',
1539
- }
1540
- return self.safe_string(networksById, networkId, networkId)
1541
-
1542
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1651
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1543
1652
  #
1544
1653
  # deposit
1545
1654
  # {
@@ -1585,12 +1694,14 @@ class bitso(Exchange, ImplicitAPI):
1585
1694
  networkId = self.safe_string_2(transaction, 'network', 'method')
1586
1695
  status = self.safe_string(transaction, 'status')
1587
1696
  withdrawId = self.safe_string(transaction, 'wid')
1697
+ networkCode = self.network_id_to_code(networkId)
1698
+ networkCodeUpper = networkCode.upper() if (networkCode is not None) else None
1588
1699
  return {
1589
1700
  'id': self.safe_string_2(transaction, 'wid', 'fid'),
1590
1701
  'txid': self.safe_string(details, 'tx_hash'),
1591
1702
  'timestamp': self.parse8601(datetime),
1592
1703
  'datetime': datetime,
1593
- 'network': self.safe_network(networkId),
1704
+ 'network': networkCodeUpper,
1594
1705
  'addressFrom': receivingAddress,
1595
1706
  'address': withdrawalAddress if (withdrawalAddress is not None) else receivingAddress,
1596
1707
  'addressTo': withdrawalAddress,
@@ -1608,8 +1719,8 @@ class bitso(Exchange, ImplicitAPI):
1608
1719
  'info': transaction,
1609
1720
  }
1610
1721
 
1611
- def parse_transaction_status(self, status):
1612
- statuses = {
1722
+ def parse_transaction_status(self, status: Str):
1723
+ statuses: dict = {
1613
1724
  'pending': 'pending',
1614
1725
  'in_progress': 'pending',
1615
1726
  'complete': 'ok',
@@ -1630,6 +1741,7 @@ class bitso(Exchange, ImplicitAPI):
1630
1741
  if api == 'private':
1631
1742
  self.check_required_credentials()
1632
1743
  nonce = str(self.nonce())
1744
+ endpoint = '/api' + endpoint
1633
1745
  request = ''.join([nonce, method, endpoint])
1634
1746
  if method != 'GET' and method != 'DELETE':
1635
1747
  if query:
@@ -1639,11 +1751,11 @@ class bitso(Exchange, ImplicitAPI):
1639
1751
  auth = self.apiKey + ':' + nonce + ':' + signature
1640
1752
  headers = {
1641
1753
  'Authorization': 'Bitso ' + auth,
1642
- 'Content-Type': 'application/json',
1754
+ # 'Content-Type': 'application/json',
1643
1755
  }
1644
1756
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1645
1757
 
1646
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1758
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1647
1759
  if response is None:
1648
1760
  return None # fallback to default error handler
1649
1761
  if 'success' in response: